
Back-of-the-Envelope Capacity Estimation: QPS to Servers
Go from daily active users to QPS, storage, bandwidth, cache size and server count, with a worked photo-sharing example and a TypeScript estimator.
Read MoreBlog
Articles on software engineering practice — architecture patterns, testing, clean code, and the craft of building maintainable systems.
58 articles

Go from daily active users to QPS, storage, bandwidth, cache size and server count, with a worked photo-sharing example and a TypeScript estimator.
Read More
What hexagonal architecture is, how ports and adapters keep business logic free of frameworks and databases, and a NestJS and Postgres example you can copy.
Read More
What a bounded context is, why Item means three things in ERP sales, inventory and accounting, and how to find boundaries and wire contexts with a context map.
Read More
What a modular monolith is and when it beats microservices: one deployable, a public API per module, a Postgres schema per module and lint-enforced boundaries.
Read More
How to migrate a monolith to microservices with the strangler fig pattern: a routing facade, one slice at a time, data ownership, rollback and when to stop.
Read More
System design is deciding how components, data and failures fit together. A plain-language guide with a worked sizing example and a learning path.
Read More
The operating procedure for maintaining an npm package from UTC+7 alongside a day job: batched triage, issue forms that stop unactionable reports, a published response window, and a scope small enough to defend.
Read More
A commit message generated from a diff only summarises what git show already proves. Where the why lives, what a hook can verify, and one shell bug.
Read More
An agent asked to write tests reads the implementation and asserts what it currently does, which is why the suite is green before you have read a line of it. Here are the four shapes those tests take, the mutation testing run that exposes them, what that run honestly costs, and the prompt change that stops producing them.
Read More
A plugin can declare language servers, which changes what the agent knows about your code: it can ask for a definition instead of guessing from a grep. Here is the declaration, which servers are worth bundling, and what four of them actually cost.
Read More
A PostToolUse hook in this repository started reviewing every edit twice, and the script was not the problem — I had copied it into a plugin and left the original in settings.json. Here is the file-by-file map out of a dotfiles directory, and the precedence rules that decide which copy runs.
Read More
Every entry in an internal Claude Code marketplace is a standing instruction running on somebody else's machine. Here is the editorial policy I run one by: what earns a slot, who owns it, and how it retires.
Read More
A skill is a document, a plugin is a dependency. When one SKILL.md file is enough, when drift between copies means bundle it, and what a plugin costs.
Read More
A plugin is a dependency other people install, so it needs a test suite rather than a demo. What an eval case looks like, why the no-plugin ablation arm is the part that tests activation, and the defect that ships when you skip it.
Read More
The prompt box does more than send text. Here are the sigils, the queue, side questions and the shortcuts worth learning first.
Read More
An LSP plugin gives Claude type errors after every edit and real navigation instead of grep. Here are the languages, the costs and custom servers.
Read More
Most Claude Code errors are configuration rather than bugs. Here they are by family, with the two commands to run first and the real fixes.
Read More
The CLI has dozens of flags and two dozen subcommands. Here are the ones that change outcomes, grouped by the job each one does.
Read More
A session is a saved conversation on disk. Here is what resuming restores, what it quietly drops, and the difference between branch and fork.
Read More
Desktop tasks run on your machine with your files and tools, and catch up when it wakes. That last part changes how you should write the prompt.
Read More
The plugin runs a local MCP server, shares your editor selection on every prompt, and carries one security consideration that is specific to running inside an IDE.
Read More
The extension bundles its own private CLI copy and still does not put claude on your PATH. Here is what it does better than the terminal, and what it cannot do at all.
Read More
Screen reader mode replaces boxes and redraws with labelled linear text a reader can follow in order. Here is what it changes and the settings that need no mode at all.
Read More
Fullscreen rendering kills flicker and flattens memory by drawing on the alternate screen. That costs you native scrollback and mouse selection, and both are recoverable.
Read More