Engineering Notes

Engineering Notes

Why the engineering decisions were made. The reasoning, the trade-offs, and the failures that taught us each lesson.

Engineering notes
06/20/26

No Deps, No Build

On building zero-dependency, no-build web applications with Bun for nonprofits, education, intranets, and small teams - and why appropriate complexity is a feature, not a compromise.

06/20/26

On-Premise, or at Least Your Own VPS

On cost, control, privacy, GDPR, local network performance, and what happens to your business when the internet goes down or a cloud provider's building catches fire.

06/20/26

The Database Is Not a JavaScript Object

A case for writing SQL directly - not because ORMs are wrong, but because the developer who reaches for one without learning what it replaces has chosen a ceiling.

06/20/26

Use the Tools That Work for You

On choosing tools by what makes you productive, not by what the community has decided signals the right kind of developer.

06/20/26

Use the Right Tool

On enforcing a modern browser baseline for internal applications, the real cost of backwards compatibility, and why the browser your staff uses is a business decision, not a technical given.

06/16/26

Quality Doesn't Matter ... Until It Does

Why quality standards must differ between social apps and enterprise software - and how investor pressure, low barriers to entry, and AI are driving a visible decline in the software that actually runs businesses.

06/12/26

The Database Is Probably Permanent

Why most teams never replace their primary database engine, and why designing for portability costs more than it returns. Covers stored procedures, views, triggers, DDL tooling, codegen as an ORM alternative, and the generator pattern behind Reepolee.

06/08/26

Why Bun's SQL Dies in CLI Scripts (and How to Fix It)

How Bun's internal SQL connection pool interacts with the event loop in CLI scripts, why idle connections fail to keep the process alive, and two fixes: reserve() for transaction-scoped connection affinity, setInterval() for fire-and-forget scripts. Both disappear inside Bun.serve().

06/03/26

The Dunning-Kruger Curve Has a Sweet Spot - and It's Hiring You Mid-Level Engineers

On the engineering talent market, why mid-level engineers compound faster than the extremes, and how AI tools specifically reward developers who are competent enough to direct them but curious enough not to trust them blindly.

06/01/26

We Make Our App Fail Loudly on Missing Environment Variables

On startup validation, silent fallbacks, and the principle that a process that won't start with bad config is safer than one that runs quietly with it. Covers Bun's env handling and a simple pattern for making misconfiguration impossible to miss.