# Feature-driven development (FDD)

{% hint style="success" %}
**Feature-driven development** (**FDD**) is an iterative and incremental software development process, driven from a client-valued functionality (feature) perspective.
{% endhint %}

It is a lightweight or Agile method for developing software.

### Activities

FDD consists of five basic activities:

1. **Develop overall model.** A high-level walkthrough of the scope of the system and its context. Next, detailed domain models are created for each modelling area by small groups. One or more of the proposed models are selected to become the model for each domain area.
2. **Build feature list.** Identify a list of features by functionally decomposing the domain into subject areas. Features should not take more than two weeks to complete, else they should be broken down into smaller pieces.
3. **Plan by feature.** Produce the development plan and assign ownership of features (or feature sets) as _classes_ to programmers.
4. **Design by feature.** Form feature teams, study referenced documents, develop sequence diagrams.
5. **Build by feature.** The class owners develop code for their classes. After unit testing and successful code inspection, the completed feature is promoted to the main build.
