Why Programmers Don’t Trust Other Programmers

Jonathan Rentzsch continues an interesting thread started by Andrew Leonard’s interview with Scott Rosenberg in Salon about programmers’ apparent need to continually reinvent the wheel by rewriting code that other people have already written.  They both have interesting takes on it.  Rosenberg says:

Programmers are programmers because they like to code — given a choice between learning someone else’s code and just sitting down and writing their own, they will always do the latter.

And Rentzsch continues:

Rosenberg is wrong. Programmers don’t like coding, they like problem solving.

If programmers liked to code, we’d all be writing in machine language to this day. You can write that stuff all day and get precious little of the real problem solved.

They both have good points, but I think this really needs to be put in the context of a real software development project to be understood.

One thing I’ve started seeing a lot in the past couple years is business owners looking at a problem, doing a Google search on "the problem + open source", finding at least three or four different projects that seem like they fit the bill, and deciding that programming from scratch isn’t necessary.  Sometimes they’re right–it depends on what you’re trying to achieve, and how closely your target matches with the target of that project.  Often though, they’re wrong, and the project gets shoehorned into an existing framework that doesn’t really fit the business need.

Regardless, though, this results in the programmer having a predetermined solution thrust upon him by the business owner:

Business Owner:  "Here, this open source package handles CRM.  We just need CRM plus order entry and fulfillment, so just build order entry and fulfillment on top of this."

Developer:  "But this wasn’t written to handle order entry and fulfillment."

Business Owner:  "Here, here’s the source code.  You can just use that.  You put down three months for the CRM portion of the project on the project plan, and we need this software yesterday, so if you use this we can shave three months off the project."

Developer:  "But this wasn’t written to handle order entry and fulfillment."

And if the shoe doesn’t fit, they’re SOL.  From this point, the project can go one of three ways:

  1. The open source package is actually customizable and module enough where plug and play integration is possible, and it shaves three months (well, probably more like one or two given the customization needed) off the project.
  2. The open source package does what it was intended to do well but is not modular and customizable, and it still ends up taking three months to make it fit within the framework of the entire application anyway.
  3. The open source package is buggy, nothing works, and it ends up adding three months to the project.

Any developer who’s been around for a while has gone through this process several times and been burned by numbers 2 and 3 enough that they’re now Suspicous_minds suspicious of ANYthing being as simple as plug and play.  In fact I generally cringe at the thought of using anything classified as open source for anything other than the intended purpose, generally found on the front page of the project Web site.  Most of the time when I set out to use something that someone else developed I’m mentally gearing myself up to fix a lot of their bugs just to make the thing do what it’s supposed to do.  I can’t honestly say I’ve ever started using an open source application besides Linux and had it work perfectly the first time I tried to use it.  Add the fact that most project generally sit on top of five other projects that dictate the environment, and this results in developers being very leery of using anything that was not developed by them.  The truth is, most developers who are building something for free are building it to solve a very specific problem and they’re NOT building it to be the uber-extensible be-all and end-all of software in its category.

The one big exception to this rule is commercial component vendors.  They’re usually very good at creating components that can be plugged into your application and will work out of the gate–it’s what they make their money doing, and so it’s in their best interest to make it as smooth and easy as possible to integrate their components into your application.  However, most of the time these components don’t contain business logic or the real framework of the application.  They’re more along the lines of user interface components or a very specialized segment of functionality that is self-contained and doesn’t need to interoperate too closely with the rest of the application.

So yes, developers are guilty of reinventing the wheel from time to time.  However, that is NOT always a bad thing.  If you’re building a bulldozer, you don’t WANT to use a bicycle wheel, and if you’re building a bicycle you don’t WANT a bulldozer wheel.  Developers are just usually not very good at communicating that fact, and this results in frustrated business owners.  Business owners need to realize that not all solutions are created equal, and they don’t all play nicely together.  As nice as it sounds to plug a bunch of public code together, sprinkle some pixie dust on it, and come out with the next great applicaiton on the other side, it rarely if ever works that way.  You’ll usually hit the wall really quickly, and that’s where the fun stops.

Share and Enjoy:
  • Print
  • Digg
  • Facebook
  • Google Bookmarks
  • HackerNews
  • Reddit
  • http://coderific.com/ witten

    I was with you until.. "The one big exception to this rule is commercial component vendors." Commercial component vendors are often just as bad as (if not worse than) open source developers, because many commercial vendors base their business model around giving their customers crappy, hard-to-configure software and then charging through the nose to send in well-dressed consultants to integrate everything.

  • anon

    Tortoise SVN — easily one of the best open source products I've ever used.

  • Antony

    "Add the fact that most project generally sit on top of five other projects that dictate the environment, and this results in developers being very leery of using anything that was not developed by them." – this is it in a nutshell.

    I'm sick of vendors telling me that all you need to do is "double-click setup.exe" and the rest will be fine.

  • anon

    You are erroneously making an argument about open source software that applies equally to all software, without qualification.

    There are bad and good programmers making both closed and open source software.

    I'ved used numerous closed source packages that had zero usability, let alone re-usability, despite their marketing. And the reverse. I've used numerous open source packages and libraries that were wonderfully reusable. And the reverse. It all depends on the individual package.

    The software license, whether open or closed, is just part of the featureset of the package. You need to evaluate all features including the functionality, reusability, license, documentation, bugs, purchase cost, short term total cost of ownership, long term total cost of ownership etc. etc., and their relative importance to you, before deciding on what to [re]-use.

    Personally, I prefer a more open license because as a programmer I like to be more in control of my destiny. Closed source can and does hide a multitude of sins, not to mention usually being highly inflexible. Having said that I'm happy to use closed source software if the vendor can demonstrate they're trustworthy and there's no reasonable open source package available.

  • http://flashdevs.com flash dev

    I've seen some horrendous closed source applications. And usually they are used because the company is limited to just using ASP or ColdFusion. The companies selling these web apps, I think know this and don't really care how crappy their app is, they are making money off of locked in users.

  • Paul

    Given the choice (for Windows), I'll almost always take, e.g., CodeProject code, which is often buggy and doesn't do exactly what I need, over most commercial components and _anything_ that uses COM.

    One company I used to work for had an exec, a former VB guy, who thought 3rd party ActiveX controls were the answer to every problem. I can think of one time it wasn't a complete disaster that cost more and took longer than doing it inhouse: a horrendously buggy, closed source, and effectively unsupported bar code control that did save us time and worked out because no one (except marketing) had the slightest need for valid bar codes in that product.

    If you use code you didn't write, especially without source, you're taking a chance that can go either way. Recognize that fact, make an intelligent decision, and save the grumbling for the bar after work.

  • http://www.theotherblog.com Tom Smith

    …and if you write it yourself, and you are honest (or not the greatest programmer that ever lived)… you take the chance that (for whatever reason) it could go either way…

    more (than you probably need) here …
    http://www.theotherblog.com/Articles/2007/02/07/open-source-rockssucks-deal-with-it/