fix: talking about cycle time and ensure we have a lot of simulation
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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']
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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) =>
|
||||||
|
|||||||
Reference in New Issue
Block a user