I get so tired of the worn out expression, "let's not re-invent the wheel." It's used as a conversation stopper to inform you that you are straying from the well worn path of software sanity. There is no mention that this well worn path now employs nearly two million people to write what are essentially the same CRUD applications that were written on mainframes in the 1970s. It is a statement that life is good and you should rejoin the flower people on the primrose path to happiness. So, here is my answer, the three reasons you should reinvent the wheel.
The wheel sucks
The first wheels were actually relatively un-round slabs of stone. Last time I checked these wouldn't fit to well on my new Jaguar XJ-39. I'm actually glad I've got my run-flat-Aquatread-floating-on-a-cushion-of-air system. I'm hoping that we can move away from wheels entirely some day and have vehicles that float less than an inch from the ground using the Bernoulli principle.
If the wheel can be improved, there is little doubt that any software written in the world today can be improved as well. If you take the time to see what other people are doing and it looks like it sucks, it may just be possible that it does suck but they don't have time to reinvent the wheel or they haven't figured out how to do it.
Oh, and your process may suck too.
You don't understand wheels
Not reinventing the wheel can also be code for, "I don't want to figure this stuff out." The problem is that when we really don't understand what a tool is doing for us we are very likely to use the tool wrong. According to my power-lathe manual, "Using this tool in a manner other than prescribed may result in serious injury or death." Ouch, that's a Bad ThingTM. As strange as it may sound, being willing to start writing your own tool may give you the insights to use other people's tools properly. Along the way you may either build a smaller, simpler tool that meets your need OR you may figure out that someone else really has done it better and stop (pride cometh before a fall, stopping is ok).
Those of you who feel that just RTFM (read the fine manual) is good enough or RTFC (read the fine code) is faster haven't seen some of the same manuals and code that I've seen. Many of us really do learn faster by doing. My kids sure seem to learn better that way. The mind set that personal experimentation has no place in the software development lifecycle could use some revision.
This goes triple for processes; XP can't be done without some groking. You're better off making something up that makes sense than implementing something that doesn't make sense to you.
They don't sell wheels at the Kwik-E Mart
Sometimes you must do all your shopping at one store. Maybe it's FOSS central or your local coffee vendor, but for various reasons the perfect tool is not for sale where you can shop. You could catch the two-thirty train to Boston, buy that ever so perfect Mango-Squishie and come back with it; but is the trip worth it when you could make do with a Banana-Squishie instead?
I just realized I was speaking in code that last paragraph (well, since this is about programming it was more like anti-code). Here's what I mean. Often the perfect tool can be found, but its requirements aren't yours. Maybe it is Windows only or it's Open Source and your company forbids it, or (and this is the most common) it has usage requirements that are at odds with yours. These might include logging systems or databases, or a host of other "socket incompatibilities." In these cases, re-invent at will. Only you're probably not re-inventing, it's more like your making your own wheel from someone else's design. Just because there exists A wheel somewhere in the world the problem of wheel-ness has not been solved universally. You may still need to find (or make) one that fits your Model-A ford.
License to code
The next time someone tells you (inappropriately) not to reinvent the wheel, I hereby grant you permission to show them this: it is your personalized license to code. Your license number is 103425-1a756. It is hereby granted to you and is fully transferable both in part and in whole without precondition. It may further be copied and reproduced and is valid for any purpose.
That should shut them up!









