Skip to content

Reinvent The Wheel #68

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,4 @@ highlight_themes_css = [
{ theme = "demain", filename = "syntax-theme-light-custom.css" },
{ theme = "ayu-dark", filename = "syntax-theme-dark-custom.css" },
]
bottom_footnotes = true
98 changes: 98 additions & 0 deletions content/2025/reinvent-the-wheel/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
+++
title="Reinvent the Wheel"
date=2025-04-12
draft=false
[taxonomies]
tags=["dev", "culture"]
+++

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.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤣

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know, right? 😂

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What brings you to this pull request. 😂

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I follow you on github. 😬

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice nice. How's it going? ☺️

It was also *crucially* important that wheels got reinvented throughout civilizations and cultures.

{% info() %}

**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.


{% end %}

## 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.**