Building new products: manage scope
Many IT projects cost much more than they should. There are many reasons, but in my opinion one of more important of them is improper scope management. People usually forget that scope should be managable and they end with shifting delivery dates and increasing budgets. In effect, project fails to satisfy its goals and everyone is dissatisfied. Quite often removing some low-priority requirements from project scope could help deliver product on time and in planned budget.
When developing a new product, you usually want to get as many functions as possible. In fact, people tend to include in their products many "nice-to-have" functions that - in their opinion - could be useful. In fact, these non- essential functions often prove to be useless (or even disturbing).
In many projects sponsors decide to build big, elastic system that will be able to adapt to changing business conditions and environment. It means that analysts must be hired, all possible options have to be described, and then extremaly elastic implementation must be made.
Executing projects of this type has some important drawbacks:
- Time. Everything takes time. In fact, if development takes too much time, app that you are designing could be useless when it's ready.
- Budget. Each additional feature costs additional money. This fact will be communicated to you by your programming team or outsourcing partner.
- Complexity. Each functionality adds additional complexity to your product - and it's not linear growth. Something that seems simple in the beginning of project could prove to introduce many additional functions in practice.
- Support. The more complex your software This cost is hard to estimate and is usually worse-than-linear.
- Usability cost. People tend to forget about this one. Each additional function makes your system more and more difficult to use.
In fact, to achieve your goals you should concentrate only on most important issues. It's quite similar to strategic games: if you play by sending your troops over and over to the battle, you could make some little damage to your enemy. If you want to achieve any success, you must select one target, destroy it, and then go to next one. Of course in the first place you must concentrate on smaller targets that could be a threat for you. Then, when your enemy gets weak, you could attack main base.
Best way to achieve this effect is to divide the project into iterations. Each iteration should end with a new product version, delivered to the customer. Deliver first version fast; this will allow you to verify your vision and make corrections as early as possible. It will also create positive attitude in your development team. And remember that you could always add new features in future versions.
Of course, to succeed in this model you have to design high quality system architecture. You should focus on separating components that will be delivered separately and describing interfaces between them. Without this, instead of well-working IT system, you could soon face a nightmare. :)