diff --git a/core.css b/core.css
index 7a76556..33d44ee 100644
--- a/core.css
+++ b/core.css
@@ -9,6 +9,11 @@
--gap: 1rem;
}
+* {
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
*:not(td):not(th) {
border-radius: 0.3rem;
}
diff --git a/index.html b/index.html
index a162f7d..35f962d 100644
--- a/index.html
+++ b/index.html
@@ -42,7 +42,7 @@
Just-in-time
- - Takt time
+ - Takt time
- One piece flow
-
Pull system
diff --git a/src/data/bird.ts b/src/data/bird.ts
deleted file mode 100644
index 71dfae6..0000000
--- a/src/data/bird.ts
+++ /dev/null
@@ -1,202 +0,0 @@
-export const birds = [
- 'Varied Thrush',
- 'Rock Dove',
- 'California Quail',
- 'Yellow-faced Grassquit',
- 'American Dipper',
- 'Tufted Puffin',
- "Le Conte's Thrasher",
- "Cassin's Vireo",
- 'Buff-bellied Hummingbird',
- 'Red Crossbill',
- 'Little Ringed Plover',
- 'American Avocet',
- 'Little Curlew',
- 'Tree Swallow',
- 'Three-toed Woodpecker',
- 'Bahama Mockingbird',
- 'Wandering Albatross',
- 'Hepatic Tanager',
- 'Ashy Storm-Petrel',
- 'Hoary Redpoll',
- 'Lazuli Bunting',
- 'Common House-Martin',
- 'Varied Bunting',
- 'Pygmy Nuthatch',
- 'American Coot',
- 'Shiny Cowbird',
- 'Rufous-capped Warbler',
- 'Eastern Wood-Pewee',
- 'Common Snipe',
- 'Northern Pygmy-Owl',
- 'Wood Stork',
- 'Gray-spotted Flycatcher',
- 'Bahama Woodstar',
- 'Black-backed Wagtail',
- 'Bean Goose',
- 'Buff-breasted Sandpiper',
- 'Northern Shoveler',
- 'Cinnamon Teal',
- 'Ruffed Grouse',
- 'Orchard Oriole',
- 'Black-footed Albatross',
- 'Mottled Duck',
- 'Red-headed Woodpecker',
- 'Double-crested Cormorant',
- 'Little Gull',
- 'Rufous Hummingbird',
- 'American Tree Sparrow',
- 'Black Swift',
- 'Fish Crow',
- 'Yellow-nosed Albatross',
- 'Ruddy Ground-Dove',
- 'White-winged Scoter',
- 'Black-capped Vireo',
- 'Chestnut-sided Warbler',
- 'Turkey Vulture',
- 'Mississippi Kite',
- 'Sage Thrasher',
- 'Whiskered Screech-Owl',
- 'Yucatan Vireo',
- 'Mountain Chickadee',
- "Lewis's Woodpecker",
- 'Passenger Pigeon',
- "Sabine's Gull",
- 'Black-billed Magpie',
- 'Florida Scrub-Jay',
- 'Plumbeous Vireo',
- 'Hoary Redpoll',
- 'Dusky Warbler',
- "Couch's Kingbird",
- 'Double-striped Thick-knee',
- 'Canvasback',
- 'Warbling Vireo',
- 'Western Scrub-Jay',
- 'Green-winged Teal',
- 'Spot-breasted Oriole',
- 'American Bittern',
- 'White-winged Dove',
- 'Fieldfare',
- 'Barn Swallow',
- 'Golden-crowned Kinglet',
- 'Alder Flycatcher',
- 'Spotted Rail',
- 'Great Egret',
- 'Peregrine Falcon',
- 'Pacific-slope Flycatcher',
- 'Far Eastern Curlew',
- 'Whiskered Auklet',
- 'Yellow-billed Magpie',
- 'Eurasian Woodcock',
- 'Hepatic Tanager',
- 'Buff-bellied Hummingbird',
- 'Indigo Bunting',
- "Gambel's Quail",
- 'Northern Waterthrush',
- 'Eurasian Wryneck',
- "Audubon's Oriole",
- 'Gilded Flicker',
- 'Red-tailed Hawk',
- 'Zenaida Dove',
- 'Common Black-Hawk',
- 'Swamp Sparrow',
- 'Bahama Swallow',
- 'Jack Snipe',
- "Le Conte's Thrasher",
- 'House Wren',
- 'Osprey',
- 'Savannah Sparrow',
- 'Eurasian Wigeon',
- 'Mexican Jay',
- 'Yellow Wagtail',
- 'Green Sandpiper',
- 'Greater Shearwater',
- 'Black-legged Kittiwake',
- 'Elegant Tern',
- 'Tufted Duck',
- 'Gray-headed Chickadee',
- 'Spotted Sandpiper',
- 'Barn Swallow',
- 'Bank Swallow',
- 'Scarlet Ibis',
- 'Spotted Redshank',
- 'Lark Bunting',
- 'American Golden-Plover',
- 'House Sparrow',
- 'Laysan Albatross',
- 'Whooper Swan',
- 'Marbled Murrelet',
- "Townsend's Solitaire",
- 'Flesh-footed Shearwater',
- 'European Storm-Petrel',
- 'Manx Shearwater',
- 'Fieldfare',
- 'Least Bittern',
- 'Eskimo Curlew',
- 'Buff-collared Nightjar',
- 'White-breasted Nuthatch',
- 'Lanceolated Warbler',
- 'Bridled Tern',
- 'Yellow Wagtail',
- 'Jack Snipe',
- 'Western Tanager',
- 'Common Goldeneye',
- 'Greater Scaup',
- 'Belted Kingfisher',
- 'Rustic Bunting',
- 'Olive-sided Flycatcher',
- 'Bahama Mockingbird',
- 'White-tailed Ptarmigan',
- 'Lesser Scaup',
- 'Common Murre',
- 'Siberian Rubythroat',
- 'Siberian Rubythroat',
- 'Eared Trogon',
- 'Swallow-tailed Kite',
- 'Sulphur-bellied Flycatcher',
- 'Bohemian Waxwing',
- 'Common Sandpiper',
- 'Altamira Oriole',
- 'Mountain Plover',
- 'Common Ground-Dove',
- 'Great Gray Owl',
- 'Common Tern',
- 'Great Black-backed Gull',
- 'Horned Lark',
- 'Tricolored Heron',
- 'California Towhee',
- 'Fulvous Whistling-Duck',
- 'Hoary Redpoll',
- 'Plumbeous Vireo',
- 'Caribbean Elaenia',
- 'Purple Martin',
- 'American Crow',
- 'Key West Quail-Dove',
- 'Jungle Nightjar',
- 'Common Redpoll',
- 'Dusky Warbler',
- 'Neotropic Cormorant',
- 'Chestnut-backed Chickadee',
- 'Black Catbird',
- 'Redhead',
- 'American Tree Sparrow',
- "Le Conte's Sparrow",
- 'Neotropic Cormorant',
- 'Wood Duck',
- 'Plumbeous Vireo',
- 'Bahama Mockingbird',
- 'Greater White-fronted Goose',
- 'Elegant Trogon',
- 'Jack Snipe',
- 'American Black Duck',
- 'Killdeer',
- 'Brown Jay',
- 'Pine Warbler',
- 'Nashville Warbler',
- 'Winter Wren',
- 'Blue Jay',
- 'Snowy Egret',
- 'Gray Bunting',
- "Steller's Jay",
- 'Wood Warbler'
-]
diff --git a/src/modules/5s/BoardGamePerformance.vue b/src/modules/5s/BoardGamePerformance.vue
index 0c72ef3..45a14d0 100644
--- a/src/modules/5s/BoardGamePerformance.vue
+++ b/src/modules/5s/BoardGamePerformance.vue
@@ -3,7 +3,6 @@ import { Chart as ChartJS, registerables } from 'chart.js'
import { useBoardGameStore } from '@/modules/5s/board-game-store'
import { toDuration, toSeconds } from '@/modules/5s/utils'
import { getNatural } from '@/utils'
-import { _ } from '@faker-js/faker/dist/airline-D6ksJFwG'
import { computed, ref } from 'vue'
import { Bar } from 'vue-chartjs'
diff --git a/src/modules/5s/BoardGameWorkshop.vue b/src/modules/5s/BoardGameWorkshop.vue
index 811cb66..46f9092 100644
--- a/src/modules/5s/BoardGameWorkshop.vue
+++ b/src/modules/5s/BoardGameWorkshop.vue
@@ -8,6 +8,7 @@ import { onMounted, ref, toValue } from 'vue'
const userInput = ref('')
const mode = ref<_5S | null>(null)
const boardGameStore = useBoardGameStore()
+
if (import.meta.env.DEV) {
onMounted(() => {
boardGameStore.initGame()
diff --git a/src/modules/pull-system/PullSystemArticle.vue b/src/modules/pull-system/PullSystemArticle.vue
index ddb3ee8..2d82198 100644
--- a/src/modules/pull-system/PullSystemArticle.vue
+++ b/src/modules/pull-system/PullSystemArticle.vue
@@ -238,7 +238,7 @@ const createdAt = new Date('2025-01-08').toLocaleDateString(undefined, {
Now we’re pretty confident! As quality issues increase in the
push system, defects and corrections accumulate,
leading to {{ meanLeadTimeDelta }} days of
- delay!! 12">!.
diff --git a/src/modules/pull-system/feature/FeatureItem.vue b/src/modules/pull-system/feature/FeatureItem.vue
index d39c320..222c74d 100644
--- a/src/modules/pull-system/feature/FeatureItem.vue
+++ b/src/modules/pull-system/feature/FeatureItem.vue
@@ -12,7 +12,7 @@ const hasQualityIssues = computed(() => props.feature.qualityIssue > 0)
-
+
{{ feature.name }}
@@ -37,11 +37,15 @@ const hasQualityIssues = computed(() => props.feature.qualityIssue > 0)
display: flex;
flex-direction: row;
gap: 1rem;
- justify-content: space-around;
+ justify-content: space-between;
&.live {
visibility: hidden;
opacity: 0;
}
+
+ .feature-name {
+ flex: 1;
+ }
}
diff --git a/src/modules/pull-system/feature/FeatureSteps.vue b/src/modules/pull-system/feature/FeatureSteps.vue
index a6c2d7f..506eb6b 100644
--- a/src/modules/pull-system/feature/FeatureSteps.vue
+++ b/src/modules/pull-system/feature/FeatureSteps.vue
@@ -10,7 +10,7 @@ defineProps<{ alias: string }>()
const featureStore = useFeatureStore()
-onMounted(() => featureStore.initBoard('mobile-app', NUMBER_OF_FEATURES))
+onMounted(() => featureStore.initBoard(NUMBER_OF_FEATURES))
diff --git a/src/modules/pull-system/feature/FlowControls.vue b/src/modules/pull-system/feature/FlowControls.vue
index 1fc5c46..dfaa9e1 100644
--- a/src/modules/pull-system/feature/FlowControls.vue
+++ b/src/modules/pull-system/feature/FlowControls.vue
@@ -13,7 +13,7 @@ const featureStore = useFeatureStore()
const confirmReset = () => {
if (confirm('Are you sure you want to reset the board?')) {
- featureStore.initBoard('mobile-app', NUMBER_OF_FEATURES)
+ featureStore.initBoard(NUMBER_OF_FEATURES)
}
}
diff --git a/src/modules/pull-system/feature/feature-board.ts b/src/modules/pull-system/feature/feature-board.ts
index 7d3e238..e51bfb4 100644
--- a/src/modules/pull-system/feature/feature-board.ts
+++ b/src/modules/pull-system/feature/feature-board.ts
@@ -1,13 +1,9 @@
-import { newsAppFeatures } from '@/data/app-feature'
import type {
Feature,
FeatureStatus
} from '@/modules/pull-system/feature/feature'
import type { FeatureStep } from '@/modules/pull-system/feature/feature-steps'
-import {
- birdFeatures,
- mobileAppFeatures
-} from '@/modules/pull-system/feature/feature.fixture'
+import { mobileAppFeatures } from '@/modules/pull-system/feature/feature.fixture'
import type { Strategy } from '@/modules/pull-system/lean/strategy'
import type { FeatureState } from '@/store-type'
import {
@@ -74,9 +70,9 @@ const mayBeInProgress = ({
return feature.status
}
-export const newBacklog = (type: 'bird' | 'mobile-app', limit?: number) => {
- const initialFeatures =
- type === 'bird' ? [...birdFeatures] : [...mobileAppFeatures]
+export const newBacklog = (limit?: number) => {
+ const initialFeatures = [...mobileAppFeatures]
+
return limit !== undefined
? popNElement(shuffleArray(initialFeatures), limit)
: shuffleArray(initialFeatures)
@@ -254,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 // Removed with a simplified version of pull system without the problem-solving strategy
if (strategy === 'problem-solving') {
const hasTeamLearned = randomFloat(0, 1) > 0.25
@@ -306,7 +302,7 @@ export const simulate = (
): FeatureState => {
let i = 0
- while (!isProjectFinished(state.features) && i++ < HARD_STOP) {
+ while (i++ < HARD_STOP && !isProjectFinished(state.features)) {
if (strategy.includes('dps')) {
if (state.meta.totalDays % 5 === 0) {
state = nextDay(state, 'problem-solving')
diff --git a/src/modules/pull-system/feature/feature-store.ts b/src/modules/pull-system/feature/feature-store.ts
index 6f7d9a0..af35270 100644
--- a/src/modules/pull-system/feature/feature-store.ts
+++ b/src/modules/pull-system/feature/feature-store.ts
@@ -34,9 +34,10 @@ export const useFeatureStore = defineStore('feature', {
meta: resetMeta()
}),
actions: {
- async initBoard(type: 'bird' | 'mobile-app', limit?: number) {
- this.backlog = newBacklog(type, limit)
+ async initBoard(limit?: number) {
+ this.backlog = newBacklog(limit)
this.steps = featureSteps
+
const initialSteps = featureSteps.filter(
(step) => step.title !== 'Release' && step.title !== 'Development'
)
diff --git a/src/modules/pull-system/feature/feature.fixture.ts b/src/modules/pull-system/feature/feature.fixture.ts
index e96cc6a..6927d04 100644
--- a/src/modules/pull-system/feature/feature.fixture.ts
+++ b/src/modules/pull-system/feature/feature.fixture.ts
@@ -1,26 +1,7 @@
import { newsAppFeatures } from '@/data/app-feature'
-import { birds } from '@/data/bird'
import { Feature } from '@/modules/pull-system/feature/feature'
import { randomInteger } from '@/utils'
-export const features: Feature[] = birds.map((name) => ({
- name,
- complexity: randomInteger(1, 5),
- leadTime: 0,
- status: 'doing',
- step: Infinity,
- qualityIssue: 0
-}))
-
-export const birdFeatures: readonly Feature[] = birds.map((name) => ({
- name,
- complexity: randomInteger(1, 5),
- leadTime: 0,
- status: 'doing',
- step: Infinity,
- qualityIssue: 0
-}))
-
export const mobileAppFeatures: readonly Feature[] = newsAppFeatures.map(
(name) => ({
name,
diff --git a/src/modules/pull-system/simulation/SimulationDashboard.vue b/src/modules/pull-system/simulation/SimulationDashboard.vue
index 6a08f59..55e4b25 100644
--- a/src/modules/pull-system/simulation/SimulationDashboard.vue
+++ b/src/modules/pull-system/simulation/SimulationDashboard.vue
@@ -45,12 +45,6 @@ const strategies: Strategy[] = ['push', 'pull']
{{ simulationStore.meanTotalDays(strategy) }}
-
- | Mean lead time |
-
- {{ simulationStore.meanLeadTime(strategy) }}
- |
-
| Min lead time |
@@ -71,6 +65,12 @@ const strategies: Strategy[] = ['push', 'pull']
}}
|
+
+ | Mean lead time |
+
+ {{ simulationStore.meanLeadTime(strategy) }}
+ |
+