Wednesday, June 27, 2012

Software Craftsmanship: The New Imperative, by Pete McBreen

Just recently I finished my first reading assignment from the 8th Light library; Software Craftsmanship: The New Imperative, by Pete McBreen. From what I have heard about, been told of, and have seen from 8th Light; this book presents the ideals, practices and dedication to the craft that they work very hard to achieve. The underlaying ideal this book presents is the choice we will all face at one point in time, whether you write code, design or employ those who do; Is mediocrity acceptable?

The Gripe

To get it out of the way early; the aspect of the book that I found little interest in was authors dive into the world of software engineering. I understand the need to highlight the issues and problems, as there are some pretty strong mis-conceptions in the development industry having a one and only one way to do things. These sections mostly served as amusement to me, reminding me of the annoying aspects that have plagued me in one form or another in the recent past. The gripe here, is really that I wanted more chapters on craftsmanship and less on mainstream norms.

So what's with this craftsman stuff?

If you are reading this, you most like are a nerd on some level. Being a nerd, the term craftsman has already been hijacked by the multitude of games and movies out there as being some blacksmith, whom forges a shiny magical sword; in which some hero is going to find and then go impale some evil stuff with. I don't think you are that far off in thought here.

Now before you take that the wrong way, stop and look at the development industry. In my limited experience; I've seen hiring practices shift from trying to get a couple awesome developers to getting as many minimum wage interns that a building can fit. I've seen tests get ripped out of projects to speed up future development. I've seen an abundance of highly rushed code. I've seen amateur wrestlers spend hours everyday researching their moves for the next match. I've seen reporting get shut down so it doesn't incur technical debt while moving to the next project. The list goes on, and I haven't really been around the block all that much. I can only imagine what your list is like.

From what I have seen, the craftsmen who strive to better themselves above all else, is the rare magical sword waiting to be wielded. All nerdiness aside, very few of us will ever get to the point where we can tell something is just off with our profession. Sadly fewer will realize they can do something about it. A software craftsman is just a developer who puts their reputation on the line when they select a job, that care what happens to it during and after the project has completed, and they want to use every job as a stepping stone towards mastering their craft. It's oddly surprising that such a vital industry has such a low entry point and average expertise level.

The guts of it

Setting aside the look at the industry and its norms, what really struck me in this book was the aspects of craftsmanship applied too developers. A craftsman was someone that didn't just make chairs (or what ever their profession had them make), they made amazing chairs, tailored for the family that was going to use them. They put everything they had into making the furniture, knowing full well that their work was a permanent representation of their skill. It would act as their resume for anyone who ever used it. And if it was amazing work, it would be the best marketing money can buy. As professionals, why wouldn't we want that for ourselves?

Guts: The User

One of the most ignored aspects of craftsmanship in our industry, is developing systems for your user, not just against a task list. Those emails you get after you've launched your code, is the dialog you missed when you were developing it. The more you can understand what the user is actually going through, the better you can provide the services that they are paying you for; to develop a system for there use. The ultimate goal here is communication, early and abundant.

Thankfully, the agile movement has taken amazing steps in this direction. With short development cycles, you can get something infront of the user to start breaking sooner rather than later. The more they start using and affecting your development the better the communication becomes between you. These quick responses to the users troubles, build a level of trust that you won't normally see in development shops. Most of the time the users stop being the annoying part of the job and become a welcome and vital part.

Guts: Growth

Another very important aspect of craftsmanship is the want and need to achieve something greater than you already can. A craftsman is defined by their work, and the only way to produce better work, is by becoming a better developer. Years are spent learning, not days. Knowing that an idle understanding of individual areas, lowers the quality as a whole. While in the opposite direction, over specialization leaves a developer with a golden hammer, the craftsman seeks a well rounded set of expertise.

In some ways, this ideal will be the hardest for most people to accept. In our industry today, the focus is to turn out certified specialists over night and fill the hole we have of qualified developers. Although this mentality is very much the problem, almost all of the companies out there want the very thing craftsmanship contradicts, warm bodies trained in the use of language X and practice Y. Walking the path of craftsmanship not only has you seeking to better yourself, but also seeking a better environment.

Guts: Environment

Can you imagine working at a place where at any moment, without notice; you could get up from your computer to go on some nerdy magic sword searching quest... yet have no worries about who picks up your work? Knowing that whom ever sits down in your chair will finish what you started, to the same level of quality that you would expect of yourself. I know you can think of a variety of people that you've worked with, that would wouldn't trust with your work. But how many people do you know that you could trust to do the job correctly? Craftsmanship is very much about building up those around you and environment you work in.

To make sure that they can rely on and trust their workmates, craftsman seek to teach as much as they seek to learn. When cultivating a team, a craftsman carefully picks apprentices and other craftsman who strive to for the same goals in quality and care. Knowing that everyone's background and skills are different, it benefits to share as much knowledge as they can. After all, the apprentice when they are ready to do so, will one day replace the craftsman. Through this transfer of responsibilities they tie their reputation into the craftsman, and craftsman into theirs.

To be continued...

For me this book really brings forward some ideals about our industry that I have been wanting in some form or another for a very long time. In the past I've had some great mentors and some pretty cool environments, but with my particular mix of talents, most have no idea how to fit me in to their plan. With craftsmanship, it's not about a company or employer's plan, its about the plan the craftsman has. The very idea of a craftsman's diversity, that craftsmen build their environment, and the acceptance that it takes a lifetime to truly master the profession suits me just fine.