"He who asks a question is a fool for five minutes; he who does not ask a question remains a fool forever." - Chinese proverb
The development space is changing quickly these days. Open Source software and easier collaboration is producing a large amount of new software libraries and frameworks at a very rapid pace. Which is awesome!
However, you can't keep up. Fundamentally, maybe you can follow the concepts or general principles of the software in question. But getting hands-on time on everything out there? Impossible. Too much to learn, too little time. Maybe you could slice a small piece off the Java/C#/NodeJS/AngularJS{{insert your favorite here}} pie and get really good at it, but you'd be getting further behind everywhere else.
Take the database space for example. How many types of databases could you name? (relational, key-value, document, graph, etc.) How many products or engines could you name for each type you could name? 1-3? Have a look at
db-engines.com. Could you name half of the categories on the left? Would you have expected over 200 listings of DB systems? If you needed a database in your next system, which one do you pick? Certainly nothing below ranking 100, right? . . . ranking 50? . . . ranking 10?
And there are many parts to a software system. And each project is different.
To jump to the point, I'll just ask the question I want to answer...
Can you pick the wrong technology?
No.
Not really, anyway.
You might pick a solution that is overkill for your task. Or maybe one that doesn't do everything you need so you have to bolt on extra bits.
Most software languages are capable, especially with the right library. And most software can be used for a variety of purposes, even if not intended. You see, developers are creative and industrious. They will find solutions no matter how poorly the technologies line up. When it needs to get done, it is surprising what comes together. (Or how the definition of "done" changes ; ) Coming from the defense industry, there is some old and crusty software that has been working for a really long time and continues to perform.
It is better to have an approximate answer to the right question than an exact answer to the wrong one.
- J. Tukey
So while most software languages, frameworks or systems could be used to solve your problem, there could be a "more right choice". The right combination of software can make your life easier, but as of yet there is not a "one size fits all" solution to every project, every time.
Consider the following questions as you start your next project and are choosing the technology. Hopefully these, and the many side questions they produce, can guide you to a "more right" decision and avoid some pitfalls.
How fun will it be?
I ask this first because it's probably the #1 reason you're considering changing software. Read a good scrolling marketing landing page? Did some other company manage to use this software in a cool way? Is it trending on some google search or stackoverflow question list?
Honestly, these are not bad reasons to try something new. Like I mentioned before, it will probably work out for you (at least initially). But be careful. This question could get you into a lot of trouble and suddenly isn't so fun, yet too late to switch.
Can it do what you need?
Now here's a good question. It involves knowing what your new project is doing, and is especially meaningful if there are boundaries to your requirements. The project that has a fixed list of features has latitude in terms of technology choices than the project that "will start small, but we'll grow it into our business for the next 3-5 years."
Have a web page that will be about 4 pages and 10 components with 5 API calls to the server? Pick any framework you want! Every web framework can do that. How about 10 pages with 15-20 components, that fully drives an API? Better think about what it is you're trying to do before jumping in.
What can't it do?
The opposing side to the previous question. Identify where the limits exist, and there will be limits. Are those limits crucial to your project? Will it be a problem in the future? (Is that future 2 to 3 major releases away?). Just knowing what problems may come up will help you be ready and help you think more about what you're doing (design). You don't need to solve them all now, but don't go in blind.
Can you afford to learn?
I worded this question to emphasize that learning is important. Different concepts and approaches will be useful for sure, and also builds the options for following projects (or resumes).
But learning takes time. What kind of schedule are you under? What is the learning curve? A new framework will have a large curve while a new library or component will be smaller. How much new stuff are you using? New language, new framework, new database and new deploy tools all at once? Careful there . . .
There is a cost to learning and some projects will be able to afford it, while others will not. Is it worth the cost this time? Tried and true technologies that your team is comfortable with will go a long way and add speed and consistency to your development, though be aware of the changing landscape in case your stack gets left in the dust and you're playing catch-up.
How strong is the ecosystem?
Remember how Open Source software and collaboration are changing the landscape of software these days. Use that to your advantage. It's not like a new software technology is thrown at you and you have to go read an O'Reilly book or standards document to even get started.
Is the software documented, and does it contain examples? One command install? Are there blogs? How many questions are there on stackoverflow? How many issues and pull requests on its github pages? These are just a few questions to help determine if the existing ecosystem is mature, because it basically comes down to time. Will it take hours or days to fix that bug or get something setup? Chances are you're not re-inventing anything and the question has already been asked, or the problem already looked at. Think of where you can go for advice.
The other side of the software ecosystem is longevity. Will your technology choice be around as long as you need it? Will updates happen that fix your problems? Will too many updates happen that cause you problems because it's release 0.3.45 beta? It is easy to start a library these days, but will it be maintained?
Of course, if you only use mature and stable software, you might be missing out on getting a technological advantage of trying something new, or miss the chance to be part of something from the ground up. Is that important to you?
Wrap Up
A lot of rhetorical questions flow through my head when choosing software. I do not want to dwell too long on the choice, but cannot afford to blindly choose or forego advice when picking something new. There may not be a perfectly right technology out there, but for your team and your project, it is possible to pick one that is more right than others.