All modern systems are built out of components. Those components can come in different forms: 3rd-party proprietary, open source and developed in-house. Open source seems to be the most popular option nowadays and one may think that using open-source components is an all-around win. It is a win, but not all-around.
3rd-party proprietary
- minimal initial effort to start getting benefits from the component: some learning curve, but no heavy lifting with development
- all encompassing solution with features you do not need but still have to deal with
- fairly good understanding of costs related to getting maintenance for the component over time
- minimal control over direction of development
- possible dead ends because of lack of transparency
DIY components
- tightly focused solution that delivers exactly what you need
- significant upfront costs and long and, maybe, costly further maintenance
- with all that comes full control over the direction of development
- draws resources and attention from the core competency
Open source
- ready-made solution that requires minimal to start using
- free basic maintenance by the comunity
- solution with wide focus and sometimes “half way there” functionality
- illusion of control induced by the fact that source can be forked and taken in-house