What is Software Craftsmanship?
Table of Contents: Definition – Key aspects – Craftsmanship over crap – Manifesto – Craft or engineering discipline – Notes
Software craftsmanship – software development as a craft
Software craftsmanship – alternatively known as software crafting – is a movement that sees software development as a professional craft. The aim is to raise the profession of software development to a higher level, to promote the development of readable, modifiable, extendable and maintainable code and to encourage productive exchange with and between software developers.
The movement builds on the principles of the Manifesto for Agile Software Development and expands on them by focussing on professionalism and the skills and working methods of developers. The focus is on continuous improvement and the creation of added value beyond purely financial aspects.
Key aspects of software craftsmanship
Software craftsmanship attaches great importance to high code quality. It is about writing clean code that is neat, maintainable and well tested. Proven practices such as test-driven development (TDD), pair programming and refactoring are used to achieve this.
Another important aspect is continuous learning and improvement. Software crafters strive to constantly improve their skills and learn new techniques. This includes reading specialised literature, attending conferences, training courses and exchanging ideas with other developers.
Mentoring and knowledge sharing also play an important role. Experienced developers support their less experienced colleagues and help them to further develop their skills.
The professional responsibility of developers is also a central aspect of software craftsmanship. They are responsible for the quality of their work and should feel obliged to deliver software that meets requirements and is sustainable.
In addition, close co-operation with customers is encouraged. The aim is to ensure that the solutions developed meet the customer’s needs and offer real added value.
Software craftsmanship is therefore an approach that emphasises quality, continuous learning, knowledge sharing, professional responsibility and close collaboration with customers. These principles ensure that high-quality software is developed that meets customer requirements and is sustainable.
Craftsmanship over crap
The phrase ‘Craftsmanship over crap’ is a concise and provocative statement that emphasises the importance of quality and care in software development. It comes from Robert C. Martin, one of the 17 first signatories of the Agile Manifesto and should be included as the 5th value in the manifesto.
What does Craftsmanship over Crap mean?
- It is about developing software with high quality instead of focussing on quantity or speed of production. Instead of working quickly and carelessly, the focus should be on carefully designed, well-tested and maintainable software.
- It’s about working carefully and acting professionally. Developers should see themselves as craftsmen who take pride in their work and set high standards for themselves.
- ‘Crap’ stands for bad, unstructured and difficult to maintain code that causes technical debt. It is encouraged to follow best practices and minimise technical debt to create stable and maintainable software in the long term.
- High-quality software is more sustainable and easier to extend or change. It is better in the long term to invest more time and effort in the quality of the software rather than favouring short-term solutions that cause more problems later.
- Quality has a direct impact on user satisfaction. Well-developed software that works reliably and is easy to use leads to a better user experience and therefore to more satisfied customers.
The statement also appeals to the professional pride and ethos of developers. Developers should be proud of their code and see their work as an expression of their craftsmanship.
To summarise, ‘Craftsmanship over crap’ sums up the core idea of software craftsmanship: Developers should strive to create high-quality, well-designed software, rather than quickly and carelessly producing solutions that do more harm than good in the long run.
Manifesto for Software Craftsmanship
Robert C. Martin’s proposal to add a 5th value to the Agile Manifesto was not raised.¹ Instead, the Manifesto for Software Craftsmanship saw the light of day in 2009. It has been translated into 13 languages² and has since been signed by more than 36,000 people worldwide³.
It reads as follows:
Manifesto for Software Craftsmanship
Raising the bar.
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.
In summary, the manifesto emphasises that it is not enough to simply deliver functioning software. Rather, the software should be well designed and of high quality. Continuous improvement and the creation of added value are also emphasised. It also emphasises the importance of a professional community and productive partnerships.
Why is software development a craft?
Software development can be considered a craft for the following reasons:
Similar to traditional crafts, software development requires continuous honing of one’s skills. Developers must constantly improve their knowledge and techniques in order to create high-quality software.
Software development requires creative thinking and the ability to solve complex problems. Developers must design and implement innovative solutions, similar to craftsmen who create individual and often unique works. In software development, customised solutions are often developed that are tailored to the specific needs and requirements of the customer. This is similar to the work of a craftsman who creates customised pieces that meet the specific wishes of their customers. Software developers, like craftsmen, become masters through constant practice and repeated application of their techniques, as well as through continuous learning and trying out new methods.
Good software requires care and an eye for detail. Developers must take care to write clean, maintainable and well-structured code, much like craftsmen who value precision and quality in their work. To do this, software developers use a variety of tools and techniques that they must master in order to work effectively. Just as craftspeople use specialised tools and methods, developers use different programming languages, frameworks, development environments and best practices.
Last but not least, in many trades, knowledge is passed on through direct instruction and mentoring. Experienced developers often act as mentors to less experienced colleagues, sharing their knowledge and helping them to develop their skills.
These aspects emphasise that software development is more than just writing code. It requires dedication, passion for quality, continuous training and a deep understanding of the craft itself. Software development is a creative process that requires both technical skill and craftsmanship.
And why is software development (also) an engineering discipline?
Despite all the enthusiasm for software development as a craft, there are also some arguments in favour of viewing it as an engineering discipline:
Engineers use systematic approaches and proven methods to solve problems. In software development, similar principles are applied, such as requirements engineering, design patterns and architectural styles, to develop software in a systematic and structured way.
Engineering disciplines are also based on scientific principles and theories. Software development uses concepts from computer science, such as algorithm theory, data structures and complexity theory, to make informed decisions and design efficient solutions.
Software projects require detailed planning and effective project management, similar to engineering projects. Techniques such as the waterfall model, agile approaches such as Kanban or Scrum are examples of approaches for successfully organising and completing projects.
In engineering disciplines, quality control and compliance with standards play a central role. In software development, there are standards and best practices, such as code reviews, unit testing and continuous integration, to ensure the quality of the software.
Engineers design systems that are scalable and maintainable. This is also very important in software development, especially for large and complex systems. Architectural principles and design patterns help to design software in such a way that it is easily expandable and maintainable.
Engineering projects also often require collaboration between different specialisms. Software development projects often involve collaboration between developers, designers, testers, system architects and other stakeholders to deliver a successful product.
Engineers need to identify, assess and manage risks. In software development, this is achieved through techniques such as risk analysis, failure mode and effects analysis (FMEA) and bug tracking to recognise and resolve potential problems at an early stage.
Detailed documentation and traceability are essential in engineering projects. In software development, the documentation of requirements, design decisions, code and tests is of great importance in order to facilitate the maintenance and further development of the software.
These aspects show that software development shares many of the characteristics and principles of classical engineering. The application of scientific methods, systematic approaches and standardised procedures ensures that software is robust, efficient and maintainable. Therefore, software development can be considered both an engineering discipline and a craft, depending on the perspective and focus.
Is software development perhaps even more of an art than a craft or engineering discipline?
Notes:
Feel free to share or link to the content on this page.
[1] Before Robert C. Martin formulated ‘Craftsmanship over Crap’, Jack W. Reeves published What is Software Design in 1992 and prescribed software development as a craft rather than an engineering discipline.
This was followed in 1999 by The Programatic Programmer, From Journeyman to Master by Andrew Hunt and David Thomas. They described how programmers go through various stages from apprentice to master during their career, much like craftsmen in medieval Europe.
And in 2001, Pete McBreen published the book Software Craftsmanship, The New Imperative, which also emphasised the craftsmanship approach.
[2] Manifesto for Software Craftsmanship. Raising the bar.
[3] Graphical representation of the number of signatures of the manifesto.
And here you can find additional information from our Smartpedia section: