Using Serverless Backends to Iterate Quickly on Web AppsSeptember 24, 2020
In a series of three technical articles, AWS has recently shown the advantage of building serverless backends to iterate quickly on web apps and be able to follow changing product requirements. These development methodology and architecture allow flexibility but increase coupling with cloud vendor services.
Using a “Happy Path” web application for state parks as an example, James Beswick, senior developer advocate at AWS, explains the goal of the project:
This series is about building flexible solutions that can adapt as user requirements change. One of the challenges of building modern web applications is that requirements can change quickly. This is especially true for new applications that are finding their product-market fit. Many development teams start building a product with one set of requirements, and quickly find they must build a product with different features.
The first implementation allows end-users to upload maps and photos, while further iterations add more complex features and pivot to an entirely new market, restaurants. The code is available in a GitHub repository and uses the AWS Serverless Application Model, an open-source framework for building serverless applications.
The API layer is developed invoking Lambda functions to complete its task, storing and fetching data from the storage layer, built on Amazon S3 for binaries and Dynamo DB for metadata. The business logic is encapsulated in AWS Step Functions workflows, while an Amazon CloudFront distribution serves the content to the end users.
Architecture overview, source: https://aws.amazon.com/blogs/compute/using-serverless-backends-to-iterate-quickly-on-web-apps-part-1
The first article covers how to deploy the application, test the upload process, and review the architecture. The second article explains how to use AWS Step Functions, a serverless function orchestrator to sequence AWS Lambda functions, and how to to deploy a custom workflow for image resizing. In the third and final article, the author shows how to introduce more advanced workflows with custom branching and image moderation. The series ends with an example of pivoting from the original idea, addressing a different market while reusing most of the logic.
In a separate article, while analyzing how the business logic flows in serverless applications, James Beswick comments:
Well-designed serverless applications are inherently flexible, making it faster to add new functionality as user requirements change. This is because individual parts of the workflow are specialized and loosely coupled. This can help support iterative development and also help reduce the amount of rewritten code when the design changes.
While the series describes AWS technologies and relies on the AWS Serverless Application Mode, a similar approach can be leveraged on any cloud provider that provides functions and orchestration for serverless workflows. For example, an iterative approach can be achieved using Azure Durable Functions or with Cloud Composer, Google Cloud Platform’s service that is built on the open-source Apache Airflow.
Relying on serverless technologies and abstracting developers from server-side work does not need to couple the service to one cloud provider, as Nick Gottlieb suggests. For some developers the risk of slowing down is a bigger worry as Yan Cui, developer advocate at Lumigo and AWS serverless hero, pointed out:
A competitor that can get to market faster and iterate faster than you (while you’re busy building your cloud-agnostic solution) is gonna lock you out of the market sector long before Amazon locks you out of your kingdom.