We often hear the phrase: Choose the right tool for the job. On the surface, there is nothing to argue about. We have tools. Hammers and saws. Mixers and slow cookers. Each tool is designed to accomplish a specific task. Hammers for nails. Screw drivers for screws. Microscopes – for neither of them.
That’s true; however, I remember my grandaunt refusing to use a mixer for merengue. “I can do better with a fork!” she used to say – and she could, indeed! Like nobody else in the family! Or watch me when I come to the Youth shelter to make dinner with the residents and refuse to use a potato peeler. “I can do better with a knife!” – I tell them, and they roll their eyes and do not try to compete.
Back from the kitchen to the data center. There are operating systems, and there are database engines. There are programming languages and QA frameworks. And we do not use one in place of another.
What about “the best programming language for the job”? Do we have a way to decide objectively? What about databases? Can you tell: “This DBMS will be the best choice for you to accomplish your task?”
If your answer is “yes,” I will challenge it.
With a few exceptions and a handful of corner cases, most DBMSs can support virtually any requirements set. I can do anything possible and impossible using PostgreSQL, and my coworkers who are more proficient with Oracle would accomplish the same task using Oracle – faster than it would take them to master new PostgreSQL features.
I think “the best tool for a job” is the one you know best. The reason is that the developer’s time is always the most expensive resource, and if you can achieve a similar quality of the resulting product, the best solution is the one that takes the least time. That said, I do not think any company should support an extensive collection of different DBMSs for “having the best tools for a job.” The only justification for such a situation would be, “We already have developers who use this technology.”
Does it mean that we are stuck with our current technology stack forever? We all know that that’s not true, and changes happen. But I don’t know why 🙂
Postgres community, any thoughts?