There is often the sense that going serverless means going microservices and event-driven architectures, too. That's NOT TRUE! They are related but ultimately separate design choices. So much of software engineering is about making smart choices. Often, when I see teams struggle to adopt serverless, it's because they try to take on too many new ideas at once. A marathon, not a sprintI have seen many ambitious teams that want to modernise their application and go from on-premise monoliths to:
On top of that, migrating to DynamoDB is often thrown into the mix. That is A LOT of moving parts, and it requires many different experiences and expertise to navigate successfully. Expertise that most of these teams do not have. Learning to do all this while you're expected to deliver tangible results under a looming deadline is very risky. It's like trying to learn to juggle flaming swords and ride a unicycle at the same time... while you're on a tightrope! A more prudent approach is to take a slow and steady path towards your goal. Limit the scope of change Limit the number of big (and risky!) architectural changes in one go. One is best; two is plenty, and three is probably too much. If you're switching compute (e.g. EC2 -> Lambda) and database (e.g. MySQL -> DynamoDB) paradigms, then don't add microservices or event-drivenness to the mix. De-risk along the way Look for opportunities to de-risk, such as running your existing web application as a Lambdalith. Tools like Lambda Web Adapter, Serverless Express and Chalice all support this pattern. That way, you can enjoy the benefits of Lambda (e.g. scalability) without refactoring your entire application and adopting a new set of software development practices. Start small If your team is new to AWS and the serviceful mindset (i.e. prefer using a managed service over custom code), then start by introducing a low-risk service to your stack. Changing a database requires a lot of work. Moving to Lambda impacts CI/CD and development workflow. So maybe you can start by introducing S3 for blob storage. Or perhaps replace a custom-built scheduling service with EventBridge Scheduler. It's not about being "serverless"Instead of thinking about "adopting serverless", it's better to focus on reaping the benefits of serverless with the least effort:
Serverless-First, not Serverless-OnlyWe say "serverless-first" because we want people to leverage serverless technologies where it makes sense. Your business changes over time, and as your context changes, you should adapt accordingly. As I discussed in my retrospective of the PrimeVideo article, your architecture should evolve with your business needs. Being serverless is not the point. It's not a religion. For me, the best thing about serverless technologies is that they help me deliver customer value faster. Like that time when I helped a client launch a new social network in weeks. When it comes to adopting serverless technologies in your organization, you too, should focus on finding value. If a move is risky, then find ways to de-risk and take smaller steps instead. |
Join 13K readers and level up you AWS game with just 5 mins a week. Every Monday, I share practical tips, tutorials and best practices for building serverless architectures on AWS.
2024 was the year I got back and amongst the community, and it felt great to be back! Blog I published 33 new blog posts. As a whole, my blog garnered 353k views from 255k visitors. About half of them came through Google search. This is down from 2023... but the decline is offset by more people reading my content through my newsletter nowadays. Most read blog posts: Hit the 6MB Lambda payload limit? Here’s what you can do When to use Step Functions vs. doing it all in a Lambda function How to...
One of my favourite questions from the November cohort of Production-Ready Serverless [1] is, "How do you handle e2e tests involving multiple services across bounded contexts?" In a microservices environment, testing user journeys that span across multiple bounded contexts requires collaboration and a clear delineation of responsibilities. Depending on how your organisation is structured, different teams are responsible for testing parts or the entirety of the user journey. For example... The...
The ability to invalidate a user's session with immediate effect is a common enterprise requirement. For example: If a user's credentials are compromised, we need to immediately revoke the user's access and force the user to change credentials. If an employee is terminated or an external contractor's access is revoked, their session should be invalidated immediately to prevent misuse. Many regulations mandate strict access controls and the ability to prevent unauthorized access in real time....