Understanding Feature Driven Development (FDD)

Understanding Feature Driven Development (FDD)

In the ever-evolving software development landscape, methodologies come and go, but some stand the test of time due to their effectiveness and practicality.

One such methodology is Feature Driven Development (FDD). FDD is an iterative and incremental software development process that aims to deliver tangible, working software repeatedly and promptly. It combines several best practices into a coherent whole, making it a robust choice for complex projects. Let's delve deeper into what FDD is and how it works.

Origins of Feature-Driven Development

Feature Driven Development was invented by Jeff De Luca in 1997 while working on a large-scale banking project in Singapore. De Luca, along with Peter Coad and others, sought to create a methodology that was both scalable and practical for real-world projects. FDD was born out of this collaboration and has since been recognized as a powerful approach to software development.

Key Concepts of FDD

1. Agile Framework

FDD is an agile framework that focuses on flexibility, continuous improvement, and delivering value to the client. It emphasizes adaptive planning, evolutionary development, early delivery, and continuous improvement, all while encouraging rapid and flexible responses to change.

2. Short Iteration Model

FDD uses short, iterative cycles to deliver features. Each iteration, often referred to as a 'design by feature' and 'build by feature' cycle, typically lasts between two weeks to a month. This approach allows teams to deliver incremental updates and continuously refine the software based on client feedback.

3. Feature

A feature in FDD is a small, client-valued function that is expressed in the form 'action, result, object'. This approach ensures that every feature delivers clear value to the client. For example, 'Calculate the total of an order' is a feature that provides a specific, useful functionality.

4. Feature Set

A feature set is a collection of related features. Grouping features into sets helps organize and manage the development process more effectively. Each set typically corresponds to a specific area of functionality within the system.

5. Subject Area

A subject area relates to a chain of feature sets and is usually tied to a particular area of the domain model. This helps in structuring the project around different aspects of the business logic or domain.

6. Law of Demeter (LoD)

The Law of Demeter is a design guideline aimed at promoting loose coupling between classes. It suggests that an object should only interact with its immediate neighbors. This principle reduces dependencies and makes the codebase more modular and easier to maintain

The Engineering Process in FDD

The engineering process in FDD is structured into five main activities, ensuring a comprehensive approach to software development.

1. Develop an Overall Model

The first step in FDD is to create a high-level model of the system. This involves understanding the scope and requirements of the project and then developing a model that captures the essential aspects of the domain. This model serves as a foundation for the subsequent steps.

2. Build a Feature List

Once the overall model is in place, the next step is to compile a detailed list of features. Each feature is a small, client-valued function that can be developed independently. This list is essential for planning and tracking progress.

3. Plan by Feature

With a feature list in hand, the project is planned around these features. This involves scheduling the development of each feature iteratively. By focusing on one feature at a time, teams can ensure steady progress and frequent deliveries of working software.

4. Design by Feature

Each feature is designed in detail before implementation. This involves creating the necessary design artifacts and ensuring that the feature fits seamlessly into the overall system architecture. Design reviews are conducted to verify that the design meets the required standards and addresses all relevant concerns.

5. Build by Feature

The actual implementation of the feature takes place in this step. Developers code the feature, conduct unit tests, and ensure that it integrates well with the existing system. Regular builds and integrations help in identifying and resolving issues early.

6. Test by Feature

Each feature is thoroughly tested to ensure it works as expected. This includes unit tests, integration tests, and acceptance tests. Testing by feature ensures that issues are identified and fixed early, maintaining the quality of the software.

Reporting Progress in FDD

FDD emphasizes automated reporting to track progress and eliminate the need for frequent manual updates. Progress tracking in FDD is streamlined using version control systems and automated tools.

Six Stages of a Feature

Each feature goes through six stages - requirement walkthrough, design review, code & unit test, review, and promotion to build. These stages ensure that every feature is carefully developed and validated before it is complete.

Automated Reporting

Progress is reported automatically using version control systems. This eliminates the need for manual status updates and ensures that everyone has access to up-to-date information. Reports are typically made available on a website or dashboard for easy access.

Achieving Smooth Flow with Cumulative Flow Diagrams (CFDs)

Cumulative Flow Diagrams (CFDs) are used in FDD to visualize the progress of features through various stages of development. CFDs help in maintaining a smooth flow of work and identifying bottlenecks.

Smaller Batch Sizes

Smaller batch sizes help in reducing work-in-progress (WIP) and shortening lead times. By focusing on a few features at a time, teams can ensure faster delivery and better quality.

Monitoring WIP

CFDs allow teams to monitor WIP and predict lead times and delivery dates accurately. Keeping WIP under control is crucial for maintaining a steady flow and avoiding delays.

Advanced Scheduling with Critical Chain

FDD incorporates advanced scheduling techniques, such as Critical Chain Project Management (CCPM), to manage tasks and resources effectively.

Feature Set Groupings

Tasks are scheduled based on feature set groupings, and buffers are managed across multiple features. This approach helps in balancing the workload and ensuring that critical tasks are prioritized.

Multi-Project Scheduling

In environments where multiple projects run simultaneously, FDD uses a system constraint (e.g., a UI designer) to synchronize tasks across projects. This ensures that resources are utilized efficiently and projects progress smoothly.

Scalability from Small to Large Projects

One of the standout features of FDD is its scalability. Whether you are working on a small project with a few team members or a large-scale enterprise application with hundreds of developers, FDD can be adapted to fit the context.

Small Projects

For smaller projects, FDD's emphasis on delivering client-valued features ensures that even limited resources are used effectively. The iterative nature allows for frequent client feedback, ensuring that the project remains aligned with their needs.

Large Projects

In larger projects, the structured nature of FDD helps in managing complexity. The clear definition of features and the detailed planning process ensure that all team members are on the same page. Automated reporting and advanced scheduling techniques help in coordinating efforts across large, distributed teams.

Conclusion

Feature Driven Development is a powerful, agile methodology that combines the best practices of software engineering into a cohesive process. By focusing on delivering client-valued features iteratively, FDD ensures steady progress, high quality, and client satisfaction. Its emphasis on automated reporting, smooth workflow, and advanced scheduling makes it a robust choice for complex projects.

Moreover, its scalability makes it suitable for projects of any size. If you're looking for a structured yet flexible approach to software development, FDD is worth considering.

Gökçen Öğütçü

Gökçen Öğütçü

Co-Founder

Related Posts

Deploying to private servers with "Bitbucket" Pipelines and Tailscale
Co-Founder

Gökçen ÖğütçüSep 18, 2023

Tailscale is a Wireguard (r) based networking tool that allows access to your private resources. It creates encrypted tunnels between your resources with ...

Guilds at BREW
Co-Founder

Gökçen ÖğütçüMay 08, 2024

In the fast-paced world of service-oriented companies, embracing adaptable and innovative work structures is key to staying ahead of the curve. Spotify, a renowned product company ...

Download a presentation of our recent worksSay Hello

Contact Us