---
title: Reinvent the Wheel
source: https://endler.dev/2025/reinvent-the-wheel/
author:
  - "[[Matthias Endler]]"
published:
created: 2025-05-25
description: Personal website of Matthias Endler, a Software Engineer interested in low-level programming and Backend development. Rust, Go
tags:
  - clippings
categories:
  - Clipping
---
One of the most harmful pieces of advice is to not reinvent the wheel.

It usually comes from a good place, but is typically given by two groups of people:

- those who tried to invent a wheel themselves and know how hard it is
- those who never tried to invent a wheel and blindly follow the advice

Either way, both positions lead to a climate where curiosity and exploration gets discouraged. I’m glad that some people didn’t follow that advice; we owe them many of the conveniences of modern life.

Even on a surface level, the advice is bad: We have much better wheels today than 4500–3300 BCE when the first wheel was invented. It was also *crucially* important that wheels got reinvented throughout civilizations and cultures.

**Note:** When I say “wheel” throughout this post, please replace it with whatever tool, protocol, service, technology, or other invention you’re personally interested in.

## Inventing Wheels Is Learning

> **“What I cannot create, I do not understand”**  
> – [Richard Feynman](https://en.wikipedia.org/wiki/Richard_Feynman), Physicist and Nobel Prize Winner

To *really* understand something on a fundamental level, you have to be able to implement a toy version first. It doesn’t matter if it’s any good; you can throw it away later.

In Computer Science, for example, there are many concepts that are commonly assumed to be beyond the abilities of mere mortals: protocols, cryptography, and web servers come to mind.

More people should know how these things work. And therefore I think people should not be afraid to recreate them.

## Everything Is A Rabbit Hole

Too often, fundamental things are taken for granted. For example strings or paths are super complicated concepts in programming. It’s a great exercise to implement a string or a path library yourself if you’re interested in how they work.

Even if nobody ends up using your work, I bet you’ll learn a lot. For example:

- There is an infinite complexity in everyday things.
- Building something that even a single other person finds useful is a humbling experience.
- Humans like you created these abstractions. They are not perfect and you can make different tradeoffs in your own design.

On the last point, everything is a tradeoff and there are dozens, sometimes hundreds of footguns with every toy problem.

Along the way, you will have to make decisions about correctness, simplicity, functionality, scalability, performance, resource usage, portability, and so on.

Your solution can be great in some of these things, but not all of them and not for all users. That also implies that existing solutions have flaws and might not be designed to solve your particular problem; no matter how well-established the solution is.

Going down rabbit holes is fun in its own way, but there is one other benefit: It is one of the few ways to level up as an engineer… but only if you don’t give up before you end up with a working version of what you tried to explore. If you jump between projects too often, you will learn nothing.

## Reasons for Reinventing the Wheel

There are great reasons to reinvent the wheel:

- Build a better wheel (for some definition of better)
- Learn how wheels are made
- Teach others about wheels
- Learn about the inventors of wheels
- Be able to change wheels or fix them when they break
- Learn the tools needed to make wheels along the way
- Learn a tiny slice of what it means to build a larger system (such as a vehicle)
- Help someone in need of a very special wheel. Maybe for a wheelchair?

Who knows? The wheel you come up with might not be the best use for a car, but maybe for a… skateboard or a bike? Or you fail building a nicer wheel, but you come up with a better way to test wheels along the way. Heck, your wheel might not even be meant for transportation at all! It might be a potter’s wheel, “a machine used in the shaping (known as throwing) of clay into round ceramic ware” [according to Wikipedia](https://en.wikipedia.org/wiki/Wheel). You might end up building a totally different kind of wheel like a steering wheel or a flywheel. We need more people who think outside the box.

## Reuse vs Reinvent

Of course, don’t disregard the works of others – study their work and reuse where you see fit. Don’t reinvent the wheel out of distrust or ignorance of the work of others. On the other side, if you never tried to put your knowledge to the test, how would you ever learn enough about your field to advance it?

I observed you can move very quickly by running little experiments. Especially in software engineering, building small prototypes is cheap and quick. Solve your own problem, start small, keep it simple, iterate.

So, with all of the above, here’s my advice:

**Reinvent for insight. Reuse for impact.**

Thanks for reading! If you're looking to level up your programming skills, check out [CodeCrafters](https://app.codecrafters.io/join?via=mre) - it's the platform I genuinely recommend to friends. Try it free and get 40% off paid plans.

Full disclosure: I earn a commission on subscriptions, so you'll be supporting my work while improving your coding skills.