When is it OK to “Reinvent the Wheel”

“Don’t reinvent the wheel – just use something that already exists”

How many times as software engineers have we heard that phrase?  I myself have heard it so many times I cannot even count.  While I will admit that there are times and places that are appropriate to use existing software – during today’s post I want to discuss the value of reinventing the wheel.

Look back at the last time you used someone else’s code?  Maybe it was an open source project or a piece of software that you took over.  You may have been able to get up and running quickly with the final solution – but that was probably all that you got out of it.  That is of course not to be overlooked.  There are many instances where the pure speed of the solution will be paramount.

However if the project you are embarking upon is one that you will own and maintain for an extended amount of time, you may find that starting with someone else’s code has left you at a disservice.  By using someone else’s wheel and not reinventing your own, you are left in the dark in terms of the inner workings of that system.  If all you had to do was write implementation sequences, you will have very little knowledge into how the system truly operates.  You will fail long term at optimizing and improving this system.

If you decide to reinvent the wheel it is true that it will take you longer to get to market.  Think about what you will gain.  You will become an expert of the inner workings.  As time goes on your speed of improving the system and delivering more features will improve.  At some point you will actually find that you are able to work faster and have a deeper knowledge of the system that you built compared to the existing system that you implement.  You will have convergence as it were on the long term benefit of building it from the ground up.

When you do decide to reinvent the wheel, don’t underestimate the importance of understanding the existing wheels that are out there.  Strive to understand how the existing systems work.  Gain a knowledge of their benefits and of their weaknesses.  If you understand those systems you will be able to apply them to your system and make yours stronger and better.  Account for the mistakes of past systems.  Include the benefits that existing systems enjoy.  Make yours better by learning from their examples.  After all – look at the automobile industry.  Nobody has invented a replacement for the automobile, however the automobile has been reinvented thousands of times over.

How long them does it take to truly benefit from a system that built on your own.  How long before you benefit from reinventing the wheel.  Well – that is a hard one to answer as some systems take several years to fully bring online.  Try to understand how long the system will be online for.  If it is a short timeframe, say less then a year, then you may benefit from simply purchasing the solution or using existing code.  If it will be longer then a year then you will need to evaluate the complexities of the system to determine whether building it from the ground up is more appropriate.

There are times when it is more appropriate to reinvent the wheel.  To engineer a software solution that has already been done.  Just make sure that as a software engineer you understand the time requirements for how long the system will live, so that you can make appropriate decisions.  Now excuse me, while I go reinvent the wheel again.

Posted in , , and tagged , .