“I’m going shopping, can you please give me the details of everything you’ll need for the next year?”
What if I asked you this question?
Don’t just throw the mouse at me yet. You look extremely annoyed, but indulge me for a minute. Do you have any idea how much more you might spend because of your lack of planning? I’m sure when you run out of things, you wish you had planned better. After all good upfront planning is always helpful. Its Industry BEST PRACTICE.
Let’s assume, you are convinced with my logical reasoning and well-polished methodological approach to planning. You start creating a backlog of items you’ll need over the next year. And you start filling out the details for each item in a nifty little template I’ve given you. Of course its taking a lot longer than you imagined, but you are discovering (at least forced to think about) many things you had never thought about.
By the way, at the end of this exercise you’ll need to hand over a signed list to me and you can’t change you mind later. We don’t entertain change requests later as its more expensive. After all, we need to put some constraints to make are planning effective.
What, when, how, how much, etc. all kinds of interesting questions plague your mind. Making you realize how unplanned and clueless you were.
Perseverance always wins, in the end. Finally you have a backlog of items you’ll need for the year.
OK. Cut! Lights!
I bet one out of 2 things about the list of items:
- The list was very ambitious (massively grandiose.) You fantasied every possible thing you might ever need, just in case. (After all, what is the guarantee you’ll get everything you asked for.)
- You came up with a very humble list and since you won’t be able to change it cheaply, you regret now for indulging me.
Either ways its bad news for you.
This is exactly what happens on many software projects. Right at the beginning of the project, people who need the software (users or product management) are forced to come up with a detail spec of everything they need from the software. With a higher price tag for late changes. Which forces them to fantasize everything they might remotely need. After all, they are not sure what really will be required once they have the software year or two later.
The development team gets a pile of stuff with different priorities and importance, but all mixed up.
The team tries to come up with a grandiose vision and architect for the project in the name of extensibility.
Eventually, couple of years from now, somehow if the team manages to deliver the product:
- Its bound to be off target.
- Users will force the team to add new, unplanned features which are very critical for the usability of the product.
- A good 80% of the features are rarely used or never used.
- Those 80% of the features contribute to majority of the bugs and complexity in the software
- The overall product feels like a hotchpotch of “stuff”. Lack of symmetry and conceptual integrity
What you really have is a prototype that the team is ready to discard and start over again.
I call this phenomenon The Window of Opportunity. One opportunity, at the beginning, to express what you want. Take your best guess.
We can do much better than this. I would prefer to start really small, very focused. Use Agile methods to build the product collaboratively using an iterative AND incremental model. Embrace evolutionary design and architecture.
The Window of Opportunity *might* sound good in theory, but its too risky.