Somewhere along the way we forgot about software craftsmanship
"Ship it!"
"We're agile now, baby. Move fast and break things!""
"We measure our engineers by the impact they have!"
Somewhere along the way, in the midst of the agilification of software, or the software engineer salary gold rush, we forgot about craftsmanship.
I have been in big tech, startups, consultancies, and even government. These are all different environments with one key similarity: code quality is low, especially as of late.
Don't get me wrong, there are pockets of good code quality. Isolated instances of true care and craftsmanship. But, by and large, what I see now is people trying to ship products as fast as possible without regard for the maintenance burden 1, 2, 5, 10 years down the road.
So, what's going on? I don't truly know, but here are my top contending theories.
Perverse incentives surrounding "impact" #
Big tech is all about considering "impact" when evaluating engineer performance and making promotion decisions. Unfortunately, "impact" is almost always measured by what features you shipped rather than considering the impact your code had on the long-term maintainability of the codebase.
If you're looking to advance in your career and you want to get paid more money (nothing wrong with either of these things) then it only makes sense that you ship more features—even if the code you're committing is lower quality.
Backlog pressure #
I don't blame agile. But I do kind of blame Agile™. Now, more than ever, you're likely to be in an Agile™ environment in which you get overloaded with tasks. Should you focus on improving the quality of the feature you're working on? Or should you get on to the other 17 tasks you have this sprint?
More senior engineers may be able to push back and say, "I need to spend more time to get this right." But junior and mid-level engineers? They need to keep up to make sure they're not considered "slow."
Lower stakes #
Many of us are now shipping our products over the internet. In some cases, they're fully web-based and in other cases we can ship patches over the web. Regardless, we're hardly ever shipping out a physical CD where we have to be damn well sure the software works. We can afford to "move fast and break things."
But this also means we more readily let shortcuts and untested code into our codebases as well—things that slowly erode at the codebase's quality until we wake up one day and the whole thing feels like a mess.
No one is focusing on craftsmanship anymore #
The last point I want to make is I feel like it's been forever since I had a conversation about craftsmanship on the job. It's possible I have just found myself in the wrong places time and time again.
Or maybe, and this is something I really fear, maybe the people who truly focus on the craft of software engineering are retiring or getting run off.