Why Books?
When developing my skills, I like to use a combination of conference talks, video tutorials, books, papers, blog posts, learning-by-doing, and teaching/blogging. Books are a great way to learn from the mistakes other people have made, to be inspired by their successes, and to experience their accomplishments second hand.
In this blog post I want to share my favorite books that helped me the most in my journey from being a senior software engineer to becoming a tech lead. They helped me to broaden and deepen my understanding about software engineering, software architecture, and building and running a software business. They taught me to challenge and shape my behaviour and habits. Some of them deeply affected my personal and professional life.
It goes without saying that reading those books will not automatically get you promoted or land you a new tech lead role. Of course, you still need to get your own experiences, make your own mistakes, and have that little bit of luck required. It is also important to constantly sharpen your technical knowledge and skills based on the specific domain you are working in. The books on this list do not focus on specific technologies, but rather on general principles and concepts that are applicable to any technology stack and business.
For each book on the list, I will include a brief summary that can help you judge whether the book is relevant to you. To give it a personal touch, I will also include the most valuable lesson I learned from the book. This is not necessarily the main message of the book, nor the only important one, but rather the one that resonated with me the most.
The List
Design It!
Design It!: From Programmer to Software Architect by Michael Keeling is a comprehensive guide aimed at software developers who aspire to transition into the role of a software architect. The book provides a pragmatic and accessible approach to software architecture, emphasizing the importance of design in creating effective software systems. Keeling covers a wide range of topics, from foundational principles of software architecture to practical techniques for designing scalable and maintainable systems.
Throughout the book, Keeling advocates for a hands-on, iterative approach to software design, encouraging readers to think critically about the architectural choices they make. He introduces various architectural styles and patterns, and discusses how to evaluate trade-offs and make decisions that align with the goals and constraints of a project. The book is filled with real-world examples, exercises, and practical tips, making it a valuable resource for those looking to develop their skills in software architecture and design.
The most valuable lesson I learned from the book: There is no such thing as "no design". "No design" often means multiple, implicit designs, in the heads of your engineers, that are not aligned with each other. Design explicitly, collaboratively, iteratively, and document the design in a written form!
Release It!
Release It!: Design and Deploy Production-Ready Software by Michael Nygard is a critical guide for software developers and architects focused on the challenges of creating software that performs reliably in production environments. The book delves into the complexities of designing, deploying, and maintaining software that can withstand the rigors of real-world operations. Nygard emphasizes the importance of considering production realities from the beginning of the design process, advocating for a mindset shift from merely writing code to delivering a resilient, scalable, and maintainable system.
Nygard provides insights into the various pitfalls that software systems encounter in production, such as network issues, unpredictable load patterns, and hardware failures. He introduces concepts like stability patterns and antipatterns, illustrating how to build systems that can gracefully handle failure and remain robust under stress. The book is enriched with real-life stories and case studies that demonstrate the catastrophic consequences of poor system design in production settings. "Release It!" is a valuable resource for software professionals seeking to ensure their systems are not just functional, but also resilient and reliable in the face of real-world challenges.
The most valuable lesson I learned from the book: Every software engineer should build their software with production in mind. Software in production is what runs your business, impacts your customers, and determines success or failure.
Site Reliability Engineering
Site Reliability Engineering: How Google Runs Production Systems authored by Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy, is an insightful exploration into the practices and principles that Google employs to manage its large-scale, highly reliable systems. The book introduces the concept of Site Reliability Engineering (SRE), a discipline that blends aspects of software engineering with IT operations, focusing on creating scalable and reliable software systems.
The authors, all experienced practitioners in SRE at Google, share their expertise on how to build, deploy, monitor, and maintain systems that are robust and resilient. They delve into the specific strategies and techniques Google uses, such as setting service level objectives (SLOs), managing change effectively, and balancing the need for release velocity with service reliability. The book covers a range of topics from organizational aspects of SRE teams to technical practices like incident management and post-mortem culture. The book offers a rare glimpse into the inner workings of one of the world's most proficient engineering organizations and is a valuable resource for anyone involved in the operation, maintenance, and scaling of large systems.
The most valuable lesson I learned from the book: There are no perfect systems. By explicitly defining and measuring SLOs and error budgets, you can make informed decisions about the trade-offs between reliability and velocity.
Change Your Questions, Change Your Life
Change Your Questions, Change Your Life: 12 Powerful Tools for Leadership, Coaching, and Life by Marilee Adams explores the profound impact that the questions we ask can have on our lives and careers. Adams introduces the concept of "Question Thinking," a method of transforming thinking, action, and results through deliberate and mindful questioning. The book emphasizes how the types of questions we ask ourselves, ranging from limiting, judgmental "Judger" questions to more open, constructive "Learner" questions, can significantly influence our outlook and outcomes.
Adams illustrates her ideas through a compelling narrative, following the story of an individual struggling with life's challenges and learning to apply the principles of Question Thinking. This approach offers practical tools and techniques for individuals to improve their communication, decision-making, and problem-solving skills. By fostering a Learner mindset and asking better, more empowering questions, readers are guided towards more positive and productive personal and professional relationships. The book is particularly valuable for leaders, coaches, and anyone looking to enhance their ability to connect with others and navigate complex situations more effectively.
The most valuable lesson I learned from the book: I realized how often I am in the "Judger" mindset. Being more mindful about that, and consciously choosing to shift to a "Learner" mindset became almost like a super-power for me to solve any challenge I am facing.
Thinking, Fast and Slow
Thinking, Fast and Slow by Daniel Kahneman is a groundbreaking exploration of psychology and economics, delving into how we think and make decisions. Kahneman introduces two distinct modes of thinking that dominate our mental processes: "System 1" (fast, intuitive, and emotional) and "System 2" (slower, more deliberate, and more logical). Throughout the book, Kahneman explores the impact of these two systems on our judgment, decision-making, and the way we perceive the world around us.
The book is a comprehensive journey through various cognitive biases and heuristics that influence our everyday thinking. Kahneman demonstrates how our intuitive System 1, which often serves us well, can also lead to profound errors and biases. He also explores the capabilities and limitations of System 2, emphasizing how it can be influenced and overruled by the quick judgments of System 1. The book is a synthesis of decades of research, providing deep insights into the complexities of human thought and behavior. It's an essential read for anyone interested in understanding the mental processes that underlie our choices and actions in both personal and professional contexts.
The most valuable lesson I learned from the book: I learned that both modes are valuable, but also have their drawbacks. I learned to be more aware of the biases and heuristics that influence my thinking, and to consciously choose when to rely on System 1 and when to engage System 2.
Atomic Habits
Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones by James Clear is a transformative guide that delves into the science of habits and how small changes can lead to remarkable results. The author presents a comprehensive framework for understanding how habits form and offers practical strategies for cultivating good habits and breaking bad ones. The core philosophy of the book is that minor improvements, or "atomic habits", can accumulate into significant, life-altering outcomes over time.
Clear emphasizes the importance of systems over goals, arguing that focusing on the processes and systems that lead to a goal is more effective than fixating on the goal itself. He introduces the Four Laws of Behavior Change β a set of simple, actionable principles to guide habit formation. These include making cues obvious, cravings attractive, responses easy, and rewards satisfying. Through a combination of scientific research, personal stories, and real-world examples, Clear illustrates how these principles can be applied to various aspects of life, from fitness and financial management to productivity and personal growth. "Atomic Habits" offers an accessible and compelling blueprint for building habits that stick and is valuable for anyone looking to make positive, lasting changes in their life.
The most valuable lesson I learned from the book: By making many small changes to my daily routine, that individually only affect my productivity by a small amount, all of those habits combined make a huge impact.
Conscious Business
Conscious Business: How to Build Value Through Values by Fred Kofman is a thought-provoking book that explores the intersection of personal integrity and professional success. The author presents the idea that the key to creating a successful and sustainable business lies in conscious management practices, where personal values and ethical principles are at the forefront of decision-making processes. The book argues that success in business is not just about financial gain but also about achieving personal and professional fulfillment.
Kofman discusses various aspects of conscious business, including accountability, responsibility, emotional intelligence, communication skills, and the ability to resolve conflicts constructively. He emphasizes the importance of leaders who can inspire trust, cultivate a culture of openness and honesty, and lead with empathy. Through real-world examples, practical advice, and exercises, Kofman guides readers on how to develop these skills and apply them in their professional lives.
The most valuable lesson I learned from the book: The concept of unconditional response-ability. I now constantly remind myself that I have the power and responsibility to choose my responses to any situation, regardless of the circumstances. "Response-ability" is a play on the words "response" and "ability," highlighting the ability to respond consciously and proactively.
First, Break All The Rules
First, Break All the Rules: What the World's Greatest Managers Do Differently by Marcus Buckingham and Curt Coffman presents a radical approach to management based on research conducted by the Gallup Organization. This book challenges conventional wisdom about leadership and management, proposing that the most effective managers often defy standard practices.
The core message of the book is that great managers don't follow a single mold or adhere strictly to traditional management principles. Instead, they break the rules by focusing on their employees' individual strengths rather than trying to correct their weaknesses. The authors argue that this approach leads to higher engagement, productivity, and overall job satisfaction.
Buckingham and Coffman identify key insights and strategies that set apart the world's best managers. These include the importance of selecting talent over simply filling positions, defining the right outcomes rather than dictating the right steps, focusing on strengths rather than obsessing over weaknesses, and finding the right fit for employees rather than simply promoting them to the next rung on the ladder.
The most valuable lesson I learned from the book: The importance of focusing on strengths rather than weaknesses. I learned to accept my weaknesses as such, and use tools and strategies to compensate for them, rather than trying to "fix" them. Instead, I invest my time and energy into developing my strengths, and I try to do the same for the people I lead.
Honorable Mentions
There are many more books that I found valuable on my journey from senior software engineer to tech lead. They are more focussed on specific technologies, which is why I did not include them in the main list. Nevertheless, I want to mention them here, as they might be relevant to you depending on the field/industry you are working in.
- Database Internals by Alex Petrov. The best book on databases I have ever read. It covers all the fundamentals of databases in a very accessible way. It is a must-read for anyone working with databases.
- Designing Data-Intensive Applications by Martin Kleppmann. A comprehensive guide to building data-intensive applications. It covers a wide range of topics, from databases and data processing to distributed systems and stream processing.
- Oracle JRockit: The Definitive Guide by Marcus Hirt and Marcus Lagergren. A great resource for anyone interested in JVM internals.
- The Linux Programming Interface by Michael Kerrisk. A very detailed book about Linux, that covers a wide range of topics, from basic system calls to advanced topics like process groups, signals, and sockets.
Final Thoughts
While books are a great tool to learn, they are not a substitute for first-hand experience. You still need to make your own mistakes and learn from them. It also helps to talk about the books you read with others, to get their perspective and to challenge your own views. Maybe you can join a book club, or read the book together with a colleague or friend.
I hope this list will help you on your professional journey. If there is a book that inspired you and that you think should be on this list, please let me know in the comments below.
If you liked this post, you can support me on ko-fi.
Top comments (30)
This is a pretty good list. Some of these are metatextual and could be read regardless of the field you are involved with.
Here are some programming specific must reads to supplement your list. All of these are relevant regardless of skill or experience: The Mythical Man-Month, Compilers: Principles, Techniques, and Tools (the dragon book), The Pragmatic Programmer, and Structure and Interpretation of Computer Programs (SICP). I could probably name off at least 10 more, but these are a the tippy top of the books I consider to be must reads.
The main takeaway from The Mythical man month is that throwing more people at a problem is almost always going to be counter productive; it teaches you value of time and planning (I'm generalizing here). This is the book that I point to when an investor or higher up causes some issues due to time crunch and its saved a few projects that I've been on.
The dragon book is worth reading even though it's somewhat dated because it's a compiler bible. Regardless of if you're ever going to work on or build your own compiler, its always useful to understand the basics especially given how ubiquitous they are in our field.
The Pragmatic programmer covers personal responsibility, career development, architectural techniques, and programming by coincidence aka the value of luck. Its a great metatextual read for learning how to approach a project efficiently.
SICP is probably the best programming textbook ever written. (The 2nd edition from 1996 is also free). There is a new edition that was published in 2022 and a JavaScript edition (if you don't want to learn lisp). It's a book that's worth reading regardless of skill; I've reread it at least 5 times over my career. Regardless of how much of an expert you are in the field, it can never hurt to refresh yourself on the basics.
It never hurts to sit down and read a good book even when you might feel overwhelmed.
Will check them out, thanks for sharing!
Add one more to the list, which will improve the way to let your peers and yourself grow.
Hidden Potential by Adam Grant
Will check it out, thanks for sharing!
So much I have to read.
As I moved towards leading role, my book shelf start changing from
software development like,
Clean Code
- Roberet C. Martin,and
Principles of Package Design
- Matthias Noback toThinking, Fast and Slow
- Daniel Kahneman,Team Topologies: Organizing Business and Technology Teams for Fast Flow
-Manuel Pais and Matthew SkeltoI discovered lots of leadership books that helps me be a servant leader, organise my teams and projects, in fast pace world.
Thank you for sharing your list.
Yeah same for me!
The other books that have been recommended to me:
Thank you for sharing!
Thank you so much for sharing! I will check those out :)
Looks like some interesting reads in there! Thanks for sharing. Have you heard of "Structure and Interpretation of Computer Programs"? Specifically the JavaScript version is the one I'm thinking of. I haven't read it yet, but I've heard it's considered to be one of the holy grails of computer science reads.
Will check it out, thanks for sharing!
Hello everyone. Which book would you recommend to read first for someone looking into becoming a Lead Engineer? I am already good on the technical side, and I am interested more in non-technical content, which can provide good value in developing leadership skills and habits. The book will not be necessarily theoretical but rather described more from a practical point of view with good explanations, examples and practical advice. I hope this book exists; if not, what would be a good bet for me? :)
Which books did you read so far? From my point of view, effectively leading others requires you to effectively lead yourself. So you can start with any of the books from my list I guess. They are all useful and practical. Maybe just pick one that resonates with you the most and go from there?
Thanks, will pick one.
Great list, thank you for sharing!
I can't wait to read these books.
Great list! Thanks for sharing π
Thanks for sharing!
Some comments may only be visible to logged-in visitors. Sign in to view all comments.