The Infrastructure Iceberg
Tags: webdev, beginners, devops, productivity
Published: 2024-05-07 03:42:53

## I just need a simple app on the app store, that's all...

_Cover photo by <a href="https://unsplash.com/@mlenny?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Alexander Hafemann</a> on <a href="https://unsplash.com/photos/photo-of-iceberg-M-EwSRl8BK8?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Unsplash</a>_
  

Let’s say you are seeking a consultant to build a software product for you. You might be inclined to hire your friend’s buddy who builds apps on the side since he can do it cheap or at a low hourly rate. All you need is the dev to build the app and then it’s self sufficient, right? I mean the app store hosts the thing after all!

SaaS products are like an iceberg. The end user sees a pretty mobile app icon or a nice web site but rarely is all the functionality self-contained. Often there are many layers of technology behind the scenes that support that app, not to mention infrastructure and security maintenance. When factoring in the viability and cost of implementing an idea, you should consider all it takes to support an app and what maintenance for it looks like.

To help explain different infrastructure components, I’ll use the example of a mobile app that helps you manage your pantry. You can create an account, store the contents of your pantry, get recipe recommendations based on what you have in stock, purchase food to replace what’s out of stock, and receive alerts when certain items are on sale. What does it take to support such an app?

## App Store Developer Account
In order to publish an app to the Apple App Store or the Google Play Store, you will need a developer account on the corresponding store’s platform. Although the name includes “developer” you can think of these accounts as vendor accounts that allow you to publish mobile applications under your company’s name. You can give your developer team limited access to your account via specific permissions to manage the app they are developing for you.

## Authentication Provider
Because our example app allows users to create user accounts and store information tied to their user account, you will need a tool that manages user accounts and provides authentication functionality. While this can be a home-grown solution, it’s usually more secure and more cost effective to use a third party provider. Such third party providers include Auth0, AWS Cognito, and Microsoft Entra ID.

## Email Service
When there are user accounts, there are emails. At the very least, you’ll need to email users as part of setting up an account or for password recovery. You may also choose to send marketing emails related to your app or to send notification alerts. Regardless of the reason, you’ll need a way to send automated emails. In order to do so you’ll either need your own SMTP server or use a third party email service to handle the sending. Some examples of third party email services are SendGrid and Mailchimp.

## Data Store
Because the app allows users to recall the items in their pantry, you’ll need a place to store that information across login sessions and devices. Some form of database or datastore will be needed. These can be a managed database service you pay for through a cloud provider like Amazon Web Services, Google Cloud, Microsoft Azure or it can be a database server installed on a bare-metal our cloud server you manage.

## Payment Processing
Since the app allows users to purchase items through the in-app store, you’ll need a way to process payments for those orders. This means a 3rd party integration with a payment gateway. These include Stripe or Paypal, or payment gateway aggregators like Chargebee or even Shopify.

## Servers
For your app to communicate with all of the above services and provide business logic for your app, you’ll need some form of a backend API or web service. This a service running on a server somewhere that communicates with your app to interact with the database, validate users, send emails and facilitate payment processing. Depending on the architecture of the backend, processing power required, bandwidth, and availability zone requirements, this could be multiple servers across multiple time zones and countries.

Since our example app sends alerts to users, we’ll need to a service to send push notifications to them.

## Web Presence
You may also want your app’s functionality to be available on the web. This involves developing a web application viewable on desktop and mobile that provides the same functionality and will also need hosting. Even if your app is mobile-download-only, you may still want a landing page website for those using search engines to find your app. There are many hosting providers for web. For a simple landing page, pretty much any static site host will do. For a web application you may need a more custom hosting configuration and infrastructure depending on the technology used.

## UI/UX
You’ll want to collaborate with a UX designer to create the look and feel for your app and also how the users interact with it in an intuitive way. If you have a landing page or web version of your app, you’ll want to have those designed with a matching look and feel. If you are sending emails, you will want the email design to match the app.

## Ads
In our example app, users are sent alerts for sales they may be interested in. This may include advertisements from third parties. We’ll need to either coordinate with an ad service or collaborate with specific vendors to serve up their ads in our app.

## Mobile Platforms
While mobile apps on both Android and iOS may look the same, the technology and process used to build them natively are drastically different. Some apps can be created using a cross-platform framework that allows code to be written once and compiled for each mobile platform (more or less). Some apps because of performance, sensor accessibility, or other reasons may need to be developed independently for each platform.

## Security
Because your app stores information about its users and payment information, you must do your due diligence in securing that data. That includes securing the database and network used by the platform. It also includes using proper encryption for appropriate data, applying security patches as they become available, and responding to security threats to keep your platform secure.

## Ongoing Support
So far we’ve discussed several components that may be part of a software product but are not known to the end consumer. One of the difficulties for small businesses and solo entrepreneurs is the management of all of these components to support their product. While your friend’s buddy may be able to set up some of these components, who is going to manage them while you run your business or as your business scales up? As you move from proof-of-concept to serving real customers, you’ll want to partner with a company that can provide that maintenance and ongoing support.

## Conclusion
There is a lot more to running and maintaining successful software platforms that meets they eye. Hopefully this information can help you get a better idea of cost of investment and give you real talking points to discuss when shopping around your project.

## Need help with your software product?
My day job is working as a software engineer for [Trendsic](https://trendsic.com) where I help businesses large and small architect scalable and sustainable software platforms. Reach out to me at contact@zachnology.io to discuss how I can help you with your next project.