Hands-On Engineering Lead & Fractional CTO | Technical Coach | Guiding Organizations to Excellence
With over 15 years as a Senior …

In the world of software development, two terms often arise when discussing the qualities of experienced professionals: engineering and craftsmanship. While we sometimes use these terms interchangeably, they represent distinct skill sets and mindsets.
Emily Bache and Dave Farley published the video What Is A Software Engineer? | Craftsmanship Movement Was A “Step Backwards”. It inspired me to write this post with a different opinion: combining the two approaches leads to superior software development.

Software engineers have a systematic problem-solving approach, emphasizing precision, efficiency, and scalability. The following are some essential qualities of a software engineer:
In other words, engineers focus on building systems that satisfy functional and non-functional requirements. They achieve this by heavily relying on theoretical knowledge.
Unfortunately, this mindset doesn’t consider a crucial human element: the developer who’ll maintain or understand the code.

The software craftsmanship movement emerged as a response to the perceived decline in software quality and the industrialization of software development. It emphasizes the importance of quality, professionalism, and pride in one’s work. Key principles of software craftsmanship include:
In summary, crafters focus on pragmatism and the human element in software development. But even the most beautifully written code won’t satisfy the clients if it doesn’t perform well in production.
While engineering and craftsmanship represent different aspects of software development, they are not mutually exclusive. In fact, they complement and strengthen each other, creating a holistic approach to software development. Here’s why combining the theoretical knowledge of an engineer and the pragmatism of a crafter is essential:
Education (including universities and bootcamps) worldwide has traditionally focused on the engineering aspects of software development. Computer science programs often emphasize the theoretical and technical foundations for engineering robust and scalable systems. Here are some reasons for this focus:
While engineering focus is essential, it sometimes leaves gaps in the practical, hands-on skills cultivated through craftsmanship. Bridging this gap requires incorporating craftsmanship principles into the educational experience.
This is easier said than done. Luckier developers work for companies with a healthy culture that fosters the necessary skills. Alternatively, they involve external coaches to evolve their employees, for example, by onboarding the SW Craftsmanship Dojo®.
Unfortunately, most crafters aren’t that lucky. They gain their knowledge by learning from colleagues, reading, and personal experience. A non-comprehensive list of recommended books:
Despite every difficulty and failure, we value every drop of sweat because each is a lesson learned and a step toward becoming a better professional.
Craftsmanship isn’t a step backward. By embracing both the structured, efficient mindset of an engineer and the artistic, detail-oriented approach of a craftsman, we can achieve a balanced skill set that enhances our work and contributes to the success of our products. We should strive to integrate both qualities into our professional development to build better software and become more versatile, effective, and happy professionals.
Hands-On Engineering Lead & Fractional CTO | Technical Coach | Guiding Organizations to Excellence
With over 15 years as a Senior …