There are no excuses for poor engineering in 2017.

A 3 minute read, written by Mike Carter on 2 March 2017.

Writing great code is easier than ever, and yet we act like it doesn’t matter

In startup circles, you’ll often hear entrepreneurs boldly claim their customers don’t care about code. Language choices, algorithms and technical debt make no difference to them — all care about is the quality of the product they interact with.

They’re not wrong, after all — Your customers do just want a great product. How that project works is rarely much of a concern to them, in most cases it might as well just be magic. However, what’s strange is how often these same entrepreneurs next logical leap is that product-first thinking should mean their engineering doesn’t matter.

“We’ll rewrite the MVP when we’ve achieved product market fit”, they’ll say. “We’ll refactor this when we get a spare moment”, they’ll promise. Spoiler: It won’t happen, not for a long while and not without a lot of pain. We know this to be true in most cases, and yet naively optimistic founders will run headlong into this tripwire time and time again for the sake of fast product iteration.

This “screw the codebase” approach may have worked 10 years ago, but in 2017 it’s false economy. Quick product iteration cycles are largely facilitated by great software, great data, and great automation, and all of these come about with great engineering. The key difference now is that the development and product tooling available today makes it cost effective to get on board with good code quality.

Think about it — Modern CI services make automated pull request blocking, test-running and production deployments a breeze. Features like automatic review apps mean you can have per pull-request deployments of your application in a matter of minutes. Code linting, automated dependency updating and even limited automated code reviews are all pretty mainstream and take a few minutes to set up. Virtual device labs can be spun up in seconds that allow you to run tests against many devices in parallel. Scaleable metrics, error tracking and logging are all off the shelf products now too.

A lot of the above are even one-off automations that can be reused infinitely for a small cost. Combine these with a pragmatic product-focussed approach to maintaining software quality and you’ll be paid back with interest. This payback will come through lower development spend, due to the codebase being easier to work with for your engineers; through lower support spend, due to you shipping higher quality, bug-free product; and through lower marketing spend, as your happy customers evangelise your product on your behalf, not to mention a huge boost to developer happiness. Treat your codebase like crap, however, and you can expect these trends to reverse.

I’m not saying we should demand perfection, it’s just that achieving great engineering is easier, and more cost-effective than people seem to think. Give some modern development tooling a try today and encourage your team to improve the codebase with each change they make — you won’t regret it.