Cloud computing has taken some of the control over application development out of developers' hands. Unfortunately, many developers haven't adapted to their new roles in the cloud era, according to Dan Piessens, senior consultant and Agile coach for Wisconsin-based Centare. This shift will force developers to change their traditional ideas about application development. They will also have to adopt new skills in order to build resilient applications for a changing platform.
"Many of the patterns developers use are founded in systems that they have either direct control or influence over," Piessens explained. They do not have this same control in the cloud, where updates, service locations and interruptions are entirely outside the developer's scope.
Piessens suggests applying Agile practices to cloud app development in order to introduce more flexibility and faster recovery from glitches. "There are some easy ways to account for these situations and link them back to Agility principles," he said.
At Agile 2014, Piessens will host a session called "Building stable agile cloud applications," in which he will share some basic strategies to build more resilient cloud apps. The talk will begin with transient error handling, diagnostics and building fallback patterns into the application. "I will share some ‘horror stories' from real life to illustrate the importance of these practices," he added.
In this session preview, Piessens explains how cloud app development relates to Agility and how to make the most of outside expertise. He also discusses who might benefit the most from these practices.
Developing for a shifting platform
Dan Piessenssenior consultant, Centare
"There are two core areas where resilient cloud applications relate to Agility: consistent quality and ability to respond to change," Piessens said.
He suggests a cloud app development strategy that places more value on problem recovery than on avoidance of problems altogether. Developers will have to let go of the notion of planning months in advance for a foolproof deployment. Errors will happen in the cloud, no matter what. How well developers navigate them will ultimately dictate which cloud applications are successful in the long term.
The first step is to think of the cloud as an ever-changing organism, rather than a static platform. "A developer may not realize that the infrastructure beneath them is shifting constantly in the cloud and [may need to] incorporate responses to common transient failures." One example of this would be scalability. What would happen if a cloud application got popular and the traffic suddenly spiked? Developers would need to know before this happened in order to carry out an effective scalability plan.
When it comes to the cloud, quality is not an end result. It is a constant process, and cloud applications need to be designed with a process-oriented mindset. In other words, the design doesn’t need to be bulletproof. It just needs to be resilient.
The process begins with choosing the cloud provider, but it doesn't stop there. Once an application is hosted, companies still need to take an active role in defining the way they will be hosted. That way, they maximize the advantages of different features. "Hosting your items with a major cloud provider is an obvious must, but make sure you’re leveraging the benefits of that provider is something people miss."
Ironically, some companies' eagerness to avoid vendor lock-in may be robbing them of features and functionality that enhance flexibility. "While there may be some benefit to being able to go with Amazon Web Services (AWS) today and Microsoft Azure tomorrow, you may be sacrificing key performance and resiliency that is impacting your business value today," Piessens explained.
Simply doing the research is another key step in achieving resiliency and avoiding common pitfalls. There are plenty of materials out there for those who are willing to look for them. "Take a look at guidance coming from experts in the field and organizations like Microsoft Patterns and Practices. They have a lot of materials that explain what the common pitfalls are, why developers should care about them and how to resolve them."
There are also consulting firms like Centare that could give a fresh perspective on the company's development process, and specifically highlight things they're doing right and things that need to change.
Piessens believes an Agile development strategy is a must for certain types of cloud applications, including mobile backends andSaaS companies. These strategies have the potential to benefit anyone. "Applications that run in private datacenters on two servers can make use of these techniques," said Piessens.
How to shorten the software development lifecycle