prune: remove all the problem solving part that needs to go outside of this article
This commit is contained in:
@@ -33,11 +33,13 @@ const feature: Feature = {
|
||||
</p>
|
||||
<FeatureItem :feature="feature" />
|
||||
<p>
|
||||
It starts with the intention "<code>{{ feature.name }}</code>". This is what we'll add to the mobile app.
|
||||
It starts with the intention "<code>{{ feature.name }}</code
|
||||
>". This is what we'll add to the mobile app.
|
||||
</p>
|
||||
<p>
|
||||
<span class="numeric">({{ feature.complexity }})</span> is the complexity
|
||||
of the feature. The more complex a feature is, the more chance we introduce a defect.
|
||||
of the feature. The more complex a feature is, the more chance we
|
||||
introduce a defect.
|
||||
</p>
|
||||
<p>
|
||||
<span class="numeric">{{ feature.leadTime }}d</span> is the number of days
|
||||
@@ -51,10 +53,11 @@ const feature: Feature = {
|
||||
never deliver defects.
|
||||
</p>
|
||||
<p>
|
||||
Okay! We have 20 features to deliver. It takes one day for each team to finish
|
||||
their part for each feature.
|
||||
Okay! We have 20 features to deliver. It takes one day for each team to
|
||||
finish their part for each feature.
|
||||
</p>
|
||||
<p>Each day, you can choose between 3 strategies:</p>
|
||||
<!-- [dps] <p>Each day, you can choose between 3 strategies:</p> -->
|
||||
<p>Each day, you can choose between 2 strategies:</p>
|
||||
<ol>
|
||||
<li>
|
||||
<PushSystemIcon />
|
||||
@@ -64,10 +67,11 @@ const feature: Feature = {
|
||||
<PullSystemIcon />
|
||||
Pull system
|
||||
</li>
|
||||
<!-- [dps]
|
||||
<li>
|
||||
<ProblemSolvingIcon />
|
||||
Problem solving
|
||||
</li>
|
||||
</li> -->
|
||||
</ol>
|
||||
<p>
|
||||
In this article we'll focus on how these strategies are efficient and what
|
||||
@@ -76,8 +80,9 @@ const feature: Feature = {
|
||||
</p>
|
||||
<h3>The push system: start as many features as possible</h3>
|
||||
<p>
|
||||
By pushing features from the start, we try to maximize the time worked by teams on the product.
|
||||
This way, no money is wasted, everyone has everytime something to do.
|
||||
By pushing features from the start, we try to maximize the time worked by
|
||||
teams on the product. This way, no money is wasted, everyone has everytime
|
||||
something to do.
|
||||
</p>
|
||||
<h3>The pull system: produce features only when the next team needs it</h3>
|
||||
<p>
|
||||
@@ -93,6 +98,7 @@ const feature: Feature = {
|
||||
will always have material to transform. Here, we'll have 2 blue bins per
|
||||
team.
|
||||
</p>
|
||||
<!-- [dps]
|
||||
<h3>Problem solving: no production, just reflection</h3>
|
||||
<p>
|
||||
We invest days where we are not productive at all to investigate and
|
||||
@@ -100,7 +106,7 @@ const feature: Feature = {
|
||||
ever and we know that mistakes will reappear. So we take more time to
|
||||
understand and limit rework. The more the team investigate, the more the
|
||||
team learn and start to be extremely good at problem solving.
|
||||
</p>
|
||||
</p> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -15,16 +15,27 @@ const featureStore = useFeatureStore()
|
||||
<template>
|
||||
<div class="flow-controls">
|
||||
<div class="row">
|
||||
<button @click="featureStore.nextDay('push')" :disabled="featureStore.isProjectFinished">
|
||||
<button
|
||||
@click="featureStore.nextDay('push')"
|
||||
:disabled="featureStore.isProjectFinished"
|
||||
>
|
||||
<PushSystemIcon color="white" />
|
||||
</button>
|
||||
<button @click="featureStore.nextDay('pull')" :disabled="featureStore.isProjectFinished">
|
||||
<button
|
||||
@click="featureStore.nextDay('pull')"
|
||||
:disabled="featureStore.isProjectFinished"
|
||||
>
|
||||
<PullSystemIcon color="white" />
|
||||
</button>
|
||||
<!--
|
||||
[dps]
|
||||
<button @click="featureStore.nextDay('problem-solving')" :disabled="featureStore.isProjectFinished">
|
||||
<ProblemSolvingIcon color="white" />
|
||||
</button>
|
||||
<button v-if="withEraser" @click="featureStore.initBoard('mobile-app', NUMBER_OF_FEATURES)">
|
||||
</button> -->
|
||||
<button
|
||||
v-if="withEraser"
|
||||
@click="featureStore.initBoard('mobile-app', NUMBER_OF_FEATURES)"
|
||||
>
|
||||
<EraserIcon color="white" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -17,12 +17,13 @@ const featureStore = useFeatureStore()
|
||||
}}<span class="sub">/{{ featureStore.totalFeaturesCount }} </span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- [dps]
|
||||
<div class="card">
|
||||
Team work exp.
|
||||
<span class="numeric">
|
||||
{{ featureStore.meta.teamWorkExperience.toFixed(2) }}
|
||||
</span>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="card">
|
||||
Mean complexity
|
||||
<div class="numeric">{{ featureStore.meanComplexity }}</div>
|
||||
|
||||
@@ -250,8 +250,8 @@ export const nextDay = (
|
||||
strategy: Strategy | 'problem-solving'
|
||||
): FeatureState => {
|
||||
state.meta.totalDays++
|
||||
// each day, the teams know how to better work together
|
||||
state.meta.teamWorkExperience += 0.1
|
||||
// // each day, the teams know how to better work together
|
||||
// state.meta.teamWorkExperience += 0.1
|
||||
|
||||
if (strategy === 'problem-solving') {
|
||||
const hasTeamLearned = randomFloat(0, 1) > 0.25
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { Strategy } from '@/modules/lean/strategy'
|
||||
import type { Strategy } from '@/modules/pull-system/lean/strategy'
|
||||
import { useSimulationStore } from '@/modules/pull-system/simulation/simulation-store'
|
||||
|
||||
defineProps<{
|
||||
@@ -9,7 +9,9 @@ defineProps<{
|
||||
const simulationStore = useSimulationStore()
|
||||
const NUMBER_OF_SIMULATION = 200
|
||||
|
||||
const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']
|
||||
// [dps]
|
||||
// const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']
|
||||
const strategies: Strategy[] = ['push', 'pull']
|
||||
|
||||
const simulateEverything = () => {
|
||||
strategies.forEach((strategy) =>
|
||||
@@ -33,6 +35,7 @@ const simulateEverything = () => {
|
||||
>
|
||||
simulate pull system
|
||||
</button>
|
||||
<!-- [dps]
|
||||
<button
|
||||
class="button button-outline"
|
||||
@click="simulationStore.multiSimulation(1, 'push-dps')"
|
||||
@@ -44,7 +47,7 @@ const simulateEverything = () => {
|
||||
@click="simulationStore.multiSimulation(1, 'pull-dps')"
|
||||
>
|
||||
simulate pull with problem solving
|
||||
</button>
|
||||
</button> -->
|
||||
</div>
|
||||
<div class="row" v-else-if="type === 'multiple'">
|
||||
<button class="button button-outline" @click="simulateEverything">
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<script setup lang="ts">
|
||||
import { Strategy } from '@/modules/lean/strategy'
|
||||
import type { Strategy } from '@/modules/pull-system/lean/strategy'
|
||||
import { useSimulationStore } from '@/modules/pull-system/simulation/simulation-store'
|
||||
|
||||
const simulationStore = useSimulationStore()
|
||||
|
||||
const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']
|
||||
const strategies: Strategy[] = ['push', 'pull']
|
||||
// [dps]
|
||||
// const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -21,8 +23,9 @@ const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']
|
||||
<th>mean values</th>
|
||||
<th class="numeric">push</th>
|
||||
<th class="numeric">pull</th>
|
||||
<!-- [dps]
|
||||
<th class="numeric">push with problem solving</th>
|
||||
<th class="numeric">pull with problem solving</th>
|
||||
<th class="numeric">pull with problem solving</th> -->
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -44,24 +47,25 @@ const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']
|
||||
{{ simulationStore.meanTaktTime(strategy) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Complexity</td>
|
||||
<td class="numeric" v-for="strategy in strategies" :key="strategy">
|
||||
{{ simulationStore.meanComplexity(strategy) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quality issue</td>
|
||||
<td class="numeric" v-for="strategy in strategies" :key="strategy">
|
||||
{{ simulationStore.meanQuality(strategy) }}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Complexity</td>
|
||||
<td class="numeric" v-for="strategy in strategies" :key="strategy">
|
||||
{{ simulationStore.meanComplexity(strategy) }}
|
||||
</td>
|
||||
</tr>
|
||||
<!-- [dps]
|
||||
<tr>
|
||||
<td>Team work exp.</td>
|
||||
<td class="numeric" v-for="strategy in strategies" :key="strategy">
|
||||
{{ simulationStore.meanTeamWorkExperience(strategy) }}
|
||||
</td>
|
||||
</tr>
|
||||
</tr> -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
/// <reference types="vite-plugin-comlink/client" />
|
||||
|
||||
import { featureSteps } from '@/modules/pull-system/feature/feature-steps'
|
||||
import type { Strategy } from '@/modules/pull-system/lean/strategy'
|
||||
import type { Dashboard, Meta } from '@/store-type'
|
||||
@@ -21,7 +23,7 @@ type State = {
|
||||
mean: Record<Strategy, Mean>
|
||||
}
|
||||
|
||||
const newMean = (): Mean => ({
|
||||
const initMean = (): Mean => ({
|
||||
leadTimeSum: 0,
|
||||
taktTimeSum: 0,
|
||||
complexitySum: 0,
|
||||
@@ -54,10 +56,10 @@ export const useSimulationStore = defineStore('dashboard', {
|
||||
requestedSimulation: 0,
|
||||
simulationsDone: 0,
|
||||
mean: {
|
||||
push: newMean(),
|
||||
pull: newMean(),
|
||||
'pull-dps': newMean(),
|
||||
'push-dps': newMean()
|
||||
push: initMean(),
|
||||
pull: initMean(),
|
||||
'pull-dps': initMean(),
|
||||
'push-dps': initMean()
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -101,8 +103,8 @@ export const useSimulationStore = defineStore('dashboard', {
|
||||
dashboard.meta.totalDays / newState.features.length
|
||||
this.mean[strategy].complexitySum += dashboard.analysis.meanComplexity
|
||||
this.mean[strategy].qualityIssueSum += dashboard.analysis.meanQualityIssue
|
||||
this.mean[strategy].teamWorkExperienceSum +=
|
||||
dashboard.meta.teamWorkExperience
|
||||
// this.mean[strategy].teamWorkExperienceSum +=
|
||||
// dashboard.meta.teamWorkExperience
|
||||
this.mean[strategy].totalDaysSum += dashboard.meta.totalDays
|
||||
this.mean[strategy].simulations++
|
||||
},
|
||||
@@ -115,10 +117,10 @@ export const useSimulationStore = defineStore('dashboard', {
|
||||
},
|
||||
clearDashboard() {
|
||||
this.dashboards = []
|
||||
this.mean.push = newMean()
|
||||
this.mean.pull = newMean()
|
||||
this.mean['pull-dps'] = newMean()
|
||||
this.mean['push-dps'] = newMean()
|
||||
this.mean.push = initMean()
|
||||
this.mean.pull = initMean()
|
||||
this.mean['pull-dps'] = initMean()
|
||||
this.mean['push-dps'] = initMean()
|
||||
this.simulationsDone = 0
|
||||
this.requestedSimulation = 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user