As 2022 comes to a close, here are some of the technologies, patterns and strategies I'm watching for 2023. This list is from my perspective, I'm sure if you poll others here at Chariot they'd have their own.
The Big Serverless Push
Watching the re:Invent keynote last month, you'd be hard pressed to miss Werner Vogels' central message: go all in on Serverless computing, and sure, it has an allure. With a few clicks or a small (?) CloudFormation script you can set up on-demand RDS databases, EventBridge, Lambdas, and a ton of other services.
One of the latest announcements was AWS Application Composer, built by the developers of Stackery. It's a visual AWS infrastructure development tool that can set up Cognito, Lambda, Dynamo tables, an API gateway and a subset of other elements.
It lacks support for every AWS feature–there are 13 blocks to choose from so far, so you can't currently set up an RDS database, for example. That means it will have limited utility compared to well-crafted CloudFormation, CDK, or Terraform scripts, but it may help beginners learn how AWS platform stacks are formed by switching between the the Canvas and Template modes.
I have a feeling that it will be a decent prototyping tool, and we can certainly help take that initial CloudFormation template and make it into a fully-fledged platform for customers who need to see their proof-of-concept ideas to the finish line.
Speaking of Lambdas, there are several patterns in use to organize your various services. This article discusses three approaches: a single-purpose lambda and endpoint for each case, a "fat lambda" where related Lambdas live in the same set of files and deployment, or the "Lambda-lith" where you mount an application framework like Spring Boot, Express, or Flask within a Lambda as a way to serve the code serverlessly. Each has its pros and cons. Do you use Lambdas? If so, what approach do you take?
Containers vs Serverless
Depending on the application use case or needs, some serverless technologies may pose challenges in areas such as cold-start latency, debugging, and complexity. Developing an application using containers such as Docker may give advantages such as:
- Running the application locally for debugging and testing
- Save money with Docker databases in development
- Scale applications on cloud providers automatically (requires configuration)
- Simplify library re-use
Tools like Docker containers / Kubernetes run applications across all of the major cloud vendors. AWS provides Elastic Container Service, which runs Docker instances, and can be backed by their Fargate serverless container runtime to simplify complexity. It also provides Elastic Kubernetes Service for running the containers in Kubernetes. We've developed applications for customers using both of these services to run typical web-fronted React applications, backed by Node.js, Spring Boot, and other services.
My own view is that the use of serverless technologies has to provide a clear benefit and make the alternative undesirable. For example, running RDS Aurora for Postgres as a serverless database engine just takes the management, patching, and backup services and handles them for you. Using serverless to reduce complexity for admin and management can be a solid win whether or not the actual application runs in a container or in a serverless Lambda.
Front-end tooling: Server-side React changes the game
State-of-the-art React applications don't just run on the browser anymore. They are increasingly involving server-side rendering (and even pre-generated pages) to speed up and reduce the size of dynamic web sites.
Two contenders in this space, Next.js and Remix Run, are currently in a game of innovation leapfrog, each having pushed what it means to be a React front-end application to now include server-side React components, using standard web APIs like fetch (in the case of Remix.run) and other features. The Remix team came out with a strong release last summer, previewing server-rendered React components and a bevy of other features, and then the Next.js team delivered Next.js 13, which incorporates the newest draft of the SSR React component standard and a new page template model.
Both platform are ones to watch in 2023 and are redefining and exploding the concept of a Single Page application.
Java 19, GraalVM, Project Loom, and Spring 6
Well, our ETE speakers have been saying it for a while now, but Java has been undergoing some heavy improvements. The GraalVM compiler came with JDK 17, and With JDK 19, parts of Project Loom, Project Amber, and the Graal VM (among others) are now in production.
Spring 6 officially supports GraalVM, which can make starting a Spring Boot microservice in Docker much faster.
See this InfoQ article by our friend Michael Redlich for details on the Java 19 release.
That's my list of technologies and trends to watch for the new year. What's yours? Let us know in the comments, and have a very happy new year!