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