The Wheel Reinventor enjoys reinventing wheels. A lot of wheels have been invented before, some are even very popular. So why does the Wheel Reinventor make new ones?
- Learning: By reinventing the wheel, the Wheel Reinventor learns much. Not only about how to create new wheels, but also about how existing wheels work.
- Specificity: No one wheel fits all. When creating their own wheel, the Wheel Reinventor can tailor it for their exact use case, whether that's a wheelbarrow or a monster truck.
- Innovation: Although popular, some existing wheels are quite bad. While reinventing, the Wheel Reinventor has the opportunity to explore new possibilities in a way that existing solutions cannot.
- Enjoyment: Wheel reinvention does, in truth, not need much of a reason. It can simply be out of love of the craft and the satisfaction of work well done.
The Wheel Reinventor must however be careful. Reinventing wheels can be time-consuming and the end product may be inferior to existing solutions. The Wheel Reinventor also tends to fall into infinite rabbit holes. To create a wheel, must they also create the hammer that they need? Must they fell a tree for the hammer's handle? If the Wheel Reinventor begins by planting a forest, they will not be building vehicles any time soon.
The Wheel Reinventor must therefore first and foremost be deliberate. They must consider whether it is appropriate for a given wheel to be reinvented, especially when accountable to others. They must also consider the scope of what is being reinvented (and crucially, what is not), as to not get needlessly sidetracked.
Likewise, the Wheel Reinventor must be honest with themself. They must keep in mind why they're reinventing a particular wheel and not lose sight of that. A wheel reinvented for learning looks different than a wheel reinvented for innovation.
- Minimize third-party dependencies. Master the platform's built-ins and accumulate your own toolbox over time.
- Embrace the strengths of DYI. Create what you need and little more. Be wary of abstractions made for fabricated use cases.
- Avoid magic where possible. Try to stay close to the metal, preferring simple tools and not losing touch with the underlying technology.
- Share your work. Open-source your code where possible. Write about your approach and let others learn from your experiences.
Some of my projects that explicitly follow these principles are listed below:
- Build Tool: Modular build system for web projects, written in Node.js
- Putpix 3D: 3D software rasterizer, written in TypeScript