Go ahead, reimplement the wheel

Any time there’s a discussion on a technical team about whether to create something new, someone states the cliche, “don’t reinvent the wheel.” That statement is often enough to stop the idea in its tracks. It’s a dumb cliche, and invoking leads to dumb decisions.

Consider the actual wheel. Imagine you’re building a physical machine to do something. You go to your city’s one wheel store. Said store sells exactly one kind of wheel. You buy some of those and finish your machine? That seems pretty unlikely.

The problem is the verb “reinvent.” It doesn’t actually mean anything. Invention is an idea. Usually it’s reified in a prototype or implementation, but it’s just an idea. If you come up with the same idea independently, you’ve reinvented it. There’s nothing wrong with that, although it’s rare. More often you’ve learned the idea from elsewhere and thus can’t reinvent it. What you can do is reimplement it, to take that existing, already-invented idea and reify it again in some way suited for your needs.

The technology world is replete with reimplemented wheels. Storing data on your local file system? You’ve got flat text files, structured text files, binary databases files, relational database management systems, document databases, columnar databases, and so forth. And that’s without getting into network or cloud systems.

Let’s go back to this physical machine. Are you building a vehicle for transporting people? A fancy office chair? A treadmill desk? A back massager? A trebuchet? Each of those uses a wheel, but none of them uses the same wheel. They have different weight, strength, stiffness, size, and other requirements. Using an automobile wheel for a back massager would make for an unusable, ineffective back massager. It would probably injure you. The wheel is an idea, and there are many, many different implementations of it.

Does anyone say you shouldn’t reimplement the visitor pattern or the strategy pattern? These patterns are just ideas, and different products assemble different patterns in different ways that are better for some circumstances and worse for others. If there isn’t an existing component that mixes patterns in a way that’s good enough for your need, then, yes, reimplement the wheel!

Leave a Reply

Your email address will not be published. Required fields are marked *