Most people that work in the software development industry - especially in the video games industry - will have read or heard the following quote by John Carmack at some point in their career:
“The cost of adding a feature isn’t just the time it takes to code it. The cost also includes the addition of an obstacle to future expansion. The trick is to pick the features that don’t fight each other.”
What a lot of people do not realize, however, is that the term “features” is not necessarily referring to end-user functionality. It also refers to the effects your product may have on the end-user’s system as well as your development and operational infrastructure. Every element you add in your UI causes a more complex user experience. Every line of code that gets written needs to be tested. Every web service you add needs to be hosted. Every server you add needs to be monitored.
How does this relate to taking short-cuts in software development? Simply put, there’s a fine line when it comes to the justification of taking a short-cut now, as opposed to waiting for more bandwidth to develop it properly. There is obviously no silver bullet answer to decide when this line is crossed. But here are some questions that can help you in making a decision:
- What error conditions does the short-cut introduce and how much effort is it to gracefully handle them?
- How much effort is it to transition from the short-cut to the fully-fledged experience?
- How much effort is it to adjust your development infrastructure to support delivery of this feature?
From experience, then, everything that involves out-of-process IO (network communication, database interactions, file IO, etc) and development infrastructure adjustments tends to answer at least one of the questions with “quite some effort”. And that is the moment when your alarm bells should start to ring.