Choosing the right tools for your backend
Creating a modern web or mobile application takes lots of moving parts, and the way these moving parts work together is often hard to picture.
As part of the application architecture, there will be both frontend and backend services. Frontend development is concerned with the user experience of the app. In contrast, backend development focuses on providing access to the data, services, and other existing systems that make the app work. In short, the frontend is what the user interacts with (e.g., mobile app or web page), and the backend is the black box, which the end-users do not see, does all the heavy lifting of managing data and processing user requests.
Both frontend and backend have their complexities, however, the complexity of developing a backend app can be daunting for most developers. There are a couple of reasons why a backend app can become quite complex. Needless to say, most of the time the scope of the app dictates its complexity, yet, for even a simple backend app the number of decisions to be made and the requirements to meet can be quite high.
Functional requirements that drive technology/tool selection
While creating a backend app, several different decisions need to be made to meet the requirements of the app. To name a few;
- Which database(s) will I be using, MongoDB, PostgreSQL, MySQL etc.?
- Will I need to manage file uploads/downloads? If that is the case, you most probably will need to use cloud storage.
- What will be my application/web server? This is also most of the time driven by the programming language selected however there are various libraries/frameworks to choose from.
- Do I need Redis or Memcached to cache a subset of my app data to increase performance?
- Do I need to use a message queue to process tasks asynchronously? Will it be RabbitMQ, Kafka etc.?
- Will I need to schedule cron jobs, if yes, then what should I use?
- Will the app require real-time capabilities to synchronize users with real-near time data through WebSockets? If yes, then what library will I be using for this purpose?
- Do I need to use elastic search to perform a full-text search or collect application logs?
- Will SSL certificates be required to secure communication? Most of the time the answer to this question without a doubt will be yes.
- What will be the 3rd party integration requirements of the app?
- Which oAuth providers need to be supported? (e.g., Google, Facebook, Twitter)
- Will the app accept payments? (e.g., integration with Stripe)
- Do I need to collect user and event data for app and user analytics and communication? (e.g., integration with Intercom, Mixpanel)
- How will the app users be supported? (e.g., do I need integration with Zendesk)
- What will the admin panel of the application look like and what will be the functionalities that will be provided through the admin panel?
This list can get longer but the point is that there are lots of pieces that need to be put together. If you are developing a prototype or a small application you might not need all these technologies but as soon as you start getting users and traffic, you eventually would need to put a checkmark on most of them.
Non-functional requirements
Besides the functional needs, there are tons of other non-functional requirements that the app development team needs to take into consideration for smooth operations.
- Putting in place a CI/CD pipeline to automate DevOps processes
- You need to ensure the reliability of the infrastructure
- The performance of the app needs to be good with a low response time
- When the traffic increases then the infrastructure needs to be scalable to handle increased loads
- The app and infrastructure also need to be secure
- The app needs to be resilient, meaning that you might need to run your app instances in different regions or zones to optimize uptime
Most of the time you will be using a cloud provider to host and manage your app, which means that you need to be familiar with Docker, Kubernetes, cloud functions, DNS, load balancers, firewalls, networking, CDN, etc.
Backend-as-a-service platforms coming to the rescue
An application can easily become quite complex. Managing the above technologies and requirements would require significant expertise and a large team. At this point, the backend-as-a-service (BaaS) platforms come to the rescue which automates backend development and takes care of the cloud infrastructure management.
Google’s Firebase, Amazon’s Amplify, and their open-source alternatives all aim to simplify cloud infrastructure management and provide libraries to ease backend application development, particularly in the database, cloud storage, functions (e.g., business logic), and real-time messaging areas.
At Altogic, we provide the set of pre-integrated tools and cloud infrastructure that remove a considerable amount of mundane and repetitive tasks from developers, help them start building products in minutes, and deploy them in seconds.
In contrast to the incumbent and open-source BaaS platforms in the market, Altogic has a different approach that takes application development to the next level, making it possible to develop applications graphically where coding is optional. Developers can use built-in, custom, or marketplace nodes and connect these nodes with connectors to define their cloud functions through simple drag & drop operations. This approach brings the best of both worlds, the speed of no-code to quickly develop business processes and integrations, and the flexibility of coding to solve complex problems.
Conclusion
The functional and non-functional requirements of a modern web/mobile app result in significant complexity in backend app development. To eliminate this complexity, the BaaS platforms provide developers with the tools and infrastructure to develop their apps easier and faster. It is evident that there is significant traction in the BaaS market and recent investments from VCs confirm it.