The cloud opens up numerous opportunities for developers. Not only is it more flexible and scalable, but it's also easier to provision resources and validate new builds. So why isn't everyone taking advantage of the cloud?
To keep up with demand and deliver quality applications, I believe the industry needs to adopt a more agile, iterative approach to software development. But what does that actually mean?
How to be agile in the cloud
1. Build fast
When building a new application, it’s easy to get hung up on the idea that you need to get everything right first time. With all the best will in the world, that just isn’t going to happen. And that’s okay when you take a more agile approach.
Whenever I speak to a client, I advocate a build fast, fail fast mentality. Quality is subordinate at this stage. Focus instead on building a proof of concept (PoC) and validating it in the shortest amount of time possible. Once you’ve proved that the thing you want to build works, you can start to think about improving the quality of your code and ensuring the infrastructure is secure and robust enough for publication.
2. Build again, better
Now you’ve established a working PoC, it’s time to build again—only better. This doesn’t mean you should build over the top of the previous version. Many developers take this approach and end up inheriting technical debt from their earlier efforts.
it’s always better to start with a clean slate in a fresh new environment. A key part of this is identifying and deploying the key technologies that underpin your build. If you’re creating brand-new infrastructure, for example, I recommend investing in Infrastructure as Code (IaC).
Tip: Infrastructure as Code not only increases provisioning and configuration speed, but it’s also more consistent and highly scalable.
You should also put your application through a Continuous Integration/Continuous Delivery (CI/CD) pipeline and audit your build post-completion to ensure it’s architected correctly. This could be with a colleague who has experience with your cloud environment or a specialist, third-party cloud consultant.
Most businesses understand the importance of iteration in technology. Some take a high-level approach: which applications comprise their estate, how much it costs to operate, what kind of uptime they can expect from their service level agreements.
These are all important considerations. But you need to get granular if you want to reap the rewards of agile cloud development. In my experience, the small percentage improvements add up to the biggest wins.
Analyse the individual components that comprise your applications. For example, you could take a closer look at your auto scale groups (AGS) to see if you can reduce response times during periods of high demand or re-evaluate your network infrastructure to identify any incremental changes you can make to improve latency. The deeper you dig, the more accurately you can measure performance and cost-effectiveness.
Stay up to date
The rate of change in the cloud is staggering. New features and product updates emerge almost every day, so you must keep abreast of the latest developments in your chosen platform. When Elasticsearch released a new instance type for AWS, I was able to save one of my clients 20% on their running costs by making one simple change.
Tip: We use a dedicated Slack channel, connected to an RSS feed, to inform us whenever AWS releases a new update.
Review your monitoring and maintenance processes
Every incremental improvement you make to your applications has an impact on long-term monitoring and maintenance. Each iteration will create new endpoints or require more intensive logging to stay on top of activity and performance, which will quickly render the processes you put in place on go-live obsolete. Get into the habit of continuously review your application infrastructure to adapt to current demand.
4. Have an agile mindset
Agile isn’t only a development methodology, it’s a mindset. But developers that have grown up with the waterfall methodology often struggle to adapt to the concepts of collaboration, change, and continuous improvement that lie at the heart of the agile approach.
Unlike traditional approaches, agile gives you the freedom to experiment and iterate before, during, and after launch. It’s also flexible. Rather than viewing missed deadlines as an unforgivable sin, roll with the punches and change your plans—as long as there’s a good reason. Move it to the next sprint and investigate the causes of the delay during your next retrospective
Just remember that, as with any cultural shift or innovation programme, adopting an agile mindset requires stakeholder buy-in.
The cloud is a flexible place
So development needs to be flexible too. Taking an agile approach gives development teams greater flexibility, enabling them to quickly validate proof of concepts, deliver viable applications, and iterate over time.
It also benefits the end-user. Rather than waiting three months for the next swath of bug fixes and quality of life improvements, they have access to the most up-to-date version of your applications. This helps to build trust and forge stronger relationships with your customers.