DEV Community

Cover image for The Art of Reinventing the wheel in Software Development
Alessandro De Simone
Alessandro De Simone

Posted on

The Art of Reinventing the wheel in Software Development

Who said that you should not reinvent the wheel?

I wrote my website alessandro.desi from scratch using Python and the Flask framework.

I actually tried WordPress for a while, but I was not happy with it. Too big and complex. I wanted something simple, and customize on my needs.

I am sure I could have found a simpler alternative, but I didn’t want to learn another blog system.

I was pretty good with Ruby and Ruby on Rails, but I wanted to learn Python to widen my job opportunities.

So I took it as a chance to learn a new language and framework. This website was my first project coded with Python/Flask.

My experience with Ruby helped, but still, it took days of my free time to build it. It was much slower than expected, but I was keen, and I knew that practicing Python is a valuable skill.

Python/Flask was not the only thing I practiced:

  • I wrote the pages in HTML and styled it with CSS.
  • I recently added a subscription form to the website to start creating an email list. So I learned about the Flask-SQLAlchemy package to save the data in a SQLite database and Flask-WTF to handle the HTML form and field validations.
  • I also set up a VPS (Virtual Private Server) with Linux, installed a web server, and deployed the project.

When you decide to reinvent the wheel, there are so many overlooked details that you need to figure out.

All of this probably took 30 times longer than just installing WordPress.

Was it worth it?

Yes, for me, it was.
My work is coding, and I wanted to expand my skills while building something I needed.

Should I always use this approach?
Of course not!

There are many reasons to reuse existing standard and popular wheels:

  • Allows you to work smoothly as part of a team. Front-end programmers often use React, Angular, or Vue, and it’s easy to find a new developer who knows those JavaScript frameworks.
  • Allows you to focus on the value proposition of your project rather than rebuilding basic functionalities.
  • Allows you to rely on a wide community that has extensively tested the project and can help resolve issues quickly.

In short, most of the time, you should go with the safest choice: rely on an established solution!

Anyway, I am always amazed by the stories of unconventional coders (and not only), people who are not happy with the status quo.

Many of the most influential tools we use today exist because someone reinvented a widely used solutions.
Here are some of my favorite examples of rethought projects:

Ruby on Rails - Reinventing the Web Framework

Rails is the web framework that allowed me to build my career in the UK when it was the first choice for startups.
Many frameworks existed before Ruby on Rails. But David Heinemeier Hansson (aka DHH) decided to create his own framework while building Basecamp, focusing on developer happiness and convention over configuration. This "reinvention" revolutionized web development and influenced countless frameworks that came after.

Hanami - (Re)Reinventing the Web Framework

DHH released Rails in 2004, and after a few years, Rails became the dominant web framework.
But despite that, Luca Guidi saw an opportunity for a different approach. He wanted to create a framework that better followed Object-Oriented Programming (OOP) practices and provided better separation of concerns.
So, in 2014, Luca began developing Hanami (originally called Lotus).
Hanami introduced a modular approach where each part of the application could be a separate micro-application.
This wasn’t just different for the sake of being different—it was an architectural choice aimed at making applications easier to test and maintain over time.

Redis - (Re)Inventing the Key-Value Storage

In 2009, Salvatore Sanfilippo was working on a real-time web analytics system for his startup. He needed a way to collect and analyze web page view data as it happened, but the existing databases were too slow. Also, the existing key-value stores didn’t provide the data structures he needed for analytics calculations.

In this case, Salvatore wasn’t just reinventing the wheel—he was optimizing and evolving it for a specific use case.

Sanfilippo decided to create something new that would perfectly fit his use case. He wanted a database that could handle high-speed operations in memory, support rich data structures beyond simple key-value pairs, and maintain data persistence when needed.

This led to the birth of Redis (REmote DIctionary Server).
Today, Redis is used by countless companies. It is used in most of the companies I’ve worked at, even at the Ministry of Justice (UK), where I am working now.


I am sure you noticed I am totally biased with my stories. The first concerns Rails, which I’ve used for many years. Hanami and Redis were created by Italian programmers. :)


Conclusion

Even though the projects I mentioned are monstrously complex, you can start by recreating simpler things.

Here are some ideas for programmers who want to understand how things work under the hood:

  • Implement a few algorithms. Developers don’t need to write sorting, search, or graph algorithms anymore, but they are exciting to code! Start easy, choose a sorting algorithm like Bubble Sort or Quick Sort, for example. Then continue with more complex ones, like Shortest Path in a Graph (Dijkstra’s).

  • Create your version of Tetris, Pac-Man, or any simple platform game to practice the language you are learning. It is amazing how many useful concepts you can learn by creating simple games.

  • Build your own web server from scratch. You’ll learn networking concepts like sockets, HTTP, and TCP.

  • Build an elastic collision engine or any physics simulation. A few years ago, while learning Golang, I wrote a two sphere collision simulator in Golang. It was fun and educational.

  • Build a simple 3D wireframe engine. This is great for refreshing your knowledge of matrix algebra.

  • Build a simple neural network from scratch. This is something I’d like to try. First, understand well what a neural network is, and then approach the code with a good tutorial. Just google "Neural Network from scratch Python."

Happy re-invention! And thanks for reading.

Top comments (0)