Feature-driven development (FDD) is a customer-centric software development methodology known for short iterations and frequent releases. Like Scrum, FDD requires the customer, also known as the project business owner, to attend the initial design meeting and iteration retrospectives.
By releasing new features in an incremental fashion, developers are able to prioritize client requests, respond to requests in a timely manner and keep clients satisfied. In order to achieve this, developers map out what features they are capable of creating, break complex requests into a series of smaller feature sets and and then create a plan for how to complete each goal over time.
Jeff De Luca and Peter Coad are credited with developing the concept of FDD as they worked on a banking project in Singapore in 1997. Feature-driven development is ideal for projects that have large development teams, follow pre-defined standards and require quick releases. Inversely, this methodology is not well-suited for projects that are small and highly dependent on the skill sets of specific lead developers.
Steps of feature-driven development
Feature-driven development is made up of five basic process steps:
- Develop a model- The overall model is created by the chief architect, or another professional leading the project, by identifying the scope and context of the system.
- Build a list of features- Developers brainstorm a list of potential items that would be useful to users and could be completed along a set timeline for release. Each feature should be manageable within a timeframe of around two weeks.
- Plan out each feature- Features are organized by how long they take to create and how important they are to the client. Ownership of each feature is also assigned.
- Design each feature- The actual details of each feature are produced, inspected and finalized.
- Build each feature- After the design is improved, the completed feature is added to the official build for delivery to the client.
Best practices for feature-driven development
To achieve the highest level of success, FDD is built around overall software engineering best practices. This includes:
- Identifying the domain object model, or the scope of the problem that needs to be solved, to help with the framework for feature development.
- Breaking down complex features into smaller functions and subsets.
- Assigning features to a single owner to ensure consistency and code integrity.
- Building dynamic and diverse feature teams to collect multiple design options.
- Performing routine code inspections of each feature before implementation into the main build.
- Enforcing project visibility with frequent, accurate progress reports during all steps.