Feature Driven Development
Introduction
Feature Driven Development (FDD) is a client-centric, model-driven, short-iteration process that was developed by Jeff De Luca in 1997. It is a software development methodology that is aligned with the Agile Manifesto and is primarily used in larger software development projects. FDD blends a number of industry-recognized best practices into a cohesive whole, providing a comprehensive model for delivering software systems.
Overview
FDD is a model-driven, short-iteration process. It begins with the creation of a domain model, using a UML approach. From this model, a list of features (small, client-valued functions) is derived. These features are then prioritized and developed in short, two-week iterations.
Process
The FDD process is divided into five basic activities:
- Develop an Overall Model
- Build a Features List
- Plan by Feature
- Design by Feature
- Build by Feature
Each of these activities is a logical grouping of tasks that are performed by specific roles.
Develop an Overall Model
The first step in the FDD process is to develop an overall model of the system. This is done through a series of workshops, known as modeling sessions, which involve the chief architect, domain experts, and other key stakeholders. The goal of these sessions is to identify and understand the key entities and relationships within the system domain.
Build a Features List
Once the overall model is in place, the next step is to build a list of features. In FDD, a feature is a small, client-valued function that can be implemented in less than two weeks. The features list is a decomposition of the domain into subject areas, sets of related features that provide value to the client.
Plan by Feature
With the features list in hand, the next step is to plan the development of the features. This involves prioritizing the features, assigning them to developers, and scheduling them for development. The planning process is guided by the principle of delivering the highest value features first.
Design by Feature
Once a feature has been scheduled for development, the next step is to design the feature. This involves creating a sequence diagram for the feature, identifying the classes and methods that will be needed to implement the feature, and designing the tests that will be used to validate the feature.
Build by Feature
The final step in the FDD process is to build the feature. This involves coding the feature, testing it, and integrating it into the build. Once a feature has been built, it is considered complete and is ready for delivery to the client.
Roles
FDD defines a set of roles that are involved in the development process. These roles are:
- Project Manager
- Chief Architect
- Development Manager
- Class Owner
- Domain Expert
- Tester
- Integrator
Each of these roles has specific responsibilities within the FDD process.
Benefits and Criticisms
FDD has been praised for its ability to scale to large projects and for its focus on delivering client-valued functionality. However, it has also been criticized for its reliance on modeling and for its perceived lack of flexibility.