24. January 2023 By Mahdyar Safarianbarmi
Software craftsmanship and its principles
Are software developers simply ‘manufacturers’ or engineers? Should new software just work, or should it add value? Which is more important?
Software craftsmanship and the quality of the software
In recent years, software development as a whole has tried to use agile methods to deliver the right products. But what about quality? Software craftsmanship goes beyond software engineering. This movement indicates that the quality of the software is not to be neglected.
Developers used to be seen as the people who devoted a lot of attention to dependability, accuracy and predictability. These days, however, we know that software development is not a linear process but rather one that is constantly evolving through which customised software comes into being. This is why a new, fitting model is needed, namely one in which quality, sustainability, creativity and teamwork play a major role.
This is where the developers take centre stage. They are the craftsmen and should be proud of their work. Sustainable, high-quality customer-specific solutions are shaped by pride and a commitment to superior quality.
Principles of software craftsmanship
Software craftsmanship is a movement in software engineering. It aims to view software development as a craft, rather than a mere engineering concept. The software craftsmanship movement is based on four principles of which half the focus is on software quality and the other half on people (developer and customers).
In the Manifesto for Software Craftmanship, it states:
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. This statement may be freely copied in any form, but only in its entirety through this notice.
Well-crafted software
The term ‘well-crafted’ is a reference to quality. Yes, the software has to work – but that alone is not enough. The software not only has to solve the problem, it also has to be well-crafted. Measuring this is not always easy, and the meaning of ‘well-crafted’ can vary from project to project.
Certain basic principles do exist: complete documentation, extensible and flexible architectures, clean code and consistency. As all craftsmen do, developers also benefit from their tools. If they do not know a tool but need to learn it because it is the best tool, they learn it. That being said, developers are also responsible for what they create as well as for preventing defects.
In order to deliver well-crafted software, best practices for coding should be used. Software design principles and software design patterns are some tools that can be used in this context. There are also clean code principles such as SOLID, DRY, KISS and many others.
The added value
It is not just about making changes and closing tickets. It is much more about always trying to fulfil the customers’ wishes, identifying problems and providing new solutions. In addition to technical solutions, the overall benefit of the software should be considered and no one should be afraid to make new suggestions and bring their experience to the table.
Avoiding shortcuts and the ‘I will clean it up later’ mindset is done by keeping a sustainable pace.
A community of professionals
The software craftsmanship principle is about communication and the community of developers. If we assume that developers are craftsmen, we should accept that this also applies to other people who are involved. This is why other groups of people who are involved with the developed software also have to be treated with respect. The software we create has to be maintained later on. This maintenance affects other developers in the community. We show respect by writing code that is maintainable, flexible and fully documented, among other things.
This not only helps other developers, but it also reduces maintenance costs on the customer’s side because maintaining chaotic code means that more personnel are needed for longer periods of time.
On top of that, the complexity of the technologies continues to increase. Developers should work with one another to become successful together – the key point being the exchange of knowledge and experience. This responsibility is not limited to a team, but rather we as part of the software development community also have a responsibility to other developers. Contributing to the open-source community, being active on platforms such as Stack Overflow or writing articles and commentaries can constitute measures to share knowledge and experience. The motto is: ‘We teach everyone who is willing to learn.’
Along with sharing our own experience, we should also be good listeners. Differences of opinion are welcomed, and we learn from our differences. We are open to change and do not allow previous processes to hinder optimisation. In order to achieve this goal, we should attach great importance to transparency.
Productive partnerships
It is not about the code. It is about the customers. Customers’ problems should be solved. Therefore, it is not merely communication that is needed, but rather good partnerships are too. In a partnership with customers, we ask ourselves, ‘What can I do so that we can both benefit?’ We have to be well-acquainted with our customer’s business in order to be able to answer this question. In a partnership, our goals are aligned with those of the customer in such a way that the desire of both parties is to maximise the other’s success.
Moreover, we have to act professionally and ethically in a partnership, which is why we communicate progress to our customer in a spirit of honesty and openness.
Conclusion
There are several aspects to software craftsmanship. Dedication to producing a good product is not the only one; there is also sustainability, mindfulness and appreciation for the process. Even though software craftsmanship does not revolutionise the world of software development and also does not deliver immediate results, keeping these principles in mind over the long-term benefits everyone involved.
Are you interested in this topic and would like to learn more? I can personally recommend the following books:
- Robert C. Martin (Uncle Bob), Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall, 2008
- Pete McBreen: Software Craftsmanship: The New Imperative, Addison Wesley, 2001
- Sandro Mancuso: The Software Craftsman: Professionalism, Pragmatism, Pride, Prentice Hall, 2014
Would you like to learn more about exciting topics from the world of adesso? Then check out our latest blog posts.