Hey, you made it to part 4 of my series on all the steps that are involved when creating a software application. If this happens to be the first one you’re reading, make sure to head over to the previous parts linked below:
Part 1 - The spec
Part 2 - Making mocks
Part 3 - Data, Schema and Storage
I bet some of you are thinking...
Just show us some code already!
...but how can I show you code if we haven’t even decided what programming language to use? In today’s post we’ll go through some of the ways in which we decide what technologies to choose to use in our apps.
Let’s first take a moment to consider what factors are at play when deciding what tech we’re going to be leveraging in order to create our next app. These factors are probably true of many other decisions we make both in technical fields and out.
The first thing to consider is what is it that we’re actually trying to achieve with building this app. What we eventually choose will be different if we want to build a business around this app versus if we want to learn how a specific technology works. In the case of the app we’ll be focusing on throughout this series, the end goal is to serve as a reference that I can show to a potential employer. I discussed the details thereof in the final part of my previous series: “Why I’m switching to Angular”.
In pretty much every endeavour that we take on in a professional setting, there are going to be deadlines. Sometimes even in non-professional settings (read: coding for fun) we’re going to place some time-limit on ourselves. When deciding what tech to incorporate we have to keep in mind the limits that are placed on the project.
So now that we know where we’re going and what our limitations are, let’s get into how we select which tech to use when developing our app, finding the right tool for the job at hand.
This kind of fits in with keeping in mind what you’re trying to achieve. The best place to start would obviously be… as with every other step in the process… the spec you developed in part 1 of the series. Hopefully your spec is written clear enough that you can extract the different components required. If it’s not that clear, then you can use this list of three basic components of almost every app.
Getting an exhaustive list every possible technology in existence in order to find the best one is kind-of absurd, but it’s still a good idea to at least look at a few options that you could use.
Part of your research into what tech is available should also include trying to figure out what the “industry standard” is. If a lot of people are choosing one technology over another it’s usually for a good reason, it will pay off to at least find out what that reason is. Another benefit of going with the popular option is that there’s usually more help available should you get stuck. It’s also easier to find someone to hire that’s familiar with the more popular tech.
This step is highly reliant on the things to consider mentioned above. If one of your goals is to try and learn more about a specific technology, then obviously you’re not going to know it all that well, but it would be a good idea to use as many familiar parts as possible to ensure you don’t try to cram too much information into your head as possible. Also, if your app has a pretty tight schedule to completion, it won’t help to choose everything that you have to learn from scratch to use. If you’re going to be working in a team, it’s also important to consider the expertise of everyone involved.
Finally, you have to try and estimate which of the different technologies will be the least amount of work to help you get to where you’re going. The simplest solution is almost always the best solution. But keep in mind what you’re end goal is. The simplest solution for development is not necessarily the simplest solution for scaling. For example getting a MySQL database on a shared hosting provider is comparatively easier than setting up a large Hadoop cluster running highly tuned load balancers, but if you have a billion records to sift through, your puny little MySQL instance is going to be very difficult to maintain and kept running. On the other hand, if you’re app is only going to be used by a dozen or so users once every 3 months - or even just by yourself - then an SQLite database running on a Raspberry Pi in your basement could be sufficient.
So, in case you were interested in knowing what I’ve decided the best tech would be for the example app I’m using throughout this series, here goes:
Pretty simple setup I’d say. Hope you enjoyed this post, hopefully next time I can share some code bits…
But I’m not making any promises yet...