Disenfranchised with Software Craftsmanship?
I consider myself to be a software craftsman as I strive to deliver software that fulfills its purpose, is easy for others to understand and maintain, and is supported by tests but being a craftsman is not required to be successful as a software developer so should you care about being a craftsman?
For a while I have been becoming a little disenfranchised with the notion of software craftsmanship because around me there are some products that make it to market and are successful, even popular, and yet under the covers the code is in my opinion (and probably in the opinion of craftsman) very bad. I have been disenfranchised because around me there are some developers that “appear” to not know or possibly not care about code that is easy for others to understand or maintain or supported by tests, yet they are hired and paid roughly the same as me. Certainly the “gap” between developer and craftsman in pay is negligible. I have been disenfranchised because the majority of companies creating software that I have worked with “appear” solely focused on getting the product out regardless of the underlying implementation, even if the current implementation and practices slow that delivery down, or effect the quality of the resulting product and the cost of maintaining it.
Getting the product out to the customers is a number one priority and I certainly agree with that, I would not change this priority as that isn’t realistic. This reality is why I choose to do things using Agile XP practices. My conundrum about software craftsmanship is not about a Utopian ideal or a desire to stop the world while I make everything shinny and perfect. I don’t think I am alone in wondering about this situation. My conundrum is both of a personal and a professional nature. Personal in that I wonder if I should I care about learning and improving my skills and professional in that I wonder if I should say or do anything to instill craftsmanship on the projects I am on, especially when craftsmanship isn’t a necessity for success.
The answer or the path to it is intent. What is my intent in wanting craftsmanship? On one level wanting craftsmanship is selfish because I want to work with code that is well crafted and because I have worked hard to be able to produce well crafted code and I want you to do the same. On another level I would like to help others understand what makes well crafted code and the benefits that come from it. While this is still selfish the outcome can benefit more than just me. When working on a project my intent with craftsmanship is to create the most value possible.
I really like to write code and I will always look to improve my skills, it’s a passion that hasn’t wavered for the last 25 years. When on a project I will be a craftsman and when the needs of the project demand deviation from craftsman like practices then I will put out a quick hack with a clear conscience. Should I say anything when I see code that could use a little craftsmanship? This depends on what the team consensus is about its practices and if craftsmanship is aligned with the customer’s expectations, after all the Customer and delivery must come first.
