Technical debt

Your codebase is a palimpsest

Every legacy codebase is a palimpsest: layers of decisions written on top of each other, none fully erased. Geoffrey Dhuyvetters argues that what looks like technical debt is often stratigraphy, and you read it before you rewrite it.

The cost of the quick fix

The quick fix isn't cheaper. It's cheaper today. Bram Devries traces how deferred fixes compound into emergencies, and argues that naming the trade-off out loud is the only way to break the cycle.

The disconnect between management and engineering

A mobile app, past its usefulness, was days from being phased out. One email reversed the decision. No discussion. No input from engineering. This is what happens when decision-making drifts too far from the work.

How we rewrote our tech stack in under a day

Last week, we deleted 16,000 lines of code, rewrote 11,500, migrated frameworks, ripped out React, and swapped our entire CSS setup with AI. It took less than 6 hours.

Technical debt lost its excuse

Technical debt used to justify meetings, trade-offs, and dedicated sprints. AI has changed that. Cleanup is now fast, cheap, and continuous. Teams that stop debating and start fixing unlock faster delivery and better outcomes.

Why AI makes engineering teams smaller, but not simpler

AI is changing what small teams can ship, boilerplate gone, prototypes faster, experimentation cheaper. But lower costs of building don't mean lower costs of building the wrong thing. It just means you can do it faster.

AI didn't change the economics of software engineering

AI made writing code faster, but the real economics of software engineering were never about typing code in the first place.

The unbundling of engineering value (Part 2)

AI won't make software engineers redundant. It will expose what engineering was always supposed to be about: understanding systems, not just writing code.

The unbundling of engineering value (Part 1)

Here's part one of a post I shared with our team on the radical change and evolution of our jobs. AI won't make software engineers redundant. It will expose what engineering was always supposed to be about: understanding systems, not just writing code.

How AI is quietly killing open source

LLMs generate code on demand, but they do not replace maintainers, communities, or years of shared learning. This piece explores how AI-assisted coding risks fragmenting logic, increasing technical debt, and slowly eroding the open source ecosystem.

A guide to vibe coding vs AI-assisted development

Vibe coding or AI-assisted development? The choice isn't binary, but getting it wrong at the wrong stage will cost you. This piece breaks down when to embrace speed over architecture, when to take back control, and why the best teams don't pick sides.

The value of code review

Code reviews improve more than code quality. Done well, they shape better problem-solving, expose edge cases, and spread knowledge across teams. Learn how small, focused reviews and AI support help teams ship faster with confidence.

Cloudy with a chance of function calls

In the first of a series exploring infrastructure fundamentals, Brenden addresses the most frequently asked questions about what's really happening under the hood with complex pipelines and AI/data systems, bringing the cloud to life.

Legacy vs technical debt: how investors can spot hidden risks in software products

What can investors do about legacy code to prevent your startup from failure? What is the difference between legacy and technical debt?

Ignoring revisions when using git blame

Tired of git blame pointing to useless formatting commits? Learn how to ignore revisions with --ignore-rev or .git-blame-ignore-revs to keep Git history accurate and helpful.

Subscribe