Book Reviews
A selection of books I keep revisiting — with analytical reviews aimed at expanding the horizons of both beginners and experienced developers — providing practical relevance, lasting insights, and modern engineering takeaways.
-
Cohn M., User Stories Applied (2004)
In a requirements flow, user stories come after use cases and before requirements specifications (whether SbE or traditional). This book is a foundational resource for exploring the 'how' and 'why' of user stories.
-
Meszaros G., xUnit Test Patterns (2007)
This book is essential language-agnostic source to make your TDD delivering principal values: maintainable test code, joyful SUT refactorings, and zero product defects.
-
Petre M., Software Design Decoded (2016)
66 Ways Experts Think.
More fun than teaching, yet still insightful and thought-provoking, this very short set of habits, practices, and approaches captures what software designers encounter on their way to mastery.
-
Beck K., Extreme Programming Explained (1999)
The book is only 1/5 about programming and 4/5 about organizational matters. The book covers all the core and corollary elements of what is nowadays called Agile. It accompanies the other 2 Beck's books on the subject: Planning Extreme Programming (2000) and TDD by Example (2002).
-
Wiegers K., Software Development Pearls (2021)
The book is a collection of lessons from decades of the author's' work in software engineering.
It covers lessons in software requirements, design, quality, project and process management, organization culture and teamwork.
Steve McConnell's foreword to the book says: "Karl is one of the most thoughtful software people I know. He has reflected deeply on the software development irritants he has encountered over his career, and this book contains 60 of his most valuable responses".
-
Cockburn A., Writing Effective Use Cases (2001)
The book presents Use Cases, a great framework for deterministic requirements. The later you discover a requirements mistake, the more it costs to fix. It is like $1 in design phase vs $10 in development vs $100 in production.
-
Beck K., Implementation Patterns (2007)
The book is about code design—literally, how we construct meanings through code. It concisely presents a wide set of techniques and conventions that improve readability, communicate intent clearly, and make code easier to modify and use.
There is a number of great basic books on the subject (1, 2, 3). This one is a good addition in a concise form.
-
Beck K., Planning Extreme Programming (2001)
The book on XP planning covers most of what today Agile is in a nutshell. It is a great practical review of Agile Software Engineering implementation.
-
Evans E., Domain-Driven Design (2004)
Successful business applications are among the most efficient and effective investments. DDD provides a unique engineering foundation to build such applications. The blue book is a must-practice resource for every OO business software developer to learn DDD.
-
Beck K., TDD by Example (2002)
The foundational book on TDD. As mostly conceptual, it is an interesting reading for the experienced TDDers. The TDD cycle is, probably, the sole practical - yet critical - takeout for beginners.
-
Astels D., Test-Driven Development (2003)
The book itself is quite heavy but, unlike other TDD books, it puts TDD after modeling which cardinally helps to start applying TDD in practice. Most valuable content is reviewed.
-
Fowler M., UML Distilled (2004)
UML is a must-have tool for modeling, designing software, for communicating and accumulating knowledge about software within teams and across time.
-
Kruchten P., Managing Technical Debt (2019)
The book presents a concise and structured look at what the technical debt is, where it comes from and how to treat it in short- and long-term perspective.
The book is somewhat a middle ground between business and engineering perspectives, gravitating towards managerial aspects of technical debt.
It suggests a number of useful techniques for managing the debt. Meanwhile, some of the techniques look inapplicable trying to solve the engineering issues using managerial approaches.
-
Gause D., Exploring Requirements: Quality Before Design (1989)
Many well-written books on requirements sink into details trying to establish formal processes that promise flawless execution. Often they create rigid complicated systems, difficult to apply in practice.
This book provides seemingly forgotten basics that flexibly guide our requirements journeys leading to unambiguous knowledge and products customers love. It can serve as the single comprehensive source of basic knowledge, allowing beginners to start practicing requirements extraction right away—both in substance and process.
For reference, here is a number of more modern practical books on the subject worth to study: 1, 2, 3.
-
Fowler M., Domain-Specific Languages (2011)
Probably a primary and essential reading for more experienced developers specifically for practical applications and secondary due to omnipresent usage of DSLs in the industry.
-
Sadalage P., Fowler M., NoSQL Distilled (2013)
NoSQL is not "go-to" choice for every project. While relational databases are largely similar, NoSQL has different types each designed for specific purpose. The book is a right sized intro to when and why NoSQL databases should be selected.