Most software developers have heard the line “You can have it good, fast or cheap. Pick two.” This idea relates back to the iron triangle of software development. The usual idea is that quality is fixed while time, money and/or scope can change. In reality, all four elements are changeable. We simply don’t like to discuss compromising quality — yet we do it all the time.
The quote above reflects all-too-common situations where the scope (feature set), quality (the good), time (the fast) and cost (the cheap) are fixed — the business wants everything they specify. There’s no wiggle room and nothing to negotiate.
You’d think it would be obvious to anyone who thinks logically that such a project is a disaster in progress. The effort has failed before it begins — management just doesn’t know it yet. Something has to give. There has to be flexibility somewhere. Every non-trivial equation needs a variable.
Do you want it good, fast and cheap?
Businesses can have it all if they compromise on scope. They must be: willing to sacrifice some features; willing to scale back some functionality; willing to say no to customers and prospects.
Saying ‘no’ may be particularly tough but the reality is that customers are not always right. At times, they have unrealistic expectations about what can be done, when it can be done and how much it will cost. It’s our responsibility as subject matter experts to educate people and guide them toward realistic expectations.
- People frequently don’t know what they want. They only think they do. Customer opinions are useful but not reliable indicators of what matters.
- Everyone harps on quality but few people can articulate what it is. Quality needs to evolve along with the software. It’s never great in the early stages.
- We want what we want and we want it now. Time is money right? If you want it — everything — fast, be prepared to spend money — lots of money.
- Budgets sound good but if you don’t really know what you want or how good it needs to be, how can you establish a realistic budget? (As an aside, we spend a lot of time talking about value. Guess what? If you can’t establish a realistic budget, you can’t establish value either.)
Software can be good (even great), built quickly and delivered inexpensively if managers and end users are willing to accept reality. The best way for a software development team to deal with reality is to deliver early and often. Prioritize features, maintain high quality standards, and create rapid feedback loops with the business.
If you run out of time and/or money, you’re done. If the feedback has been positive, the business stakeholders will allocate more time and money. If the feedback has been negative, find something else to work on.
Image Attribution: I, John Manuel Kennedy T.