Castles, Moats, and Coffee

Early in my software engineering career, I worked with experienced developers and I noticed I outpaced them in projects. I finished tasks faster. I learned codebases faster. I committed code faster. I wrote faster (read: shitty) unit tests. I was bright eyed and fearless. I (falsely) identified as the best programmer of the bunch. But, I always wondered why the more experienced developers were so freakin' slow??

I am now in my 15th year. I have stories to tell and scars to show. And yes, I develop software slower than my former self. I am now the freakin' slow developer according to my 15 year younger self.

So why am I a freakin' slow developer?

I ask more questions now than I ever did when I was younger. I want to understand the problem. I want to understand the users, the current system, past solutions, technical debt, team goals, company goals, timing, and most importantly the reason the problem should be solved. These are buried facts about a problem and require a shovel and elbow grease to uncover. And, I find surfacing these facts a more difficult task than the technical solution. My younger self didn't even know he could ask questions.

On the technical level, I also have a greater understanding of the cost to maintain software. Early in my career, I never had to maintain software because, well, I never had experience. I never experienced the difficulty of maintaining large, old, tech debt filled codebases. Now, I maintain and build solutions entirely in old codebases. These codebases make a boat load of money unlike the codebases earlier in my career. They have technical debt and requires skill to navigate and pay off those debts. The stakes are higher and more rewarding. So yes, I am slower now with these codebases. But, my solutions also make money. I don't think my younger self ever made the connection that there's more to software than committing and deploying code.

Finally, I'm a freakin' slow developer because I've burned myself on my own poorly written, unmaintainable, and buggy code. I've seen what my dumpster fire of inexperience can do – burn, baby, burn. I understand that my poor architectural decisions create difficulties for problem solving in the future. I know that hacking a solution to fix an incident means I need to remind myself to sit down and build a better solution to prevent that incident from happening again. Lastly, I support my code with on-call rotations because unsupported code is useless code. Also, I don't ever want to deploy code that can wake me up in the middle of the night. I'm not a masochist, so fuck that.

So yes. I'm a freakin's slow developer and I love it.

If I were to meet my younger self today, I'd allow him to build a castle with his code. But I'll build a giant moat with no bridges around his castle and let him burn and starve inside while I sip on my coffee.