Working out loud
Short, dated, ungroomed. The opposite of essays — these are the thoughts I am still chewing.
Indices are not free
Every index is a write tax you pay forever in exchange for reads you may or may not run. I keep meeting teams who have ten indices on a table and use three.
#postgresThe runbook is the product
If the service can only be operated by the person who built it, you have not finished building it. The runbook is the part where engineering becomes operations.
#ops#craftSmall deploys, often
A deploy that takes six hours to roll back is not a deploy, it is a renovation. Optimize for the size of the change you can revert in one click.
#ci#devopsLogs are a design decision
Every log line is a tiny API your future self will depend on. Treat them like a public interface — versioned, structured, ruthlessly pruned.
#observabilityREST is fine
I keep watching teams rip out a working REST API for a GraphQL one they will replace with tRPC inside a year. The shape of your network calls is rarely the bottleneck.
#api#craftTwo engineers and a shell
Most operational outages I have been part of were ultimately fixed by two engineers and a shared shell. The tooling we wrap around that fact matters less than we admit.
#opsCode review as archeology
The best reviews I have received did not just look at the diff — they looked at why the file existed at all, and gently asked whether it still should.
#craftFeature flags are tech debt with a calendar
Every flag is a promise to delete a branch of your code later. Treat the flag's ticket and its deletion ticket as the same ticket.
#processOn boring stacks
Postgres, a queue, and a script that runs every minute will get you further than you think before the architecture diagram needs to grow.
#craftThe monorepo test
If a change spans three repos and you cannot land it in one PR, you do not have services. You have a distributed monolith and worse tooling.
#monorepoObservability is a budget
You can afford to log everything until you cannot. Decide the budget before the bill arrives. Sampling is not a failure, it is the answer.
#observabilityWriting as debugging
Half the bugs I fix get fixed in the paragraph where I describe the bug to someone else. The other half get fixed because I had to type the description.
#craft