The not-invented-here effect
Developers like building things themselves. That is understandable. I can shape, understand, and control my own code. Other people’s systems are often imperfect, poorly documented, or inflexible in exactly the wrong places.
It is easy to conclude from this that a custom solution will automatically be cleaner. In doing so, I frequently underestimate:
- maintenance,
- edge cases,
- security issues,
- long-term compatibility,
- documentation,
- support,
- and the cost of that supposedly minor extra feature.
Sometimes custom code is the right choice. Sometimes an existing solution, despite its flaws, is the more sensible option both technically and economically.
The question should not be:
Could I build this better?
The answer to that will usually be yes anyway — at least in my imagination. The better question is:
Is this particular component a sensible place to spend our limited development time?