Abstraction

Bryce BjorkBryce BjorkJanuary 2026

If you're designing a system, you might ask: should I abstract this function, outsource this component, offshore this team? In general, I believe the answer is no.

Of course, there are exceptions... but often the hidden costs of abstraction are greater than the obvious benefits.1

Abstraction makes building harder. It fragments interrelated logic. It forces you to prematurely name variables. It makes your code brittle. A small change in an abstraction can cause big damage.

Instead, I believe in the power of colocation. Things that work together belong together. Reject abstraction and embrace colocation.2

Footnotes

  1. Colocation is only possible with the right foundational abstractions. Tailwind enables colocation by abstracting class names. Next.js enables colocation by abstracting the build pipeline. While hidden abstractions simplify your workflow, manual abstractions often introduce unexpected friction.

  2. Colocate your software, business, and life. Flat teams perform better than layered ones. Vertical supply chains are more resilient than distributed ones.