Blog
Articles, guides, and notes on software engineering.
The Path to Staff Engineer: A Guide to Becoming an Excellent Technical Professional
A review of The Staff Engineer's Path. A compass for software engineers in positions to lead teams, projects, and organizations. From how to craft vision and strategy to ways of thinking, communication, and conduct, it broadly covers the abilities needed to lead an organization.
Recent Posts
Architect's Textbook: Building Software Architecture that Creates Value
A review of the Architect's Textbook on building software architecture that creates value. Truly a textbook, it broadly covers the areas an architect should know, centered on software architecture, with rich footnotes, book recommendations, and references to expand your learning from.
Metaprogramming Ruby 2nd Edition
A review of Metaprogramming Ruby, 2nd Edition. A book for learning the mechanisms and uses of Ruby metaprogramming. Through the object model and dynamic features, it reveals the nature of Ruby magic, while making clear that truly mastering it takes real effort.
Tidy First? ―Experiential Software Design for Individuals
A review of Tidy First? Kent Beck's thin but dense book that makes you consider when to tidy your code. From the perspectives of coupling and cohesion, and cost and benefit, it frames tidying decisions empirically. Its arguments are concise and clear.
Reflection on 2024 and Goals for Next Year
Personal year-end reflection on 2024: highlights in engineering and learning, plus goals and resolutions for 2025.
Decision-Making Techniques for Software Architects: Leveraging Leadership, Technology, and Product Management
A review of Decision-Making Techniques for Software Architects. A groundbreaking book focused on how architects make decisions. It introduces five questions and seven principles for facing architectural uncertainty, offering solid learning for anyone heading into design.
The Art of Thought Organization
A review of The Art of Thought Organization. Though first published before the internet spread, its message, the value of thinking with your own head and not over-relying on knowledge, still resonates today. In an essay-like voice, it lays out a philosophy for organizing your thinking.
Team Topologies: Adaptive Organization Design for Delivering Valuable Software Quickly
A review of Team Topologies. A book that views organization design and architecture from a team-first perspective. Presenting four team types and interaction patterns, it prompts you to think about how to design communication between teams from the standpoint of building an adaptive organization.
AlloyDB vs Cloud SQL: Performance, Features, and Cost
AlloyDB vs Cloud SQL compared: use cases (OLTP vs HTAP), performance, availability, compatibility, and cost — and when AlloyDB has the edge over Cloud SQL Enterprise edition.
An Invitation to Engineering Organization Theory ~ Confronting Uncertainty and Refactoring Organizations
A review of An Invitation to Engineering Organization Theory. Despite the title, its real theme is uncertainty. It puts into words the many uncertainties around engineering and how to face them. From members to architects, anyone involved in software can learn from it, regardless of role.
Start with the Issue [Revised Edition] - The Simple Essence of Intellectual Production
A review of Start with the Issue (Revised Edition). A book that argues the importance of identifying the issue truly worth tackling rather than just solving a given question. It teaches that thinking deeply about the quality of the problem and starting from a valuable question shapes the quality of intellectual production.
freee Technical Book: Multi-Product Development at freee
A review of freee Technical Book: Multi-Product Development at freee. A book on the practice of multi-product development in business SaaS. It concretely discusses design decisions in the field, such as how to carve out shared operations like application and approval as domains, the relationship between the platform and each app, and the trade-offs that arise.
How to Solve It
A review of How to Solve It. A classic that teaches broadly applicable problem-solving thinking using mathematics as its material. It drives home, again and again, the importance of first understanding the problem well and approaching it from many angles through trial and error.
Mastering API Architecture: Practical Techniques for Evolving Architecture from Monolithic to Microservices
A review of Mastering API Architecture. Using C4 diagrams and ADRs, it explains API architecture patterns, testing, operations, and security. More of an overview than a deep dive, it suits grasping the big picture of evolving architecture from monolithic to microservices.
Reliability Patterns
Learn cloud reliability patterns from AWS, Azure, and GCP. Covers Circuit Breaker, Bulkhead, Ambassador, Retry, Queue-Based Load Leveling, BFF, and other fault-tolerance design patterns.
Practical Ruby Programming: Principles and Trade-offs for Effective Code
A review of Polished Ruby Programming. A book for those who, having finished the primers, want more practical knowledge. Tracing what Ruby-like code looks like through the lens of principles and trade-offs, it conveys Ruby's appeal while also teaching design ideas that transcend the language.
A Comprehensive Guide to the Distributed SQL Query Engine Trino
A review of A Comprehensive Guide to the Distributed SQL Query Engine Trino. It explains Trino, which, via ANSI SQL support and federated queries, handles data across different systems and scales resources in a distributed way for OLAP workloads. You learn an approach that differs from traditional data warehouses.
Code Reading of Pundit
Understand Ruby Pundit authorization framework through code reading, exploring permission policies and authorization mechanisms.
Code Reading of irb
Explore the inner workings of Ruby's interactive shell (irb) and understand its startup process, history loading, and command execution.
Code Reading of reline
Examine reline Ruby library internals through code reading: readline calls, line editing, and text input buffering mechanics.