Reuse means the use of a piece of technology for new purposes, often ones that were never envisioned by the original designers. Reusability refers to design that makes reuse possible.

In hardware, reusability is of utmost importance. In order to maximize component longevity, it should be possible to reappropriate them to different purposes.

In software, the question of reuse and reusability is more complicated. Software can be constructed and discarded without waste (it's just patterns of electrons), so it can't be compared to hardware in this case. You don't need to feel sorry for programming something from scratch, because the replaceability of software is what computers are all about.

Excessive reuse easily leads to bloat and multiple layers of legacy, as in case of Unix. Monoculture may also appear if a lot of programming is framed as the reuse of a single silver bullet. Too much concern for reusability may also make the piece of software unnecessarily big and complex.

Minimal reuse, on the other hand, may easily lead to "?Not Invented Here" kinds of problems.

The reuse of ideas is less problematic than the reuse of software. Wisdom and ideas can be accumulated and refined without the risk of bloat or sedimentation.

Keeping ideas simple makes it easier to implement and reuse them. Having a rich layer of different ideas at the bottom of the dependency pyramid may also help with creating technological diversity.