Feature Driven Development

23/02/2024

Feature Driven Development (FDD) is an iterative and incremental software development methodology that focuses on delivering tangible, working features or functionalities in a structured and systematic manner. It is particularly well-suited for larger projects where teams need to manage complexity and maintain a clear focus on delivering value to stakeholders. Here's an overview of the key principles and practices of Feature Driven Development (FDD):

  1. Domain Object Modeling: FDD starts with understanding the domain of the project and creating a comprehensive domain model. This involves identifying key business concepts, relationships, and processes, and representing them using object-oriented modeling techniques.

  2. Feature List Creation: Once the domain model is established, the project is broken down into a list of features, where each feature represents a distinct piece of functionality that delivers value to the stakeholders. Features are prioritized based on business value and complexity.

  3. Feature Planning: In FDD, features are planned and scheduled for development in short iterations called "feature sets." Each feature set typically lasts between one to two weeks and focuses on implementing a specific set of features.

  4. Design by Feature: FDD emphasizes a design-centric approach where development is driven by the features to be implemented. Developers collaborate to design and implement the features incrementally, focusing on delivering working functionality at the end of each iteration.

  5. Regular Builds and Inspections: FDD advocates for regular builds and inspections to ensure that the software is continuously integrated and tested. This helps identify issues early and ensures that the software remains stable and functional throughout the development process.

  6. Progress Tracking and Reporting: Progress is tracked based on the completion of features and feature sets. Metrics such as feature completion rate, defect density, and velocity are used to monitor progress and report status to stakeholders.

  7. Team Collaboration: FDD encourages close collaboration between team members, including developers, domain experts, testers, and stakeholders. Regular communication and collaboration help ensure alignment with business goals and facilitate the timely resolution of issues.

  8. Inspection and Adaptation: FDD emphasizes a culture of continuous improvement, where teams regularly reflect on their processes and practices and make necessary adjustments to improve efficiency and quality.

  9. Client Engagement: Throughout the development process, FDD emphasizes the active involvement of stakeholders, including clients or end-users. Regular demos and feedback sessions are conducted to gather input and validate the delivered features.

  10. Emphasis on Quality: FDD places a strong emphasis on delivering high-quality software. Testing and quality assurance activities are integrated throughout the development process to ensure that features meet the specified requirements and are free of defects.

  11. Individual Ownership: FDD promotes individual ownership and accountability for specific features or components of the system. Team members take responsibility for designing, implementing, and testing their assigned features, fostering a sense of ownership and pride in their work. 

Overall, Feature Driven Development provides a structured and disciplined approach to software development, focusing on delivering value incrementally while maintaining a clear focus on business objectives and quality. It combines elements of iterative development, object-oriented design, and agile practices to provide a flexible and adaptive framework for building complex software systems.

FDD Roles

Feature Driven Development (FDD) defines several key roles within the development team, each with specific responsibilities to ensure the successful implementation of the methodology. These roles promote collaboration, accountability, and efficient delivery of features. Here are the primary roles in FDD:

  1. Chief Programmer (Project Manager): The Chief Programmer, also known as the Project Manager in FDD, is responsible for overseeing the entire project. They lead the team, coordinate activities, and ensure that the project is progressing according to plan. Responsibilities include defining project scope, setting goals and milestones, managing resources, and communicating with stakeholders.

  2. Chief Architect: The Chief Architect is responsible for the overall design and architecture of the system. They lead the design activities, establish design standards and guidelines, and ensure that the architecture supports the project's goals and requirements. Responsibilities include creating and maintaining the architectural vision, guiding the design process, resolving design issues, and ensuring consistency and integrity across the system.

  3. Development Manager: The Development Manager is responsible for managing the development process and ensuring that features are implemented efficiently and effectively. They oversee the day-to-day activities of the development team, allocate resources, and track progress. Responsibilities include planning feature sets, assigning tasks, monitoring development activities, identifying and resolving bottlenecks, and ensuring that features are completed on schedule and within budget.

  4. Chief Designer: The Chief Designer is responsible for leading the design activities for individual features. They work closely with the development team to translate requirements into design specifications, create detailed designs, and ensure that features are implemented according to design standards. Responsibilities include analysing requirements, creating design models and diagrams, reviewing and approving design deliverables, and providing guidance and support to developers.

  5. Domain Experts: Domain Experts are subject matter experts who provide insights into the business domain and help define feature requirements. They collaborate with the development team to ensure that features meet the needs of stakeholders and align with business objectives. Responsibilities include clarifying requirements, providing domain knowledge and expertise, validating feature designs, and offering feedback on feature implementations.

  6. Development Team: The Development Team is responsible for implementing features according to the design specifications. Team members collaborate closely with each other and with other roles to develop and deliver working functionality. Responsibilities include writing code, unit testing, integrating code changes, participating in design and code reviews, and ensuring that features meet quality standards and requirements.

  7. Class Owners: Class Owners are responsible for specific classes or components of the system. They take ownership of the design and implementation of these classes, ensuring that they are well-designed, efficient, and maintainable. Responsibilities include implementing class features, documenting class interfaces and behaviors, optimizing performance, and collaborating with other team members to integrate classes into the system.

These roles work together collaboratively to plan, design, implement, and deliver features incrementally, ensuring that the project progresses smoothly and that features meet stakeholders' needs and expectations.