10 Books Every Senior Engineer Should Read
Anyone interested in software development would enrich their skillset by reading them.
Join the DZone community and get the full member experience.
Join For FreeI picked some of my favorite books at my company, Semaphore — books that have profoundly influenced the company’s engineering culture. This list contains a mixture of classic, timeless texts and a fair share of modern game-changing publications, aimed at senior engineers and devs. But you don’t have to be a senior engineer to benefit from the books on this list, anyone interested in software development would enrich their skillset by reading them.
We hope you enjoy reading this list as much as we enjoyed making it.
Extreme Programming Explained: Embrace Change (2nd Edition) By Kent Beck

The 90s were a defining era for software development. The dot-com boom created enormous pressure to release early and frequently. Productivity had never before been so critical for success in the IT industry.
A paradigm shift was needed, and Kent Beck delivered in 1999. Extreme Programming Explained presented and refined every agile practice we take for granted today: pair programming, automated testing, Test-Driven Development, and the 10-minute continuous integration build:
“… I bought an ordinary kitchen timer and decreed that no design meeting could be longer than 10 minutes. I don’t believe the timer was ever used, but its visible presence reminded everyone to be aware of when a discussion had ceased being useful and had turned into a process for avoiding going and writing some code to get the answer for sure.”
Kent Beck
The second edition refines the original idea: stay aware, adapt, and change. There is no shame in changing. On the contrary, being prepared to change is a good engineering habit.
Kent doesn’t stop at the technical details. He discusses the social aspects of development: interacting with teammates and management, the work ethics programmers should follow, and how a flat hierarchy helps everyone work toward a common goal. This book has everything you need to make a sustainable XP team.
Why should you read it: this is a book that will challenge your view on software development in fewer than 200 pages.
Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation by Jez Humble and David Farley

