The Intersection of Agile and Serverless

Adopting AWS Serverless empowers small teams to fully embrace Agile practices by offloading infrastructure management, allowing focus on delivering value. While it requires adapting to event-driven, distributed systems, flexible architectures enable transitions.

25 days ago   •   5 min read

By Maik Wiesmüller
The Intersection of Agile and Serverless
Table of contents

Introduction

In the fast-paced world of software development, agility isn't just a buzzword - it's a necessity. Having journeyed from a geek tinkering in a basement on my Robotron A 5105 to joining highly dynamic teams, I've witnessed firsthand how the right tools and approaches can transform not just a project but an entire team's way of working.

One game-changer I've encountered is adopting a serverless-first approach on AWS. This isn't merely a technological shift, it's a catalyst that enables small teams to truly live out Agile practices without getting bogged down by infrastructure hassles. Let's explore how serverless empowers teams to focus on delivering value.

The Struggle with Traditional Infrastructure

Even in today's era of containers and orchestration tools like Kubernetes, managing infrastructure can feel overwhelming, especially for small teams. Containers have undeniably revolutionized the way we package and deploy applications, offering consistency across environments and simplifying aspects of testing and deployment. But they also bring their own layer of complexity. Configuring clusters, setting up networking, managing storage volumes, and ensuring stability.

Setting up a containerized environment isn't just about spinning up a few pods. It involves configuring orchestration tools and ensuring that services communicate effectively. Then there's the whole arena of monitoring, logging, and tracing. In a containerized setup, these aren't just plug-and-play features. We need to think about viewing logs, monitoring performance, and tracing requests across services. And even when there are fitting solutions at hand, these systems need to scale in tandem with our application.

For small teams, this burden is particularly heavy. With limited resources and manpower, the complexities of managing even modern infrastructure can slow down iterations, introduce risks during deployments, and turn quick adjustments into time consuming undertakings.

And we haven't even talked about rate-limiting, recovery and backup strategies.

The Enabler

When I first encountered serverless computing, it was as if someone had finally invented the wheel for developers. Services like AWS Lambda, DynamoDB, and API Gateway abstract away the heavy lifting parts of infrastructure management. Suddenly, we could deploy applications without worrying about servers, physical scaling, or maintenance.

A serverless approach also enables rapid deployment and iteration. We can push out new features, gather user feedback, and make adjustments. This rapid iteration is the heartbeat of Agile development. Scalability becomes less of an issue; with serverless, scaling happens automatically (mostly, to a point).

For small endeavors, budgets matter. AWS's pay-per-use model ensures we only pay for what we consume. There are exceptions, but more about that later.

You can see it as a renting a world-class platform team, but with the benefits of car sharing. AWS makes sure the car (platform) is nice inside, shiny, has the best equipment and just works. If they need more staff or metal, not our concern. We pay for our ride, not the whole vehicle. If the car has a breakdown, AWS knows immediately and have some of the best mechanics to fix it as fast as possible.

Shared Responsibility Model

One of the brilliant aspects of AWS is its shared responsibility model. AWS takes care of the security of the cloud - meaning the infrastructure - while we handle security in the cloud, like our data and applications. This partnership feels like having an expert team backing us up. We don't have to worry about patching servers or ensuring physical security. Instead, we focus on application security and delivering features. Again, it's like renting a world-class platform team. AWS handles the foundational elements, so we can build skyscrapers without laying every brick ourselves.

When Serverless Isn't the Best Fit

While serverless offers numerous advantages, it's important to acknowledge that it's not a silver bullet for every situation. There are scenarios where a serverless approach might not be the optimal choice. For instance, applications with extremely low-latency requirements or those needing specialized hardware configurations might find serverless limitations challenging. In some cases, a serverless architecture can be more expensive than traditional setups, especially when dealing with consistently high workloads that don't benefit from the pay-per-use model.

However, it's crucial to consider the total cost of ownership (TCO) when evaluating costs. While serverless might seem more expensive in raw compute expenses, the savings in operational overhead, maintenance, and infrastructure management often tip the scales in its favor. The time and resources saved by not having to manage servers, handle scaling, or maintain monitoring systems are substantial.

That said, there are legitimate cases where moving away from serverless makes sense. The key to handling these transitions smoothly lies in adopting a robust software architecture from the beginning. By utilizing principles from hexagonal or clean architecture, we design our systems to be flexible and adaptable. This approach allows us to switch (full or partially) from serverless to containers, virtual machines, or even bare-metal servers without rewriting the entire codebase.

In practice, this means we can start with a serverless approach, leveraging its benefits to accelerate development and delivery. If and when the need arises to shift to a different infrastructure model, our well-architected system supports this change with minimal friction and reasonable costs. This flexibility ensures that we're not locked into a single paradigm and can make strategic decisions based on the evolving needs of our application.

That's why I advocate for a "serverless first" mindset—not just "serverless." It's about choosing the best tool for the job while maintaining the agility to adapt as circumstances change.

Adapting Your Problem-Solving Approach

Embracing a serverless-first mindset isn't just about changing your technology stack, it also requires a shift in how you approach problem-solving. Serverless systems are inherently distributed and often benefit from event-driven designs. This architecture introduces concepts that might be new and can trip you up if not given proper attention.

For instance, in a traditional setup, you might have deal with an overwhelmed service, getting slower and slower until its not responding anymore. In a serverless environment, you most likely encounter a throttling exception instead. Understanding how to handle these exceptions gracefully is crucial. Retry behaviors, delivery strategies, and handling duplication are key concepts that need to be grasped.

Neglecting these aspects can lead to systems that are difficult to maintain. Therefore, investing time in learning and adapting to these new paradigms is essential.

The good news is that once you get the hang of it, these concepts will significantly enhance your system's robustness and scalability.

Real-World Impact

I recall a project where we needed to build a scalable application under tight deadlines. Traditionally, setting up the infrastructure alone would have taken weeks - a luxury we didn't have. By adopting a serverless approach, we had the immediately needed parts of the infrastructure up and running in days. Automated testing and monitoring tools integrated seamlessly, ensuring we didn't sacrifice quality. Our expenses scaled with usage, and we just kept adding what we needed when we needed it - in no time. The team felt empowered rather than drained.

Living Agile Values

Agile isn't just about sprints and stand-ups; it's about fostering a culture that values individuals, collaboration, and responsiveness. Serverless aligns perfectly with these values. By simplifying the tooling, we allow team members to focus on creative problem-solving. Rapid deployments mean we can deliver working software continuously, keeping stakeholders engaged. With the ability to iterate quickly, we involve customers throughout the development process. Serverless architectures make it easy to pivot when requirements change, without the sunk costs associated with traditional infrastructure.

Conclusion

The serverless-first approach on AWS isn't just a technical decision, it's a strategic move that enables small teams to fully embrace Agile practices. By offloading infrastructure management, we unlock the freedom to innovate, collaborate, and deliver value at a pace that meets today's demands. As someone who worked in all kind of setups over last years, I can attest to the transformative power of serverless. It allows us to focus on what truly matters - building great products and enjoying the process along the way.

Technology should be an enabler, not a bottleneck. By leveraging serverless-first, we align our tools with our goals. Let's embrace the future of development together, one serverless function at a time.

Spread the word