#6 The “Software Craftsmanship”: a pragmatic Agile
Lionel, software developer at Technology Partner is a member of the “Software Craftsmanship” movement. He will tell us about his interest in the concept based on a book by Sandro Mancuso: The Software Craftsman.
In general, this book presents a concept, defined as a state of mind where software development is compared to a craft profession. Like any craftsman, its main role is to solve a problem using specific techniques. In this way, craftsmen are differentiated by their experience and the way they value it.
Why tell us about the book “The Software Craftsman“?
This book speaks in a clear-sighted and pragmatic way about subjects that I find important, such as the role of a developer, how to approach the business or even about continuous improvement.
In the preface to the book, Robert Martin describes it as “a fascinating alternation between autobiographical anecdotes chronicling the author’s vast experience and authoritative recommendations based on his experiences“.
This article will summarize the main points that I believe are essential.
What is Software Craftsmanship?
The definition of this concept is subject to debate in the community but the author gives the following personal definition: “A long journey towards mastery. A state of mind where the developer chooses to be responsible for his own career, constantly learning new tools and techniques and seeking improvements. Software craftsmanship aims to put responsibility, professionalism and pragmatism at the heart of development“.
As a prelude, the author presents the synergy that this movement has with Agility. According to him, these methodologies make it possible to “build the right product” and doing so in the spirit of “Software Craftsman” makes it possible to “build it well“.
Integrating Agility into a development team sometimes encounters pitfalls. Many companies have faced difficulties in radically transforming their processes using Agile methodologies. According to Sandro Mancuso, Agility should not be questioned because a methodology will only interact on processes and not on the Human. In this context, it is the corporate culture that must be modified according to the values of Agility (see Agile manifesto) and the spirit of software craftsmanship.
In parallel, the software craftsman’s manifesto is as follows:
“ 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.”
At first sight, these points seem a little obvious but through his book, the author explains many situations where some of these points can be forgotten and refines his view of these different ideas.
Why is it said that Software Craftsmanship highlights good practices?
The concepts of continuous improvement apply both to the general work of a software craftsman and to his technical tasks.
Like a lawyer who gives personalized advice, a developer will explain the ins and outs of his work as well as the advantages and disadvantages of his technical choices.
Being professional and satisfying your customer does not simply mean developing the product as requested. It is also about taking on a role as an advisor and communicator by helping the client understand his or her objectives and how to achieve them. In his book, the author argues that it is important to assume this role for a profitable and effective collaboration for all.
As far as technique is concerned, he suggests above all to be pragmatic. The implementation of a tool or practice has no value in itself but should make it possible to accomplish a task in an optimal way. If not, it is probably not the right tool.
In terms of practice, he insists a lot on two concepts that speak to me a lot : re-factoring and Test Driven Development, which I will develop below.
What are these two concepts and what are the links with development?
In this book, I found a very good argument to justify re-factoring in the form of the following metaphor: “Like a garden, the code needs constant maintenance. With basic and regular maintenance, the garden will always be beautiful, but if it is neglected, the effort required to restore its splendour will be much greater.”
It is not a question of “correcting bad code” but simply of keeping up to date with the latest standards. It is not a matter of “correcting a faulty design” but of ensuring that the addition of new functionality is done taking into account the current environment. Then, to update it if necessary in order to keep a perfect design.
With regard to Test Driven Development (TDD), the main advantage of this practice is to ensure that the expected result of a feature is consistent with customer expectations. In addition, it also makes it possible to get to the point in writing the code by reducing the risks of “over-engineering” (excessive complexity of the code design).
Also, code that is too complex tends to be difficult to test, which leads the developer to reanalyze the design of his code in order to simplify it. TDD shortens the feedback loop of testing, much like Agility at the business level. As a result, our code is more refined and more easily maintainable and testable.
How will “The Software Craftsmanship” influence your career?
I think that for a young developer, understanding the ins and outs of his role, as well as how to fulfill it in a professional way, is one of the things that cannot be learned academically but rather through experience. Moreover, the observations noted in this book seemed interesting to me and will be part of what I will take into account when creating my own vision.