How to Unabstract an Abstraction

Abstractions in code are easy to add and challenging to remove. Sometimes we feel stuck with them. But the good news is, you can back out of almost any abstraction with the right mindset. ...

February 1, 2026 · 3 min · Jake Worth

Decoupling Design From Engineering

Often, when you work as an engineer on a small team, you don’t have dedicated designers on staff. How can you deliver beautiful, intuitive software without designers? Here’s a trick that helps me: decoupling my design work from my engineering work. ...

August 29, 2024 · 3 min · Jake Worth

Naive Implementation: The Art of Artless Programming

A naive implementation is a programming technique that prioritizes imperfect shortcuts for the sake of speed, simplicity, or lack of knowledge. ...

June 23, 2022 · 3 min · Jake Worth

PostgreSQL Polymorphism

Scenario: you need a database record that can belong to one record or another, but not both. Polymorphism and exclusivity. One approach is to create a polymorphic-style association at the data layer. By doing so, you’ll get data integrity built in, rather than trusting it will be enforced by each tenant at the application layer. ...

May 30, 2022 · 2 min · Jake Worth

How to Make Renames Easy

Names in software are hard. But what’s worse than a bad name? Sticking with it because you can’t change it. I want us all to be able to effortlessly and fearlessly fix bad names. That’s the topic of this post. ...

March 22, 2022 · 4 min · Jake Worth

Write Better Code by Knowing When Not To Refactor

When I review code, I sometimes request that refactoring changes be removed. Even when I think the changes are are objective improvements, and even when they support my personal preferences. My reasoning? Refactors are not free. ...

August 26, 2021 · 3 min · Jake Worth

Augmenting an Object With the Proxy Pattern

Let’s look at the proxy pattern in Ruby. ...

February 26, 2021 · 3 min · Jake Worth