prune: remove all the problem solving part that needs to go outside of this article

This commit is contained in:
Julien Calixte
2025-01-03 14:47:13 +01:00
parent 62bf7b8f84
commit d81a3aaec9
7 changed files with 69 additions and 42 deletions

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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">

View File

@@ -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>

View File

@@ -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
}