“Don’t reinvent the wheel” seems like pretty common sense advice, but is it good advice?
What kind of wheel do you use for your car? My wheels have aluminum alloy inner wheels, with spokes to reduce the amount of material that needs to be rotated to reduce rotational inertia. The outer wheel, the tire, is vulcanized rubber wrapped around steel mesh to give additional structure to the rubber to improve its durability, and the vulcanization allows the rubber to remain firm and not break apart even as it heats up.
The treads in the tire are numerous, and were designed to allow water to flow in and around the tire as it rolls into contact with the ground and then rolls back out of contact again. This keeps the maximum amount of friction with the road, so that my car can get traction and propel itself forward or backward.
When did this wheel stop being reinvented? It appears to me it never has, and according to my material engineer friends, and proven in amateur practical attempts, tire technology is far behind in being keep cars firmly on the road at the speeds that motors and drive shafts are able to propel cars. Wheels today are vastly different than the wooden spoke wheels of past centuries, or the rock wheels of past millennia.
Does the tire industry use the phrase “don’t reinvent the wheel”? I doubt they do. Yet, this phrase is used all the time in technology companies, even as software and hardware is known to be among the most volatile of technology in terms of its’ pace of change. Why is this?
One reason is that it’s a simplification of “don’t overly complicate things”. If you are performing a simple job, use tools that exist and get it done so you can move onto the next job. If software exists that properly does a job, use it and move on.
What about when software does not properly do a job? What about if it does the job, but poorly and requires significant maintenance requirements or causes any future changes to be looked at with fear of breaking the running system and thus to be avoided?
I believe this is the time when the “don’t reinvent the wheel” is the least likely to be useful. All progress requires reinvention of “wheels” all the time, or things would not be progressing. The real question is “is this worth our time and money?” This is a question that is always appropriate and can always supersede a “let’s not reinvent the wheel” simplification.
When is it time to reinvent the wheel?
- When you want your wheels to move faster.
- When you want your wheels to last longer.
- When you want your wheels to provide better traction, especially moving fast and taking corners.
- When you have the capability to make a better wheel, and the time and money to do so.
- When cost-benefit ratio is worth it.
Applying this thinking to your business provides a useful metaphor for when it is time to reinvent a wheel, and when it is time to use the wheels that already exist. The metaphor has many built in direct comparisons, speed can be exchanged for volume or turn-around time. Lasting longer maps well to maintenance cycles. Being able to take turns at speed maps to being able to make new business goals and have your organization and software change to meet the new goals.
When I go to buy actual wheels for my car, I don’t develop my own tires, grow my own rubber trees, mine or produce my own metals. I am not skilled enough at any of these things to make an improvement on the wheels that are sold by existing commercial organizations. I also could not do it for anywhere near the costs of buying a new wheel and tire. I would have to buy ore, create a factory or set one up at home (probably illegally), and it may take me years to create a usable wheel and tire combination to use, and they would almost certainly be of far lower quality than the worst tires and wheels I could purchase. This is clearly a poor option, and purchasing a wheel provides many benefits.
In technology, things work similarly, the most similar being hardware, which has very similar creation processes. You can now outsource your fabrication, but the nature of physical electronic development is extremely difficult, error prone, and even getting working hardware out of your outsourced fabrication plants and into your customers hands can be so tricky that even businesses with working hardware specifications can go out of business while trying to get their devices manufactured and in their hands to sell.
Software has the enormous benefit of being totally virtual. Software merely has to attach properly to the environment it runs in (OS, drivers, libraries), fit in it’s physical resource constraints (storage, network and memory), and be internally consistent to provide a desired functionality.
Software provides one of the most obvious places to reinvent the wheel, because software is a series of commands to do what you want, and what you want is often different under different circumstances. The same software wheel cannot provide you all the different results you want without being reinvented to update its’ internal logic and data to your desires.
Many pieces of software, say the Apache HTTP server, are so generic and customizable that they become ubiquitous in internet based software environments. The original purpose of Apache was to deliver static content, in the form of HTML formatted text and image files, and later to allow running executable programs whose results would be returned instead of the static content.
Over the years, our desires for what software will give us has changed dramatically, and Apache has changed dramatically too, but still does essentially the same job. Apache was once at the heart of what a web server was, and now it is merely a window that functions to keep requesters on one side, and the producers on the other side, while being mostly transparent, just routing information through from requester to producer and back again, with some access and redirection rules.
Some organizations have done away with Apache, or only use it to deliver static text and image quickly, and then all other requests are sent elsewhere. The wheel of web request serving has been rewritten, but has it been rewritten for the last time?
That is unlikely, and all that is needed before the next time you find yourself needing to reinvent the wheel is a goal that can’t be met with current technology in a satisfactory manner for the goals you wish to accomplish.
Time and money permitting. 🙂