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. Let’s look at an example. A Breaking Abstraction Imagine a currency formatter. function formatPrice(amount) { return `$${amount.toFixed(2)}` } formatPrice(10) // "$10.00" Soon our company decides to launch in Europe. Let’s add that conditional. function formatPrice(amount, currency) { if (currency === "EUR") return `€${amount.toFixed(2)}` return `$${amount.toFixed(2)}` } formatPrice(10) // "$10.00" formatPrice(10, "EUR") // "€10.00" 😊 Hang on; the Czech Republic puts the currency symbol after the monetary amount. I guess we have to add a conditional that supports this: ...

February 1, 2026

Building with MCP, for Real

This year I built several Model Context Protocol (MCP) servers to support ongoing R&D. Here’s my report. But first, some context. What is MCP, and why am I using it? Why Am I Using MCP? MCP is an open-source standard for connecting AI applications to external systems. Here’s some detail from a recent article: “Mike Krieger, [MCP’s] chief product officer, says the idea came while linking Claude, its chatbot, to services like Gmail, an email platform, and GitHub, a repository of code. Instead of integrating each application with Claude on a case-by-case basis, the firm wanted a shared set of rules to help agents directly access a user’s emails or files.” — The Economist, “Intelligent Protocol,” Dec 13, 2025 ...

January 23, 2026

Learning to Program in 2026

If I had to start over as a person who wanted to become a professional programmer, in 2026, what would I do? I wrote about this before, in 2015, and am here in the present to report: a lot has changed. I’d skip my old post, and read this one instead. It’s the simplest, most viable advice I can give today. I’m writing for someone who was like me a decade ago. You are interested in programming as a profession, have little or no programming experience, and you aren’t sure what direction to go. ...

January 16, 2026

Things I Don't Know, As of 2026

Here’s a list of the things that I’d like to learn about and have chosen not to specialize in (yet), as of 2026. I believe that there’s value in exposing one’s ignorance, or “Wearing the white belt” as it’s described in Apprenticeship Patterns. Seniority isn’t about accumulating all the skills. It’s about being an expert where needed, dangerous everywhere else, relentlessly curious, and able to learn quickly. This is a list of things that I don’t know as of 2026. A caveat is that I know something about most things on this list. I can tell you what excellence looks like and identify it in others. ...

January 13, 2026

Getting It Right the First Time

There’s an enviable quality of great engineers I’ve known: they seem to get things right the first time. When you ask them to do something, and they say “It’s done”, it is, almost always. How? Here, I think there actually is “one weird trick.” It’s a bit tedious, but it compounds and is dead simple. It’s checking your work before delivering. Agile Foundations I did not invent this idea. It’s core to many folktales and fables, and also to Agile software development. ...

January 5, 2026

Running Great Refinement Meetings

This year I’ve run over 25 Scrum refinement meetings; here’s what I’ve learned. This post will cover: What is refinement, and why does it matter? Two counterarguments, refuted! My step-by-step approach Notes on pointing bugs Let’s dive in. What is Refinement? (Backlog) Refinement is a process of improving tickets so they are understood by the whole team and ready for work. Refinement turns chaff like this: “Design for error on download screen” ...

December 1, 2025

Prioritization for Engineers: Rank Every Work List

Anytime you’re making a list at work, rank it. This idea came from my recent post: Anytime you’re making a list at work, of anything, rank it. Tech debt? Security concerns? Feature requests? Rank them. Rank them so that you do the important ones first. Those are the only ones you probably will do. — Jake Worth ⚛️🌲 (@jakeworth.com) Oct 16, 2025 at 12:11 PM This is a nuanced argument; let me try and make it! ...

October 23, 2025

Acceptance Criteria That Actually Work

Acceptance criteria, or AC, describe what a feature or bugfix does. Writing them is an art, and some AC work much better than others. So, how do we make them work? By including a little more detail. Let’s explore the goals of AC, a standard example, an example that works better, a few counterarguments, and how to write great AC with ease. Goals of AC: “Right Thing”, “Thing Right”, Documentation What are the goals of AC? They should: ...

September 30, 2025

Get Better at Debugging by Making Predictions

Shift to a proactive mindset by making predictions before any experiments in a debugging session. This may sound simple, but it’s powerful. Here’s how and why it works, why it moves you from reactive to proactive, and how to use it outside of debugging. How and Why to Make a Prediction Imagine you’re debugging a web application, and you’re trying to understand why some data on your page looks wrong. Think of an action you might take to learn more. ...

September 23, 2025

Raise the "I'm Stuck" Flag

Consider this scenario. You’ve been given some work, and you’re stuck. Hours have become days. You’ve exhausted the internet. You’re starting to backtrack, delete work, and start over. Feeling defeated. To make matters worse, you haven’t told anybody. Maybe you’ve waved off help and given a few rosy status reports: “I’ve got this! Just need one more day!” You’re in deep. You know you’ve spent too much time, but you keep pushing, into nights and weekends. And that’s when you realize that you have to tell people how stuck you are. ...

September 10, 2025