Feature-driven development

From WikiMD's Wellness Encyclopedia

Fdd process diagram.png
Fdd process data diagram.png

Feature-driven development (FDD) is an iterative and incremental software development process. It is one of the agile methods designed to model and document a software development project in a short amount of time. FDD blends a number of industry-recognized best practices into a cohesive whole. These practices are driven from a client-valued functionality (feature) perspective. Its main purpose is to deliver tangible, working software repeatedly in a timely manner.

Overview[edit | edit source]

Feature-driven development is a model-driven, short-iteration process. It begins with establishing an overall model shape. Then, it continues with a series of two-week "design by feature, build by feature" iterations. The features are small, "useful in the eyes of the client" results. FDD advocates for modeling a project's domain in detail before recording and categorizing the project's specific features. These features are then planned into iterations that result in a demonstrable product.

Five Processes of FDD[edit | edit source]

FDD consists of five basic activities or processes:

  1. Develop an Overall Model: Initially, a domain object model is created for the scope of the project.
  2. Build a Feature List: After the overall model is established, a comprehensive list of features is created. Each feature is a small, client-valued function expressed in the form "action" "result" "object".
  3. Plan by Feature: With the feature list created, the next step is to plan the features' development. This involves assigning features to various teams.
  4. Design by Feature and Build by Feature: Each feature is designed and built within a two-week iteration cycle. This process involves creating detailed design documents for each feature before they are built.
  5. Deploy: The software is deployed to the user for feedback and acceptance.

Practices and Techniques[edit | edit source]

FDD incorporates several industry-recognized best practices, including domain object modeling, developing by feature, individual class (code) ownership, feature teams, inspections, configuration management, and regular builds. The emphasis on building by feature allows the development teams to remain focused on creating a product that satisfies client requirements within the constraints of the project timeline.

Benefits and Challenges[edit | edit source]

The benefits of FDD include providing frequent, tangible, working results to clients, which enhances trust and allows for better feedback and adjustments. It also encourages active and continuous involvement of the client throughout the development process. However, FDD requires thorough upfront planning and design, as well as a high level of discipline and coordination among team members to be successful. It may not be as effective for small projects due to the overhead of the initial modeling phases.

Comparison with Other Agile Methods[edit | edit source]

FDD differs from other agile methods like Scrum and Extreme Programming in that it has a more structured approach to design and development. While Scrum focuses on the management aspects of software development and Extreme Programming emphasizes technical practices for software quality, FDD combines elements of both but with a focus on modeling and feature-driven delivery.

Conclusion[edit | edit source]

Feature-driven development offers a unique approach to agile software development by combining the best practices of model-driven design and feature-based planning and delivery. It is particularly well-suited for larger teams and projects where a structured method is necessary to manage complexity and ensure delivery of client-valued functionality in a timely manner.

Contributors: Prab R. Tumpati, MD