When Corey Haines lost his job in 2008 after working for a long time in various types of companies, he decided to go on a pair-programming tour, in exchange for room and board. This brought him some fame but also some new ideas; today he is one of the standard-bearers of the growing Software Craftsmanship movement which aims to change the industry to focus on professionalism in software development. Software development is a craft and as practitioners we need to understand and deliberately work on expanding our skills so we can deliver what our clients need, when they need it and in a sustainable way.
By Joakim Karlsson, Softhouse .
How would you describe a software craftsman?
I don’t do a lot of focusing on how individuals can call themselves “software craftsmen,” as I don’t know of any good way to define it. I jokingly say that there are two ways to be a software craftsman either a) call yourself a software craftsman or b) work for a company that calls you a software craftsman. Instead, my personal focus is on the ideas around software craftsmanship. To me, Software Craftsmanship is about changing the industry to focus on professionalism. I like to say that we are in a state similar to when a person could get a jar of leeches and hang out a ‘doctor is in’ sign. Clients are gambling when they hire someone, not knowing if they have the skills necessary to perform the work and provide the value their business needs. The core of Software Craftsmanship is a reaction against this, focusing on giving your clients what they need, when they need it and in a way that is sustainable for them. In order to do this, we need to focus on how we bring people into the industry, as well as the tools and techniques we use to provide value to our clients. As the barrier to entry lowers, more people come in without having a solid foundation or experience in building longer-term maintainable software.
When you think of this in terms of the ever-increasing demand for software developers, you can see a less than beautiful future. Software has a pervasive role in the world around us, and I know that I get nervous when I think of relying on inexperienced developers writing that code that will be running our world. There is an ongoing discussion about the goals and effect of the common computer science education from a theoretical point of view, but I prefer to focus instead on the needs of the businesses that hire these newly-minted developers. Is there a difference between computer science and software development? Where do they intersect? And, when are each needed? I think there is a place for both theory-oriented education and hands-on software development training. I’m not convinced they are the same place, though. I am excited when I see an enhanced focus on hands-on mentoring in the form of apprenticeships and trade school-like programs, such as Code Academy, RailsBridge and GirlDevelopIt. I am especially happy to see Ken Auer of RoleModel Software bring out CraftsmanshipAcademy. Ken has pioneered a lot of the ideas around apprenticeship in software development, and his ideas and leadership have influenced many of us in the craftsmanship community.
What can I, as a developer, do to get started on my way to craftsmanship? Are there specific things I should have in my basic skill set?
The path to Software Craftsmanship is to better understand your own skills and techniques and how they relate to concrete value for the business. For example, automated testing can be linked directly to the ability for a business to change rapidly. When you can push a button and verify that your system works in a matter of minutes, you give your client an incredible tool to work incrementally based on real information about their system. Adding test-driven development to the toolset brings focus onto the design of your system, working towards achieving the goals of modular design: decreasing the cost of change to a system.
In what kind of environments do you think software craftsmanship has the best chance of flourishing? Is there anything specific management can do to help?
The key to progress is trust and communication. Professional developers are hired because they have a specific skill. When there is an environment of distrust, skilled developers have difficulty moving quickly and providing value. One specific thing that management can do is to understand that building software is a creative endeavour, not ‘skilled labor’ that can be forecasted from start to finish. Working in an iterative fashion is essential to manage the complexity inherent in today’s systems. The development staff must be treated as a group of professional skilled artisans. Different people have different experiences and skillsets and are not interchangeable. This is predicated on having a staff of professional software developers who have an understanding and appreciation for their own skills, both positive and negative. Developers should be taking an active role in their own training, striving to understand where there are gaps and what they can do to fill them.
Are there settings where software craftsmanship can be more of an obstacle than an asset to an organization?
At its core, Software Craftsmanship can be effective and valuable in any organization. Obstacles arise where the communication and trust breaks down, when people are not given the freedom to apply their skills. The ideas behind Software Craftsmanship focus on creating a world where developers work closely with their business partners, each member of the team using their unique skillset to deliver the most appropriate solutions.