Going with the technical definition, Feature Driven Development (FDD ) is a client-centric, architecture-oriented, software development process sourced by pragmatic approach allied with the Agile methodology. Now, the reason it is called Feature Driven Development is because the project is divided into features or simplified and assorted pieces of client-valued functions. These functions follow a typical coding pattern which goes as <action><result><object>. This could be applied in expressions like “Calculate the total sale”, “Authenticate user password”, and “Authorize the sale transaction”.
First introduced way back in 1999, FDD was initiated as a combination of feature-driven architectures to approach Agile methodology for software development, led by combined efforts of Jeff DeLuca and Peter Coad.
The effort further evolved into a more detailed and expounded guide in the late 90’s and took a shape of an extensive manual equipped with fine resources, assorted instructions and leveraging references on FDD. With these the whole scheme of feature-augmented approach that FDD aims to offer, today renders into a refined process of development which is dubbed as FDD project lifecycle.
Develop an overall model: An object-based model with elaborated notes is developed by the client and the development team. This model explains the overall approach and places instructions for team members to get familiar with the entire methodology. Chief architect plays the role of the guide and mentor of the FDD program.
Build a features list: All the information that is gathered to develop the model is now deduced into a refined list of assorted features and the entire project is divided and decisively bundled into segregated lists of features. These are essentially utility-defining set of co-existing features through which certain value can be defined and derived.
Plan by feature: Once the initial modeling is complete, development plan of features is prepared and implemented. Here important decisions related to feature implementation are taken and different teams are formed to assign with tasks related with different feature sets.
Design by feature: Here the lead programmer assembles from the segregated features and applies domain classes to design feature-based application resources. There further, sequence diagrams and supporting artifacts are conceived and feature designs are concluded. Ahead of that feature prologues are written and finally the designs are inspected for quality and validity.
Build by feature: When design is all done with inspection, development experts and class owners start building the features. This begins with coding and unit testing and once the codes are good to go they are finally critically inspected by the chief programmer. Once final approval is received the feature is put into the main build.
Feature Driven Development is all feature-based and built on a model that follows short iteration process that works on the phenomenon of “design by feature, build by feature” iterations that are short and quick in their development references and traits. The features we are talking about are different utilities important for users from different perspectives of development.
FDD works in conjunction with Agile methodology and closely follows all basic traits of the Scrum based Agile development processes – which follows a typical iteration cycle of two weeks. If an assignment or task does not accommodate within the two-week cycle it is further broken into the equal volume of features to fit into more such cycle(s).
One of the most striking features of FDD is class ownership. Every class built with a set of features is assigned to a specific developer. All the changes or deviations that take place while implementing the features into a class are considered as the responsibility of the developer assigned to it. This enhances the authenticity and reliability of processes that are built on role-based resources and well-calibrated tasks.
There are feature teams in Feature Driven Development. Each team has its own tasks and is responsible for driving them right. They are free to take design decisions and contribute to the process as per their independent approach towards the assignment. For each feature team, developers are chosen on an ad hoc basis to best serve different feature development requirements. Feature teams are responsible for developing and implementing features assigned to them and complete their part of module or component, contributing to the project development at large.
FDD allies with the best of Agile format of development by incorporating methodologies like Scrum and eXtreme programming. The model-intensive techniques applied by FDD focus on core domain logics and offer solutions to complex domain issues. The methodologies followed in Feature Driven Development emphasize on collaborative and dynamic approach towards software development to achieve more integrated and fast results, bringing in different features and functional resources together to work in a close tandem and create fine programming utilities with that.
Also, there are UML color standards that are followed within the FDD approach that precisely use a set of four colors for Unified Modelling Language diagrams. Here, there’s a UML reporting module that captures the proceedings and progress of the FDD process and use of color plays a vital role in making this process easily trackable and comprehensible.
FDD promotes the method of development that focuses on developing features one-by-one in an incremental pattern. This allows developers to ascertain and achieve tangible results in short span of time, which in this case is ideally a two-week time. With this the developers are able to commit to better processes and proceed confidently with their plans to bring out highly persistent and quality results, efficiently contributing to the product value proposition.
One of the key advantages offered by Feature Driven Development is that it can be scaled up to large projects. Which means if you are building a project of a certain size and in the process, you realize or find a need to add more modules or functional volume to it, you can easily do it by scaling it up with the flexibility offered by the FDD approach. The best part, while you do this you don’t have to worry about the quality factor as you can manage it tracking progress and ensuring consistency for each component separately. Further, by putting up with strong reporting and communication system, you can even assure that the process is all steady and compliant with your scalability needs.
Quite contrasting to its simplistic appearance, Feature Driven Development methodology is comprehensive in its scope and range of offerings. Which makes it a lot relevant and companionable for different project needs as it is easy to adopt and refer to. The best part is, the comprehensive reporting mechanism FDD allows you to put up with, keeps everyone in the loop. Through which you can align and iterate similar tasks and assign them to suitable resources to gain maximum value and fast response from your wide-ranging efforts and aim for optimum results.
Now, what all do you need to do to get FDD implemented as your development approach. First of all, you need to make your process Agile compliant. Which you can do by employing and following Agile development methodology. Moving forward, you can use the principles and practices of Agile methodology as a base for FDD’s application. This would allow you to apply FDD into your development approach. This includes two modeling-oriented steps – developing an overall model and designing it using features based on class ownership. While working on a FDD project you need to make your resources work in different teams assigned to different models, along the lines of Agile methodology focusing on feature oriented development – around which the entire idea of FDD revolves. This would allow you to procure and implement FDD into your development system effectively and get the best of benefits from it.
Vipin Jain is the Co-Founder and CEO at Konstant Infosolutions and is in charge of marketing, project management, administration and R&D at the company. With his marketing background, Vipin Jain has developed and honed the company’s vision, corporate structure & initiatives and its goals, and brought the company into the current era of success.