<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged bookreview</title>
<link>https://coderlegion.com/tag/bookreview</link>
<description>Powered by Question2Answer</description>
<item>
<title>SHELL Method</title>
<link>https://coderlegion.com/12080/shell-method</link>
<description>&lt;p&gt;I’m excited to share that &lt;strong&gt;Shell Method&lt;/strong&gt; is now officially available.&lt;/p&gt;
&lt;p&gt;This project has been years in the making.&lt;/p&gt;
&lt;p&gt;Shell Method is a practical framework designed for solo creators, indie developers, and builders who want to actually finish what they start.&lt;/p&gt;
&lt;p&gt;It focuses on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reducing start resistance&lt;/li&gt;
&lt;li&gt;Building consistency without burnout&lt;/li&gt;
&lt;li&gt;Managing energy instead of just time&lt;/li&gt;
&lt;li&gt;Structuring projects in a way that makes shipping realistic&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Everything inside comes from real-world experience - building games, writing books, and working on long-term projects alongside a full-time job.&lt;/p&gt;
&lt;p&gt;This isn’t theory. Based on my over 26 years of experience working solo and in teams. It’s a field-tested approach shaped by trial, failure, iteration, and delivery.&lt;/p&gt;
&lt;p&gt;If you're building something on your own and struggling with momentum or consistency, I hope this helps.&lt;/p&gt;
</description>
<category>Launches</category>
<guid isPermaLink="true">https://coderlegion.com/12080/shell-method</guid>
<pubDate>Mon, 23 Feb 2026 09:03:21 +0000</pubDate>
</item>
<item>
<title>Why Programs Fail A Guide to Systematic Debugging by Andreas Zeller-A Book Review</title>
<link>https://coderlegion.com/10211/why-programs-fail-a-guide-to-systematic-debugging-by-andreas-zeller-a-book-review</link>
<description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
A while back, I was given a list of books to read in order to become a world class software engineer. I have done previous reviews &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/hectorw_tt&quot;&gt;here&lt;/a&gt;. One of these books is &lt;em&gt;Why Programs Fail A Guide to Systematic Debugging&lt;/em&gt; by Andreas Zeller.&lt;/p&gt;
&lt;p&gt;As experienced engineers may know debugging is an important aspect of our jobs. In complex codebases, this may form the majority of our work. Unfortunately, it isn't something that is usually taught in degrees and bootcamps and we must learn it through practical experience whilst on the job.&lt;/p&gt;
&lt;p&gt;This book helps to ease our task by introducing us to techniques used in debugging. The book is divided into 15 chapters. Each chapter is divided into 5 sections.&lt;/p&gt;
&lt;p&gt;The first section discusses the title of the chapter in detail, the second the core concepts that software engineers should take, the third the tools to use, the fourth points to what we can also read and the final is a number of exercises to do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How Do Bugs Arise?&lt;/strong&gt;&lt;br&gt;
In my experience, bugs are usually caused by incorrect assumptions about the code. Due to programmers being under tight deadlines, bugs are usually discovered by end users. They can usually be very costly. The author discusses this briefly at the end of chapter 1.&lt;/p&gt;
&lt;p&gt;The first chapter discusses how failures in software arise. The author thinks it takes place in 3 stages:&lt;br&gt;
i) The programmer creates a &lt;em&gt;defect&lt;/em&gt; in the programming code.&lt;br&gt;
ii) The defect causes an &lt;em&gt;infection&lt;/em&gt; in the programming state&lt;br&gt;
iii) The infection causes a &lt;em&gt;failure&lt;/em&gt;-an externally observable failure.&lt;/p&gt;
&lt;p&gt;The author lists a series of steps with the acronym TRAFFIC to debug a program.&lt;br&gt;
i) &lt;em&gt;Track&lt;/em&gt;: Create a problem in the programming database. In the second chapter, the author discusses how to keep track of the problems.&lt;br&gt;
ii) &lt;em&gt;Reproduce&lt;/em&gt;: Reproduce the failure.This is discussed in chapter 4.&lt;br&gt;
iii) &lt;em&gt;Automate&lt;/em&gt;: Automate and simplify the test case.&lt;br&gt;
iv) &lt;em&gt;Find Origins&lt;/em&gt;: Follow back the dependencies from the failure to possible infection origins.&lt;br&gt;
v) &lt;em&gt;Focus&lt;/em&gt;&lt;br&gt;
vi) &lt;em&gt;Isolate&lt;/em&gt;: Use the scientific method (see Chapter 6) to isolate the origin of the infection. Continue isolating origins transitively until you have an infection chain from defect to failure.&lt;br&gt;
vii) &lt;em&gt;Correct&lt;/em&gt;: Remove the defect and verify the success of your fix.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How to fix bugs?&lt;/strong&gt;&lt;br&gt;
As experienced developers know, there can be a number of issues that may arise when fixing a bug. First, we need to know whether the issue is truly fixed. To do this we may a correct understanding of the problem (the problem database mentioned above). Secondly, we need to also ensure that the fix doesn't cause any more problems.&lt;/p&gt;
&lt;p&gt;My approach to debugging which has been gathered from working on different codebases over the years is to understand the problem, read the codebase, understand the workflow using logging statements, make the fix and adapt so that nothing else is broken, verify that the fix works using unit and integration testing and verify that nothing else has been broken running previous unit and integration tests.&lt;/p&gt;
&lt;p&gt;Whilst this does work, it can be time consuming. The author makes a series of recommendations throughout the book that involves both tools and techniques to make the process more efficient.&lt;/p&gt;
&lt;p&gt;The tools he suggests are debuggers and one of the techniques is an adaptation of the scientific method in a process known as scientific debugging.&lt;br&gt;
The steps in this method are&lt;br&gt;
i) &lt;em&gt;Observe&lt;/em&gt; a failure.&lt;br&gt;
ii) Invent a &lt;em&gt;hypothesis&lt;/em&gt; as to the failure cause that is consistent with the observations.&lt;br&gt;
iii)Use the hypothesis to make &lt;em&gt;predictions&lt;/em&gt;.&lt;br&gt;
iv)Test the hypothesis by &lt;em&gt;experiments&lt;/em&gt; and further observations.&lt;br&gt;
v) Repeat steps 3 and 4 until the hypothesis can no longer be refined.&lt;/p&gt;
&lt;p&gt;Applying the scientific debugging should help the programmer to find the issue. The author spends a number of chapters discussing in detail how to do so. Once this is done, we must fix the problem. The author discusses in chapter 15.&lt;/p&gt;
&lt;p&gt;As I mentioned above, we need to verify the fix resolves the problem and that it doesn't cause new problems. Other &lt;a rel=&quot;nofollow&quot; href=&quot;https://dev.to/hectorw_tt/a-book-review-of-working-effectively-with-legacy-code-by-michael-feathers-5c47&quot;&gt;books&lt;/a&gt; discuss how to do this. Experienced engineers should recognize that testing will help with both.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
This is a valuable, practical book. It is well organized and the summaries at the end of each chapter make it easy for programmers to refer to if they should forget or to get summaries of the main deductions. I recommend this book for all software engineers from novices to seniors.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/10211/why-programs-fail-a-guide-to-systematic-debugging-by-andreas-zeller-a-book-review</guid>
<pubDate>Wed, 21 Jan 2026 20:25:39 +0000</pubDate>
</item>
<item>
<title>A Book Review of Working Effectively With Legacy Code by Michael Feathers</title>
<link>https://coderlegion.com/9356/a-book-review-of-working-effectively-with-legacy-code-by-michael-feathers</link>
<description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A large part of software engineering involves not only designing and creating new programs, but also working with existing codebases. Due to a number of reasons, we may need to make changes to the codebase.&lt;br&gt;
There are codebases where changes lead to an increasing number of problems. This is often referred to as &lt;em&gt;legacy code&lt;/em&gt;, which the author defines as codebases without tests. The book Working Effectively With Legacy Code discusses how to work with such codebases.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Changes in the system can lead to a disruption in the existing functionality of the system. Why then do we need to make changes to the existing system? The book gives 4 reasons.&lt;br&gt;
1.Adding a feature&lt;br&gt;
2.Fixing a bug&lt;br&gt;
3.Improving the design&lt;br&gt;
4.Optimizing resource usage&lt;/p&gt;
&lt;p&gt;The challenge when making these changes is to preserve the existing functionality of the system. Preserving the behavior involves some risk. This is because the codebase may have a lot of entanglements and the code to be changed may have some dependencies. Thus changes may result in unwanted changes.&lt;/p&gt;
&lt;p&gt;According to the book to mitigate risk, we have to ask 3 questions.&lt;/p&gt;
&lt;p&gt;What changes do we have to make?&lt;br&gt;
How will we know that we've done them correctly?&lt;br&gt;
How will we know that we haven't broken anything?&lt;br&gt;
Writing tests can help us with the process of mitigating risks as we know what works.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;br&gt;
To solve the problem described above, the author suggests a &lt;em&gt;legacy code change&lt;/em&gt; algorithm of 5 steps. These are:&lt;/p&gt;
&lt;p&gt;1.Identify change points&lt;br&gt;
2.Identify test points&lt;br&gt;
3.Break dependencies&lt;br&gt;
4.Write tests&lt;br&gt;
5.Make changes and refactor&lt;/p&gt;
&lt;p&gt;The rest of the book contains lots of details on how to execute the steps above.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br&gt;
In a nutshell, the way to deal with legacy codebases is to introduce tests that allow us to understand how the system works,to map out dependencies and where possible break them.The book has lots of details on doing this.&lt;br&gt;
This is a useful and practical book that discusses how to deal with legacy codebases that are too often prevalent in the real world. I recommend this book for experienced and advanced engineers.&lt;br&gt;
The advice given can be useful regardless of the programming languages used.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/9356/a-book-review-of-working-effectively-with-legacy-code-by-michael-feathers</guid>
<pubDate>Wed, 07 Jan 2026 15:52:25 +0000</pubDate>
</item>
<item>
<title>A Book Review of A Philosophy of Software Design-how to create software that is easy to maintain</title>
<link>https://coderlegion.com/7553/book-review-of-philosophy-of-software-design-how-to-create-software-that-is-easy-maintain</link>
<description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A while back I was given a list of books to read in order to become a world class software engineer.One of these books was A Philosophy of Software Design by John Ousterhout. As the title implies, this book describes a way to design software. I would add how to design software that is easy to maintain.&lt;/p&gt;
&lt;p&gt;As experienced engineers know, software engineering isn't just about creating software. User requirements may change in the future and new features may need to be added,bugs may be discovered in the existing functionality or changes in the existing codebase to make the code more efficient may be needed.&lt;/p&gt;
&lt;p&gt;However, changing the existing codebase to incorporate these changes may interrupt existing functionality. This usually occurs because the code written was complex in the first place.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Complexity&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The book describes two reasons for complexity:&lt;em&gt;dependencies&lt;/em&gt; and &lt;em&gt;obscurity&lt;/em&gt;. Dependency arises when one piece of code can't be changed without affecting others.Obscurity happens when important information isnt obvious.&lt;/p&gt;
&lt;p&gt;The author also describes 3 symptoms of complexity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.Change Amplifications&lt;/strong&gt;&lt;br&gt;
A simple modification requires a lot of changes due to the fact that there are a lot of dependencies.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.Cognitive Load&lt;/strong&gt;&lt;br&gt;
The developer needs to understand a lot of the codebase to make it easy to understand.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.Unknown unknowns&lt;/strong&gt;&lt;br&gt;
It isn't obvious what pieces of code must be modified to complete a task or what information a developer must have to carry out the task successfully.In the author's opinion,this is the worst of the 3.&lt;/p&gt;
&lt;p&gt;The author's proposed solution to eliminate or reduce code complexity is to make the code obvious. The book lists a number of ways that this can be done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Programming Mindset&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Software engineers are often in a rush to meet tight deadlines. As a result, they focus on writing code which works without thinking about the future. The author labels this as &lt;em&gt;tactical programming&lt;/em&gt; and advises against it as due to its short sighted nature,it can lead to increases in the complexity of the code.&lt;/p&gt;
&lt;p&gt;Instead the author recommends thinking with a &lt;em&gt;strategic programming&lt;/em&gt; mindset. Here, developers must try not to introduce unnecessary complexity in the system. The focus must be on improving the design of the system where possible thus making it easier for other programmers to work in the future.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modular Design&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A technique the author recommends to reduce complexity is to use modules.This ensures that developers face a fraction of the system's overall completixy.The author advises to use &lt;em&gt;deep modules&lt;/em&gt;-systems with a simple interface but a lot of complexity and advises against &lt;em&gt;shallow modules&lt;/em&gt;-systems with a complex interface.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Information Hiding and Leakage&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One way of creating deep modules is to use a technique known as &lt;em&gt;information hiding&lt;/em&gt;. It involves providing other modules and users with a simple interface whilst hiding the implementation. People familiar with object oriented programming may know this as encapsulation.&lt;/p&gt;
&lt;p&gt;In contrast, the author recommends against &lt;em&gt;information leakage&lt;/em&gt;. This involves sharing of critical design information in multiple modules.This is a violation of the &lt;em&gt;Dont Repeat Yourself&lt;/em&gt; principle of software engineering.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;General purpose vs Special purpose Modules&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Another approach the author proposes to reduce complexity is to use modules that are &lt;em&gt;somewhat general purpose&lt;/em&gt; rather than &lt;em&gt;special purpose&lt;/em&gt;. The former modules can cover a lot of use cases whilst the latter covers special cases. The difficulty is of course knowing what problems a module may solve today versus tomorrow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Exception Handling&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The author gives some advice that is controversial which is &lt;em&gt;to define errors out of existence&lt;/em&gt;. This is because exceptions and errors may increase the code needed to deal with them and thus their complexity. However, this may not be always practical. I would say to minimize the errors you are dealing with where necessary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comments&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The author makes another recommendation that is controversial. For those of us familiar with the book Clean Code by Uncle Bob, we were advised there to avoid comments where unnecessary. The author takes the opposite approach and recommends using comments as part of the system's design. We should start with comments.&lt;/p&gt;
&lt;p&gt;He gives the reasons people give for not using comments and a reply as to why you should. He does raise some valid points. My recommendation having read both schools of thought is to use comments to explain design decisions and where the code may not be obvious. This should decrease the cognitive load.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usage of Proper Names in Variables&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The author recommends the use of variable names that are easy to understand, consistent and that create the right image in the minds of developers. This is one of the clean code guidelines recommended by Uncle Bob.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The author recommends the use of consistency in naming, coding styles, interfaces, design patterns and invariants. This should reduce the cognitive load on developers. Those of us familiar with working on complex codebases will appreciate how much consistency helps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code Optimization&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As experienced engineers know, the speed and memory usage of software is important when designing and implementing software. The author agrees but he does not think that this should come at the expense of increased code complexity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The book argues that software design is an important part of the software engineering process. Designs where the code is obvious will make future work on that codebase easier. In contrast, code that is complex increases future work and makes bugs likelier.&lt;/p&gt;
&lt;p&gt;This is something I agree with. Some of the recommendations are a bit controversial. You should look at the pros and cons of the error handling and comments advice before deciding.&lt;/p&gt;
&lt;p&gt;The ideas put forward in this book are clear and practical. The book is short along with the chapters. In conclusion, I recommend this book for all software engineers.Which of Ousterhout’s design principles do you think is hardest to apply in your codebase, and why?&lt;/p&gt;
</description>
<category>Resume Writing</category>
<guid isPermaLink="true">https://coderlegion.com/7553/book-review-of-philosophy-of-software-design-how-to-create-software-that-is-easy-maintain</guid>
<pubDate>Wed, 19 Nov 2025 18:32:05 +0000</pubDate>
</item>
<item>
<title>Designing Data-Intensive Applications [Book Review]</title>
<link>https://coderlegion.com/7046/designing-data-intensive-applications-book-review</link>
<description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Most backend developers eventually reach a point where they realize: learning another framework won’t meaningfully move them up to senior level. You can know Spring, Quarkus, Node, Nest, Django, whatever – and still not actually understand the deeper architectural forces that make large scale systems reliable.&lt;/p&gt;
&lt;p&gt;That’s where “Designing Data-Intensive Applications” (DDIA) hits like a hammer.&lt;/p&gt;
&lt;p&gt;This book doesn’t care about trends or hype. It forces you to understand the realities behind storage engines, distributed systems, data pipelines, fault tolerance, replication, consistency, and durability. And when you get this – you start thinking like a system designer, not just a code implementer.&lt;/p&gt;
&lt;p&gt;This is a review, but also a recommendation: if you want to level up from mid-level to senior backend, this book should be on your “mandatory” list.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why I read this Book&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I follow many software engineers on LinkedIn and Twitter. One of them gave a list of books that I would need to become a world class engineer. This book was on that list. As the title suggests this book is about designing applications that process huge amounts of data-possibly limitless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The single biggest value of the book&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;DDIA teaches you that modern backend engineering is less about functions and classes… and more about data flow and correctness across failure conditions. It is about building systems that can be reliable under any conditions, that are maintainable and easy to change and that can handle large amounts of data easily.&lt;br&gt;
Most production systems are not CPU-bound.&lt;/p&gt;
&lt;p&gt;They are data-bound.&lt;/p&gt;
&lt;p&gt;Data movement.&lt;br&gt;
Data reliability.&lt;br&gt;
Data transformations.&lt;br&gt;
Data structure evolution over time.&lt;/p&gt;
&lt;p&gt;This book explains how real world systems survive reality: partial failures, retries, network partitions, schema drift, state synchronization, and replayability.&lt;/p&gt;
&lt;p&gt;It gives you the mental model to see why large systems behave the way they do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Topics Covered&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; The book is divided into 3 parts. Part I is titled &lt;em&gt;Foundations of Data Systems&lt;/em&gt;. It is composed of 4 chapters. Chapter 1 introduces the concepts of reliability, scalability and maintainability. Chapter 2 discusses data models and compares relational and non relational databases. Chapter 3 discusses briefly the internals of databases. Chapter 4 discusses encoding data. &lt;br&gt;
 Part II is titled &lt;em&gt;Distributed data&lt;/em&gt; and is divided into 5 chapters. Chapter 5 discusses Replication of databases across distributed systems and the issues involved. Chapter 6 discusses partitioning databases across distributed systems and the problems involved. Chapter 7 discusses the concept of transactions in databases. Chapter 8 discusses the problems encountered with distributed systems and chapter 9 discusses consistency and consensus.&lt;br&gt;
 Part III is titled &lt;em&gt;Derived Data&lt;/em&gt; is divided into 3 chapters. Chapter 10 discusses batch processing, Chapter 11 discusses stream processing and Chapter 12 discusses the future of data systems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5 concepts from DDIA that permanently improved how I think&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.Immutable logs create sanity and replayability.&lt;/strong&gt;&lt;br&gt;
