}
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

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

Not Everything Needs an LLM

Why smart teams use LLMs to build generators, not to replace them - and how encoding domain knowledge once, deterministically, beats paying an API per token forever.

06/20/26

MVC Separated the Wrong Things

On code proximity, feature-per-folder, single-file templates, and why Tailwind classes tell you more about a component than a semantic class name ever will.

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 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.