Product prioritization is very complicated. There are many variables that need to be taken into account to figure out what to build and in what order. Unfortunately, it seems that cost isn’t taken into account often enough. Perhaps at most the superficial cost is considered, but cost can be a deep and complicated concept.
Types of Cost
Direct “Bottom Line”
- Salaries of engineers * time – This is the superficial cost. Pretty easy to calculate
- Hardware cost – An increase in load might require more hardware to handle more requests. Implementing an open source system like ElasticSearch, Hadoop, Redis, etc.. requires extra hardware to run on its own. “Big Data” processes tend to require a lot of hardware. Complicated algorithms can take a lot of CPU time and might require more hardware.
Indirect “Blood and Sweat”
- Opportunity cost – Your engineering resources can be building other things. While this seems obvious, at a larger company an engineer can be working on almost ANYTHING on ANY team. Product owners tend to only prioritize within their team, but a resource could be used on another team to build something else.
- Technical debt – Almost anything that is built (especially in a rush) will have some technical debt around it. As time goes on, the debt gets worse and everything gets harder to build on and maintain.
- Pager pain – You rushed a system out the door. It works, but it is held together with scotch tape. That system breaks every other night at 3 am and causes pager alerts. Clients don’t notice, but the engineering team sure does.
- Engineer sadness – Building annoying features can add up on engineers. You keep dumping on them, they will leave.
While the “bottom line” cost is fairly direct and measurable, the “blood and sweat” cost will cause engineering quality to go down over time and lead to engineers leaving. This indirect cost in the long run can be more expensive than the direct cost. Please think about these costs the next time you are doing product prioritization!