Software Craftsmanship
What is Software Craftsmanship?
Software craftsmanship is a movement in the development community that emphasizes the quality and skill of individual developers. It draws heavily from the apprenticeship model of feudal Europe and Asia, providing a path to mastery where developers progress through mentoring levels to achieve better proficiency in their craft, write great code, and, most importantly, deliver exceptional value.
While craftsmanship emphasizes the developer's skill level and the quality of the code they produce, this focus on the individual can sometimes make us forget the real purpose of our work. When delivering working software that provides ongoing value to the customer, it is crucial to keep our end goal in perspective while maintaining the highest degree of excellence in our work.
Focusing on Skill
In a state of constant flux, honing your skills is as essential as having them. Craftsmanship focuses on personal growth through apprenticeships and fosters a culture of passionate people in constant pursuit of improvement. The apprenticeship model provides a path to mastery, but no final destination. This perpetual advancement of skills leads to writing better code.
Notice that my description of software craftsmanship focuses on the mastery of writing "good code" and not "good software." This subtle distinction is profound. It suggests that better code does not necessarily translate to better software.
Focusing on Vision
Building a skyscraper is hard. It requires mastery of mechanical and civil engineering, landscaping, interior design, and many other disciplines. However, regardless of how masterfully architected or beautifully engineered, it is useless without exterior doors. The only thing that matters is whether it meets the needs of the people using it.
Writing software is also challenging. Although creating a skyscraper without doors seems unlikely, it is not far-fetched to develop software with features that do not meet customers' requirements. Writing software is hard; writing software that provides continual value to end-users is even more challenging.
Finding the Focal Point
Whether building skyscrapers or developing software, meeting the end-users' needs should always be the goal. However, focusing solely on craftsmanship will not likely yield the desired result, and keeping only a vision of the solution will also fail. A skyscraper built by unskilled workers is as useless as one without doors.
Software craftsmanship is not merely shifting the focus from the software's value to the quality of code. Instead, it is a means to an end, a mechanism to achieve good working software. Without a vision, there is no path forward. Without craftsmanship, there is no means to move forward along that path. A software's value and the quality of craftsmanship are not divergent. In fact, these concepts are complementary, with each being intrinsic to good software.
Becoming a Software Craftsman
Craftsmanship is an arduous journey without a destination. However, there are regular exercises to get you started. First, practice by doing a code kata every day. Each kata should take no more than 30 to 45 minutes. Dave Thomas has a great place to start with code katas at codekata.com.
Empty your cup, or, in other words, be willing to begin again. Regardless of the years of experience accumulated, craftsmanship teaches the pursuit of improvement, and that mastery is not static; it is a continual work in progress. You cannot refill your cup until you have emptied it.
Do not be afraid to fail. Failure is an opportunity to improve. Embrace failures as learning experiences. If you cannot fail, it isn't worth doing.