MVP-driven development
For products with little or no UI (APIs, CLIs, bots, data pipelines, agents), or whenever you want the smallest working thing first. R1 does one job end to end, on mocked integrations, and you try it through an API explorer or a CLI run. Every release after that is shaped by your feedback.
Plan with: a product brief and a short MVP scope: the one job it must do end to end. Architecture can be light.
Releases
The thinnest slice that works end to end, on mocked integrations, demonstrated through an API explorer (Swagger) or a CLI run.
Mocks swapped for real services once you have added the keys (see Human help).
One release per round of your feedback.
Steps
- Terminal
npx madcompany init --mode mvpSet up, then keep
npx madcompany hqrunning - Claude Code
/bmad-product-briefThe problem and the one job the MVP must do
- Claude Code
/bmad-specOptional: a short spec of the MVP scope
- Claude Code
/mc-staffPick the team, then restart Claude Code once
- Claude Code
/mc-plan-releaseR1: the MVP, end to end on mocked integrations
- Claude Code
/mc-startThe team builds it; you watch HQ and answer Inbox and Human help
- HQ
Releases → ApproveTry it through the API explorer or the CLI demo first
- Terminal
npx madcompany ship R1Merge into main and tag; push and deploy are in Human help
- HQ
Human helpAdd the real service keys so R2 can switch mocks to live
- Claude Code
/mc-plan-releaseR2, R3…: real integrations, then features from your feedback
You and the team
You
- Say what the MVP must do end to end, and what is out (
/bmad-product-brief, optionally/bmad-spec) - Try each release: the lead tells you how (Swagger UI at the integration port, or a CLI command)
- Approve it or ask for changes in HQ → Releases
- Add real keys in Human help when you want mocks switched to live services
The team
- Designs the contract first (OpenAPI, schema), then builds the slice across layers in single-domain tickets
- Puts every third-party service behind an adapter with a
mockand aliveversion, switched per service in.env - Ships a way for you to try it: Swagger UI, a CLI demo script, or sample requests
- Adds tests with every ticket; the merge queue re-runs them after each merge
Tips
- Name the one job. "A user can upload a CSV and get a cleaned file back" beats a feature list.
- Keep R1 on mocks. Real integrations are R2, once you have added the keys.
- No UI sprint unless you ask for screens. If you later want a UI, switch to UI-MVP with
npx madcompany mode ui-mvp.