What is software craftsmanship?


In my first post, I stated that this blog will center around the idea of software craftsmanship. This term may not be one that you’re familiar with. It’s difficult to define, with people often relying on describing the characteristics of a software craftsman instead. For a quick reference, you can check out the Wikipedia article, or the Software Craftsmanship Manifesto, as quoted here:

As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:

  • Not only working software, but also well-crafted software
  • Not only responding to change, but also steadily adding value
  • Not only individuals and interactions, but also a community of professionals
  • Not only customer collaboration, but also productive partnerships

That is, in pursuit of the items on the left, we have found the items on the right ot be indispensable.

I see software craftsmanship as an echo of the agile movement. The people behind the agile movement rebelled against traditional structured software processes. They said, “But we build software for human beings!” And they started working closely with the people for whom they wrote software. This is a positive thing. But it isn’t enough.

A software developer can plateau in his or her career after reaching a certain point. This type of developer feels he knows enough and always draws upon the same well of techniques. In contrast, a software craftsman — whether an apprentice, a journeyman, or a master — knows that there is always room for improvement. He always seeks to grow, to improve, to be better than he was yesterday. This focus on self-improvement and professional development makes him an indispensible team member, leader, and teacher.

Personally, I strive to improve my work every day. I don’t mind refactoring code if I realize it has any distinct smell to it. I’ll even throw out work that is subpar. I study elegant code and try to figure out just what it is that makes it so. I know that I’m not the best at my craft and am not afraid to ask for help when I need it. I also read constantly, so that I may have more knowledge to draw upon. I can’t turn myself into a master over night, but with many small steps, I know I will make it there eventually.

If you’re a software professional, you should seek to move from the ranks of software engineers or software developers, and join the software craftsmen. It will make you a better developer. If you don’t already, you will learn to take pride in what you do. What you’re building is beautiful, and could be something only you can do.

Where can I start?

If you’re interested in knowing more, you can find some introductory material at the following links:

For a more in-depth look, check out the following books:


Do you believe software craftsmanship is something that everyone should strive for? What are some good examples you have seen of software craftsmanship? What are you going to do today to improve your software craftsmanship? Share your thoughts in the comments!

Disclosure of Material Connection: Some of the links in the post above are “affiliate links.” This means if you click on the link and purchase the item, I will receive an affiliate commission. Regardless, I only recommend products or services I use personally and believe will add value to my readers. I am disclosing this in accordance with the Federal Trade Commission’s 16 CFR, Part 255: “Guides Concerning the Use of Endorsements and Testimonials in Advertising.”

Welcome to my new blog!


Blogging has been something of a neglected hobby of mine for many years. I have started several blogs that never progressed past a few posts. Eventually, I scuttled each one, vowing to relaunch with a passion. This is my latest attempt at a blog, without including any of my earlier writings.

I struggled with the topic of this blog, as I have many interests that do not have overlapping audiences. Because my life primarily revolves around my work at the moment, I have decided to write about software craftsmanship, with posts broken into a few separate categories:

  1. Tutorials and informational posts. I have learned a lot about the systems that I use every day by reading tutorials written on blogs. I want to give back to that community by writing similar articles. I am working mostly with Ruby (and Rails), so gems that I find useful will be the initial focus of this category.
  2. Professional development. I am someone who really enjoys learning different things that help me to better myself. Through the lens of software craftsmanship, I will write posts about continuous education, team dynamics, leadership, and productivity, and how you can improve your skills and be the best software craftsman you can.
  3. Philosophy. I find that software craftsmanship has a lot of inherent philosophy; whether it’s the intricacies of open sourcing your code, different software methodologies, or the ethics of writing software, software craftsmen need to be aware of the ramifications of their work and how the world views it.

I plan to write periodically, though I haven’t yet decided on an update interval. Ideally, it will be three times per week, but as my time shifts this will likely waver, as it is not my primary project. I will work on the format for the blog as well, perhaps open sourcing the code behind it at some point with information on how to use it for your own platform.

Please offer me feedback by commenting on the posts. I want to hear your thoughts on my writing, what you find useful, what isn’t useful, and where I go astray. I’m looking forward to hearing your opinions, whether they align with my own or differ significantly.