How to onboard your new software engineers
As a start-up, taking on technical debt is as inevitable as a fresher taking out a student loan. But like a lot of students, this is the first of many debts that start piling up and unless managed properly can cripple future growth.
Here’s a great quote from Martin Fowler “Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future”
Some things to consider about technical debt which make it even more scary than financial debt.
- There is no crystal ball - you can’t predict the true cost of the debt you are taking on.
- Technical debt suffers from compound growth with an increasing rate of interest. What might take a few weeks to fix in the early days can easily take months later on.
- Some debt is never paid off.
- It becomes the excuse later down the line. Teams change, the liability shifts over time. Those that took on the debt leave and newcomers are left carrying the loan, they then use this debt as a (legitimate) excuse for long delivery times.
All said and done, as a start-up you need to take on technical debt. You need to ship product quickly, you need to test the market for product market fit, you only have a small team so you can’t deliver the perfect clean design, you need to throw in libraries (although not like they are going out of fashion) rather than building from the ground up. But all of these decisions add up and at some point you are going to need to retrench.
I tried explaining this to my wife; since we are having some building work done I used the analogy of building a house.
You can build a house very quickly. You can start building the walls, put in some doors, windows, add a roof. You move in and you love it. At some point in the future you want to have a family, you need more space so you look to build an extension. You have a bigger budget now so you hire architects, designers, structural engineers etc who take one look at the foundations, the electrics, the materials used in the original construction. And then come the deep breaths, the chin-stroking, the worried looks and the excuses. “Well ‘love’, if you’d built the house properly in the first place this job would be a piece of cake, but you don’t have any foundations, your walls are made of cheap breeze blocks and your original builders were probably better suited to lego”
And where are the original builders to help out, they are long gone, off working on a new project.
You have two choices.
You build on top of the original poor construction. You add another floor, this new construction is all properly constructed and architected but it takes twice as long to build as it should (but not as long as the alternative). When complete you still get issues, walls move, electrics keep blowing, the original plumbing starts to leak and you are constantly calling in support.
You rip down the original build (or at least some of it), ie you start again. Of course this increases your cost and your project timelines. Once you start again you build the foundations, you use the correct size boiler, the right fuse box and use bricks not breeze blocks to support the new size house, and even more importantly this supports further growth without leaving you with the headache of constant calls out to the plumber, the electrician and builders.
From our experience there is no hard and fast rule, but at some point you are going to have to bite the bullet and pay off some of you technical debt (or at least part of it). This will mean product development grinds to a halt, but in the greater scheme of things you’ll be in a better position afterwards and when you look back, you’ll be grateful.