In this blog article, we'll explore the principles of software craftsmanship, the benefits of becoming a software craftsperson, and how we can improve our skills. We'll look at a growth mindset and some resources to help us on our journey. Let's dive in!
Witnessing Craftsmanship
Let's say we enter a home and face this beautifully crafted staircase. Why do we even think this is beautiful? What comes to mind is the skill and work that has gone into it. The craftsperson has had to think about how to ensure that it's only connected at the top and the bottom, it can support the weight and doesn't fall under its weight or when there are people on it, climbing up and down. There is also the craftsmanship of the handrail and the curved wall.
Source: Microsoft Designer
Why does this craftsmanship strike us or cause us to take notice? Is it because we can see the care taken in creating the stairs? Or maybe we can see that a lot of skill went into it? Or perhaps it's because the knowledge of physics has been used to make it appear that it defies gravity?
What Is Craftsmanship?
From Collins dictionary, we can see the definition is:
Craftsmanship is the quality that something has when it is beautiful and has been very carefully made.
What Is Software Craftsmanship?
The Manifesto for Software Craftsmanship describes it as follows:
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.
If we simplify it, a software craftsperson cares about all aspects of their work.
What Separates a Software Developer From a Software Craftsperson?
While software developers are primarily concerned with the code they write, software craftspeople take a broader approach. They manage the code, its maintainability, deployability, and application monitoring. This results in robust applications that meet user needs and bring joy to users. Software craftspeople continually hone their skills to create better applications that perform well in production without constant supervision. Quality applications are made through thorough testing and proactive monitoring that alerts the team to potential issues.
Why Choose to Embark on the Path of a Software Craftsperson?
For anyone who connects with the principles of software craftsmanship - well-crafted software, steadily adding value, being part of a community, and having productive partnerships with their users - the path of software craftsperson is a good fit. It's a journey where we continually learn the craft of building software in an evolving landscape. As software craftspeople, we're not happy just throwing things out the door but instead focusing on quality and stability. We also want to build up a community of people who can create high-quality software so that we all can learn from each other and build on what others are learning.
Why Did I Make the Transition to Software Craftsperson?
Different people have different journeys, motivations, and experiences regarding craftsmanship. Let me tell you my story. I had worked in software development for over ten years when I joined a software craftsmanship dojo. At the start, I didn't understand the impact that the dojo would have. I thought I was only there to learn Test Driven Development (TDD). Previously, I had learned TDD by participating in code retreats. Still, I needed help incorporating the new working method into day-to-day coding outside of fixing defects or working on straightforward features. The dojo allowed me to learn hands-on each week, developing the skills that drive my development through testing. This mindset progressed to the point where I now find it hard to think about developing without using TDD.
The move to software craftsmanship made sense as a path for my career since I had worked on many projects where we were fighting the storm of trying to develop the application, dealing with production issues, and managing our technical debt. This storm led me to burnout and disillusionment in the software developer career. Having an opportunity in the weekly two-hour dojo to learn new skills and have hands-on experience meant that it was two hours that I looked forward to the most in the week.
Outside the dojo, I practice a daily coding exercise, use what I learned in my work, and consider new ways of doing things. This practice has led me to develop skills to quickly deploy new, well-tested applications with testing, monitoring, and scanning toolchains, improving my DORA and DASA scores.
Growth Mindset
Moving to become a software craftsperson will mean that we can see that there are ways that we can grow. Rather than seeing our skills as something that can't be changed, we realise we can improve incrementally over time. So, rather than having a fixed mindset where we think our skills limit our growth, we have a growth mindset. Referring to the previous post, building habits and working on getting 1% better is fundamental to creating a growth mindset. This growth mindset doesn't just stop with us; it should also include growing the people around us. Having a growth mindset is vital to building a community of software craftspeople.
Benchmarking Our Skills
To understand where we are with our software craftsmanship skills, we can use the DevOps Agile Skills Association (DASA) DevOps quick scan to know where we are with our skill levels. Then, we can work on improving the areas that need addressing. The quick scan looks at 12 different areas:
- Business Value Optimisation
- Business Analysis
- Architecture and Design
- Test Specification
- Programming
- Continuous Delivery
- Infrastructure Engineering
- Security, Risk, Compliance
- Courage
- Team Building
- DevOps Leadership
- Continuous Improvement
Each area will receive a score from one (novice) to five (master). The report will help us understand what is required at the next level and how to improve.
Methodology for Developing Quality Cloud Applications
A methodology called the twelve-factor app is used to build software-as-a-service applications that can scale without significant changes to tooling, architecture, or development practices. The created app uses declarative formats for setup automation, has a clean contract with the underlying operating system, and minimises divergence between development and production. We can apply the methodology to apps in any programming language and can use any combination of backend services. We can build the best software-as-service application possible by following the twelve factors.
Getting Started on Our Journey as Software Craftspeople
Understanding more about software craftsmanship can always be helpful. There is a link to further reading on the Manifesto for Software Craftsmanship. There you will see, among others:
- Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye
- Software Craftsmanship by Pete McBreen
- The Pragmatic Programmer by David Thomas and Andrew Hunt
A title missing from that list is:
These titles help us further understand software craftsmanship and what we must look at in our journey. We should improve ourselves and those around us to build well-crafted software.
Conclusion
Changing our identity from a developer to a software craftsperson leads us to build well-crafted applications. The key to the change is treating it as a journey, and as with any journey, we can take many different routes. We've talked about some of the resources that might be useful, and we can use the resources that entice us and keep us going along the journey. Transforming 1% daily will mean we will have significantly impacted how we work for a year and beyond.
References
- Craftsmanship Definition: https://www.collinsdictionary.com/dictionary/english/craftsmanship
- Manifesto for Software Craftsmanship: https://manifesto.softwarecraftsmanship.org
- DASA Quick Scan: https://scan.devopsagileskills.org
- BriX Software Craftsmanship Dojo: https://swcraftsmanshipdojo.com
- DORA Quick Check: https://dora.dev/quickcheck
- The Twelve-Factor App: https://12factor.net
- Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoover and Adewale Oshineye: https://www.amazon.com/Apprenticeship-Patterns-Guidance-Aspiring-Craftsman/dp/0596518382
- Software Craftsmanship by Pete McBreen: https://www.amazon.com/Software-Craftsmanship-Imperative-Pete-McBreen/dp/0201733862
- The Pragmatic Programmer by David Thomas and Andrew Hunt: https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052
- The Software Craftsman by Sandro Mancuso: https://www.amazon.com/Software-Craftsman-Professionalism-Pragmatism-Robert/dp/0134052501
Credits
The title image is from Dreamstudio AI.