Thoughts
Notes on design, code, and the details that make software feel considered.
- A Command Bus Must Pay for Its Indirection
- A Composition Root Makes Choices Visible
- A Hexagon Is Not a Directory Layout
- A Mock Fortress Tests a Call Script
- A Pull Request Is a Review Narrative, Not a Template
- A Queued Command Changes the Contract
- A Surviving Mutant Is a Question, Not a Score
- A Valid Command Can Still Be Refused
- An Interface Does Not Make a Fake Substitutable
- Choose the Test Boundary from the Defect
- Coverage Tells You What Ran, Not What Your Tests Would Catch
- From Commit to Changelog: An Intent-Aware Release Pipeline
- Intent Commits: Commit Types Are Not Release Decisions
- Unreleased Is Not a Junk Drawer
- EventStorming Finds Disagreement Before It Finds Services
- Shared Kernel or Published Language: Choose Where Coordination Lives
- A Process Manager Remembers What the Queue Cannot
- CQRS Starts When Reads Need a Different Model
- A Repository Is a Domain Collection, Not an ORM Wrapper
- Entity, Value Object, Aggregate, Model, DTO: Name the Role
- Strategy Chooses How; Command Records What to Do
- A Null Object Should Mean Nothing Happened
- Tell, Don't Ask Means Keep the Decision with the State
- The Law of Demeter Is About Knowledge, Not Dots
- Composition Over Inheritance Is a Decision, Not a Rule
- Dependency Inversion Lets Policy Own the Boundary
- Interfaces Belong to Their Clients
- Substitution Is a Behavioral Contract
- Open–Closed Protects Stable Policy from Repeated Variation
- Single Responsibility Is About Change, Not Class Size