Back
Fri Apr 11 2025
Don't rebuild the wheel unless you really have to

To get good at something, you need to practice constantly for a significant amount of time (some say 10,000 hours). When I first started with building systems, I learnt how to build a simple command-line todo list in java and then gradually started working on more complicated systems like a server in python, a full-stack application in javascript, a self-parking car powered by an arduino and some c++, and eventually self-hosting several applications with containerization tools like docker and kubernetes.

At the time, when I needed to learn how things worked, it was not a bad idea 're-invent the wheel'.

That being said, 5 years later, I have become so used to 're-inventing the wheel' that it is almost an immediate instinct that is not ideal because you usually also have to maintain the 'wheel' (i.e. fix bugs, add missing features). This is something that you will immediately sympathize with if you have ever worked on a project where you have to setup the IT infrastructure (database, server, networks) even before you build the actual thing for the project (i.e. some web app). Setting up an IT infrastructure takes a lot of time, money and effort to design, setup and maintain servers, databases and networks - a responsibility that you can shift to a hosting/cloud provider for a fraction of the time, money and effort so that you can focus on actually creating the thing that you are supposed to be building. It is worth mentioning that this note is mostly about open source projects rather than IT infrastructure but the concept of shifting responsibilities applies well to both cases.

In many cases, when it comes to open source projects, these existing solutions go through so many iterations where issues are discovered and improved upon at a rate (thanks to open source contributions) that you cannot begin to fathom - especially when you have a 9-5 job or some other important obligation that takes up your time.

So, if you ever think of 're-building a wheel' because you can do it better, you should probably go through the following checklist:

  • is there open-source alternatives that do a close-enough job to what you are trying to achieve?
  • is the open-source alternative 'maintained' (i.e. has there been a commit in the repository in the last year)?
  • do you have the time to build this yourself and maintain it?
  • are you working smarter or harder?

In most cases, the open source alternatives to a great job:

  • build dashboards with grafana
  • host container images with harbor
  • ... there is so much more here that I cannot be bothered to come up with

From personal experience, I have helped a lot of friends build their personal websites and always taken the route I know best - to build everything from scratch (i.e. the frontend with nuxt, backend with expressjs, authentication with oauth, database with mongoose, payments with stripe and so forth) but it always ended up eating so much of my time that I was usually drained at the end of the projects. Lately, I've started leveraging existing solutions for things that require more work (i.e. the frontend with nuxt and then shopify for the backend, database, payment authentication and whatever else).


PS: I also think there is some component of 'ego' that usually tries to convince you that you can also build the same thing and... sometimes it tries to convince you that you can do it better. I don't doubt that there are some things that I can build myself but what the voice of ego forgets to mention is that you also have to maintain it - a chore that I sometimes cannot be bothered to do and which costs me.

EmailGithub
oliver © 2026   👋