Slashdot Mirror


Invented-Here Syndrome

edA-qa writes: Are you afraid to write code? Does the thought linger in your brain that somewhere out there somebody has already done this? Do you find yourself trapped in an analysis cycle where nothing is getting done? Is your product mutating to accommodate third party components? If yes, then perhaps you are suffering from invented-here syndrome.

Most of use are aware of not-invented-here syndrome, but the opposite problem is perhaps equally troublesome. We can get stuck in the mindset that there must be a product, library, or code sample, that already does what we want. Instead of just writing the code we need a lot of effort is spent testing out modules and trying to accommodate our own code. At some point we need to just say, 'stop!', and write the code ourselves.

10 of 158 comments (clear)

  1. About time... by jythie · · Score: 5, Insightful

    I do not see this topic brought up nearly as much, which worries me. I have worked on quite a few projects where the unwillingness to write functionality internally lead to excessive testing of external options and overuse of generic frameworks which not only increased the dependency/complexity of the project but often required just as many lines of code to use as just writing our own damn module would have.

    It feels like this is worst in the Java (enterprise) community, but that could be my imagination. Sometimes I think those programmers need their 3rd party instantiation taken away from them....

    And crap, looks like I have been moved over to slashdot-beta so I will probably never see if I get responses....

    1. Re:About time... by Austerity+Empowers · · Score: 4, Insightful

      It's the penny-wise pound-foolish issue when engineers and developers are forced to be mindful of schedules and business objectives. We in essence become as brain damanged as our managers, and start behaving irrationally.

      It's well known we have absolutely no capacity to estimate schedule accurately, but we do have the "gut feel". If your gut says that it will take a day to implement functionality, assume it's a week and just do it, it's trivial. If it says 2 weeks, it's actually 2 months plus three squirrel years and a llama month divided by e^-jwt, maybe spend a day or two evaluating options. If it feels like 6 months, try very hard to find something OTS, because this may become the project you're working on when you retire (which in todays parlance means: you die in your swivel chair of old age).

      You could of course be entirely wrong. Last week in fact I decided modifying a script to do what I need would take at least a month, had an epiphany in the shower and had it done in 6 hours. Guts have failed even Homer Simpson. But unless someone comes along who has been-there-done-that with a better option, and who demonstrates he' serious by NOT trying to railroad you in a meeting, but in fact just walks by the cube and says "hey, use this", you're usually better off trying it out yourself. At worst you waste some time but learn the problem, and how to best evaluate other solutions that come up.

    2. Re:About time... by blue9steel · · Score: 3, Insightful

      File a bug report.

    3. Re:About time... by itzly · · Score: 3, Insightful

      And then it gets fixed right away ?

    4. Re:About time... by Greyfox · · Score: 4, Insightful
      Or is just complex and unfamiliar. The problem with these frameworks is they work great when they work, but you only ever see them working because they've been published with the most trivial example. When you actually start trying to do things with them, you have to know implementation-level details of the framework in order to make it work for you. By the time you've invested all that time, you may as well have written something less generic that actually does what you want.

      Oh and when I say they work great, I was kind of lying. I have a favorite example. A while back a developer I was working with wrote some Spring/Hibernate code to pull records in from the database and print a billing report. Soon as he handed it off to me, I thought "What happens if I throw 100000 records at this?" Well what happened is that it crashed. So I cut the number in half and it still crashed. Down around 30000 records, it started taking about half an hour and THEN crashing.

      Turns out he was using the framework to pull all the records from a couple of different tables and doing the join in Java. The SQL join I wrote to test the code took a couple of minutes to run on a million records and returned the correct output. On a hundred thousand it was neighborhood of 10 seconds.

      Now the Spring/Hibernate people will be quick to point out that you can edit some XML file or something and make the framework do a join for you, thus solving that problem. And that is true, if you know a fair bit about the framework. And you'd have to know a fair bit about all the other frameworks they used on that project, too. By the time you got done learning all the frameworks they were using to the level of detail where you could actually be that effective with them, you could have written the application they'd built 10 times over.

      Fortunately this story has a happy ending. The team ended up deciding to run the original developer's code against the billing database several times a day so that it would never have so many records to process that it would crash, thus solving the problem once and for all!

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  2. Quality of the solution. by digsbo · · Score: 4, Insightful

    It comes down to the quality of the solution, versus the added headaches of managing dependencies. It's not a religious issue, but one of experience and engineering. It's also a good idea to make sure that if you're inventing something that someone else might eventually provide, you at least loosely couple it, so it can be swapped out later.

    With those thoughts in mind, don't get stuck in analysis paralysis. Use judgment and move on.

  3. Not-Good-Enough Syndrome by Jason+Levine · · Score: 4, Insightful

    I'd say part of the cause of "invented-here syndrome" can be "not-good-enough syndrome." I'm often comparing my programming skills to people I see online - people whose skills far outpace my own. So when it comes time to access my programming skills, I'll understate how good I am because I'm simply not as good as those "coding superstars." Of course, when you see the online results of code people have written, you don't see the idiotic mistakes they made, the typos they've had to correct, the hours they spent Googling for an answer to a pesky problem. You just see some elegant, amazing looking code. It can be a daily struggle to balance admiring the programming skills of others without trying to compare myself to them (and thus knocking my own skills).

    --
    My sci-fi novel, Ghost Thief, is now available from Amazon.com.
    1. Re:Not-Good-Enough Syndrome by Kjella · · Score: 4, Insightful

      Sounds like you've never seen what passes for production code in the bowels of a major corporation. Look at the questions on experts-exchange or stackoverflow. You can safely assume most of them are for paid work. After that, you shouldn't have self esteem issues anymore.

      --
      Live today, because you never know what tomorrow brings
  4. Re:Blame the Simpsons by Immerman · · Score: 2, Insightful

    If only we had access to their code base!

    --
    --- Most topics have many sides worth arguing, allow me to take one opposite you.
  5. Sociological problem: CYA by aussersterne · · Score: 5, Insightful

    Part of the problem is the CYA issue.

    If you're writing the code, you sound like a laborer ("I have to..."). If it breaks, it's your fault and you're on the hook publicly.

    If you present a third-party component in a meeting, you sound like a manager ("I propose that we..."). Once three or four other people in the meeting have concurred, if something breaks it's the third party's fault. A ticket or two are initiated, it's someone else's problem and everybody gets to cast blame somewhere beyond the walls of the company.

    Rational behavior, regrettably.

    --
    STOP . AMERICA . NOW