How do You Make Technology Stack Choices?
It’s something we all do from time to time, but I’ve never thought about codifying how to do it effectively. I get irked by articles like “React vs. Angular vs. Vue.” It’s not a competition. There is no “right” answer. There is only the best choice given the context and constraints of the decisions.
What’s the repeatable process of making these choices?
Here’s the best I’ve come up with:
1.Define The Problem
Too often I see conversations that start with a solution already in mind, without the problem clearly defined. For example “we need a static site generator-based for our new site.” Do we? Why? Is there a reason other potential solutions would not work? By defining the problem, that also leads us to…
2. Define the constraints
Are there limits on time or money, effort or skill level? We need to know that up front. Constraints are immensely helpful in decision making because making decisions is the process of eliminating options. If you have hard constraints, you can reduce the number of choices you have to make.
3. Define The Options
What options are available to us? This includes researching options that you may not have considered. Continuing with the blogging platform example, I have almost zero experience with Squarespace and would not initially consider it, despite them sponsoring every podcast.
4. Eliminate Choices
Doesn’t solve the problem? Gone. Disqualified by a constraint? Get it off the list. Not sure if a choice fits? Do more research or building a tiny prototype. (I love building tiny prototypes.)
5. Write Your Case
Even if you don’t share it with anyone, it’s useful to write a brief of why you made a technology choice, and then try to defend it. Imagine a highly skeptical boss reading this, and prepare for answering questions. Check your work and make sure you made the right choice.
6. Move Forward
At some point, you need to accept the decision that has been made and start doing the work. Remaking decisions, unless you have a very good reason to do so, is a fruitless exercise.