Anatomy of a Modern App
- 04 Oct 2023
"I've moved my application to the cloud! Am I modern?"
Yes! But that's just the first step in making your application future-proof. While the tech community struggles to find a common definition for what constitutes a modern application, at Smile, we have a little insight into the matter.
Granularity and Openness
A modern application follows an architecture centered around the concept of services, including microservices. With a cloud-native approach, developers focus on creating specialized services called microservices. When pooled together, these highly granular individual units form a complete application, but each of them can be deployed and managed independently while being capable of communicating externally through APIs.
Containers and Functions
A modern application relies on containers to make managing microservices easier. Another level of abstraction is to use functions directly, microservices deployed and managed by cloud providers. The goal is to have an operational model as "serverless" as possible, allowing loose coupling between major components.
Event-driven programming is an architectural paradigm that breaks down user actions/interactions into streams of events. Modern applications are designed to create microservices that leverage these events, managing them asynchronously to facilitate decoupling.
Data Management: Customized and Decoupled
Where a monolithic application traditionally relies on a single database, breaking down into microservices allows for the use of data management structures tailored to each type of data and its specific uses.
Agility: Abstraction, Automation, and Standardization
More than just an architectural pattern, cloud-native applications fit into an integrated development process, such as "DevOps," a development method that emphasizes communication, integration, and collaboration among teams to enable rapid deployment of digital products. This process also focuses on implementing safeguards for quality and security to move toward a "DevSecOps" approach.
Why Use These Technologies?
Modern applications stand in contrast to traditional "monolithic" solutions. The latter encompass a broad scope, often too broad, extending well beyond the business domain they aim to address. The direct consequence is functional inadequacy, strong coupling leading to interdependence between systems, and a reduction in the ability to deliver features rapidly.
Furthermore, the frontend and backend are closely linked, and web services are often undersized to meet omnichannel needs. It is therefore necessary to have the necessary glue to assemble these components coherently, and depending on the expected service level, the glue and solutions may vary.
By breaking down the code of an application into microservices, developers can quickly deploy updates to any part of the application. The modern approach speeds up the delivery pipeline, reduces build times, and enhances overall flexibility. The ambition around native cloud computing is to make IT a commodity that serves the business.
Market and Maturity
The technologies behind native cloud computing are mature:
- Serverless model: K8S or Knative have been used for years. FaaS models are newer and evolving rapidly, but AWS introduced them as early as 2015.
- Decoupled approach: Single-Page-App/PWA/GraphQL have been part of the digital landscape for a while.
- Public cloud offerings are well-proven, with instances deployed by thousands of users.
Which projects would be challenging to execute without these types of technologies?
Without a modern approach, certain projects would be particularly challenging to implement:
- Rapid adaptation to changing business needs: automated responsiveness of services to workload changes.
- Data analysis: massive data processing, storage, and calculations.
- IoT and mobile devices: managing thousands of sensors.
- Innovation without bottlenecks: launching numerous projects without heavy investments for each one.
- Data proliferation and long-term storage: the growth and long-term retention of data.