Continuing on the theme that David Harvey talked about, where one can and should be in favor of ‘craftsmanship’ while being skeptical of Software Craftsmanship (TM pending), I’ve created a category to that effect, and want to continue the discussion here.
Jan Van Ryswyck (hope I spelled that right, he doesn’t have an easy last name like “Nuechterlein”, further mentioned as “JVR”) has a post up on Elegant Code where, inspired by a tweet, he discusses the division of software developers between laborers and professionals. As I’m going to paraphrase the hell out of it, so you might want to read the original, as paraphrasing necessarily tends to lose something in the translation.
JVR begins with the usual execrable dichotomy between the ‘laborers’ and ‘professionals’, where the former are unintelligent and mindless and don’t care about code standards, while the latter are “very passionate about their craft, that want drive innovation and also want to continuously learn and improve. If you’re a developer and you’re reading this blog post, you probably fall into this category of developers.” The former can be characterized as “Nine to five, no thinking, narrow focus, like soldiers in the military obeying orders to make a big mess.”
It’s hard to even begin to describe how many ways this dichotomy sucks. The insult to the military is the least of it, but is eye-opening. The last thing the military needed when the beaches of Normandy were stormed were soldiers not obeying orders. Ignoring that though, there seems to be this continual basic idiotic thought that software developers who don’t care to spend every waking hour outside of the normal working hours of a business reading blogs (for God’s sake, blogs?) are somehow mindless laborers. In just about any industry, there is a fact that you have to spend hours outside of normal working hours to get ahead and improve yourself. But this idea that you somehow rise to the level of being a “professional” because you read ElegantCode blogs is just self-serving garbage.
The Easy Target: Management
Next, JVR moves onto a very easy target, one that almost anyone, at least without careful thought, is going to feel a visceral dislike of, and that’s managers. Oh, the poor Software Craftsman, all they want to do is improve their craft, only to be stymied by those managers!:
“Although they don’t get their hands dirty with writing software, most managers do feel compelled to impose all kinds of political decisions regarding business requirements, software architecture/design, tools and technologies to the development teams they are ‘managing’. I for one want to make it clear that this has to stop. In order to lift this industry to the next level, we as software professionals need to free ourselves from the leash that is currently being held by management. “
Who can’t agree with that? Um, yeah.
Without a doubt, there are places and situations where you find yourself dealing with incompetent managers. Everyone has been there and done that. But, anyone with any real experience in software development knows that good project managers play a vital role. In one of the environments that I work in, we have c# code, java code, SQL Server code, Oracle code, and other processes that are part of the software development process. No Software Craftsman is going to be able to manage the interplay between the groups that manage these different processes, as the Software Craftsman is too busy feeling good about themselves reading blog posts.
In fact, the JVR posited Software Craftsman disdains that sort of thing. He’s too busy “improving his craft.” Which is something the good project manager has to deal with:
“Any business that wants to survive in this hard world economy and even wants to get ahead of its competition has to free its professional developers from management. It’s that simple. “
Exactly wrong. Management needs to protect the business, the business that wants the software they need to do their job, from the whims of the Software Craftsman who changes what he thinks is good software development practice based on the latest blog he read.
Software Craftsmen aren’t Doctors
JVR thinks this is a compelling picture:
“Can you picture lying in an operating room when a manager in a suit bursts through the door, yelling at the surgeon that he’s not allowed to use technique xyz to save your live?”
The hubris of this is amazing, and funny. The Software Craftsman is really saving the life of someone? Yeah, not really. And as an analogy, it doesn’t work either. The Software Craftsman cares more about his self-development than he does about helping the business. He’s more about “screwing up the courage” to dump .NET development altogether and moving onto Ruby, or whatever the current fad is.
It is precisely because of this that the Software Craftsmanship movement is bad and should be rejected. The individual Software Craftsman doesn’t care about the legal liability in a corporation for using unapproved Open-source software, he’s more interested in himself. The individual Software Craftsman doesn’t care about building consistent software that can be used across a group, as he’s more interested in following whatever fad catches his fancy. The individual Software Craftsman doesn’t care about any of that.
Summary: Embrace craftsmanship, reject the Manifesto
Building well-written and maintainable software is hard to do. It requires a lot of effort across many individuals across many teams. There are established practices of how this can be done, however difficult it may be.
Software Craftsmanship, at the manifesto level, is a bad idea, and should be fought against.