Feature Driven Development

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):
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.

20 Multiple-Choice Questions (MCQs) on Feature-Driven Development (FDD)
1. What does FDD stand for?
a) Feature-Defined Development
b) Feature-Driven Development
c) Fast-Developing Design
d) Function-Driven Development
✅ Answer: b
📌 Explanation: Feature-Driven Development (FDD) is an Agile approach that focuses on designing, developing, and delivering software based on features.
2. Who developed Feature-Driven Development (FDD)?
a) Ken Schwaber
b) Jeff Sutherland
c) Alistair Cockburn
d) Jeff De Luca
✅ Answer: d
📌 Explanation: Jeff De Luca developed FDD in the late 1990s as part of a software development project in Singapore.
3. What is the primary focus of FDD?
a) Delivering entire systems at once
b) Developing software based on individual features
c) Creating extensive documentation before development
d) Writing code without planning
✅ Answer: b
📌 Explanation: FDD focuses on building software feature by feature, delivering small, functional increments.
4. FDD is best suited for:
a) Small, non-technical teams
b) Large, complex projects requiring structured Agile processes
c) Projects with minimal stakeholder involvement
d) Projects with unpredictable requirements
✅ Answer: b
📌 Explanation: FDD works best for large-scale projects that require structured Agile processes while maintaining flexibility.
5. Which of the following is NOT a core activity in FDD?
a) Develop an Overall Model
b) Build a Feature List
c) Plan by Phases
d) Design by Feature
✅ Answer: c
📌 Explanation: FDD does not follow traditional phase-based planning. Instead, it follows iterative feature-based planning.
6. How many core processes are there in FDD?
a) 3
b) 5
c) 7
d) 9
✅ Answer: b
📌 Explanation: FDD has 5 core processes:
- Develop an Overall Model
- Build a Feature List
- Plan by Feature
- Design by Feature
- Build by Feature
7. What defines a "feature" in FDD?
a) A single user story
b) A small, client-valued function that can be developed within two weeks
c) A large module that takes months to complete
d) A piece of backend functionality that is not visible to users
✅ Answer: b
📌 Explanation: A feature in FDD is a small, meaningful functionality that adds value to the user and can be built quickly.
8. Which role in FDD is responsible for defining the system architecture?
a) Feature Owner
b) Chief Programmer
c) Project Manager
d) Domain Expert
✅ Answer: b
📌 Explanation: The Chief Programmer is responsible for system design and architecture, leading feature development.
9. What technique does FDD use to track progress?
a) Burn-down charts
b) Feature progress reports
c) Gantt charts
d) User story mapping
✅ Answer: b
📌 Explanation: FDD uses progress reports that track feature completion, giving real-time project visibility.
10. Which of the following Agile methodologies is most similar to FDD?
a) Scrum
b) Kanban
c) XP (Extreme Programming)
d) Crystal
✅ Answer: a
📌 Explanation: FDD shares similarities with Scrum, including iterative development, feature prioritization, and team collaboration.
11. How does FDD differ from Scrum?
a) FDD focuses on building small, client-valued features
b) Scrum does not use timeboxes
c) FDD does not require a Product Owner
d) Scrum does not track progress
✅ Answer: a
📌 Explanation: FDD organizes work around features, whereas Scrum organizes work into sprints with user stories.
12. What is the ideal length of a feature development cycle in FDD?
a) 1-3 days
b) 2-10 weeks
c) 2-10 days
d) 1-2 months
✅ Answer: c
📌 Explanation: Features in FDD should be completed within 2-10 days to maintain rapid development cycles.
13. What type of teams work best with FDD?
a) Large, structured teams
b) Small, self-organizing teams
c) Teams without technical expertise
d) Teams that avoid planning
✅ Answer: a
📌 Explanation: FDD is designed for large teams that require structured processes for effective collaboration.
14. In FDD, who is responsible for writing feature-specific code?
a) Project Manager
b) Chief Architect
c) Feature Team
d) Stakeholders
✅ Answer: c
📌 Explanation: The Feature Team is responsible for writing code and implementing features in FDD.
15. What is a key advantage of FDD?
a) Focus on delivering small, valuable features
b) No need for planning
c) Heavy reliance on documentation
d) Delivers the full system at once
✅ Answer: a
📌 Explanation: FDD focuses on delivering features iteratively, ensuring continuous value delivery.
16. Which of the following is NOT a role in FDD?
a) Chief Programmer
b) Scrum Master
c) Domain Expert
d) Feature Owner
✅ Answer: b
📌 Explanation: FDD does not have a Scrum Master; instead, it has a Chief Programmer and Domain Experts.
17. Which Agile principle does FDD align with the most?
a) Working software over comprehensive documentation
b) Responding to change over following a plan
c) Individuals and interactions over processes and tools
d) Delivering working software frequently
✅ Answer: d
📌 Explanation: FDD emphasizes delivering working software frequently, feature by feature.
18. What is the main challenge of implementing FDD?
a) It requires strict, upfront planning
b) It lacks project visibility
c) It is difficult to scale
d) It does not focus on user feedback
✅ Answer: a
📌 Explanation: FDD requires upfront domain modeling and planning, making it less flexible than other Agile methods.
19. In which industries is FDD most commonly used?
a) Manufacturing and supply chain
b) Government and construction
c) Large-scale software development
d) Healthcare and pharmaceuticals
✅ Answer: c
📌 Explanation: FDD is widely used in large software projects, especially in banking, finance, and enterprise applications.
20. What is the ultimate goal of FDD?
a) Completing tasks quickly
b) Delivering high-quality, client-valued software features
c) Avoiding user feedback
d) Reducing communication between teams
✅ Answer: b
📌 Explanation: FDD's goal is to develop high-quality software, feature by feature, with continuous stakeholder involvement.