Series
Some arguments need more than one article. Start at the beginning and follow them in order.
Debugging Real Systems
Start with the failure, follow the evidence across boundaries, and do not stop at a green build when the cause is still unknown.
Data That Must Survive
Identifiers, clocks, migrations, constraints, and queries all have to respect one awkward fact: the data will probably outlive the code that wrote it.
Integration Without Illusions
What happens after an HTTP 200, during a retry, or when half the work succeeded? The boundary is only useful once those failures have names.
Changing Existing Software
Find what the old system actually does, preserve the behavior that matters, and create a seam small enough to change without betting everything on the rewrite.
Design Before the Pattern Name
Start with the change that hurts. The useful role, invariant, or dependency usually becomes obvious before its pattern name does.
Object Design
Objects should make the next change less surprising through usable construction, honest roles, small collaborations, and contracts callers can rely on.
Domain Discovery and Integration
Language, work, ownership, and system relationships reveal boundaries that a directory tree cannot.
Application Boundaries and Persistence
Clean diagrams eventually meet stored data, concurrent writes, and framework lifecycles. That is where mapping, reconstitution, and ownership stop being cosmetic decisions.
Commands, Events, and Processes
Commands ask for work; events record accepted facts. Queues, outboxes, and long-running processes make the difference expensive to ignore.
Testing for Confidence
Choose the test boundary from the defect you need to catch, not from the coverage number you want to report.
Service Boundaries and Ownership
When is a module no longer enough to own a change? Follow the deployment, coordination, scaling, and ownership costs before paying for a network boundary.
Laravel Performance and Operations
Measure the bottleneck first, because requests, queries, caches, workers, and long-lived processes do not fail in the same way.
Release Engineering
The reason behind a change should survive the trip from commit and review to changelog, release decision, and shipped artifact.
Observability and Deployment
A successful deploy command says almost nothing about compatibility, rollback, or what production is doing now.
Software Supply Chain Security
A lockfile can repeat a choice. It cannot tell you who was allowed to change the artifact, which inputs executed, or where the credentials went.
Engineering Decisions and Leadership
Technical decisions still have to fit commercial reality. Risk, capacity, ownership, pushback, and the conditions for changing course belong in the decision too.
AI as an Engineering Instrument
Use AI to reach evidence faster without handing it comprehension, authority, or the decision.
Recovery Engineering
Backups, replicas, and runbooks matter only when they help restore the first useful service under the failures you actually expect.
Building a Rating Engine
A retrospective of a private logistics rating engine: the original PHP design, model changes, performance investigations and the Go port, with the code and measurements behind the decisions. Dates set the reading order, not when the work happened.