Feature-Driven Development (FDD)¶
Feature-Driven Development was used on a large Singapore banking project in 1997 and described by Jeff De Luca and Peter Coad. It is the agile method for people who have a big system, a big team, and a manager asking what percentage is done.
Its answer: keep an explicit domain model, cut the system into tiny client-valued features, and report progress as the count of features completed. That makes it the most plan-friendly of the agile methods, and the one that scales to large teams with the least modification.
A feature¶
A feature is a small, client-valued function, named to a fixed template:
- Calculate the total of a sale
- Validate the password of a user
- Assess the credit risk for an applicant
Each must be buildable in two weeks or less. Anything larger is not a feature, it is a feature set, and must be split. This size rule is what makes the progress number meaningful: with features averaging a few days, "62% of 300 features complete" is measured, not estimated.
The five processes¶
graph LR
M[1. Develop an overall model] --> L[2. Build a feature list]
L --> P[3. Plan by feature]
P --> D[4. Design by feature]
D --> B[5. Build by feature]
B --> D
| # | Process | Output | Frequency |
|---|---|---|---|
| 1 | Develop an overall model | A domain object model, breadth first, shallow | Once, then refined |
| 2 | Build a feature list | Features grouped into feature sets and subject areas | Once, then extended |
| 3 | Plan by feature | Ownership and a schedule by feature set | Once, then revised |
| 4 | Design by feature | Sequence diagrams and class updates for a small batch | Per iteration |
| 5 | Build by feature | Code, unit tests, inspection, promotion to build | Per iteration |
The first three are up-front and take days, not months. Steps 4 and 5 are the iteration, and they repeat every two weeks or less on a small batch of features.
Roles¶
| Role | Responsibility |
|---|---|
| Chief architect | Owns the overall model and its integrity |
| Chief programmer | Leads a feature team, picks the batch, runs design by feature |
| Class owner | Owns a specific class, and makes every change to it |
| Feature team | Temporary group of class owners, assembled per feature, dissolved after |
| Domain expert | Supplies the knowledge the model encodes |
Class ownership is FDD's most distinctive and most contested choice. It is the direct opposite of XP's collective code ownership.
| FDD, class ownership | XP, collective ownership | |
|---|---|---|
| Who edits a class | Its owner only | Anyone |
| Strength | Conceptual integrity, a clear expert per area | No waiting on a person, no knowledge silos |
| Weakness | The owner becomes a bottleneck, and leaving is expensive | Needs strong TDD and CI to stay safe |
Feature teams soften the bottleneck: a feature that touches five classes temporarily pulls together those five owners, so the class expert is still in the room.
Reporting progress¶
Each feature moves through six milestones with fixed weights, so a partially built feature has a defined percentage rather than the usual "90% done" fiction:
| Milestone | Weight |
|---|---|
| Domain walkthrough | 1% |
| Design | 40% |
| Design inspection | 3% |
| Code | 45% |
| Code inspection | 10% |
| Promote to build | 1% |
Roll those up across hundreds of features and the burn-up chart is credible without story points or velocity guessing.
When FDD fits¶
- Large teams, tens to hundreds of developers, where XP's practices do not obviously scale.
- Domains stable enough that an up-front model survives, such as banking, insurance and logistics.
- Organizations that require documented design and formal progress reporting.
It fits badly where requirements are genuinely unknown up front, because the model and the feature list both assume the problem can be enumerated first. In Cynefin terms, FDD is a complicated-domain method, while Scrum and XP target the complex domain.
Check Your Understanding¶
Why does FDD insist that a feature take two weeks or less?
How does FDD's class ownership differ from XP's collective ownership, and what is its cost?
A startup is exploring a market where nobody yet knows which features will matter. Is FDD a good fit?