Why Companies Become Stuck In Bad Coding Loops — And How To Escape ThemTechnical Debt
Originally published on Forbes Technology Council.
Imagine a multimillion-dollar company with a lot of software. The sense of moving fast is in the air, but nothing seems to be moving forward. Deadlines are missed, bugs are found, business sometimes comes to a standstill and releases take too long to go out.
How did they get here?
The Downward Spiral
After celebrating series B funding, the company’s first goal was to make the product more feature-rich to meet investors’ expectations. They kickstarted hiring. They moved fast. Along with the front-end and the back-end developers, they hired a few developers specializing in infrastructure as code. Developers worked hard, adding one feature at a time, to meet KPIs and climb the tech ladder.
But here’s the catch: To meet deadlines, shortcuts are taken. Doing things the right way will take more time. The longer-term consequences of these shortcuts are explained away without putting in the effort to figure out how to do it right and do it fast. They never prioritized code fitness, so it’s taking them too long to roll out new changes. In most cases, they can’t pinpoint the “why.”
Luckily, they still have money, so they hire more people to move faster. The urgency is too high, and the hiring needs to catch up. The VPs and the CXO push the hiring managers to move fast. They, in turn, push the interviewers for better outcomes by asking questions like, “Why are you rejecting all the candidates?”
Now, when the interviewers find themselves on the fence, they might just hire candidates they are uncertain about. This slowly lowers the bar. With the bar lowered, the company has very few people who could be better than the first-generation (founder-generation) engineers who cared about their work and the company’s direction.
Finally, this leads to the overwhelming accumulation of bad-quality code—and a company that still hasn’t scaled to the next level.
The Two Loops Of Bad Coding Practices
When it comes to coding, moving fast can sometimes lead to bad decisions that lead to worse decisions. This process creates two loops that are very difficult to escape once you’ve entered them.
The first loop generally looks something like this.
Companies hire software engineers to write code.
The more code you write, the more technical debt is created (sometimes called entropy).
The more entropy in the system, the harder it is to write new code, making everyone slower.
The slower the progress, the more you hire.
This leads back to step one.
In order to solve the first loop, companies often create the second, equally difficult-to-escape loop.
The slower the progress, the more pressure is put on recruiters to hire faster.
The more hiring pressure on everyone, the more they lower the bar of hiring.
The lower the bar, the lower the skill level of hired engineers.
The lower the skill, the more bad code practices accumulate in the system.
As the quality of code goes down, it makes you slower.
This leads back to step one.
How Can Companies Break Out Of These Loops
These loops take a long time to form, sometimes years or decades. Once your company has found itself in these loops, getting out of these is neither easy nor fast. (Sorry, there is no magic pill for bad code.) Like your own health, software health also lives by the maxim: “Prevention is better than cure.”
But if you have already entered the spiral, here are a few steps that can help.
1. Freeze; stop writing code. Of course, this is not entirely possible, but you can freeze hotspots of code in time. You can stop these hotspots from growing and then write new code in a new place. For instance, LinkedIn’s Operation InVersion was a complete rebuild of LinkedIn’s creaky, outdated software infrastructure, where all new feature developments were frozen for two months.
2. Raise the hiring bar. Pivot your hiring practices. Reinforce the idea that the talent acquisition team focuses on quality candidates.
3. Upskill the developers. Invest in the L&D of teams. Align the knowledge base with current and upcoming trends.
4. Reduce technical debt. By having a mission-critical task force, you can eliminate bad code at the most fundamental level and prevent it from recurring. Create a road map, and possibly a task force, to fix the debt and upskill the team. (Refer, for example, to the book, The DevOps Handbook: How to Create World-Class Agility, Reliability and Security in Technology Organizations.)
Modernizing software systems is a large subject, and is not an exhaustive list of problems and solutions. When looking at your company’s concerns, you can use this method to suggest more influencing flows and stocks in order to have a conversation on how it can help the system reduce technical debt.