Table of Contents
Feature Driven Development (FDD) is an agile software development methodology that focuses on delivering features in a timely and efficient manner. Unlike other methodologies such as Agile, Scrum, and Waterfall, FDD emphasizes a highly organized and structured process. FDD involves five core stages: developing an overall model, building a feature list, planning by feature, designing by feature, and building by feature. The first 3 stages are sequential and the last 2 are iterative.
The Feature Driven Development methodology places great emphasis on feature-centric development, where each feature is treated as a mini-project and developed in a step-by-step manner.
FDD is known for its highly visible progress tracking, allowing stakeholders to stay up to date with the development process.Â
The Team in Feature Driven Development
The Feature Driven Development team is responsible for delivering software features. The team consists of several members, each with unique roles and responsibilities.
The Chief Architect is responsible for creating an overall model that defines the system’s scope and ensures that it aligns with the stakeholders’ needs.
The Development Manager oversees the project’s progress and ensures that it stays on schedule and within budget.
The Chief Programmer leads the programming team and ensures that coding standards are met.
The Domain Experts provide domain-specific knowledge to the team, ensuring that the software meets the needs of its intended users.
The Feature Teams are responsible for delivering individual features, from planning and designing to coding and testing. Each team consists of three to seven developers who work together to deliver high-quality features.
Collaboration and communication are critical within the FDD team, and team members are encouraged to share their expertise and work together to identify and resolve any issues that may arise. The FDD team’s ultimate goal is to deliver a high-quality software product that meets the stakeholders’ needs while adhering to a structured and organized process.
The Process in Feature Driven Development
Feature Driven Development (FDD) involves five core activities that enable the team to deliver software features.
The first activity is developing an overall model, which defines the system’s scope and identifies its major features.
The second activity is building a feature list, which is a comprehensive inventory of all the features to be developed.
The third activity is planning by feature, where the feature list is broken down into smaller, more manageable chunks. This enables the team to prioritize features and plan for their development.
The fourth activity is designing by feature, where the team focuses on the detailed design of each feature, including the user interface, database design, and business logic.
The fifth and final activity is building by feature, where the team implements and tests each feature before moving on to the next one.
This step-by-step approach enables the team to deliver high-quality features that meet the stakeholders’ needs. By following these five core activities, the FDD team can deliver software that meets the stakeholders’ needs and adheres to a structured and organized process.
Developing the Overall Model
The overall model provides a high-level view of the business domain and the system to be developed.
To develop an overall model, the FDD team must first identify the system’s scope, including its major features and functionality. The team can then create a graphical representation of the system using a tool such as a Unified Modeling Language (UML) diagram. The UML diagram should include the system’s major components and their relationships.
The FDD team should also identify the actors who will interact with the system and their roles. This information is then used to create a use case diagram, which outlines the different scenarios in which the system will be used.
Once the overall model is complete, the FDD team can use it as a foundation for all subsequent development activities.
The model provides a shared understanding of the system’s scope and functionality, which ensures that all team members are aligned and working towards a common goal. The overall model is also used to develop the feature list, which is a comprehensive inventory of all the features to be developed. By developing a solid overall model, the FDD team can ensure that the system is designed to meet the stakeholders’ needs and that all subsequent development activities are focused on delivering high-quality features.
Building the Feature List
To build the feature list, the FDD team must first identify all the features required to meet the stakeholders’ needs.
This is done by breaking down the overall model into smaller, more manageable chunks, and identifying the features required for each component.
Once all the features have been identified, the team should prioritize them based on their business value and complexity. Business value refers to the importance of the feature to the stakeholders and users, while complexity refers to the technical difficulty of implementing the feature. The team should assign a priority level to each feature based on these factors. The highest priority features are those that have the most business value and are the least complex to implement. These features should be developed first.
As the team progresses through the feature list, they may need to adjust the priorities based on changing business needs or technical challenges. The feature list is a living document that should be reviewed and updated regularly throughout the development process.
By prioritizing the features based on business value and complexity, the FDD team can ensure that they are delivering the most important features first and that they are managing their resources effectively. This approach ensures that the stakeholders’ and users’ needs are met while minimizing the risk of delays or budget overruns.
Planning by Feature
To plan the development process, the FDD team must break down the feature list into smaller, more manageable chunks.
This is done by identifying the tasks required to implement each feature and estimating the effort required for each task. The team should then assign the tasks to the appropriate development teams based on their areas of expertise. The effort required for each task can be estimated using a variety of techniques, including expert judgment, historical data, and bottom-up estimation.
Once the effort required for each task has been estimated, the team can assign a timeframe for each task and develop a detailed schedule for the development process. This schedule should include milestones and deadlines for each feature, as well as any dependencies between features.
By breaking down the feature list into smaller chunks and assigning tasks to the appropriate development teams, the FDD team can ensure that the development process is efficient and effective. This approach enables the team to manage their resources effectively and to deliver high-quality features on time and within budget. It also ensures that the development process is transparent, with everyone involved understanding the tasks required to implement each feature and the effort required for each task.
By using a structured and organized approach to planning, the FDD team can minimize the risk of delays and ensure that the stakeholders’ needs are met.
Designing by Feature
To design each feature, the FDD team must first create class diagrams, sequence diagrams, and activity diagrams. These diagrams help to ensure that the feature is fully specified and that all of the required functionality is captured.
Class diagrams describe the structure of the code.
Sequence diagrams show how the code behaves over time.
Activity diagrams illustrate the steps required to complete a process.
Once the diagrams have been created, the FDD team must ensure that each feature has a clear definition of done. This means that the team must define the specific criteria that must be met for the feature to be considered complete. The definition of done should be agreed upon by all stakeholders and should be measurable and specific. This ensures that everyone involved in the development process understands what is required for each feature and that there is a clear understanding of when each feature is complete.
By ensuring that each feature is fully specified and has a clear definition of done, the FDD team can minimize the risk of misunderstandings or miscommunications during the development process. This approach also ensures that the features are delivered to the stakeholders’ satisfaction and that they meet the business requirements.
By using a structured and organized approach to designing each feature, the FDD team can ensure that the process is efficient, effective, and transparent.
Building by Feature
To implement each feature, the FDD team must first write the code, perform unit testing, and then integrate the feature into the system.
Writing the code involves translating the design into functional code that meets the business requirements.
Unit testing is performed to ensure that the code works as intended and that it meets the acceptance criteria.
Once the code has passed the unit tests, it can be integrated into the system.
The FDD team should ensure that each feature is properly tested and validated before moving on to the next feature. This involves performing system testing to ensure that the feature works as expected and that it integrates properly with the rest of the system. The team should also perform acceptance testing with the stakeholders to ensure that the feature meets their requirements and that it delivers the expected business value. If any issues are identified during the testing process, the team should address them before moving on to the next feature.
By ensuring that each feature is properly tested and validated, the FDD team can minimize the risk of errors and ensure that the system is delivered to the stakeholders’ and users’ satisfaction. This approach also ensures that the system meets the business requirements and that it is fit for purpose.
With this approach to implementing each feature, the FDD team can ensure that the development process is efficient, effective, and transparent.
Best Practices of Feature Driven Development
Implementing Feature Driven Development (FDD) successfully requires following best practices that ensure efficient and effective development.
Regular code reviews are essential to maintain code quality and ensure that the code meets the required standards. This involves reviewing code frequently to identify any issues, bugs, or vulnerabilities.
Continuous integration is also crucial for successful FDD implementation. This involves integrating new code into the system as soon as it’s ready, rather than waiting until the end of the development cycle. This ensures that the system is always up to date and that any issues are identified and resolved quickly.
Testing automation is another critical best practice for FDD implementation. This involves automating the testing process to ensure that the system is thoroughly tested and validated. This not only saves time and effort but also minimizes the risk of human error.
Collaboration and communication are also essential for successful FDD implementation. The FDD team should work together closely and communicate regularly to ensure that everyone is on the same page and that the development process is transparent.
Lastly, it’s essential to have a clear and well-defined process for FDD implementation. This includes having clear roles and responsibilities for each team member, a well-defined development process, and a well-defined set of acceptance criteria for each feature.
By following these best practices, the FDD team can ensure that the development process is efficient, effective, and transparent and that the system meets the stakeholders’ and users’ requirements and delivers the expected business value.
Pros and Cons of Feature Driven Development
FDD offers several advantages as a development methodology.
One of the primary benefits is its emphasis on a feature-centric approach, which ensures that each feature is well-defined and properly implemented. This can result in a more robust and functional system that meets the stakeholders’ requirements. FDD also promotes collaboration and communication among team members, which can lead to better teamwork and a more efficient development process. Additionally, FDD can provide a more predictable development timeline, as the development process is broken down into smaller, more manageable chunks. This can make it easier to estimate the time and effort required to complete each feature.
However, there are also some disadvantages to using Feature Driven Development.
One potential drawback is that the emphasis on features can sometimes lead to a lack of focus on the overall system architecture. This can result in a less cohesive and less maintainable system. Additionally, the feature-centric approach can be challenging to implement in some situations, such as when working with legacy code or integrating with external systems. Finally, FDD may not be suitable for all types of development projects, as its success relies heavily on having a well-defined set of requirements and a clear understanding of the stakeholders’ needs.
Despite these drawbacks, FDD remains a popular development methodology that offers many benefits, and its effectiveness can be enhanced by using best practices and adapting them to specific project requirements.
Conclusion
Feature Driven Development (FDD) is a software development methodology that focuses on developing software features incrementally and iteratively. FDD involves five core activities:
- Developing an overall model,
- Building a feature list,
- Planning by feature,
- Designing by feature,
- Building by feature.
The FDD team typically consists of a Chief Architect, Development Manager, Chief Programmer, Domain Experts, and Feature Teams.
The FDD approach offers several benefits, including a focus on high-quality deliverables, efficient use of resources, improved project management, and enhanced communication among team members.
To successfully implement FDD, teams should follow some best practices such as conducting regular code reviews, employing continuous integration and testing automation, and prioritizing features based on business value and complexity.
Overall, FDD offers several benefits over other development methodologies such as Agile, Scrum, and Waterfall. FDD provides a clear focus on feature delivery and emphasizes efficient resource allocation, which can result in faster time-to-market and improved ROI. By prioritizing features based on business value and complexity, FDD can also help teams deliver software that better meets the needs of their stakeholders.
Have you used Feature Driven Development? Please share your experience in the comments below.