Last week I presented a workshop session called Courageous Software Development Through Craftsmanship (Slides) at Keep Austin Agile 2014 here in Austin. It was a great crowd both at the conference overall and in the session. A few people I talked to after the session said they couldn’t make it and wanted to learn a bit about the topic, so I thought I would write a blog post about it.
My intent was to create a conversation in the workshop and at the conference and I used LEGO brick sculpting as an activity to get smaller groups conversing about software built with/without courage. Overall I thought this went well and had a lot of good engagement and laughter from the attendees. Here is a synopsis of what we talked about:
Courage
Wikipedia defines courage this way:
Courage is the ability and willingness to confront fear, pain, danger, uncertainty, or intimidation.
If we explore many famous quotes about courage we get some insight in how to act courageously:
- stand up and speak when needed
- but be able to sit down and listen
- be able to say no
- face the truth
- do the right thing
- be virtuous when tested
- do not leave what is right undone
And overall we see a link from courage to integrity. We can apply courage in many ways in our lives, but how does it relate to software development?
Courage in Software
Developing software products is not easy. It requires creativity, communication, collaboration, time management, and a whole lot of discipline all of which make it challenging. There are many situations where there is a need to stand up, be visible, say no, and do the right thing. Here are some challenging scenarios many of us have encountered:
- Pressure to commit to completing something (when it may not be able to be done right)
- Pressure to release when not ready
- Pressure to adopt a process or tool that is counterproductive
- Ability to hold a team member accountable when necessary
These are just a few of many. And there are many ways we can help individuals and thus a team act with courage. For many situations in software, Software Craftsmanship can help.
Software Craftsmanship
While there is still debate on whether creating software is an engineering discipline, a craft, art, science, or some combination, I feel that the motivations from the Software Craftsmanship movement can be applied to help.
For those of us in the Agile community, the Manifesto for Software Craftsmanship should be a familiar read. In it are the tenets of value, professionalism, and partnership that few would fundamentally disagree with. However, many rightfully are cautious of how these would be applied.
There is the potential for such a movement to be misused to push elitism, siloing, over design, etc. But if approached carefully the ideas around Craftsmanship that promote community, mentoring, skills development, pragmatism, pride in work, and attention to quality can be very powerful. I believe it is these ideas that can help. What practices or behaviors does software craftsmanship encourage?
- Mentorship (often a bit formalized) and emphasis on learning and improvement
- Deliberate practice, both solo and as part of a group (code katas, coding dojos, code retreats)
- Strong technical practices (Test-Driven Development, pair programming, emergent design, continuous delivery, etc)
- Community (local user groups, conferences, company communities of practice, craftsmanship swaps, etc)
There is an element of personal responsibility in all this for guiding one’s own skill growth and professional development. But there is also the notion of improving the knowledge, skill, and values of those around us that we collaborate with and on whom we depend.
Craftsmanship for Courage
I think not speaking out, not doing the right thing, not saying no when appropriate, not fully engaging, etc. can be attributed to a number of things, including some of the following:
- An underdevelopment of skill or lack of practice
- Lack of mentoring or knowledge transfer
- Lack of true collaboration and accountability
- The Imposter Syndrome or lack of confidence in one’s skill and knowledge
I think the notions of deliberate practice, community, mentoring, and focus on professionalism in the craftsmanship community are good tools to help people gain what they need to act courageously. Through increased knowledge, confidence in skill, and hopefully empathy for others who are learning and growing we should gain a better sense of what is possible (and what is not). This will allow us to be able to more confidently communicate and stand up for better ways to develop products that customers value and that we can be proud of.