When was the last time you write a code which is not protected with unit test / no refactoring? When was the last time you end up fixing a bug reported in a legacy codebase which is full of bad code? When was the last time you see a class with more than 100 lines of code?
Sounds similar? What can we do about this? Why is this bad code there first of all? Is that anything that can be done on this? How many times did you allow the code to be shipped with bugs (read as with known bugs list) to the production environment? How an ethical/professional can allow this to happen?
If you look around in other functions of working/department/domain/industry is this is allowed all the time? Did you ever notice some of the other industry craftsman-like an artist, carpenter, tailor, weaver, potter, musician, etc working way or behaviour? How much they are tolerant to defect?
Where is the craftsmanship (in software) gone? Why are we, in software acknowledged buggy products as part of life and work? Is this is not the right time to raise our bar?
If this makes sense welcome to the world of Software Craftsmanship!
What is Software craftsmanship?
Software craftsmanship is an approach to software development that emphasizes the coding skills of the software developers themselves. It is a response by software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over developer accountability.
History: Software craftsmanship is not new. Started way back in 1992, the importance of the same got momentum after Pete McBreen’s book “Software Craftsmanship” in 2001 got published. It suggested that software developers need not see themselves as part of the engineering tradition and that a different metaphor would be more suitable.
In August 2008, keynote at Agile 2008, Bob Martin proposed a fifth value for the Agile Manifesto, namely “Craftsmanship over Crap”. He later changed his proposal to “Craftsmanship over Execution”.
After that a series of the conference around the world keep the clock ticking. More detail of the same can be viewed here.
Manifesto: December 2008, group of aspiring software craftsman got together to and tried to solve some problems they are facing came up with a statement of things they believe in and crafted another manifesto the software craftsmanship manifesto (http://manifesto.softwarecraftsmanship.org/)
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.
Why do we need a software craftsman?
- The best processes in the world will not save a project from failure if the people involved do not have the necessary skills to execute the process; conversely, really good developers can make any process work” – Pete McBreen, Software Craftsmanship: The New Imperative
- Because crappy code amplifies the risk of failure – even for agile projects
- ”Get It Done” vs. ”Get It Right”
- A Software Craftsman will choose “Get It Right” because he has the skills to do so
- Not only will he “Dot It Right”, but he will also do it for the right reason
Characterization of a Software Craftsman
- He will “Do It Right” – also under pressure
- He takes responsibility
- He takes pride in his work. Both the end product and the process towards it
- He signs his work
- Software Craftsmanship is all about putting responsibility and pride back into the software development process. As Hunt and Thomas (The Pragmatic Programmer) state, we need to start ‘signing our work’ again, just as other craftsmen do” – Pete McBreen, Software Craftsmanship: The New Imperative
- He is a continuous learner. When he doesn’t work, he spends his time studying, to find new methods and tools can refine him as a Software Craftsman
- He writes code
- He practices deliberately and understands the difference between practice and work. He practices in order to be prepared for work
- He has the right attitude towards Software Development
- He contributes to the community
How to become a Software Craftsman by following some discipline [Best practices]?
- Test-Driven Development [TDD]
- Continuous Integration
- Pride and attitude that QA should find nothing
- Iterate always with shorter time boxing to get multiple feedbacks
- Tips from The Pragmatic Programmer
- Care about your craft
- Think about your work
- Practices lot of industry-accepted engineering practices
- Automate as much as possible
- Start learning
- Take responsibility for your professional career and apply what you’ve learned
- Slow down to go fast
Software craftsmanship is all about pride in work, teamwork, mentorship, proving skills, practising. Yet there is some disagreement
- Not everyone agrees
- The manifesto is tame. Manifesto – a statement of belief, a call to arms, feisty, opinionated and brash
- A manifesto is an attack on software engineering and scientific research. The manifesto is giving permission to a new generation to ignore all lessons learned from software engineering
- Language matters – choosing inappropriate metaphors like a craftsman, apprentice, journeyman increases the gap between engineering and business.
- Software craftsmen should be egoless, humble with focus on the outcome rather than code of the process
All the authors and passionate software people.
Jerry is one of the top 5 in the Agile community to have achieved the dual credential of Professional Coach (PCC) & Certified Enterprise Coach (CEC). A software technologist and an SME in Agile Software Development with 18+ years of experience, Jerry is passionate about building hyper-productive teams which helps organizations in their quest for Agility and Digital Transformation in today’s VUCA world.