If you run a small business, avoid in house code.
Almost everyone I know that starts a smallish but successful business eventually calls me with the same question: should I build an app? These people run yoga studios with growing followings, movie production companies, high end coffee shops, window shutter companies, and all sorts of other businesses from the varied quilt work of the modern economy. They mostly want to improve their customers’ experience, and don’t want to be tech companies. My answer is always the same: if you have to ask, you shouldn’t try to build a custom app.
My goal here is to explain why. It comes down to three main truths about custom software.
1) It’s expensive, not just in money but in organizational capacity
Building good software is a hard, complex task that requires lots of patience and planning. This is true when you have a full set of requirements and you understand exactly what your software must do — which most small businesses don’t. And therein lies the biggest danger.
There is a tendency in organizations to try and cure operational inefficiency with software. Employees and business owners tend to think that they can fix a slow onboarding process with more shortcut buttons, or disorganization with a few extra features that preprocess data. This is almost never true, and instead ends up distracting the business from improving its process and core competencies. Furthermore, because software just formalizes and mechanizes business processes, it’s possible to just bake bad processes into stone, and in effect business owners have just spent a lot of money to do disorganized things faster. This leads us to our next problem.
2) Custom software is inflexible
Software, at its core, is about the idealization of a process. The narrower and less complex the process is, the faster and more beautiful the software. This is why unix command lines were originally designed as dozens of tiny programs that could feed output to each other.
The downside is that once you have written a process into software, it is expensive to change it. Often an entire piece of code must be rewritten and retested, with those changes causing a cascade of adjustments across all the other pieces of code in your app that depend on it.
That means that when your model changes, as it often does as businesses react to customer demands, custom software has made you less nimble. You have overinvested in your present process, and it’s more expensive to change it.
3) The complexity snowball is unavoidable
Modern applications are not static. The business use cases are in constant evolution, and the operating systems, phones, and web browsers that the application must interact with are in constant flux as well. This drives an unavoidable increase in the complexity and size of the codebase over time, degrading to a web of unclear dependencies and redundant code absent an active and experienced project leader. The net effect on the business is that you are never done building the app. The app is under construction until it begins its sunset period. Over the lifetime of the application, because of the increase in complexity, the cost of adding new features also increases. This means that cost grows year after year, and the software has to contribute to a similar growth in revenue to be worth maintaining.