Our clients often face a tough decision: should they implement a new software-intensive IT system using a "custom" solution or with a ready-made product? Sometimes the answer is simple: if the requirements are rather general, the problem has almost invariably already been solved, and the obvious choice is a ready-made product. For instance, Microsoft Exchange will most likely satisfy basic needs related to email. But as the system's requirements grow more unique, the choice is no longer obvious. This is no simple matter.
First, I should explain what a "custom" software solution means to us. Custom is not about making everything yourself. A custom solution is a set of carefully selected individual products, each good at some specific function needed to solve the problem. These products, or modules, interact via well-defined and open interfaces, allowing one to construct the optimal system. The products that make up a custom solution may have nothing in common: developed and maintaned by different people or companies, built with different technologies, some long ago, some recently.
A good solution consists of modules that fit together and complement each other. This is in contrast to a product, where all the building blocks have already been selected and the end result assembled. Somewhere in-between these two extremes lies the range of proprietary platforms, often mislabeled as products. These platforms (at least aim to) allow for the same modularity and flexibility as the purely custom approach, with the significant restriction that all the modules are based on the same underlying technology.
Here I've outlined what a custom software solution means to us. Later on, I will dive deeper and discuss how to choose between custom and product-based solutions.