I think this is part of the art of software engineering, but I have some heuristics:<p>- What do you need the framework for? What do you not need the framework for? Heavily weight your decision based on the needs you know you have, and not what the tool/framework says it does. They all do lots of cool stuff.<p>- Use Feynman's strategy: when you run across a new problem, try all your existing tricks on it. When you run across a problem you can't solve, put it on the back burner. When you find some new tool, take out all your unsolved problems and see if it solves any of them for you.<p>- Trade off performance before you trade off correctness. Incorrect stuff always bites you, performance more rarely bites and usually when it does it's easy to fix<p>- Think hard before trading off speed / correctness in order to save programmer time. The time it takes a programmer to code something is miniscule compared to how much time you'll lose to deploying something you know is incorrect<p>- Use a novelty budget. Mostly go with popular tools and frameworks that are at least a few years old. You can spend your novelty budget in a weird db, or new framework if you want to, but try to make few weird choices.<p>- Use what your team is more comfortable with. People can learn, especially developers, but ultimately if you pick some amazing dependently typed language, and your entire team is java developers, you're going to be fighting an uphill battle that is probably not worth it.<p>- Controversial, but know your developers' skill levels. If you have a lots of mediocre devs, give them a language like Go or Java. They really will tie themselves in less knots with these intentionally limited languages and there are way more stack overflow answers, etc etc.<p>- If all else fails, check how actively maintained the thing is, number of stars in github, activity level etc. Really sucks sometimes, but you may find the perfect tool and it's unmaintained. You might think "well, I only need it to do this one thing, I don't need updates" and what is happening is you are signing yourself up to be the maintainer when it breaks inevitably, in a way you didn't expect, 6 months from now.