Capabilities of Modern Applications - Modern Application Development on AWS

Capabilities of Modern Applications

Modern applications should be:

  • Secure – It is crucial for any application to be secure. Security measures must be implemented not only in a certain piece of the application, but in all layers and at each stage of the lifecycle.

  • Resilient – A modern application is resilient. For example, if an application encounters a failure when it calls an external data source, it should retry or otherwise handle the exception—not become unresponsive—while continuing to operate with a graceful degradation of functionality. This pattern also applies to a microservices architecture and interactions with other services.

  • Elastic – By flexibly scaling out and scaling in depending on the rate of requests or other metrics, modern applications can optimize cost without missing business opportunities. Automating the process of scaling out and scaling in, or using managed services that include auto scaling functionality, reduces routine administrative burden and prevents the extreme disruption of outages.

  • Modular – Modern applications are modular, with high cohesion and loose coupling. Larger systems should not be single monoliths, but should be separated along domain boundaries into different components, each with a distinct responsibility. Not only does this separation allow for greater availability and scalability, but frequent releases are easier, because different components can be deployed independently.

  • Automated – Integration and deployment of modern applications must be automated to enable frequent, high-quality releases. In addition to being error prone, manual processes can introduce dependence on individual people, such as requiring a single administrator to make deployments. To support agile development and frequent releases, modern applications should be deployed through continuous integration and continuous delivery (CI/CD) pipelines. In a CI/CD model, code is pushed to version control, tests are run in a clean CI environment, and deployments are performed automatically if all tests pass.

  • Interoperable – In modern applications, each service must interact with other services, provide the resources requested of it, and perform the tasks expected of it. It must be possible to add functionality to different services independently and continue to release frequently, without impacting other services. This means that services must keep their implementation details private, exposing all required functionality through robust, public APIs. These public APIs must also be stable and backward compatible to allow for independent releases.

There are various methods you can use to implement modern applications. This paper includes information about methods to deploy applications in the cloud with containers and serverless technology.