When I first learnt about FDD, I was impressed by it's simplicity and clarity. As a development process, it stood well out from the crowd when compared to other far more cumbersome & complex processes that seemed only to make things harder. After learning more about FDD, my opinion of it as a development process was not in question, I wanted to use it. The issue was whether I could apply it to what I did, ie. web development And if that was possible, how to go about making it happen?
The short answer is yes, you can use FDD for web development. How? That's not so easy, as web development covers a wide range of project types, how to apply FDD will depend on the nature of the project at hand.
There is also much more to FDD than just the five processes that have the potential to make a big difference to any software development project (which is an article in it's own right). For the purposes of this article, I'll stick to the main aspects of FDD (ie. the 5 processes).
As a general rule of thumb, FDD is extremely effective on large projects with complex business logic. It is not so effective on small projects with little business logic. That's not to say that you can't use elements of FDD to help manage your projects better but it's pretty hard to enforce code and design reviews (see processes 4 & 5) when you only have one developer on the project!
There is nothing in FDD that dictates what technology to use. However, the simple fact that the first process is primarily object modelling means that if you are not using an OO technology, using FDD is not going to be straight forward. Having said that, I've successfully used aspects of FDD on web projects using a variety of web orientated technologies such as ASP, JSP and PHP.
The key to FDD is process one, the key to process one is having a great object modeller and a great project manager. Note: it doesn't matter what process you use, you need good people. No process, including FDD will help you if you don't have the right people. If you are thinking about FDD to help you resolve this issue, think again.
WHAT IT DOESN'T COVER
You need to be well aware that FDD, to quote Fred Brooks, is not a silver bullet. It doesn't cover every aspect of development. There are many aspects of a standard project that you'll still need to manage outside of what FDD can help with. These aspects include
- Requirements gathering
- Interface design
A STARTING POINT
Trying to implement a new process is difficult regardless of which process you choose. Not only do you have to learn the process you also have to produce a result at the same time. Be prepared for some confusion and difficulty which goes hand in hand with trying anything new. That being said, the structure of FDD can easily be adapted to move gradually from your existing process to an FDD approach.
What I found to be an effective way get started is to look at projects in an FDD way - that is, start to think of projects as a set of features. This approach can be used on almost any project regardless of size or technology.
- Define a project as a list of features or functions
At some point, every project needs to be defined by what it does or what functionality it provides. By listing all these functions (or features) of the system, you are defining what it is you need to build to complete the project.
The key is to make sure you use the same language as the client, don't use technical terms that the client won't understand because they won't care if you build it. If they understand the feature, they will care about whether it has or hasn't been built.
- Plan development based on features
Once you know what you have to build, it's a fairly straight forward task to work out the order. As some features will be dependant on others, they clearly have to be built first. Whatever the order, you now have a development plan that you use to track your progress.
I find it useful to get the lead developer to provide you with the order and time frame for the development plan, that way, they commit themselves to the plan and I have something to go back to when things aren't happening when they are supposed to.
- Weekly project status meetings based on features completed
If you have a list what needs to be done and by when, it's easy to then track progress and report back to the client. It's amazing how effective it is to be able to tell a client what features have been completed and what you're currently working on.
As a project manager, you also find out about problems much early in the piece and have a chance to deal with them before they become a major issue.
There is no doubt that FDD can be used for web development, it has been done successful on numerous projects. As a process, it is easy to understand takes a common sense approach. But the qualities of FDD are not as important as whether FDD is appropriate to the type of development you do and will help you to achieve what it is you hope to gain from adopting FDD.