A spec-driven software planning and architecture methodology that uses Large Language Models (LLMs) and a structured challenge system to validate design before execution.
1
13 commits
updated Sep 22, 2026
A planning methodology that separates design (the What) from implementation (the How). Both must pass a mandatory critical review before moving to the next phase.
Define-Challenge-Build (DCB) is a software project planning methodology. It separates a project's definition (the What) from its implementation plan (the How), and requires each one to pass a critical audit —the Challenge— before advancing to the next phase.
Its core is that Challenge: no artifact, neither the Definition nor the Roadmap, moves into construction without being challenged first.
The Challenge can be carried out in three ways:
[Requirements] → [Define: "What"] → [Challenge #1] → [Consolidated Definition]
→ [Define: "How" / Roadmap] → [Challenge #2] → [Build]
DCB is not an execution methodology. It doesn't compete with Scrum, Kanban, or Waterfall, and it doesn't dictate how to run sprints or manage a team. It operates before that: it defines how a plan gets validated, not how it gets executed.
It's similar to Spec-Driven Development (SDD): both separate specification from implementation. The difference is that in DCB the Challenge is a mandatory step, not an optional review, and it's applied twice: on the Definition and on the Roadmap.
When an AI generates the content of the Definition or the Roadmap, the Challenge acts as a direct control against its typical failure modes: hallucination, overconfidence, and moving forward on unverified assumptions.
DCB separates the project's goal from its execution into two independent artifacts:
| Artifact | Answers | Nature |
|---|---|---|
| Definition file | The What | Static — goals, business rules, scope, and constraints |
| Roadmap | The How | Dynamic and versioned with git — technical implementation path |
If the Roadmap changes, the Definition stays intact.
Requirements are gathered and a first draft of the Definition file is written. Once the Definition is consolidated, this same stage repeats to produce the Roadmap.
The artifact that was just produced —Definition or Roadmap— is audited before being accepted, by experts, AI, or both combined (see section 1).
It's applied twice:
An artifact is considered consolidated once it passes its corresponding Challenge.
With the Definition locked in and the Roadmap validated, construction begins. If something unexpected comes up that affects the Roadmap, the file is corrected and goes through Challenge again, without touching the Definition. If the unexpected issue reveals that the original "What" was infeasible, it goes back to Define.
Pros
Risks
Master, static document: goals, business rules, scope, and constraints of the system. It isn't modified once consolidated, except in cases of structural infeasibility.
Dynamic document that lays out the technical implementation path, without depending on references to a specific Definition file.
Each Roadmap lives in a single file, and its name should be descriptive — never generic like roadmap.md, since a single feature can end up with several roadmaps. Recommended convention:
roadmap-<feature>.md when the delivery is resolved in a single roadmap.roadmap-<feature>-<slice>.md when the feature is split into several — by technical layer (roadmap-auth-backend.md, roadmap-auth-frontend.md) or by sub-delivery.Change history is tracked with git (commits), not by duplicating the file per version. The exception is when the project doesn't use any version control system: in that case it does make sense to add a v1, v2, v3, etc. suffix to distinguish versions.
Recommended structure for the Roadmap file:
Each Roadmap is self-contained and should be internally structured with:
- [ ]) to track the Build.Instructions for auditing the Definition and the Roadmap. This repository doesn't include sample prompts: they should be written according to each project's actual risks.
roadmap-<feature>.md or roadmap-<feature>-<slice>.md), never generically.my-project/
├── definition.md # The What — single, static, source of truth
├── CHALLENGE_LOG.md # History of Challenges on the Definition
│
├── roadmaps/
│ ├── roadmap-auth/
│ │ ├── roadmap-auth-backend.md
│ │ ├── roadmap-auth-frontend.md
│ │ └── challenge-log.md
│ ├── roadmap-payments/
│ │ ├── roadmap-payments.md
│ │ └── challenge-log.md
│ └── roadmap-notifications/
│ ├── roadmap-notifications.md
│ └── challenge-log.md
│
├── prompts/
│ └── challenge/
│ └── ... # Prompts written by the team (see section 9.3)
│
└── src/ # Code built from the consolidated roadmaps
The Definition sits isolated at the root, so it can be reviewed without going through code or roadmaps. Each folder under roadmaps/ is self-contained: it groups the roadmaps for a single feature —one or several, depending on whether it makes sense to split it— along with a shared Challenge log. Changes to each roadmap file over time are tracked with git, not with duplicated files. The challenge-log.md records who challenged which roadmap and how it was resolved.
A Roadmap within DCB has already gone through Define, has already been challenged, and is already tied to an approved Definition. By the time it reaches Build, there's no remaining business or design ambiguity — only execution.
For teams using coding agents (Claude Code or others), this means a consolidated Roadmap can be handed directly to the agent as a work spec:
DCB pairs well with Vertical Slice Architecture (VSA): organizing the system by end-to-end feature instead of by horizontal technical layer.
A VSA feature translates into one or more DCB Roadmaps, all referencing the same central Definition. Splitting a feature into several roadmaps —for example, separating backend and frontend within the same folder— doesn't break the VSA principle: the feature is still the unit of delivery and of Challenge, it's just that its How is split into smaller pieces that are easier to audit separately.
Applying DCB per feature brings:
Project: a sports court booking platform for a club.
Step 1 — Define (Definition). The client's requirements are gathered (booking rules, user roles, cancellations, legal constraints) and a first version of the Definition is drafted.
Step 2 — Challenge on the Definition. The team (experts + AI) audits the draft and finds gaps:
This gets logged in CHALLENGE_LOG.md, fixed, and repeated until there are no open objections left. The Definition is consolidated.
Step 3 — Define (Roadmap with definition and tasks).
roadmaps/roadmap-bookings/roadmap-bookings.md is created:
# Roadmap: Court Bookings
## 1. Definition
- **What it solves:** Implements the locking and slot-registration logic referencing the Definition, section 3.
- **Scope:** Excludes online payments for now; internal booking operations only.
## 2. Phases and Tasks
### Phase 1: Backend (.NET)
- [ ] Create the booking endpoint with concurrency locking.
### Phase 2: Frontend (Next.js)
- [ ] Build the calendar view and confirmation button.
Roadmaps must always be deterministic: no "to be confirmed" items, no pretending something will be added later — that's what the Challenge is for. They also can't reference other roadmaps or the Definition. Later changes to the same file are strictly for corrections, not for adding new content; that history lives in git. If a feature from an already-completed roadmap needs to be extended, a separate roadmap is created instead.
The roadmap is for design decisions and system contracts, not a log of every small adjustment made along the way.
Step 4 — Challenge on the Roadmap.
It's flagged that the proposed locking mechanism won't scale well with multiple concurrent courts. roadmap-bookings.md is corrected and re-audited; the change is documented in challenge-log.md and recorded as a commit in git.
Step 5 — Build.
The consolidated Roadmap is handed directly to a coding agent as an execution spec. During the Build, something unexpected comes up (the chosen library doesn't support the client's database engine): roadmap-bookings.md is corrected, the reason is documented in challenge-log.md, and the change is versioned in git, without touching the Definition.
A spec-driven software planning and architecture methodology that uses Large Language Models (LLMs) and a structured challenge system to validate design before execution.
1
13 commits
updated Sep 22, 2026
A planning methodology that separates design (the What) from implementation (the How). Both must pass a mandatory critical review before moving to the next phase.
Define-Challenge-Build (DCB) is a software project planning methodology. It separates a project's definition (the What) from its implementation plan (the How), and requires each one to pass a critical audit —the Challenge— before advancing to the next phase.
Its core is that Challenge: no artifact, neither the Definition nor the Roadmap, moves into construction without being challenged first.
The Challenge can be carried out in three ways:
[Requirements] → [Define: "What"] → [Challenge #1] → [Consolidated Definition]
→ [Define: "How" / Roadmap] → [Challenge #2] → [Build]
DCB is not an execution methodology. It doesn't compete with Scrum, Kanban, or Waterfall, and it doesn't dictate how to run sprints or manage a team. It operates before that: it defines how a plan gets validated, not how it gets executed.
It's similar to Spec-Driven Development (SDD): both separate specification from implementation. The difference is that in DCB the Challenge is a mandatory step, not an optional review, and it's applied twice: on the Definition and on the Roadmap.
When an AI generates the content of the Definition or the Roadmap, the Challenge acts as a direct control against its typical failure modes: hallucination, overconfidence, and moving forward on unverified assumptions.
DCB separates the project's goal from its execution into two independent artifacts:
| Artifact | Answers | Nature |
|---|---|---|
| Definition file | The What | Static — goals, business rules, scope, and constraints |
| Roadmap | The How | Dynamic and versioned with git — technical implementation path |
If the Roadmap changes, the Definition stays intact.
Requirements are gathered and a first draft of the Definition file is written. Once the Definition is consolidated, this same stage repeats to produce the Roadmap.
The artifact that was just produced —Definition or Roadmap— is audited before being accepted, by experts, AI, or both combined (see section 1).
It's applied twice:
An artifact is considered consolidated once it passes its corresponding Challenge.
With the Definition locked in and the Roadmap validated, construction begins. If something unexpected comes up that affects the Roadmap, the file is corrected and goes through Challenge again, without touching the Definition. If the unexpected issue reveals that the original "What" was infeasible, it goes back to Define.
Pros
Risks
Master, static document: goals, business rules, scope, and constraints of the system. It isn't modified once consolidated, except in cases of structural infeasibility.
Dynamic document that lays out the technical implementation path, without depending on references to a specific Definition file.
Each Roadmap lives in a single file, and its name should be descriptive — never generic like roadmap.md, since a single feature can end up with several roadmaps. Recommended convention:
roadmap-<feature>.md when the delivery is resolved in a single roadmap.roadmap-<feature>-<slice>.md when the feature is split into several — by technical layer (roadmap-auth-backend.md, roadmap-auth-frontend.md) or by sub-delivery.Change history is tracked with git (commits), not by duplicating the file per version. The exception is when the project doesn't use any version control system: in that case it does make sense to add a v1, v2, v3, etc. suffix to distinguish versions.
Recommended structure for the Roadmap file:
Each Roadmap is self-contained and should be internally structured with:
- [ ]) to track the Build.Instructions for auditing the Definition and the Roadmap. This repository doesn't include sample prompts: they should be written according to each project's actual risks.
roadmap-<feature>.md or roadmap-<feature>-<slice>.md), never generically.my-project/
├── definition.md # The What — single, static, source of truth
├── CHALLENGE_LOG.md # History of Challenges on the Definition
│
├── roadmaps/
│ ├── roadmap-auth/
│ │ ├── roadmap-auth-backend.md
│ │ ├── roadmap-auth-frontend.md
│ │ └── challenge-log.md
│ ├── roadmap-payments/
│ │ ├── roadmap-payments.md
│ │ └── challenge-log.md
│ └── roadmap-notifications/
│ ├── roadmap-notifications.md
│ └── challenge-log.md
│
├── prompts/
│ └── challenge/
│ └── ... # Prompts written by the team (see section 9.3)
│
└── src/ # Code built from the consolidated roadmaps
The Definition sits isolated at the root, so it can be reviewed without going through code or roadmaps. Each folder under roadmaps/ is self-contained: it groups the roadmaps for a single feature —one or several, depending on whether it makes sense to split it— along with a shared Challenge log. Changes to each roadmap file over time are tracked with git, not with duplicated files. The challenge-log.md records who challenged which roadmap and how it was resolved.
A Roadmap within DCB has already gone through Define, has already been challenged, and is already tied to an approved Definition. By the time it reaches Build, there's no remaining business or design ambiguity — only execution.
For teams using coding agents (Claude Code or others), this means a consolidated Roadmap can be handed directly to the agent as a work spec:
DCB pairs well with Vertical Slice Architecture (VSA): organizing the system by end-to-end feature instead of by horizontal technical layer.
A VSA feature translates into one or more DCB Roadmaps, all referencing the same central Definition. Splitting a feature into several roadmaps —for example, separating backend and frontend within the same folder— doesn't break the VSA principle: the feature is still the unit of delivery and of Challenge, it's just that its How is split into smaller pieces that are easier to audit separately.
Applying DCB per feature brings:
Project: a sports court booking platform for a club.
Step 1 — Define (Definition). The client's requirements are gathered (booking rules, user roles, cancellations, legal constraints) and a first version of the Definition is drafted.
Step 2 — Challenge on the Definition. The team (experts + AI) audits the draft and finds gaps:
This gets logged in CHALLENGE_LOG.md, fixed, and repeated until there are no open objections left. The Definition is consolidated.
Step 3 — Define (Roadmap with definition and tasks).
roadmaps/roadmap-bookings/roadmap-bookings.md is created:
# Roadmap: Court Bookings
## 1. Definition
- **What it solves:** Implements the locking and slot-registration logic referencing the Definition, section 3.
- **Scope:** Excludes online payments for now; internal booking operations only.
## 2. Phases and Tasks
### Phase 1: Backend (.NET)
- [ ] Create the booking endpoint with concurrency locking.
### Phase 2: Frontend (Next.js)
- [ ] Build the calendar view and confirmation button.
Roadmaps must always be deterministic: no "to be confirmed" items, no pretending something will be added later — that's what the Challenge is for. They also can't reference other roadmaps or the Definition. Later changes to the same file are strictly for corrections, not for adding new content; that history lives in git. If a feature from an already-completed roadmap needs to be extended, a separate roadmap is created instead.
The roadmap is for design decisions and system contracts, not a log of every small adjustment made along the way.
Step 4 — Challenge on the Roadmap.
It's flagged that the proposed locking mechanism won't scale well with multiple concurrent courts. roadmap-bookings.md is corrected and re-audited; the change is documented in challenge-log.md and recorded as a commit in git.
Step 5 — Build.
The consolidated Roadmap is handed directly to a coding agent as an execution spec. During the Build, something unexpected comes up (the chosen library doesn't support the client's database engine): roadmap-bookings.md is corrected, the reason is documented in challenge-log.md, and the change is versioned in git, without touching the Definition.