Friday, May 08, 2015

There is a concept in technology known by some as the Iron Triangle. I tend to approach it through the simple adage:

You can have it fast, cheap, or right. Pick two.

What this tries to make clear is that building anything requires a trade-off between how quickly you want it done, how much you are willing to pay, and how important it is to meet a need completely. The first tends to be obvious, because everyone wants everything as soon as they can get it, preferably now. The second is also straight-forward because everyone tends to think that everything should be low cost, preferably free. The last one is where things start to get complicated.

Do you value performance? Accuracy? Precision? Reliability? Maintainability? Scalability? Everyone has their own ideas about what "right" can mean, and sometimes they don't even bother to understand what they think "right" might mean before they start making assumptions. In the same way, we just assume everything is free and everything will be done right away, we blindly assume everything we produce will scale easily, work repeatedly and be easy to maintain. We might be asking for a very intricate algorithm, but we don't even bother writing down the nuances of all the conditions and error cases.

How can anyone accurately estimate the effort to build something without having a solid definition of what "done" means? If you can't take time to write down your expectations, it seems unreasonable to get upset when these hidden expectations aren't met. Simply put:

A lack of planning on your part, does not constitute an emergency on my part.

It's good in theory. But in practice, people seem entirely comfortable being completely unreasonable on a regular basis. Which I suppose keeps consultants like me in business. So no complaints here, just observations.