In this book, David Farley and Jez Humble take the principles of continuous integration introduced in Extreme Programming Explained to the next level. Continuous Delivery teaches you how to make release and deployment as trivial as pushing a button.
Jez and David’s message can sound counterintuitive at first glance: “if it hurts, do it more frequently, and bring the pain forward”. It’s tempting to put off the difficult parts of the development cycle, but doing that won’t make them easier. If integration is painful, do it every time someone checks in. If testing is painful, do it continually, rather than at the end. Bring the pain forward: do the hard things first and you’ll be forced to face the challenges and find solutions.
The book goes into great detail on building, structuring, and maintaining a delivery pipeline, including what kinds of tests to use, how to handle data, and how to evolve it as the project grows. While some of the tools used in the book are a bit dated, its ideas and principles are timeless. This is the definitive DevOps guide that will make you stop stressing about deployments.
Why should you read it: any team that has not read this book has not yet reached its maximum potential.
Remote: Office Not Required by Jason Fried and David Heinemeier Hansson
The book sets out to disarm the common excuses against remote work: face-to-face communication is not irreplaceable and people can (and should) be trusted to be productive at home. The authors argue that offices, so-called “interruption factories”, are never where real work takes place.
Why should you read it: as a manager, this book shows you what a successful remote team looks like. As a worker, it goes into practices that help us collaborate remotely while staying clear of the pitfalls home offices can present.
The Mythical Man-Month by Frederick P. Brooks Jr.
“How does a large project get to be one year late? One day at a time”.
Fred Brooks
You’ve probably read dozens of books about being a successful engineer, but how many failure stores have you read? The Mythical Man-Month shows the perils all complex projects must face.
The titular “man-month” represents the erroneous idea that you can accelerate a project by adding people to the team. As a manager of IBM’s OS/360 project, the author (Turing award-winner Frederick P. Brooks), observed that additional people caused the project to be further delayed instead. Brooke’s Law states that “adding manpower to a late software project makes it later”.
While you can dig a ditch faster by adding more arms to the task, some tasks (like software projects) do not benefit from adding more people to the mix: “The bearing of a child takes nine months, no matter how many women are assigned. Many software tasks have this characteristic because of the sequential nature of debugging.” Essentially, the more complex the task, the more difficult it is to divide it into discrete, parallelizable tasks.
In this book, the author sets out to explain why software development is more like pregnancy than ditch-digging. His observations and insights into human nature offer invaluable lessons about managing the lifecycle of a complex project, managing communication in a team, planning, and estimating work timetables.
Why should you read it: it has been almost 50 years since this book was published and we are still making the same mistakes while managing software projects. This cautionary tale should be read at least once by all engineers.
Getting Real
Behind rallying cries such as “build less, build simple”, “be minimalist”, and “build the tool that suits your needs”, this book pushes us to skip many of the design stages and get to the building as soon as possible.
“How do you manage [feature requests]? You don’t. Just read them and throw them away… the ones that are important will keep bubbling up anyway.”
This is an ebook that reflects Basecamp’s philosophy of building and working. It emphasizes building unified teams, breaking down silos, trusting people to work independently, and avoiding meetings. It’s a set of rules that have worked for Basecamp and it may work for you. But even if it doesn’t, the core values behind these principles are worth learning.
Why should you read it: this is a no-nonsense, succinct book on building lean products with a remote team in the most direct way. Best of all, it’s free!
Designing Data-intensive Apps by Martin Kleppmann
The book is primarily theory-based — you won’t find code or demos. At the same time, it’s a practical text that examines the tradeoffs of several types of data-processing technologies.
Why should you read it: if you develop applications that consume or process data of any type, this book will help you to balance the pros and cons of the available technology.
Site Reliability Engineering
Service Reliability Engineers (SREs) are the unsung heroes behind every successful product. SREs are highly specialized engineers charged with keeping systems alive, finding problems before they happen, doing post-mortems when something terrible inevitably happens, and taking care of all the glue work needed to make sure it never happens again. They have the near-impossible task of scaling up platforms while keeping them reliable.
SRE is one of the available paths for a senior engineer, but even if that’s not your job description, the skills you can learn in this book will help you build more resilient products. If you’ve ever been on-call or organized an on-call rotation, you know how hard and demanding it is. This book gives tips that lead to reliable services and sustainable workloads over time.
Why should you read it: this is an invaluable manual on how the largest software company in the world manages risk and keeps systems running.
The Phoenix Project by Gene Kim, Kevin Behr, and George Spafford
The book starts with a crisis. The CEO is stepping down after the stock price plummets; the company is bleeding money and falling behind competitors. Amid this crisis, Bill Palmer (the main character) is tasked to take on a project that shall make everything right again: the promising “Phoenix Program”.
For a change of pace from more technical reading, this book is excellent. Gene Kim, Kevin Behr, and George Spafford have created a thrilling story with entertaining dialogue and a satisfying conclusion. This is a business novel with a warning against hero figures in a company.
Why should you read it: this is a modern-day IT fable that should resonate with any seasoned engineer. If you’re tired of reading drier technical books, this is a perfect choice.
Building Microservices: Designing Fine-grained Systems by Sam Newman
Full of concrete examples of organizations using microservices to scale their operations, this book discusses how to architect, build, deploy, secure, and monitor a distributed system.
Why should you read it: this is a comprehensive guide on microservices and distributed systems that stays away from buzzwords and gets to the heart of the matter.
Modern Software Engineering: Doing What Works to Build Better Software Faster by Dave Farley
After challenging academic theories, this book sets outs to find a rational, practical, and sustainable framework for software development. The author adopts an iterative, experimental-based approach, reminiscent of Fred Brooks proposal to “throw away a prototype”. It’s an attitude that is not as common in software development as in other engineering fields, which makes this book even more valuable.
David shows how to make design decisions using concrete examples. The book covers essential aspects of the craft, such as abstraction, separation of concerns, and modularity to manage complexity. It complements Continuous Delivery, rather than trying to replace it.
Why should you read it: this is a book that you wished existed when you started working in software development.
Conclusion
Every top booklist reflects the values and experiences of its authors. Invariably, over the course of our careers, we encounter books that deeply affect the way we think and work. These are the ones that did it for us at Semaphore.
Published at DZone with permission of Tomas Fernandez. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments