Walmart. You cringe every time you go. You went there a while ago because you saved a few bucks on an iPad mini or got a killer price on that toy you wanted to give your niece. Whatever it was, you drove yourself to a Walmart in Duarte (or wherever) feeling clever for the $50 you’re saving. Saving $50 == awesome.
But then you parked your car. You walked in. The greeter was friendly — a little too friendly and a little too young, like he was on day release. You walked to the online pick up counter (’cause you’re just that clever to order online) and spent some quality time with the cashier talking about her loser boyfriend while she got your order.
You walked out thankful you had the opportunities in life you did so you could work in the hottest industry in the world instead of punching a time clock near the baler in the back of the Walmart in Duarte.
Yet, working for that place and that ethic is what Chad Fowler suggests as a paradigm for how we should think of our jobs writing code — at least sometimes. His sub-point is that “When you create software, the purpose is rarely self-expression.” If Fowler were talking about some other industries he might be right.
But he’s wrong about the software industry. The idea of “writing code to spec” died (or is dying) with agile. In our business (in sharp contrast to Walmart’s industry), the best talent wants to work in a place where the craft is respected and where their employers don’t cut corners just because the client asks for it. Also, Fowler overlooks that clients pay for high quality code.
The first point might be the most important when it comes to the war for talent. Craft matters. Personally, I spent far too many years working in shops that cared primarily about hitting deadlines without watching the ballooning balance on the tech debt credit card. It made me cynical, to say the least.
Maybe you did too. You hopped from job to job. Nothing was ever right. The code base. The tools. The managers. The product owners. The other people on the team. Something — lots of things — always sucked. Maybe it’s just that management (and/or the team) didn’t care about the craft.
The second point matters a great deal too. In our world, even in the enterprise, where people are inundated with choices and options for how to use our code to solve problems or use our apps to experience new things, quality is often the key differentiator. And quality doesn’t start with testing; quality starts with the craft.
Fowler suggests that sometimes we need to succumb to commodity because our clients demand it. I think Fowler is proposing a dangerous and unprincipled distinction that will inevitably lead to cynicism for anyone who tries to follow. I know because I’ve been there. I don’t argue that we should always win the battle between quality and shipping product. I only argue that we’ll fall into cynicism in our profession if we don’t engage in that battle, if we don’t advocate for the craft.