Objectivity Is Key

Consider Your Coworkers

Be mindful of the people you will be working with. People are already familiar with particular ideologies, components, systems, and even minor things like formatting. It’s important to make decisions based on weighing the cost/benefit between doing something new or catering to what everyone already knows. Forcing everyone to learn something new with a steep learning curve may not be better than settling for something everyone knows already, though that isn’t always the case.

Choose Project Components Wisely

Don’t choose a programming language, framework, or library for a project simply because you’re familiar with it. Don’t choose one because you’ve heard people praise it. It’s possible that despite all of the praise for a particular component, it might not be a good fit for what you’re working on. Similarly, don’t discount a framework just because people say it’s terrible. People online don’t know all of the factors that affect your situation personally, so how could they possibly know what’s best for you?

Consider the size and helpfulness of the existing community for components you are considering in your decision making process. A component’s maturity is extremely valuable. There may be a really cool, new library that seems to fit your problem well, but don’t forget that something less bleeding-edge has probably been more thoroughly tested and most likely has a larger community to help out in case someone gets stuck.

Time Is Valuable

Decisions you make now will impact time that you or others will spend in the future. Consider the project milestones, time constraints, and group expectations when you decide whether or not to implement a hack to fix a problem or to spend more time and fix it correctly. It’s possible the hack could be more appropriate. Premature optimization is almost never a good idea. You will waste time optimizing a piece of code where the simple, non-optimized implementation is likely fast enough. Choose to make your code as simple and readable as possible, rather than clever or complex. Not only will you probably spend more time programming trying to over-engineer (sometimes referred to as “future-proofing”), whoever visits it in the future will spend more time trying to understand what you wrote.

How To Make More Great Decisions

It simply takes practice at identifying the benefits/drawbacks and weighing your options. Start by considering what tools, languages, and frameworks you know and use already and think critically about what they are particularly good for, and where they’re lacking. You should be able to find weak points in your favorite tools that you use every day. Consider what other people have to say. Don’t let your ego take control; you aren’t an expert in everything. Humility goes a long way.

When you learn about something new, the ultimate goal is to be able to determine the benefits and drawbacks of it. You don’t need to learn how to use it, you can learn that once you actually commit to using it. There isn’t enough time to learn everything. Intense specialization is good when needed, but limits yourself from making great decisions because you don’t know what the other, possibly better options are.