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?
Top comments (4)
When I make decision to choose which technologies are suitable for project, I put all the factors and constrains on the table and start from limited one.
Budget
Period of time
Number of team member (Engineer, designer, etc)
Skills of each person
etc
Budget and Time are keys. 99% of all problems can be solved by money. Money which is always lack of :D
That's an interesting idea, certainly for a project which is for an organisation or client - determine what you have least of and orient technology choices around those constraints.
How do you make those choices for your personal projects? π
Yes, I do.
It does not matter the project is for clients or personal, Resources are limited, I have only 24 hours a day and many things to do in this limited life time. I can't invest as much as i can on my personal project, so finance is also limited.
Back to technologies. What I surely expect is output. Technologies are methods to deliver expected outcome. For example, you have plenty of ways to develop REST API.
Then it comes to consider another constrainsts
Programming skills: Would you develop by programming language you mastered already? that would shorten learning time and be able spend on another things such as architecture, design, documentation or learn new programming language? it would take some time depends on learning curve.
Environment: This includes development environment and production environment. Windows server restal cost is always more expensive than Linux one.
Maintenence: We all love to fire and forget, the best system comes highest reliability and least maintenance.
Security: It is nessesary, isn't it
etc...
When the resources are limited We can't take everything, some need to be cut or reduced. Project requirement will give us clue.
Keep in mind that time is money (spend or gain), principle of business. No need to consider this if money grows on trees.
As for me, I found myself in streaming. It's very important to find a reliable way of making money and having fun. As for me, I am playing different games on twitch and youtube and used onetwostream.com/ to know more about different resources and how to do it right. There are a lot of different information about streaming, Insta development etc.