Imagine the following: your software project needs some small library/tool. You spend some time on the net (and asking people) looking for it. But half the stuff you find cost too much, the other half are OK but *this* or *that* is lacking or is done differently than you'd like. So, you decide to "roll your own". Implementing only the capabilities you need, it won't take a long time and there's the great benefit that having coded it, the team understands it better and can configure it to specific needs. This is a common and an acceptable situation in the software world.

In hardware it's much more difficult. Suppose you develop a board, with microcontrollers, FPGAs, I/O and the usual stuff. You find out you need a component that does *this*. It should work on 5V, provide a 200 ms "watchdog", etc, etc. You spend time looking on the web for such a part. You don't find anything that's exactly what you need. Can you "roll your own" ? No way, you can't. You're an embedded development house, building boards, writing code for FPGAs, code for the processors, etc. You have no idea how to build parts (say, a reset controller component). So, what is there to do ?

The only thing left is taking parts that are /close/ to what you need and "living with them". A diode here, a pull-up there, two buffers later you make the thing work. Good.

This difference is interesting, IMHO. It requires an other mind set.