Trade-off
Some time ago I wrote about why I care about privacy, which led me to today’s topic: the trade-off. Gains in privacy usually cost you some convenience, and more convenience tends to cost you some privacy. Hence the trade-off.
Trade-offs are everywhere. Time spent on work could have been time spent with friends. Money spent on luxury could have been money spent on investments. Accepting one job offer means you might miss out on another. And trade-offs show up in software development too, which is what I want to write about today.
In software development, every tech stack you pick, every architecture you design, every function you write, all of it has a cost. Usually the cost is one you have accepted or prepared for. Say you wanted to build yet another bookstore website. The questions you would ask:
- What features go into the site?
- What tech stack do I use?
- What does the system architecture look like?
As you start forming answers, the arguments start up in your head:
- This feature is complicated to build. Is it worth my time? Will customers even use it?
- That other tech stack looks shinier than the one I had in mind.
- What if I need to scale? If I plan for future expansion, am I making it too complicated now? Do I really think this site is going to shoot off to a million users?
Your mind is processing trade-offs the whole time, arguing with itself. In the end, the decision you land on gets shaped by a handful of things:
- The project specifications (client or customer requirements).
- Your own opinionated take on how to solve the problem.
- Similar solutions you have already seen out there.
- Curiosity or hype about some shiny new technology.
- Your team members’ opinions.
I mainly wanted to write about this because the decision you or your team lands on is unlikely to be wrong. In fact, I think software design rarely has a wrong answer in the first place. There is the correct decision and the more correct decision. The best one you can make is the one you can announce proudly, welcome debate about, and still defend with confidence. A decision you are willing to stand behind in an argument is probably the one whose drawbacks you can accept and whose cons you are already prepared for.