Steele Consulting aspires to help enrich the businesses and lives of our customers, but we dually strive to enrich the lives of our employees. One way that we’ve done this is by encouraging and implementing software craftsmanship in our offices. In short, software craftsmanship is a practice that promotes effort towards constant advancement and a growth mentality in software development skills. In this article, we’ll cover more specifics of the mindset, and practices of software craftsmen, as well as cover the benefits of implementing them and list some resources to help you get started.
In his book, The Software Craftsman, Sandro Mancuso defines software craftsmanship as this: “Software Craftsmanship is a long journey to mastery. It’s a mindset where software developers choose to be responsible for their own careers, constantly learning new tools and techniques and constantly bettering themselves. Software Craftsmanship is all about putting responsibility, professionalism, pragmatism, and pride back into software development.”
One important element of software craftsmanship is a growth mindset. Researcher Carol Dweck says that there are two kinds of mindsets; a fixed mindset and a growth mindset. Someone with a fixed mindset believes that their abilities are fixed traits that they were born with, and they cannot be added to or improved. They believe that no effort is required to succeed, but rather success is achieved by raw talent. By comparison, someone with a growth mindset believes that their abilities and intelligence are developed by means of effort, persistence, and a willingness to learn. A growth mindset is an essential for anyone striving to practice software craftsmanship, because it allows you to move forward, whereas a fixed mindset would prevent progress.
Some of the disciplines necessary for software craftsmanship are deliberate practice, high-quality code, and good communication. Because software craftsmanship is largely based on effort and progress, naturally, taking initiative to practice consistently and build on your skills is a huge part of it. This can be anything from taking PluralSight classes to learning new languages, to reading books or blogs, etc. – anything that can help you grow as a software developer. If it’s something that helps you progress and something you can do consistently, then you’ll be fulfilling a major part of software craftsmanship.
Another important practice for a software craftsman is maintaining high-quality code. As a company, Steele Consulting encourages test-driven development and continuous integration/deployments (devops). This builds quality code by reducing the time a review takes and preventing bugs from stacking up. Another way to do this is by pair programming. Pair programming is when two developers work on one thing side by side, usually with one telling the other what to type. Because there are two developers sharing and combining their knowledge and experience in programming, they can learn from each other and simultaneously review each other’s work. The last main way to produce high-quality code is by keeping it clean. Just in the same way that a clean office promotes productivity and reduces sickness, clean code boosts efficiency and reduces bugs, or at least makes them easier to find. A frequent cause of frustration for software developers is opening up some code and finding a huge mess of sloppy, unorganized code. One of the scout’s rules is to always leave a campsite cleaner than you find it, which is a good philosophy to live by as a programmer – you should always try to leave code cleaner and/or better than you found it. John Woods says, “Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.”
The final main practice of a software craftsman is good communication. Good communication is very important, both internally and externally – bad internal communication can cause code to get mixed up among other issues, while bad external communication can cause a client to feel left out of the process of their product development. Version control systems and branching are both good ways to support internal communication when it comes to code itself, but it’s also a good idea to have consistent team meetings so that everyone is aware of not just what they’re doing, but also what the rest of the team is doing so that the big picture remains intact. One main aspect of software craftsmen and software consultants is good external communication, because it’s pretty hard to be good consultants if you’re not reaching out to your customers. Scrum is a big part of this, because it helps you get an idea of what your customer wants and needs, and concepts start to become a plan. Not only does scrum keep the customer involved with the process, but it also helps guide them to what will add value to their company, which is ultimately our goal as software developers – and software craftsmen.
One of the two main benefits of software craftsmanship is that it encourages passion. Both within and outside of Steele Consulting, it saddens us to see people who work where they do just for the paycheck. Ideally, no one would work for the weekend, and everyone would have and/or develop a passion for their job. Software Craftsmanship can play a big role in that because passion can follow the effort that software craftsmanship entails. Another benefit of software craftsmanship, which is almost obvious, is that the quality of your work will improve. The result will be a happy customer with a better product. More likely than not, this will open doors to more projects for you and your company, which ultimately adds value all around.
Here are some good resources to help you get started on your journey to software craftsmanship:
- The Pragmatic Programmer by Andy Hunt & Dave Thomas
- Clean Code by Robert Cecil Martin
- Code Complete 2 by Steve McConnell
- The Phoenix Project by Gene Kim, George Spafford, and Kevin Behr
- Design Patterns by Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm
- The Software Craftsman by Sandro Mancusco
- Coding courses: https://www.pluralsight.com/
- Code playground: https://codepen.io/
- Code games to practice new languages: https://www.codingame.com/start
- Software Craftsmanship Manifesto: http://manifesto.softwarecraftsmanship.org/
If you’d like to keep up with more of Steele Consulting’s developer insights, follow us on Twitter to get notified of new posts.