I keep getting this question from non-techies and techies alike. Since I keep referring to myself in this manner, it is only fitting that I explain it. I will explain the simple version of it here, and then expand upon it in the next few posts.
To get started let's look at an analogy. Have you ever seen a truly beautiful piece of furniture in a magazine or a website? You know the furniture that I'm talking about, the kind that always looks good. Take for example this Ethan Allen chair from above. Sure that was created through a corporate process as it is massed produced, but to start with its a little more personal.
A designer comes up with an idea, a concept, maybe a drawing or two. It's concept of how a chair will fit into a larger collection. The designer does not know how to build the chair, she just knows what feels like it will be comfortable and look good.
This is where the Craftsman comes in. A good craftsman will work with the designer to understand her motivation for the design of the chair. He'll discover why she designed it a particular way. In this the craftsman is understanding how the chair will be used and how it supposed to make the customer feel.
He'll then painstaking look at how to build the chair from the raw materials. Choosing the woods that will support the weight. Looking at the different finishes to protect the wood. Work through the various building procedures that will be required. All the while verifying that it can be built to meet the design. If any point in time it cannot, he works with the designer to adjust the design to meet the building constraints while keeping the overall feel, fit, function, and form of the original design.
He then goes about building the chair. He takes the time necessary to make sure each piece is properly built. Defects are found and removed. Issues are discovered and corrected. All the while, he is refining the overall process. Developing a building process that can be handed off and delegated to his team.
When he is done, he takes the chair to the designer and instead of just look at it. They sit it in it and see how it feels. They take it to customers and have them sit in it and see how it feels. They make sure that the chair not only looks good, is easy to build, and it also is comfortable to sit in it.
The Craftsman does not just build a widget and hand it back. He takes pride in the process of creating. Making something of true value that the client and the customer both are happy with.
So what is a Software Craftsman? We are very similar, though we don't always have the ability to show our products as easily.
We also work with our designers or directly with our clients to understand the motivation. We need to know why they need to build this particular software so that as we develop it, the assumptions that we make are always in alignment and supporting the overall vision. We also will challenge that vision to make sure it is clear with the client as to how the software will provide value to the users.
And like the Furniture Craftsman, we see the product all the way from the concept to testing it with real users.
We have encapsulated this into the Software Craftsman Manifesto:
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 to be indispensable.