Why people should actually “invent things here”

Jerome Li
5 min readDec 6, 2021

Not invented here, or NIH for short, refers to a tendency to avoid using products, research, or standards which one did not create themselves. It means, for example, if you were making an app, you would build every part of the app yourself without using any third-party tools. This concept comes up frequently in the tech industry.

Today, NIH is seen as something undesirable. Conventional wisdom says you should use products, research, or standards which were created by a third party. The reasoning is that you should not be wasting the effort to “reinvent the wheel.” A lot of companies today, especially in the tech industry, when they want to solve a problem, they first look for a solution that’s already been built, before thinking about building it themselves.

And on the surface, this seems to be an unquestionable truth, does it not? Yes, you shouldn’t be wasting time. Yes, you shouldn’t reinvent the wheel because the wheel is already round. Yes, you should stand on the shoulders of giants. But what if there were cases where we should question these assumptions? What has been said has been said many times, so I’m here to bring up some unpopular opinions.

Hidden costs

If you use a third-party solution, the obvious advantage is that you don’t have to spend the effort to build it yourself — someone else has already done that for you. The problem is, the cost of integrating a solution into your project is not trivial.

First, you need to do some investigation, which takes time and effort. Then, you need to do some groundwork to make the solution fit your project, which might entail making changes to your project you would not have otherwise made. Then, the actual integration may take some more work depending on the quality of the third-party solution. And well into the future, you would need to do regular maintenance to make sure everything continues to work.

And as you start adding more and more third-party solutions into your project, the shape of your project starts to deviate from what you originally planned. It might become less stable. You’ve glued together bits and pieces to create a chimera resembling your original idea, but not quite. You can try to preserve the integrity of your project every step of the way, but that requires additional effort.

Lack of ownership

Engineers may complain that third-party solutions are hard to work with. This is a valid complaint, but it really depends on the quality of the third-party solution — you would simply find a better provider for that solution if it exists.

However, another complaint is that while the solution may be good, it does not do exactly what you want. And therefore you would need to spend additional time and effort to get it to do exactly what you want. This creates a sense that you do not own the thing that you’re building — because parts of it are built by someone else, who did not put your best interests first and foremost.

Then, the task of maintaining your project becomes similar to babysitting someone else’s child rather than raising your own. At least in my experience, it ultimately requires roughly the same amount of time and effort — but in exchange you have less control over your project. Therefore in the long run, greater cost of maintenance, less flexibility, less freedom of choice, less peace of mind.

An important distinction

What I’m not saying is “don’t use any tools at all.” That would be ridiculous. That would be like not using source control for your files, not using a compiler for your code, or just outright not using your computer. An analogy would be, let’s say you’re building a house. You would use hammers, nails, floorboards, light bulbs, all sorts of other things which you did not yourself produce. However, you would not necessarily bring in a kitchen that someone else already built, because it might not fit in your house. So perhaps “be picky about what you use” is more accurate.

Fast fashion, fast engineering

Some parallels can be made to fast fashion, which is the idea of going from ideas, to making clothes out of them, to selling them, all done as quickly as possible. To do this, as much as possible of the process of designing and manufacturing is outsourced, leaving only the process of selling. The goal of fast fashion is profit, specifically short-term profit. However, fast fashion produces waste at every step — the end result being mountains of wasted clothing sent to landfills, and untold amounts of damage to the environment.

Nowadays, it is trendy to practice fast engineering — using third-party solutions whenever possible, leaving as little of the actual engineering as possible for yourself. Like fast fashion, the goal is short-term profit. Ship it quickly. Make the minimum viable product. Worry about maintainability later. Here, the waste product is the time and effort spent gluing bits and pieces together to make something you will probably rebuild, time which you will never get back.

Going against the flow

The prevailing thought these days is that we should practice fast engineering as much as possible. There’s no time to waste. However, compared to fast engineering, it is not a waste of time to build as much as possible yourself. It is not a waste of effort. It can be thought of as an investment — long-term benefit for a bit of extra work in the short term.

Yes, we should minimize waste at all times. But the idea that something is “wasted” by building things yourself is a perversion of this desire to actually minimize waste. What exactly is being “wasted” if you build things yourself rather than use a third-party solution? Are we wasting paper by writing more code and then printing it out? Are we wasting the bits and bytes, the electrons which make up the code?

One might argue that what’s being wasted is all intangible. But when you look all around, there is no shortage of fast engineering, reusing code, people borrowing ideas from each other, and such. And despite that, there is no shortage of situations where there are multiple ways to do everything, multiple duplicated-but-slightly-different solutions for everything, multiple conflicting “standards” for everything.

It’s like that age-old paradox — after e-mail was invented and people started going paperless, there has been more paper waste than ever before. So the question is, has it all been working? Or should people start actually putting in the work to build things themselves?

--

--