What Goes Into Building an App?
July 8th, 2023
So you want to build an app, but you don't know where to start? Maybe you're thinking about hiring an app development company or an individual contractor to build it for you - but without a good understanding of what it takes to build an app and how they're typically composed, you're going to be at a big disadvantage when looking for a good freelancer or trying to write a contract.
My goal with this post is to give you a basic foundation of knowledge that will guide you in making decisions about how to move forward with your app.
So, where do we begin?
The first two questions I like to ask people about their apps are:
Is it best suited for web or for mobile?
Will it be offline-first or does it require a backend?
If you're not sure what the answers are, a little extra guidance might help. For the first question, you need to consider what your target audience is and how you see your app being used: is it best for on-the-go actions, social interactions/communication, or anything notification-driven? Then most likely, you'll want a mobile app. On the other hand, if you see your app being used for more focused tasks that your users might dedicate more time to, and/or requires a lot of complex features, a desktop or web app may be the better choice.
As to the second question, my favorite way to help people figure this out is to ask, "would your app work without having people sign up for an account?" If so, it might be a good candidate for an offline-first app. Otherwise, you'll almost certainly need to develop a backend and have an online-first app. It's a bit of an oversimplification, but it's a good place to start.
Why does it matter?
Your answers to those questions will make a big difference on what your app requires. For example, a web app is generally going to be cheaper and/or faster to build than a mobile app, because the web has had more time to mature and is a freer platform than mobile devices are.
Online vs. Offline is an even bigger question, and is best understood by looking at the different structures of the two:
Overview of Online App Architecture
An "online" app is one where you store user data on the internet to be accessed by your app while it's being used. This likely describes most of the apps you're familiar working with: some good examples are Twitter, Instagram, Spotify, and Netflix.
Storing data on the internet like this allows you to have lots of dynamic, changing content, and also enables things like sharing and connecting between users.
That's great - but it doesn't come for free. It adds a whole new set of components to your app development process, commonly known as the "backend". With that in mind, here are the basic building blocks that will be required by an online app:
A database - this is where you'll store your users' data, content, and all the other information your app needs to run. Common examples are MySQL, PostgreSQL, MongoDB, and Couchbase.
An API/server code - this acts as a messenger, allowing your app to communicate with your database to access and update data. Common words you might hear around this are NodeJS, Ruby on Rails, Spring Boot, or GraphQL.
The actual mobile app code - this is often referred to as the "frontend," and encapsulates everything the user sees on their screen as well as all the code needed to communicate with the API. Common terms here are SwiftUI, Jetpack, Kotlin, React Native, and Flutter.
Bonus: a file storage solution - while your database can store most of the data for your app, for big files like images, videos, or long blog posts, you're going to need a system that can store them on a filesystem. This could be a part of your server code, but often is accomplished via a cloud storage provider, such as Amazon S3 or Google Cloud Storage.
That's a lot of components for one app, but they're all crucial!
If you want to find a developer who can build all these components for you, you're going to need a full stack developer. These programmers know a wide variety of technologies and can help get you from start to finish with your app - keep in mind though, that they're often specialized for working with a particular "tech stack." A tech stack is basically a combination of particular tools for each of these components, so when hiring a developer you want to make sure they'll use a tech stack that fits your use case well.
In addition, full-stack developers are often a bit more pricy than your average developer, because they're providing so much value for your app.
Another thing that's helpful to note is that there are services out there that provide most of the "backend" components of your app (items 1, 2, and 4) mostly out of the box - these are known as "Platform-as-a-service" options. Depending on the complexity of your app, these might be a great starting point that allows you to hire just a frontend developer and focus attention on the frontend of your app. Some examples of these are Firebase, Supabase, or AWS Amplify.
How about an offline app?
If your app can mostly function without user accounts or internet access, congratulations! You get to cut out all the backend steps from your development workflow!
While that might sound nice, it usually means there's something unique about your app on the frontend that will push the boundaries of what's been done before on that platform. This might mean that the time you would have spent on backend development will instead go to some kind of unique feature that forms the core of your app.
For example, Forest is an offline-first app that's all about focus and productivity. It likely didn't require much backend work, but the team had to put a lot of time into graphics and animations for trees, and detecting when the user leaves the app.
Another example is Notability - it's a fantastic note-taking app that started out with no online features. However, they had to put a ton of work into the software for drawing and note-taking, which would have required a lot of specialized knowledge.
When you're looking at building one of these apps, you're not looking for a full-stack engineer. Instead, you want to find a frontend developer who specializes in creating beautiful apps for your target platform. And if you want really good quality, you're probably going to need to hire two developers: one for iOS and one for Android.
Conclusion
Building an app is a complex process that requires a lot of moving parts to work together. Finding a good developer requires a bit of knowledge as to what you're looking for, so doing your research beforehand is extremely important.
This post just covered the tip of the iceberg - if it sparked any thoughts or questions and you'd like additional help navigating this process, let's talk! I offer a free 15-minute consult where we can meet and talk about how I can help.
I wish you the best with your app idea!