From 12c73870720818185d584617a8e9238123d77733 Mon Sep 17 00:00:00 2001 From: Julien Calixte Date: Tue, 7 Jan 2025 22:07:04 +0100 Subject: [PATCH] fix: talking about cycle time and ensure we have a lot of simulation --- src/modules/pull-system/FlowArticle.vue | 20 +++++++++---------- .../pull-system/feature/FlowDashboard.vue | 4 ++-- .../pull-system/feature/feature-store.ts | 10 +++++----- .../simulation/SimulationControls.vue | 2 +- .../simulation/SimulationDashboard.vue | 4 ++-- .../simulation/simulation-store.ts | 10 +++++----- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/modules/pull-system/FlowArticle.vue b/src/modules/pull-system/FlowArticle.vue index 231da18..3926368 100644 --- a/src/modules/pull-system/FlowArticle.vue +++ b/src/modules/pull-system/FlowArticle.vue @@ -43,9 +43,9 @@ const feature: Feature = { different strategy patterns and which is the most effective.

- Let's see what happens when we want to create a Newsletter mobile app. - We have some functionalities to implement and we want to measure how - long it takes. + Let's see what happens when we want to create a news mobile app. We have + some functionalities to implement and we want to measure how long it + takes.

- Pull systems seem better. But before any conclusion, comparing two - simulations is not enough. Let's generate 200 projects delivering the 20 - features of the Newsletter app and see what happens. + Let's simulate... 1000 news mobile app! 500 for each system and see what + are the trends.

- Okay, now we're pretty sure! The takt time is quite close actually. But - as the quality issue increase in the push system, these defects and - corrections pile up and generate at about 15 days of difference. For a - long time, I wanted a proof + Okay, now we're pretty sure! The cycle time - the time needed to + complete one feature - is quite close actually. But as the quality issue + increase in the push system, these defects and corrections pile up and + generate at about 15 days of difference. For a long time, I wanted a + proof to trust the process, that's the beauty of simulations. It's 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 diff --git a/src/modules/pull-system/feature/FlowDashboard.vue b/src/modules/pull-system/feature/FlowDashboard.vue index 731956f..6dfc15f 100644 --- a/src/modules/pull-system/feature/FlowDashboard.vue +++ b/src/modules/pull-system/feature/FlowDashboard.vue @@ -46,9 +46,9 @@ const featureStore = useFeatureStore()

- Takt time + Cycle time
- {{ featureStore.taktTime }} + {{ featureStore.cycleTime }} days
diff --git a/src/modules/pull-system/feature/feature-store.ts b/src/modules/pull-system/feature/feature-store.ts index d85e82f..6f7d9a0 100644 --- a/src/modules/pull-system/feature/feature-store.ts +++ b/src/modules/pull-system/feature/feature-store.ts @@ -62,11 +62,11 @@ export const useFeatureStore = defineStore('feature', { qualityIssues: (state) => state.features.map((f) => f.qualityIssue).reduce((a, b) => a + b, 0), meanQualityIssue: (state) => getMeanQualityIssue(state.features), - taktTime: (state): string => { - const taktTime = ( + cycleTime: (state): string => { + const cycleTime = ( state.meta.totalDays / state.features.filter(isFeatureDone).length || 0 ).toFixed(2) - return taktTime === 'Infinity' ? '-' : taktTime + return cycleTime === 'Infinity' ? '-' : cycleTime }, featuresGroupedByStep: (state) => { const groupedByStep: Record = {} @@ -82,12 +82,12 @@ export const useFeatureStore = defineStore('feature', { return groupedByStep }, eta(): string { - if (this.taktTime === '-') { + if (this.cycleTime === '-') { return '-' } const eta = ( - parseFloat(this.taktTime) * + parseFloat(this.cycleTime) * (this.features.filter((feature) => !isFeatureDone(feature)).length + this.backlog.length) ).toFixed(2) diff --git a/src/modules/pull-system/simulation/SimulationControls.vue b/src/modules/pull-system/simulation/SimulationControls.vue index a8797c4..7b80055 100644 --- a/src/modules/pull-system/simulation/SimulationControls.vue +++ b/src/modules/pull-system/simulation/SimulationControls.vue @@ -7,7 +7,7 @@ defineProps<{ }>() const simulationStore = useSimulationStore() -const NUMBER_OF_SIMULATION = 200 +const NUMBER_OF_SIMULATION = 500 // [dps] // const strategies: Strategy[] = ['push', 'pull', 'push-dps', 'pull-dps'] diff --git a/src/modules/pull-system/simulation/SimulationDashboard.vue b/src/modules/pull-system/simulation/SimulationDashboard.vue index 452cc54..8af708f 100644 --- a/src/modules/pull-system/simulation/SimulationDashboard.vue +++ b/src/modules/pull-system/simulation/SimulationDashboard.vue @@ -42,9 +42,9 @@ const strategies: Strategy[] = ['push', 'pull'] - Takt time + Cycle time - {{ simulationStore.meanTaktTime(strategy) }} + {{ simulationStore.meanCycleTime(strategy) }} diff --git a/src/modules/pull-system/simulation/simulation-store.ts b/src/modules/pull-system/simulation/simulation-store.ts index b0b9412..675f820 100644 --- a/src/modules/pull-system/simulation/simulation-store.ts +++ b/src/modules/pull-system/simulation/simulation-store.ts @@ -8,7 +8,7 @@ import { defineStore } from 'pinia' type Mean = { leadTimeSum: number - taktTimeSum: number + cycleTimeSum: number complexitySum: number qualityIssueSum: number teamWorkExperienceSum: number @@ -25,7 +25,7 @@ type State = { const initMean = (): Mean => ({ leadTimeSum: 0, - taktTimeSum: 0, + cycleTimeSum: 0, complexitySum: 0, qualityIssueSum: 0, teamWorkExperienceSum: 0, @@ -99,7 +99,7 @@ export const useSimulationStore = defineStore('dashboard', { this.dashboards.push(dashboard) this.mean[strategy].leadTimeSum += dashboard.analysis.meanLeadTime - this.mean[strategy].taktTimeSum += + this.mean[strategy].cycleTimeSum += dashboard.meta.totalDays / newState.features.length this.mean[strategy].complexitySum += dashboard.analysis.meanComplexity this.mean[strategy].qualityIssueSum += dashboard.analysis.meanQualityIssue @@ -131,9 +131,9 @@ export const useSimulationStore = defineStore('dashboard', { state.mean[strategy].leadTimeSum, state.mean[strategy].simulations ), - meanTaktTime: (state) => (strategy: Strategy) => + meanCycleTime: (state) => (strategy: Strategy) => getRound( - state.mean[strategy].taktTimeSum, + state.mean[strategy].cycleTimeSum, state.mean[strategy].simulations ), meanComplexity: (state) => (strategy: Strategy) =>