At times, starting a fresh software project can be pretty daunting. There's nothing more exciting than a blank canvas, and yet, there's a lot to plan and consider which can make it difficult to know whether the choices we make are the right ones. Resources, design and architecture, tooling, releases, documentation - we all know the list goes on and it all needs to be considered. And though it's true that we should strive to be technology independent in our approach, ultimately, it doesn't always work out that way in practice.
So perhaps one of the most impactful factors in the long-term is the technological choices we make. We often have a vision in mind for the end product which might include a backlog of features and the platforms it should be available on, but failing to consider or evaluate our options when making these early technological choices that we ultimately rely upon, can easily morph into a headache of technical debt or limitations down the road.
In short, many of the factors which I've witnessed often sound a little like "we use it because we know it", "we've always supported XYZ so why try and support ABC, too?", "this is the new hotness - let's use it for something", "let's branch out a bit and learn and use ABC", "XYZ has had solid and consistent development and maintenance so it seems a safe bet".
For example, you can find plenty of information about options for starting a new cross-platform desktop GUI project - a wealth of tech-stack options exist from the usual suspects (Electron, Element, Qt, X + GTK*, Java Swing, JavaFX, .NETCore + AvaloniaUI, etc.), all the way to the more elaborate solutions like locally hosted web applications, but the question remains: what criteria and process do you find works well to whittle them down when you don't have strong experience of them all?
I often find a few simple spike projects in the main options and a browse of some documentation and community discussion will help, but time isn't always on our side to allow that kind of experimentation. For me, it's a key factor that there be well-written and comprehensive the documentation, and a thriving community for help and discussion!
I'd love to hear about what processes and constraints you find useful when deciding which competing technology stack to use to kick-start the product into life. How do you, your team, or organisations go about weighting technology choices and making a decision? Are there any resources you've found particularly enlightening in these situations?