If there is only one thing that you read on my blog in this category, this is it.
There is only one best way to do something. Bzzz. Wrong.
I don’t have any choice. Bzzz. Wrong again.
Let’s start with the first one. As you saw in the post title, there are always many ways to accomplish something. Always. Call them options. Some of those options may be sub-optimal, and some of them may suck, some may be mediocre, and a couple may look pretty darn good, but those are all options. Just because you don’t know about an option or don’t like an option doesn’t prevent it from being an option.
So the first step is to catalog all the options. Dig around and find all the options. I would even propose that the first option to come to mind when you are tackling a problem is probably not the best option. Go back and think critically and look at all the fringes for options you may have initially missed. There are always more options.
Then, for each option you’ve found, identify its pros and cons. Again, you may have bias and gloss over some of the pros and/or cons, but think critically and really dig here. With effort I bet you’ll find some pros you initially hadn’t thought of for initially unappealing ideas, and vice versa for the initially appealing ideas. Either play devil’s advocate yourself, or get someone to do that for you. You need to challenge the status quo and the preconceptions.
Then, which option do you pick? There is no absolute. Absolutes exist only in math and religion (and even those have some wiggle room). So figure out what you are trying to optimize for. Maybe you are optimizing for flexibility, speed, cost, value, effort, strategy, breadth, depth, coolness, stability, bleeding-edgeness, whatever. The best option is going to depend on what you are optimizing for. In other words, it depends. You will probably be optimizing for multiple facets. But you can’t optimize for everything, you need to target.
Once a company PR person called me after I had worked on a dozen projects. She said, “tell me about your coolest project so we can promote it.” My reply was, “Cool to who? The business person, the executive, the CS student, the manager, the middle-aged I/T worker, the intellectual property lawyer, the customer?” I would have picked a different project for each of those people. Each project had a strong point or connected with a certain constituency, there wasn’t one project that did it all. So I was basically asking the PR person who they wanted to optimize for. And that is basically the question we need to ask ourselves: in this circumstance, what I am optimizing for? That will guide you to pick the best option for this circumstance. It’s entirely possible, and sometimes even beneficial, to pick another option in a different circumstance. If you are picking the same option regardless of the circumstance then I’ll bet you are making the wrong choice in some of those circumstances. But on the flip side, realize that churn has a cost too.
Another thing to keep in mind is the difference between project execution and decision making. As engineers, at the beginning of a project we are prone to jumping in and starting execution before making the hard decisions. It is easier to do than to think. However, if you think criticially before you execute, you will end up in a better place. Some level of challenge within a team is healthy and desirable. Also realize that within teams certain people may have the specific role of decision maker instead of do-er, and the decision maker is not a lesser role than the do-er.
So, bottom line, there is always more than one way to do it. Figure out what makes the most sense in your circumstance.