Mastering the software craft

Mastering the software craft

Robert C. Martin (A.K.A 'Uncle Bob') has written an excellent book on what it means to be a professional programmer. A lot of us programmers love the 'hard' technical side (the actual programming) and tend to scoff at the 'soft' side (i.e. soft skills). Contrary to what you may think, this book isn't about soft skills, not in the conventional way, anyway. It is packed with useful advice about providing better estimates, useful tidbits from software failures from Martin's own career and, most importantly, ways to make your company take you more seriously. Why's that important? It means, for instance, your company trusts you with the work rather than harassing you on trying to meet impossible deadlines. This isn't a self-help book, nor is it a book that just repeats obvious advice. This is a book for programmers who want to stop feeling like a code monkey and become a respected software craftsman/craftswoman.

If I had tried to read this book in my university days before I had entered the world of work, I think a) I would have got bored quickly or b) I would have dismissed the book as being useless. If you're working in industry as a programmer, I think you're in a position where you're more able to appreciate the book and enjoy it. You could find similarities with Martin's stories or have your own examples of where things went wrong. The subtitle of the book is "A Code of Conduct for Professional Programmers". This is exactly what the book is: it's a guide on the ideals that we should live up to as professional programmers.

One of the main takeways I took from the book was the importance of saying no to unreasonable deadlines. Sometimes, we may be pushed from the business to meet a deadline that is simply unattainable for technical reasons. This is also something I've witnessed first-hand. A senior developer promised that the team would "try", which seems like a false promise. The business representative would walk away glad that us developers agreed to meet a deadline, while what we may mean is "we'll continue to give our best, but let's be honest, the chances are slim". As Martin rightly points out, there's a problem with "we'll try". To the business, you're committing yourself to the deadline. However, it's not fair for developers to acquiesce to demands such as these. It's implying that you weren't giving it your all in the first place. In all fairness, that may well be the case. It may be the case that the team needs to work overtime, eliminate any blockers, optimise processes, hire more resources (e.g. developers), prioritise delivering the essentials or something else entirely. If that's the case, great. When this is not the case, however, is where the problem creeps in. When your team is already working its hardest to meet the deadline, it's simply a false promise.

In my view, a crafstman/-woman is someone who takes their craft seriously. They are the people who value high quality craftsmanship/-womanship and strives for excellence on their road to attaining mastery. They also are honourable characters who know when to push back (respectfully) and not intentionally overpromise. And that, at least in my view, is what Martin's book is about.