Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

"Never write/roll your own" is the counterpoint to the NIH "Not Invented Here" syndrome... however, the older I get, the more reasonable NIH cases I see, such as the one in the article. People will say, for example, "why would you write your own ORM when there are so many available for free? Why reinvent the wheel?" Yet when I start looking at the wheels that are available, they take up a lot of space, a lot of time, take quite a while to learn (while the boss is asking me "is it done yet? is it done yet?"), have their own bugs, and need to be regularly upgraded and maintained against. This isn't necessarily a flaw - these "wheels" (ORMs, file storage solutions, web application frameworks and, dare I say it? security solutions!) are designed to solve generic problems rather than the specific targeted problem that I'm focused on.


If your problem is that your boss is asking "is it done yet?" writing your own new ORM does not seem like the most productive antidote to learning an existing hard-to-understand ORM....


Not in my experience. If I'm coding, and I can demonstrate that I'm checking stuff into Git (or SVN or CVS or Clearcase), and I have something to demo every couple of days, they're happy, even if there's theoretically a faster way to get from point A to point B. On the other hand, if my only progress (for a whole day!) is "researching" some software, they go into full-blown panic mode. I've found this to be absolutely consistent over a career of now 25 years and 10 different employers.


It might be easier to sell to your boss when there is measurable output from your work.


Overtime I have gone back and forth on this. When I was much younger I liked to write my own versions of libraries and such to have more control.

I got older and realized I now had to maintain 8 different projects, including my in house versions of things. Giving up control of a project to another person made me realize I had to eventually trust someone else to implement things correctly.

Now a days I am back on implementing my own solutions since I am more worried about efficiency. It would be nice if the compiler could inline the library implementation WELL(it usually sucks at this with static linking even with -ffunction-sections, etc.). I think there is a need for a language level facility for controlling what aspects of a third party library wind up in your final binary. Or more modular type libraries.

I just wish design decisions made by others weren't so baked in, like datatypes used or tag bits and what not.


The other dimension rarely mentioned in these ruminations is that in the NIH scenario, you're robbing your less senior team members of an opportunity to build transferable skills.

I'm not sure whether that doesn't rank very high for people, doesn't even occur to them to be a problem, or they just don't give a shit about anybody else.


Taking a long time to learn is, in my experience, becoming less common. Library authors are more aware of ergonomics than they were, say, 10 years ago. For every huge ORM, there's an intentionally small alternative built out of frustration.

Having a variety of high-quality, widely-used libraries to choose from is vital, though. That's why I don't use brand new stacks at work, even if they are "better" in some way.


I would love to write my own version of many things. I am confident that my version would be less bloated because it would be focused to my company’s particular use case (I.E. the MVC framework doesn’t need a table of non-standard HTTP methods unless we’re actually using them, and the ORM doesn’t need to be compatible with Oracle 11g DBs unless we’re using those). It would also have less surface area for vulnerabilities. It also wouldn’t get random updates that break backward compatibility in subtle ways. But I’ll never do it, because it’s more code we have to maintain in-house. Companies naturally accrete huge overburdened tech stacks, and anything I can do to cut back or slow the progress of that effect is a win.


Yeah but the stuff you roll yourself grows over time, has its own bugs, and gets retargeted for more projects over time.


Sure, sometimes. But most software developed in-house dies fairly quickly (<1 yr) and instead is rewritten with new requirements versus retooling old stuff. Lots of software dies on the vine or becomes legacy after 6 months.


I don't know where that's true.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: