Grab Your Chisel and Start Pounding
Assuming there is no true answer and continuously asking questions is better than sticking to a presumed answer. Dream a better dream and reinvent to make it real.
Everyone discourages us from reinventing the wheel. And it’s not just the people around: All the software architecture books 👏 we 👏 read are against reinvention, too.
“Well, you’re obviously being totally naïve, of course,” said the girl, “When you’ve been in marketing as long as I have, you’ll know that before any new product can be developed it has to be properly researched. We’ve got to find out what people want from fire, how they relate to it, what sort of image it has for them.”
“Stick it up your nose,” he said.
“Which is precisely the sort of thing we need to know,” insisted the girl, “Do people want fire that can be fitted nasally?”
“And the wheel,” said the Captain, “What about this wheel thingy? It sounds a terribly interesting project.”
Douglas Adams, The Hitchhiker’s Guide to the Galaxy, Chapter 32
The reasoning is simple: The problem you are trying to solve has already been solved by others. Instead of doing it yourself, you should learn from others’ sufferings because it’s the most effective way to occupy your time.
That’s the conventional wisdom. And conventional wisdom, like “common sense”, is an oxymoron.
Can you see the circular problem with the line of thought that deems reinventing a futile effort?—If everyone denies to solve any problem unless an existing solution exists, then there won’t be any solutions, to begin with.
- Nothing new will ever get written under such an approach;
- And nothing existing will ever be polished, either.
To break the cliché even further, you might be surprised that the wheel has been the most reinvented tool ever.
Reinvent to Make It Better
Let’s talk about software:
Any software that is older than a couple of years will be full of workarounds for features that fall short, and patches that just don’t fit. Have you just inherited a ten-year-old legacy code from a frustrated developer? If you are a developer, I sure bet you have.
You have every right to wonder how on earth so much crap can cripple its way into a codebase. Seriously though, if you’ve ever wondered why so much code is crap; the reason is simple:
There is crap because we compromise—we have to: It’s often considered quicker and faster to live with the current flaws.
We have deadlines to meet, metrics to hit, customers to satisfy.
The bottom line is:
There is always something out there that can be made better.
This is not only true for software but also true for anything you can imagine. Anything can be made better, faster, stronger; our work is never over.
Reinvent to Transform
Mapping, Reduction, Filtering, and Transformation: Anything you imagine will fall into one of these categories (that means life, as we know it, is purely functional; yet that’s the point of another article 🙂).
You can express any concept as a mapping, filtering, or transformation.
Inventing is one of these concepts:
Invention Is Transformation
You take a bunch of crazy $#!% and transform them into even crazier $#!%.
I don’t know you what you’d think, and I wholeheartedly believe that transformation is not a waste of time. We need to be more creative and less dull. That’s the only way to transform.
The hard truth is that we carve out the edges of square pegs to fit them into round holes, and call this “code reuse”.
Nothing is a simple as it seems. Nothing fits right for the first time.
About the NIH Syndrome
Now, to be clear, I am also against the “not invented here” (NIH) syndrome. Yet, in the developer community, I see an increased aptitude to blindly use tools without questioning their internals.
It’s okay to be outrageous. It’s the acts of insanity that often lead the simplest of solutions: Try new things and have fun.
Think differently. Do something different. By doing things differently, you will begin to see things differently.
Why do we like to stick with what we know?
We like to stick with certain tools/patterns/libraries—it is not because we support code reuse. Quite the opposite: it is because we are wired to preserve energy. We are protecting our mental resources. We are too lazy to leave our comfort zones.
Now that is dull. And dull is the polar opposite of creative—it is not something that you would aspire to be.
Invention is Insight
Reinventing the wheel gives you the insight about the wheel.
If you don’t know a concept well enough to reinvent it; how can you understand it enough to build something more complicated on top of it?!
You know what? Occasionally you will come up with a better wheel, too.
That’s not the purpose, though.
The purpose is to go through a transformation.
The world needs its crazy-makers, and the world needs lots of them.
Reinvent to Learn
“What I cannot create, I do not understand.”
👆 those were Richard Feynman’s last words on his blackboard at the time of his death.
Why do children break their toys? Because the best way to learn about something is to tear it into pieces and then bring those pieces together.
Understanding is what makes you grow. Without an understanding of your environment, you won’t have the power. And to survive in any ecosystem, knowing the system helps a lot.
Be a Tinkerer
I have a massive pile of “stuff” (pieces of code, images, assets, snippets, documents) that are diverse and interesting to me. And I tinker to figure out ways to make those things fit together.
I am sure there are better solutions somewhere, written by someone, that address what that I am trying to achieve. That’s not the point, though.
The point is that sustaining a habit to combine and mentally fit seemingly-unrelated pieces together becomes extremely helpful. It is especially useful when you find yourself in a situation where you have to come up with a solution to a really hard problem ASAP.
The best way to learn how to use tools is to learn to be a tool-maker.
Do Not Limit Yourself
I don’t also believe that you need to create something that others would use.
Don’t limit yourself to others’ requirements because no matter what you come up with, you will learn a lot:
You will gain confidence in a given area of expertise. That expertise will help you come up with actual productive work better and faster than anyone else.
Don’t fear the be the only crazy maker in the room.
Read the Source
Just one thing, though:
Don’t get your hands dirty all of a sudden, thinking that nobody has solved a similar problem before you. Before starting anything, examine what others have done before you:
While reinventing your wheel, you will see the size of the giants on whose shoulders you are standing. Also, don’t shy away from some of those people. When you ask smart questions, they are, indeed, quite receptive and welcoming.
Reinvent to Adapt
Let’s talk about evolution:
Without variation, a population cannot evolve in response to changing environmental variables. As a result, it may face an increased risk of extinction.
That’s what the theory of evolution tells us. That is true for anything: economics, politics, finance, programming, open-source, ideas…
Without variety, you cannot be fruitful, let alone multiply.
As a corollary to that: Without reinvention, diversity is impossible.
Having different things that try to solve a problem is not bad, it is good; it is really damn good.
The flawed mentality of “never reinventing the wheel” might lead to stagnation and can hinder the evolution of better outcomes.
Beware the Frankenware
Frankeware is any software product that consists of a mashup of various reusable code pieces—the problem is, those reusable pieces do not quite fit into the product. They also do not play well with each other.
The result is a working yet buggy and unstable code base that can blow up with even the simplest feature modification.
Why? Because reuse comes with its hidden assumptions.
The person who invented the wheel designed it with their preconceived notions, and their sets of requirements. You should find yourself lucky if any of these are documented at all. Any time you attempt to reuse the wheel, it is quite possible that one or more of these assumptions won’t hold.
Reusing the wheel can be inefficient at best, and just plain wrong at worst.
I am not saying to reinvent all the things—that would be counter-productive.
It’s just that you should analyze the reusable pieces that you plan to use very well:
Don’t just read the public documents; dive into developer communities, read the source code, check the open bugs and issues, see what common pitfalls they have avoided along their way…
Don’t buy into anything because it is the coolest newest kid on the block.
Know what you are doing, and be wise in your decisions.
Reinvent and Be Responsible
That goes without saying, and I’ll say anyway:
I am by no means advocating for inefficient use of company time.
If your job title is not “Chief Executive Crazy-Maker”, then you are expected to get things done, as soon as possible, as cost-effective as possible, with the best quality as possible.
Unless you have a solid reason that your reinvention is necessary (because it will be simpler, easier to integrate, more lightweight, easy-to-maintain, you name it…), then suck your ego up and use a battle-tested solution that everyone trusts.
And if you do want to come up with your solution anyway, then do it in your personal time.
Reinvent for a Competitive Edge
Assume you are one of the rare individuals wanting to create something that has never been done before. The type who wants to disrupt the status quo, you know—if you are aware of the alternatives and are purposefully reinventing, it is actually an advantage.
Here’s how Joel Spolsky states that:
For example, if you’re writing a cool 3D shoot-em-up game (like Quake, around the same period) and your key number one differentiator is to have the coolest 3D graphics, you do not use whatever 3D library you can find—you write your own because it’s fundamental to what you do.
Joel Spolsky—Up the tata without a tutu
This is far more than a pedagogical benefit:
Reinventing the wheel actually takes you ahead of the competition because you can fine-tune your wheel precisely to your needs. Thus, you will opt in to differentiate, and perform better (while, possibly, compromising clarity and reusability—and that’s okay).
Beware of the Cost of Reinvention
This is not to discourage you. I just want to lay out the facts as straight as I can:
During your reinvention, you will start with a simple and obvious solution to your problem.
That “simple” and “obvious” solution will, 99% of the time, be inadequate:
You will have to reiterate your solution over and over again.
And that’s a good thing.
Sometimes, you will think that you have taken a reasonable path, only to find that things are getting more and more difficult as you try to improve your solution.
Then you will discover a different path that looks promising. Then you erase and rewind to the beginning.
Your implementation will “probably” stink, and people will discourage you a lot.
That’s the innovator’s dilemma. Sometimes it is right to listen to others, and then continue doing what you believe to be the right thing.
Don’t try to reinvent everything at once. — It will put you into a paralysis by analysis mode, and you will gain nothing.
Choose Something that Adds Value to You
“I know why you’re here, Neo. I know what you’ve been doing… why you hardly sleep, why you live alone, and why night after night, you sit by your computer… It’s the question that drives us, Neo. It’s the question that brought you here. You know the question.”
— The Matrix (1999)
As long as reinventing is your intention, and it does not stem from your lack of knowledge of other options, it’s perfectly fine to do so—having said that, I am pretty much sure I can live without programming another linked list in my lifetime.
So the question is not whether to reinvent.
The question is: “Is the opportunity cost of the time you spend reinventing worth your efforts?”
Or, in other words: “Is there a more productive way to occupy __your__ time?”
Answering this question—and other similar questions—is personal, and has never been easy, and it has to be made.
That answer will irreversibly change you.
“Every child is an artist, the problem is staying an artist when you grow up.”
– Pablo Picasso
My friends consider me a hacker—and as such— I have been different, diverse, divergent, throughout my life.
I’ve been saying for the longest time, that reinventing is not necessarily a waste:
At the very least, it helps you to gain more knowledge to choose the right tool for the job. At a more existential perspective, it transforms you into a totally different being.
Very few believed me.
With this article, I just wanted to reach out to those who felt the same way somewhere along their journeys.
Screw the naysayers, and do reinvent things.
With one caveat though:
Don’t think you are a smart ass who does not need to learn from the existing wheels and wheel makers, as that approach would be selfish, and galactically stupid.
We are geeks for a reason:
We love to tinker; we love to solve problems.
And who cares if the problem has already been solved a bazillion times—if you haven’t solved it, it’s yours to solve. The beauty is in the path you walk, not the destination.
Instead of seeing a problem and solving it, it’s much better to see a solution and find its problem. Assuming there is no true answer and continuously asking questions is better than sticking to a presumed answer.
Some will think that you are not getting results; however, not getting results is different than resulting in nothing. Those who are only looking forward cannot see the leap you make.
Dream a better dream and reinvent to make it real 🦄.
\ \\, \\\,^,.,,. “Zero to Hero” ,;7~((\))`;;,, <zerotohero.dev> ,(@') ;)`))\;;', stay up to date, be curious: learn ) . ),(( ))\;, /;`,,/7),)) )) )\,, (& )` (,((,((;( ))\,