fix: talking about cycle time and ensure we have a lot of simulation

This commit is contained in:
Julien Calixte
2025-01-07 22:07:04 +01:00
parent be9ae72668
commit 12c7387072
6 changed files with 25 additions and 25 deletions

View File

@@ -43,9 +43,9 @@ const feature: Feature = {
different strategy patterns and which is the most effective. different strategy patterns and which is the most effective.
</p> </p>
<p> <p>
Let's see what happens when we want to create a Newsletter mobile app. Let's see what happens when we want to create a news mobile app. We have
We have some functionalities to implement and we want to measure how some functionalities to implement and we want to measure how long it
long it takes. takes.
</p> </p>
<p> <p>
<em <em
@@ -206,19 +206,19 @@ const feature: Feature = {
<SimulationDashboard /> <SimulationDashboard />
<div class="text"> <div class="text">
<p> <p>
Pull systems seem better. But before any conclusion, comparing two Let's simulate... 1000 news mobile app! 500 for each system and see what
simulations is not enough. Let's generate 200 projects delivering the 20 are the trends.
features of the Newsletter app and see what happens.
</p> </p>
</div> </div>
<SimulationControls type="multiple" class="above" /> <SimulationControls type="multiple" class="above" />
<SimulationDashboard /> <SimulationDashboard />
<div class="flow-multiple-simulation text"> <div class="flow-multiple-simulation text">
<p> <p>
Okay, now we're pretty sure! The takt time is quite close actually. But Okay, now we're pretty sure! The cycle time - the time needed to
as the quality issue increase in the push system, these defects and complete one feature - is quite close actually. But as the quality issue
corrections pile up and generate at about 15 days of difference. For a increase in the push system, these defects and corrections pile up and
long time, I wanted a proof generate at about 15 days of difference. For a long time, I wanted a
proof
<em>to trust the process</em>, that's the beauty of simulations. It's <em>to trust the process</em>, that's the beauty of simulations. It's
quite impossible to convince people when we're in the middle of the quite impossible to convince people when we're in the middle of the
battle. If teams change every time, you are doomed to get this problem battle. If teams change every time, you are doomed to get this problem

View File

@@ -46,9 +46,9 @@ const featureStore = useFeatureStore()
</div> </div>
</div> </div>
<div class="card"> <div class="card">
Takt time Cycle time
<div class="data"> <div class="data">
<span class="numeric">{{ featureStore.taktTime }}</span> <span class="numeric">{{ featureStore.cycleTime }}</span>
days days
</div> </div>
</div> </div>

View File

@@ -62,11 +62,11 @@ export const useFeatureStore = defineStore('feature', {
qualityIssues: (state) => qualityIssues: (state) =>
state.features.map((f) => f.qualityIssue).reduce((a, b) => a + b, 0), state.features.map((f) => f.qualityIssue).reduce((a, b) => a + b, 0),
meanQualityIssue: (state) => getMeanQualityIssue(state.features), meanQualityIssue: (state) => getMeanQualityIssue(state.features),
taktTime: (state): string => { cycleTime: (state): string => {
const taktTime = ( const cycleTime = (
state.meta.totalDays / state.features.filter(isFeatureDone).length || 0 state.meta.totalDays / state.features.filter(isFeatureDone).length || 0
).toFixed(2) ).toFixed(2)
return taktTime === 'Infinity' ? '-' : taktTime return cycleTime === 'Infinity' ? '-' : cycleTime
}, },
featuresGroupedByStep: (state) => { featuresGroupedByStep: (state) => {
const groupedByStep: Record<number, Feature[]> = {} const groupedByStep: Record<number, Feature[]> = {}
@@ -82,12 +82,12 @@ export const useFeatureStore = defineStore('feature', {
return groupedByStep return groupedByStep
}, },
eta(): string { eta(): string {
if (this.taktTime === '-') { if (this.cycleTime === '-') {
return '-' return '-'
} }
const eta = ( const eta = (
parseFloat(this.taktTime) * parseFloat(this.cycleTime) *
(this.features.filter((feature) => !isFeatureDone(feature)).length + (this.features.filter((feature) => !isFeatureDone(feature)).length +
this.backlog.length) this.backlog.length)
).toFixed(2) ).toFixed(2)

View File

@@ -7,7 +7,7 @@ defineProps<{
}>() }>()
const simulationStore = useSimulationStore() const simulationStore = useSimulationStore()
const NUMBER_OF_SIMULATION = 200 const NUMBER_OF_SIMULATION = 500
// [dps] // [dps]
// const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps'] // const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps']

View File

@@ -42,9 +42,9 @@ const strategies: Strategy[] = ['push', 'pull']
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Takt time</td> <td>Cycle time</td>
<td class="numeric" v-for="strategy in strategies" :key="strategy"> <td class="numeric" v-for="strategy in strategies" :key="strategy">
{{ simulationStore.meanTaktTime(strategy) }} {{ simulationStore.meanCycleTime(strategy) }}
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@@ -8,7 +8,7 @@ import { defineStore } from 'pinia'
type Mean = { type Mean = {
leadTimeSum: number leadTimeSum: number
taktTimeSum: number cycleTimeSum: number
complexitySum: number complexitySum: number
qualityIssueSum: number qualityIssueSum: number
teamWorkExperienceSum: number teamWorkExperienceSum: number
@@ -25,7 +25,7 @@ type State = {
const initMean = (): Mean => ({ const initMean = (): Mean => ({
leadTimeSum: 0, leadTimeSum: 0,
taktTimeSum: 0, cycleTimeSum: 0,
complexitySum: 0, complexitySum: 0,
qualityIssueSum: 0, qualityIssueSum: 0,
teamWorkExperienceSum: 0, teamWorkExperienceSum: 0,
@@ -99,7 +99,7 @@ export const useSimulationStore = defineStore('dashboard', {
this.dashboards.push(dashboard) this.dashboards.push(dashboard)
this.mean[strategy].leadTimeSum += dashboard.analysis.meanLeadTime this.mean[strategy].leadTimeSum += dashboard.analysis.meanLeadTime
this.mean[strategy].taktTimeSum += this.mean[strategy].cycleTimeSum +=
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
@@ -131,9 +131,9 @@ export const useSimulationStore = defineStore('dashboard', {
state.mean[strategy].leadTimeSum, state.mean[strategy].leadTimeSum,
state.mean[strategy].simulations state.mean[strategy].simulations
), ),
meanTaktTime: (state) => (strategy: Strategy) => meanCycleTime: (state) => (strategy: Strategy) =>
getRound( getRound(
state.mean[strategy].taktTimeSum, state.mean[strategy].cycleTimeSum,
state.mean[strategy].simulations state.mean[strategy].simulations
), ),
meanComplexity: (state) => (strategy: Strategy) => meanComplexity: (state) => (strategy: Strategy) =>