“Eating the recipe” is a term I’ve made up to try and describe the kind of mistakes that get made by mixing up levels of abstraction.

Humans do not struggle with the distinction between a recipe and the food that the recipe describes how to make. We would not make the mistake of eating a sheet of paper that describes how to make spaghetti, instead of eating the spaghetti. We do, however, design and use systems that make this kind of mistake a lot, or make it easy for humans to make this kind of mistake.

I’ve been meaning to write this up here for a while, but was re-inspired by this story:

When software design is heavily abstracted, the same effect arises in more situations. It’s easy to eat the recipe when dealing with a FactoryManagerManagerFactory, for example, and worse abstractions exist in a lot of software projects. Poor naming exacerbates this, but we have to consider the trade-off of every abstraction itself, and how clear it really is without hard-gained context.