IT ecosystem is in a state of continuous change. A decade ago containerization tools like docker and kubernetes didn't exist. Today, you can't talk about fault-tolerant, availability and scalability without considering these tools. Chances are 10 years from now a new set of tools will emerge. There are no absolutes anymore, every technical decision has its trade-offs.
Merriam-Webster dictionary defines trade-offs as "1: a balancing of factors all of which are not attainable at the same time. 2: a giving up of one thing in return for another". Technical managers, architects and engineers have a duty to question every design decision, consider its trade-offs and how these trade-offs align to the requirements of a project.
For example, you are tasked with selecting a programming language for a new project. Your first instinct might be your favorite language or one you are comfortable with. Given the impact a programming language choice can have on a project, we have to set aside our feelings. Selecting a programming language for a project depends on a number of factors such as:
- Client's requirement (some clients explicitly specify which language to use, but you can advise on the trade-offs)
- Cost of hiring new talents
- Learning curve
- Functional vs OOP
- Strong static typing
- Isomorphism
- Interface support
- Ease of refactoring
- Explicitly defined data structures
- General readability
- Third party libraries
As engineers, it is easy to become attached to a particular technology or approach, especially if this approach was implemented successfully in your previous projects. But we have a responsibility to humbly assess the good, bad and ugly of every choice we make. Everything is a trade-off, no absolutes.
Top comments (0)