Append-only logs aren’t just a Kafka pattern – they are a way to make systems auditable, recoverable, and debuggable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.Consistency is not binary.&lt;/strong&gt;&lt;br&gt;
There isn’t just “strong vs eventual”. There are reliability tradeoffs you choose. Most developers never consciously choose their consistency model. Seniors do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3.Protocols matter more than frameworks.&lt;/strong&gt;&lt;br&gt;
When systems break across nodes or services, the protocol is what saves you. APIs are not just endpoints. They are agreements. Durable ones.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4.Batch vs stream is a philosophical divide.&lt;/strong&gt;&lt;br&gt;
Batch is a snapshot of the past. Streaming is the present unfolding in motion. Great systems often use both.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5.Schema evolution is a design problem, not an afterthought.&lt;/strong&gt;&lt;br&gt;
If you design your data structures to evolve safely… you avoid entire categories of distributed bugs.&lt;/p&gt;
&lt;p&gt;You can take any one of these ideas and elevate your code review intuition immediately.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DDIA changes how you study and practice engineering&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;.This book indirectly forces a career mindset shift:&lt;/p&gt;
&lt;p&gt;.Senior dev interviews? They’re testing these concepts.&lt;/p&gt;
&lt;p&gt;.Architecture discussions at real companies? They’re anchored in these tradeoffs.&lt;/p&gt;
&lt;p&gt;Debugging production outages? Almost always related to assumptions this book teaches you how to avoid.&lt;/p&gt;
&lt;p&gt;It moves you away from “coding tasks” and into “system outcomes”.&lt;/p&gt;
&lt;p&gt;That is literally the identity shift between mid-level and senior.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who should read this book?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;*mid-level backend devs who want to do proper system design&lt;/p&gt;
&lt;p&gt;*people preparing for senior interviews or staff level interviews&lt;/p&gt;
&lt;p&gt;*anyone going into infrastructure, distributed systems, or data engineering&lt;/p&gt;
&lt;p&gt;future AppSec engineers (yes, security without understanding distributed systems is incomplete)&lt;/p&gt;
&lt;p&gt;You don’t need to read it in one shot. This is a book you study over months and revisit repeatedly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Final thoughts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“Designing Data-Intensive Applications” is not a coding book. It’s a “how the real world actually works” book.&lt;/p&gt;
&lt;p&gt;If you want a single resource to help you break out of “framework-level thinking” and start thinking as a distributed systems engineer – this is it.&lt;/p&gt;
&lt;p&gt;This book is where backend engineering grows up.&lt;/p&gt;
</description>
<category>Big Data</category>
<guid isPermaLink="true">https://coderlegion.com/7046/designing-data-intensive-applications-book-review</guid>
<pubDate>Wed, 05 Nov 2025 16:20:50 +0000</pubDate>
</item>
<item>
<title>Book review: Writing for Developers</title>
<link>https://coderlegion.com/3177/book-review-writing-for-developers</link>
<description>&lt;p&gt;&lt;em&gt;Disclaimer&lt;/em&gt;: This post includes affiliate links; I may receive compensation if you purchase the book from the different links provided in this post.&lt;/p&gt;
&lt;p&gt;This review is about &lt;a rel=&quot;nofollow&quot; href=&quot;https://www.manning.com/books/writing-for-developers?utm_source=frankel&amp;amp;utm_medium=affiliate&amp;amp;utm_campaign=affiliate&amp;amp;a_aid=frankel&quot;&gt;Writing for Developers&lt;/a&gt; by Piotr Sarna and Cynthia Dunlop from Manning.&lt;/p&gt;
&lt;p&gt;I started &lt;a rel=&quot;nofollow&quot; href=&quot;https://blog.frankel.ch/&quot;&gt;my blog&lt;/a&gt; as a hobby seventeen years ago, in April 2008. At the time, I had no clue about technical writing. I'm pretty sure it was not even a thing back then: the only content aimed at developers was technical documentation. Since then, the landscape has changed a lot, to the point that companies hire for technical writer positions.&lt;/p&gt;
&lt;p&gt;I was curious to compare what I learned by doing to the structured approach of a book. I ordered the book last year when it was still being written. It was published only early this year, and I was already reading (and reviewing!) &lt;a rel=&quot;nofollow&quot; href=&quot;https://blog.frankel.ch/duckdb-in-action/&quot;&gt;DuckDB in action&lt;/a&gt;. I put it on the top of my reading pile list; I finally finished it: here's my review.&lt;/p&gt;
&lt;h3 id=&quot;facts&quot;&gt;Facts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;17 chapters, divided into four parts&lt;/li&gt;
&lt;li&gt;2 appendices&lt;/li&gt;
&lt;li&gt;345 pages&lt;/li&gt;
&lt;li&gt;$39.99 (eBook)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;chapters&quot;&gt;Chapters&lt;/h3&gt;
&lt;p&gt;Part 1 - Fundamentals&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Why write&lt;/li&gt;
&lt;li&gt;What to write&lt;/li&gt;
&lt;li&gt;Captivating readers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Part 2 - Nailing the writing process&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Creating your working draft&lt;/li&gt;
&lt;li&gt;Optimizing your draft&lt;/li&gt;
&lt;li&gt;Getting feedback&lt;/li&gt;
&lt;li&gt;Ship it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Part 3 - Applying the blog post pattern&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &quot;Bug Hunt&quot; pattern&lt;/li&gt;
&lt;li&gt;The &quot;Rewrote It in X&quot; pattern&lt;/li&gt;
&lt;li&gt;The &quot;How We Built It&quot; pattern&lt;/li&gt;
&lt;li&gt;The &quot;Lessons Learned&quot; pattern&lt;/li&gt;
&lt;li&gt;The &quot;Thoughts on Trends&quot; pattern&lt;/li&gt;
&lt;li&gt;The &quot;Non-markety Product Perspectives&quot; pattern&lt;/li&gt;
&lt;li&gt;The &quot;Benchmarks and Test Results&quot; pattern&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Part 4 - Promotion, adaptation, and expansion&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Getting attention&lt;/li&gt;
&lt;li&gt;From blog post to conference talk&lt;/li&gt;
&lt;li&gt;So you want to write a book&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;pros-and-cons&quot;&gt;Pros and cons&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;In the first chapter, the authors list the most common reasons developers mention not to write posts. I have heard many of these reasons and can confirm their existence. Then, the authors address each of them and provide multiple counter-arguments.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Part three is dedicated to blog post &lt;em&gt;patterns&lt;/em&gt;; each chapter describes a pattern in detail. Reading this made me realize that most blog posts fall into a specific and easily identifiable category. The authors structured each pattern-chapter into the following sections:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purpose: what's the idea (or ideas) behind the pattern&lt;/li&gt;
&lt;li&gt;Audience: who does the pattern target&lt;/li&gt;
&lt;li&gt;Examples: a couple of existing blog posts that embody the pattern&lt;/li&gt;
&lt;li&gt;Characteristics: common traits found among the posts of this type&lt;/li&gt;
&lt;li&gt;Dos and don'ts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;  I do love typologies, and I found this breakdown very useful.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;I found part four less relevant, especially since cross-posting has been part of my workflow for ages, and I reuse writing content for conference talks. If you never considered these options, you'll benefit from these chapters.&lt;/li&gt;
&lt;li&gt;The only con I found is that the authors remind us that you should ask your company before you reveal trade secrets. I understand that you would like to warn people, but when it's repeated several times throughout the book, I got the feeling they're writing to dummies–not something I'm fond of.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;summary&quot;&gt;Summary&lt;/h3&gt;
&lt;p&gt;If you're a technical writer, a Developer Advocate tasked with technical writing, or a regular developer who wants to start a blog or contribute to a company blog, I recommend getting this book. The exhaustive description of common patterns is a huge asset for beginning writers and can help even seasoned ones.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Originally published at &lt;a rel=&quot;nofollow&quot; href=&quot;https://blog.frankel.ch/writing-for-developers/&quot;&gt;A Java Geek&lt;/a&gt; on May 25&lt;sup&gt;th&lt;/sup&gt;, 2025&lt;/em&gt;&lt;/p&gt;
</description>
<category>Java</category>
<guid isPermaLink="true">https://coderlegion.com/3177/book-review-writing-for-developers</guid>
<pubDate>Thu, 29 May 2025 07:18:24 +0000</pubDate>
</item>
</channel>
</rss>