Book review: “The Software Craftsman”

Books

I recently read the book The Software Craftsman: Professionalism, Pragmatism, Pride, by Sandro Mancuso and it highly resonated with me. Here’s an overview of the book with some of the highlights I made while reading it. I hope it piques your interest too.

(Please note that I get commissions for purchases made through links in this post at no extra cost to you.)

Key Concepts

Professionalism, technical excellence, and continuous improvement

Developers should take responsibility for their own careers, constantly learn new tools and techniques, and strive for mastery in their craft.

Quotes from the book

We need to learn how to keep ourselves up to date and how to practice. We need to learn how to use our time well. The day we stop learning and practicing is the day we start losing control of our careers.

How it is done is as important as getting it done. If we want to be good at writing quality code, we need to practice how to write quality code. There is no other way. When practicing, the focus should be on the techniques we are using and not in solving the problem. Solving problems is what we are paid for and what we do at work. However, when practicing, we should focus on how we are solving the problem. "

Clean code, client collaboration, managing technical debt

The intentional adoption of practices that lead to successful projects.

Quotes from the book

When we talk about steadily adding value, we are not just talking about adding new features and fixing bugs. This is also about constantly improving the structure of the code, keeping it clean, extendable, testable, and easy to maintain.

Well-crafted code is simple, small, testable, easy to understand, and most important, does the job. Code is the main source of bugs and pain. The less we write it, the better.

The best line of code is the one you don’t write.

Well-crafted software means that, regardless of how old the application is, developers can understand it easily. The side effects are well known and controlled. It has high and reliable test coverage, clear and simple design, and business language well expressed in the code. Adding or changing features does not take longer than it used to take at the beginning of the project, when the code base was small.

A broader skill set required for developers

Challenging traditional notions of seniority in software development and promoting a mindset and lifestyle of excellence and commitment in software development.

Quotes from the book

Companies are looking for developers who, besides being great at writing code, can also help in many other areas of the business.

Modern developers need to know how to speak to customers, automate tests and deployment, make technological choices that may affect the entire business, work in distributed teams, help clients to define and prioritize requirements, report progress, manage changes and expectations, present products to potential clients or partners, help with pre-sales activities, estimate time and costs, interview new team members, design and evolve the software architecture, deal with nonfunctional requirements and service level agreements (SLAs), understand business goals, make decisions based on trade-offs, keep an eye on new technologies and better ways to do things, worry about the value delivered to their customers, and many other things.

Some Takeaways

Saying No to Success: Guiding Clients Towards Realistic Expectations

“Customers” are not only the end users of the application you develop. Your colleagues, including the QA team, your manager, your Product and Project managers, the support team, the company’s leadership and C-level team, etc, etc AND the end user of your application, are all your customers. With this context in mind, the author writes: “Developers should do far more to help their clients than just writing code. Software Craftsmanship helps developers and companies to do the thing right.

And this other quote drives the point home: “Clients very rarely understand the full impact of certain decisions on a software project, and it is our job to make them aware of it. It is our job to say no to our clients when they ask us for something we know is not going to work or that is not going to be done by a certain deadline.

The Pitfalls of Overengineering: Design Patterns as Tools, Not End Goals

Design patterns are tools and not an end on themselves and “well-crafted” code is not the code that follows a design pattern to the dot. Overengineered “solutions” are a real and costly problem: “Look at all the legacy code we see out there today. It is far easier to identify the design patterns used by the developers than the actual business features they were trying to satisfy. Generic code is a great thing, but it doesn’t come for free. The more generic the code is, the more complex it becomes.

Book’s overall idea

This quote captures the book’s main idea well, in my opinion:

Being a software craftsman is about more than just waking up in the morning, going to work, and getting paid to do some stuff. Software craftsmen wake up in the morning to make things better and to change the world we live in. Being a software craftsman is far more than writing well-crafted code or being a software developer. It’s a lifestyle—a commitment to excellence. Embrace it. Be proud of the role you play in the evolution of our society.

You should consider reading this book if…

As we age and progress on a career as software developers (or IT professionals), I think it’s natural to pursue a sense of pride, fulfillment and impact from one’s work. This book is a great read if you have some years of experience under your belt and are thinking about these things too.


If you found this helpful, please share this article!

The post Book review: “The Software Crafstman” was originally published at flaviabastos.ca