Before You Buy a Local Database
The difference showed up gradually, then all at once. Every abstraction has a cost, and someone eventually pays it. We shipped it behind a flag and watched the graphs for a few days. I like log files that shows the marks of how it was made.
The setup
For a long time I treated test suites as an afterthought. There is no single right way to approach profiling, but some ways are kinder than others. Logs are only useful if someone can read them at three in the morning. Below are a few notes, roughly in the order I learned them.
Tedious technology is a feature, not a compromise.
Small things
Tests are documentation that fails loudly when it goes stale. In June the light changes, and so does the work. Every spring I revisit the same questions about log files. I am still not sure I have it right, but it is closer.
In September the light changes, and so does the work. This began as a quick note and gradually turned into something longer. Most performance problems are really data-shape problems. Half of the work is deciding what to leave out. Deleting code remains the most satisfying refactor.
What changed
For a long time I treated type systems as an afterthought. Most of what I know about configuration came from getting it wrong first. Looking back, the pragmatic approach was the right call. I like build pipelines that shows the marks of how it was made.
A note on tools
For a long time I treated configuration as an afterthought. The specifics matter less than the habit of paying attention. I keep a short list of things to try next; refactoring is near the top. Most of what I know about build pipelines came from getting it wrong first. I changed my mind about code review twice while writing this.
Good test suites is mostly a series of little, unglamorous decisions.
Between profiling and debugging in production, the second one taught me more. I would rather do one thing carefully than five things quickly.
test suitesbackground jobscode review