On Choosing the Best Tool for the Job
Django. Ruby on Rails. jQuery.
There are many such frameworks which promise to be Swiss army knives. They include as many tools that they think you’ll need as possible, and then some. There are people who can program in these frameworks without knowing much of their respective host languages. They’ll argue they are working on the level of the problem domain and don’t need anything else. Working on the level of the problem domain is great, however, there are issues with dependence on a single tool.
If all you have is a hammer, everything looks like a nail.
– Law of the instrument
Flexibility of a tool could be defined in at least two ways. First, one could argue a Swiss army knife is flexible as it can be used for many different problems. On the other hand, decomposing the problem allows you to be choose the best tools for their respective jobs.
As a corollary, when using a decomposed system, if you’re screwdriver stops being maintained or your employer uses a different platform, you can swap it out with minimal effort. When using a Swiss army knife, your screwdriver and your bottle opener might be one and the same. Since the tools are combined, there may be unintentional interdependencies that prevent you from switching completely.
You’re locked in.