Every programmer ever born thinks whatever idea just popped out of their head into their editor is the most generalized, most flexible, most one-size-fits all solution that has ever been conceived. We think we’ve built software that is a general purpose solution to some set of problems, but we are almost always wrong. We have the delusion of reuse. Don’t feel bad. It’s an endemic disease among software developers. An occupational hazard, really.

If I have learned anything in my programming career, it is this: building reusable software, truly reusable software, is an incredibly hard problem – right up there with naming things and cache invalidation. My ideas on this crystallized in 2004 when I read Facts and Fallacies of Software Engineering for the first time. It’s kind of a hit-or-miss book overall, but there are a few gems in it, like fact #18:

There are two “rules of three” in [software] reuse…

Read more at the source