The cost of reinventing the wheel

Monday, June 1st, 2009

wheel_sm

 

The reason for this rant?  I see a shocking number of people objecting to buying off-the-shelf software because it is “cheaper” to build it themselves.  An argument that boils down to a simple ratio: the value of your time compared to the complexity of the problem.  Time is always money; “complexity” here includes both a fair assessment of the difficulties you’re likely to encounter, as well as whether or not the requirements are met by existing products.  Being a database dork, one business problem where this argument bubbles up a lot is when someone needs a database schema comparison tool (back when I was a web page guy, the most prominent argument surrounded file upload controls).  The question is typically along the lines of:

“Anybody have a script to compare two databases and synchronize them?  I know about the tools that are available, but my budget is $0.”

 

My predictable response includes the following:

  • If you’re going to spend time on it, your budget isn’t really $0.
    Your time is rarely free, and most likely never.  Confirm this with those that approve and/or sign your paycheck.  If that’s you, then I take this bullet point back.    
  • You will be learning from scratch.
    You are going to painfully learn all of the nuances of the problem, which others before you have already encountered and (hopefully) solved.  This is not exactly productive if the problem is complex.  Sometimes this is the point, but that is far more common in academia than in business.    
  • You will have little to no support.
    When you buy a product, your license almost always includes support from the vendor.  Even without direct support (which can be fee-based or just slow), when you hit a roadblock with off-the-shelf software, access to peer-to-peer forums or even twitter can fill the gap, as other people using the product have probably come across similar issues.  With your own code, who is going to help you work around bugs or figure out why it works a specific way?  In that case, your support pipeline is your mirror. 

Of course, there are plausible benefits to building the code yourself, some of which I’ve already alluded to:

  • Your budget may really be $0.
    Or put another way, you may be choosing between buying existing software and buying dinner tonight.  If there is no approval for software expenditures, then that’s simply a reality.  More on that below.
  • Your requirements may not be met by existing products.
    Let’s face it, not every need has been satisfied in the marketplace, which is why we see new products (and new features for existing products) cropping up all the time.  I feel this way about bug/suggestion/issue tracking tools - I have not seen “the one” yet.  We have used several, and while they are all lacking something (or many things), they are “good enough” because we do not have the time to invest in making that aspect better.   
  • You may really want to get your hands dirty.
    In some cases, you want to learn the internals and enjoy the experience of solving the problem.  This is okay if you are taking a computer class, or working on a leisurely project.  But if you have an employer, this isn’t necessarily the best use of your time and the company’s money.  (I can’t resist the temptation to ask, “Is it good for the company?“) 

Except in the most extreme cases, if you have no budget because your employer says so, it should not be very difficult to justify the cost of the software to the bean-counters.  This is in lieu of spending all those hours of your time not just solving the original problem but also dealing with all of the unforeseen issues that are inevitable … this costs them money as well, and prevents you from working on real problems that vendors can’t generically solve.  In case you are having difficulties in this area, consider not demanding the most expensive version or even the big ticket vendors… there are other vendors out there that offer more affordable alternatives.  This may come at the expense of reliability or feature set, but in a lot of cases will still suit your needs, at least in the short term. 

For the specific problem I am talking about, here is a small sampling of products available that may prevent you from reinventing the wheel (including the “big ticket” guys):

Red Gate SQL Compare | ApexSQL Diff | Kentico Compare SQL | xSQL Object
SQL Delta
| SQL Examiner | AdeptSQL Diff | StarInix Database Compare | SQLDBDiff
Simego SQL Admin Studio | Visual Studio Team Edition for Database Professionals
SQL Accord Community Edition | DbDiff (CodePlex) | Open DBDiff (CodePlex)
Berryware SQLMatcher | Embarcadero Change Manager | dbMaestro | IndusSoft WinSQL
Quest Change Director | DB Ghost | SQL Server Comparison Tool | DB SynchroComp

And no, this isn’t an advertisement for any of these guys, just a demonstration that the market does not always consist of just the one or two big guys you’ve already heard or read about, and that there is a product for almost any budget (some of these would pay for themselves after I’ve spent 30 minutes trying to reproduce their solution).  There are “free” solutions also, such as manually generating the scripts from Management Studio and comparing them with a variety of file-comparison tools (including those that ship with products you might already have, like Visual Studio).  But again “free” comes down to the difference between performing all of that work and clicking a button.

Every situation is different.  You will have to weigh the pros and cons of writing your own code to solve a specific problem; just make sure you understand the domain and the range of alternatives, so you can determine how likely it is that “writing a quick app by Friday” won’t snowball into a 6-month project.



Aaron Bertrand
Senior Data Architect, OTOlabs
http://www.otolabs.com



Bookmark and Share

3 Responses to “The cost of reinventing the wheel”

  1. Ross Presser says:

    A lot of the little guy DB people who are one person alone, big frog small pond syndrome, will get a lot of value out of studying the problem — and falling down, and skinning knees. It may not be enough value from the boss’s POV to pay for the time that could have been saved just buying off the shelf, but for the frog himself, the knowledge gained may be very valuable indeed in the future — perhaps in future jobs.

    Yes, I’m talking about myself. And yes, it’s getting the point where I no longer want to spend my time getting my hands dirty. But in the past — I count those dirty hands days as golden. Golden!

  2. dan says:

    Very good post.
    I am struggling with this at the moment with some clients - due to “budget constraints” doing projects themselves (not perfectly !) then not doing business critical work due to being too busy with reinventing wheels. hence business gets frustrated. hence IT budgets get cut again.

    Re specific comparison/sync tools, I would also add Simego.com’s SQL Admin Studio.

    Very lightweight, very nice dependency tracking and quick compare/sync process.
    Also has a bunch of nice templates for .NET development etc.
    No relationship to Simego, but v good tool.
    Data Sync Studio from them is another time saver for syncing data between eg SQL and Sharepoint lists.

  3. abertrand says:

    Thanks Dan, I have updated the article to include a few more tools.

Leave a Reply