When do I build Custom systems vs Use off the Shelf products?

I recently responded to a question on my Forum

1. what are the tradeoffs between development of custom silicon and usage of off-the-shelf compute elements for Deep Learning applications?
- Custom is slower to market, higher learning curve to get implemented, and very little support from outside people/vendors, but it allows more flexibility and can be more efficient computationally if done right. It obviously requires a high degree of skill

2. what are the tradeoffs between development of custom firmware/middleware/software and usage
of off-the-shelf software products for HPEC, AI and Deep Learning.
- Same answer as Above.

As a general rule, custom solutions should only be done in situations where you are trying to wade into a completely new realm and do something that nobody else has already done, or the cost of those previous incumbents is too high to pay.

Established systems/solutions have already hit all the bumps, roadblocks and potholes and found ways around them... You would have to reinvent the wheel to build custom. 

There are also non technical reasons. - Support. Who do you go to if you can't solve a problem in a custom solution? 

Reasons to do a custom solution:
1. Breaking new ground
2. Don't have the money for a Off the shelf solution and there is no Open source version.
3. You don't need all the bells and whistles of the off the shelf solution and for the price... yea, this one boils down to price again.

Usually you want to use a mix of custom solutions and off the shelf products and open source products to build any system.

For example:
1. Use Shiny (R web reporting) for front end data reporting that is pretty
--- don't write another reporting framework.
2. Use Drupal for User managment, web interface framework
--- don't write another web and CMS framework, user managment framework
--- Do write your custom PHP modules for operational manipulation of data
3. Use Mysql for a DB.
--- Don't write your own DB
4. Write your algorithms in R or Python and insert into the DB.
--- Do Write custom code for your patent-able algorithms!