Software (r)Evolution - The Book
I'm happy to announce that I just embarked on a new book project. My new book goes under the working title of
Software (r)Evolution: A Crystal Ball To Prioritize Technical Debt. Software (r)Evolution will explore novel approaches to understanding and improving large-scale codebases. The techniques in the book build on the fascinating field of software evolution. It's a revolution since we get new insights that we cannot get from the code alone.
Why Is This Book Different?
In my previous book, Your Code as a Crime Scene, I shared a collection of techniques and analyses that had served me well during my years as a software consultant. Over the past two years I have worked full-time with these techniques. I've taught workshops, developed tools and, most important, applied the techniques to lots of codebases across different domains.
This experience has allowed me to evaluate what really works and also to sharpen the analyses to fill the gaps where necessary. The result is a set of analysis techniques that give us super powers. With these techniques we're able to take a big, scary legacy codebase and come up with a prioritized list of the technical debt we need to address to become more effective.
My plan is to center Software (r)Evolution around a set of case studies on well known open source projects in a variety of languages. We'll get to analyze the Linux Kernel, TensorFlow, Scala, Erlang, the .NET Core Runtime, and many more. This lets us gain experience with a variety of distinct systems, which in turn allows us to build knowledge that transfers to our own codebases.
The Next Step
The ideas for Software (r)Evolution has been in the back of my mind for almost a year now. Just last week I signed a contract on the book with The Pragmatic Bookshelf. In case you've read my article on Writing a Technical Book: Motivation, Publishing and How to Stay Focused Without Ruining your Life you know that I was really, really happy with my publisher and I do look forward to work with the Pragmatics again. They're great.
So far I have an outline for the book and some draft chapters. However, I've learned the hard way that I need to come-up with a detailed outline before I get serious with churning out chapters. So my next step is to go back and write a short overview of each chapter to capture the key points and take-aways. I want Software (r)Evolution to be that kind of book that reads like a coherent whole and proves valuable in all kinds of software systems, no matter at what stage in the lifecycle they happen to be. I know this will be challenging. But I wouldn't do it otherwise.