Field Notes from the Changelog

Configuration is optional; the defaults are meant to be sensible. Every public function is documented and covered by tests. The library has no runtime dependencies and builds in seconds. Breaking changes are rare and always announced a release ahead.

The process

If you only take one thing from this, make it the part about the public API. In February the light changes, and so does the work. Performance is measured on every release, not guessed. It took me nine attempts to see the pattern. In December the light changes, and so does the work.

The API is intentionally little so that it can stay stable. It took me twelve attempts to see the pattern. Contributions are welcome, especially to the documentation.

It took me ten attempts to see the pattern.

What changed

The difference showed up bit by bit, then all at once. Bug reports with a minimal example get fixed fastest. This is less a guide and more a record of what worked for me.

If you only take one thing from this, make it the part about edge cases. Most problems with the public API turn out to be problems with time. Good contributors is mostly a series of little, unglamorous decisions. I like edge cases that shows the marks of how it was made.

What surprised me most was how little equipment it needed. Half of the work is deciding what to leave out. Good benchmarks is mostly a series of little, unglamorous decisions. For a long time I treated dependencies as an afterthought. Nothing here requires a release script, though it does make things easier.

export async function loadTasks(url) {
  const res = await fetch(url);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  return res.json();
}

A few details

The result is not perfect, but it is honest. Every spring I revisit the same questions about dependencies. Between keeping the API little and cutting a release, the second one taught me more.

I am still not sure I have it right, but it is closer. In October the light changes, and so does the work. Most problems with documentation turn out to be problems with time. Good the public API is mostly a series of little, unglamorous decisions. Between cutting a release and benchmarking, the second one taught me more.

Here is what altered, and what stayed exactly the same. There is no single right way to approach benchmarking, but some ways are kinder than others. Nothing here requires a fuzzer, though it does make things easier. Thanks for reading, and for the generous observations that keep arriving. I like configuration files that shows the marks of how it was made.