This is an online simulation of the agile dot game
Go to https://afternoon-bayou-75731.herokuapp.com/
see https://github.com/michelgrootjans/dot-game/projects/2
Demo the simulation on a test project first. Show every person's task in the workflow.
Once the demo is over, ask the audience to estimate the average task in seconds.
We're going to run a number of iterations:
Process for each participant
- Wait for a batch of 4 items to appear in their inbox
- They take exactly 4 items in their workspace
- They solve the 4 items
- Move the 4 items to their outbox
- go to 1.
Process for each participant
- Wait for an item to appear in their inbox
- They take exactly 1 items in their workspace
- They solve the item
- Move the item to their outbox
- go to 1.
Process for each participant
- Wait for a batch of 4 items to appear in their inbox
- They take exactly 4 items in their workspace
- They solve the 4 items
- They move the 4 solved items only if their outbox is empty
- go to 1.
Process for each participant
- Wait for an item to appear in their inbox
- They take exactly 1 items in their workspace
- They solve the item
- Move the item to their outbox only if the outbox is empty
- go to 1.
The Product owner creating the items cannot go over a total WIP of 10. Everyone else works on one item at a time without the previous constraints.
The Product owner creating the items tries to keep the inbox of development populated to 2 items. Everyone else works on one item at a time without the previous constraints.
- There is no correlation between Effort and When will it be done?
- The nature of the work never changed
- The effort required to do each task was equal in all iterations
- The time it took for a single story to be done (lead time) was wildly different in each iteration.
- Parallel work with integration at the end of the process
- Collaboration: swarming, pair programming, ensemble programming
- Variability of work: some items might be analysis heavy, others QA-heavy
- ... probably more
run the following commands in two separate terminals:
npm run serverstartnpm run webpack:watch
open localhost:3000
There are a few scripts to simulate iterations. They require curl to be installed (which is usually pre-installed on most systems).
./scripts/simple_scenario.sh- A simple predefined scenario./scripts/work_hard.sh- Workers process tasks in parallel- Optional parameters:
TIME=30(default: 60) - Sets the simulation duration in secondsBASE_URL=https://example.com(default: http://localhost:3000) - Sets the base URL for API calls
- Example:
./scripts/work_hard.sh TIME=30 BASE_URL=https://afternoon-bayou-75731.herokuapp.com
- Optional parameters:
./scripts/kanban.sh- Kanban: workers limit their personal outbox WIP (PO included; QA not constrained)- Optional parameters:
WIP=4(default: 4) - Personal outbox limit per worker (applies to PO, Analyst, Developer, Ops; QA has no outbox WIP limit)TIME=30(default: 60) - Simulation duration in secondsBASE_URL=https://example.com(default: http://localhost:3000) - Base URL for API calls
- Example:
./scripts/kanban.sh WIP=4 TIME=45 BASE_URL=https://afternoon-bayou-75731.herokuapp.com
- Optional parameters:
./scripts/limit_wip.sh- Workers process tasks in parallel with a WIP limit- Optional parameters:
WIP=5(default: 10) - Sets the work-in-progress limitTIME=30(default: 60) - Sets the simulation duration in secondsBASE_URL=https://example.com(default: http://localhost:3000) - Sets the base URL for API calls
- Example:
./scripts/limit_wip.sh WIP=5 TIME=30 BASE_URL=https://afternoon-bayou-75731.herokuapp.com
- Optional parameters:
npm run test
npm run test:watch
npm run format
This project is being gradually migrated to TypeScript. The setup allows for a smooth transition where JavaScript and TypeScript files can coexist.
The project has been configured with:
- TypeScript compiler (
tsconfig.json) - Webpack support for TypeScript files
- Source maps for debugging
- Scripts for building and developing with TypeScript
To build the project with TypeScript:
npm run build
For development with TypeScript (runs TypeScript compiler, webpack, and server in watch mode):
npm run dev
To run just the TypeScript compiler:
npm run tsc
To run the TypeScript compiler in watch mode:
npm run tsc:watch
When migrating JavaScript files to TypeScript:
-
Create a new file: Create a
.tsfile alongside the existing.jsfile.- Example:
API.js→API.ts
- Example:
-
Add type annotations: Start by adding basic type annotations and interfaces.
- Use
anytype initially if the exact type is unclear - Gradually refine types as you understand the code better
- Use
-
Module compatibility:
- When migrating CommonJS modules to TypeScript, maintain separate implementations for ES modules and CommonJS compatibility:
- TypeScript file (e.g.,
API.ts) should use only ES module syntax:// Export for ES modules only export default API;
- Keep the original JavaScript file (e.g.,
API.js) with a direct implementation using CommonJS:// Direct implementation for CommonJS compatibility const API = (gameId) => { // Implementation details... }; // Export for CommonJS module.exports = API;
- TypeScript file (e.g.,
- This approach is more reliable than trying to have one file import from the other
- It avoids issues with webpack's module system by keeping a clean separation between module systems
- Existing JavaScript files can continue to use
require('./API')and will get the CommonJS version - TypeScript files can use
import from './API'and get the ES module version - Keep both implementations in sync when making changes
- When migrating CommonJS modules to TypeScript, maintain separate implementations for ES modules and CommonJS compatibility:
-
Testing:
- Ensure the TypeScript version works correctly before removing the JavaScript version
- After making changes to module exports, always rebuild with
npm run buildand test in the browser - Check both ES module imports and CommonJS requires to ensure compatibility
-
Incremental adoption: Focus on one module at a time, starting with simpler, less-connected modules.
- Use interfaces for object shapes
- Prefer explicit return types on functions
- Use
typefor unions, intersections, and aliases - Keep the
strictmode disabled during migration to reduce friction - Use source maps for debugging
[email protected]requires@types/jest@^27.0.0as a peer dependency[email protected]requirestypescript@>=3.8 <5.0as a peer dependency- Do not upgrade
@types/jestbeyond version 27.x without also upgradingts-jest - Do not upgrade
typescriptto version 5.x without also upgradingts-jest - If you encounter dependency conflicts during installation, you may need to use
--legacy-peer-depsflag
This work is licensed under a Creative Commons Attribution 4.0 International License.
