Cloud-based development is hot! The promise of elastic resources from build farms to flexible infrastructures is a dream come true for organizations that would rather put their money to better use expanding the business and generating revenues instead of maintaining expensive servers that may sit idle aside from peek usage periods. With cloud-based technology, startups have the ability to get online with an inexpensive footprint and then scale up quickly as the organization grows and the money comes in. But cloud-driven development also has its challenges. Read on if you would like to be successful with cloud-driven development.
ALM in the Cloud
Application lifecycle management (ALM) drives the entire software and systems lifecycle. Cloud-based development can make extensive use of software as a service (SaaS) resources to support the entire ALM process. This may entail utilizing a cloud-based “elastic” resource where you can lease (and pay for) as much CPU, disk, and memory resources as you require. It could also mean that you simply obtain resources via a SaaS-based service provider. Today, you can support agile development with cloud-based resources or just rent space on a distributed version control system. Source code management is an important function that can be served using cloud-based resources.
Source Code Management
There are a number of vendors providing cloud-based version control systems. My first experience with using one of these services was in support of a website that I was writing. I thought that it would be very convenient to use a service that was integrated with the technology that I was using to create the website and connect directly with the ISP hosting my platform. What I found most annoying was the limited web-based interface provided by the vendor.
Web-based Interfaces
Web-based interfaces are great—that is, until you discover features that do not work as well as their respective thick client interfaces. Many source code management solutions have powerful features that are not available via their corresponding web-based interfaces. I first saw this as an issue with enterprise-wide source code management solutions that used limited web-based interfaces to support offshore developers. Many web-based solutions are powerful, but I have also seen a number that are very limited when compared to their thick client-based products. Similarly, you may need to evaluate whether or not your integrated development environment (IDE) can be used with your cloud-based source code management solution. There are many other reasons to develop in cloud, including the need to learn and master a new technology.
Training in the Cloud
Recently, I needed to learn a new source code management tool for a consulting assignment that required both servers and server-based software that I did not own. I was able to rent time on a compatible server and then download an evaluation copy to facilitate my own educational process. Once I got started, I realized that I had planned incorrectly for the necessary amount of memory and within a few clicks I was able to upgrade my server to the desired configuration. I only needed this training resource for a few weeks, so the cost was minimal. I gave the credentials to another member of my team who was able to repeat the process of installing and configuring the solution and both of us now had experience with administrating this new technology. Training is essential and having a sandbox to have a “dry-run” with a new technology can make the difference between success and failure. Build engineering is another area where cloud computing can be of great value.
Build Servers
Being able to scale up when automating your application build, package, and deploy is essential. There may be times when you need to support multiple versions of a system but only have one in-house build server available. Cloud-based server farms allow you the flexibility to setup robust build solutions to meet temporary needs that would not justify purchasing a completely new system. Obtaining flexible short term resources are important. Sometimes you need to focus on deploying in the cloud, too.
Deploying Cloud-based Applications
I have found supporting the build, package, and deployment of applications in the cloud to be quite challenging. Some of these environments come with predefined deployment tools and procedures that may or may not meet your requirements. At times, I have found these resources to be great and I have always enjoyed seeing their customer-driven processes and procedures. Sometimes, however, the one-size-fits-all approach did not meet my requirements: Not having control over my own servers introduced significant risk. This lack of control made deployment in the cloud rather challenging.
Environment Management
Monitoring your environment is a key aspect of configuration and release management. Development in the cloud may leave you feeling less than comfortable with your ability to monitor the environment. In this context, you may suspect that something is wrong and you need to interface with support staff at the vendor site. I like to control my world, and this sometimes makes me feel less than comfortable because when troubleshooting, I did not have visibility into how the infrastructure was being maintained. I recall one instance in which my website kept shutting down. The vendor claimed that I needed a larger virtual server, which I then purchased. Before I had time to move the software to the new machine, the problem was apparently resolved and my old website had no further problems, although I now had an extra virtual server, which I probably never needed. What I needed was a service provider who was capable of basic environment management.
Conclusion
Development in the cloud has many significant advantages including flexible “elastic” infrastructure, often at a significant cost savings. There are also challenges that may or may not make development in the cloud the right choice for you. You need to consider all of these issues before making the right choice for your project and your organization. Development in the cloud is all about making pragmatic choices and managing risk. Make sure that you drop me a line and share your own experiences with development in the cloud!
About the Author
Bob Aiello is a consultant, editor-in-chief for CM Crossroads, and the author of Configuration Management Best Practices: Practical Methods that Work in the Real World, Addison-Wesley Professional (http://cmbestpractices.com). Mr. Aiello has more than twenty-five years’ experience as a technical manager in several top NYC financial services firms where he had company-wide responsibility for CM, often providing hands-on technical support for enterprise source code management tools, SOX/Cobit compliance, build engineering, continuous integration, and automated application deployment. Bob has served as the vice chair of the IEEE 828 Standards working group (CM Planning) and is a member of the IEEE Software and Systems Engineering Standards Committee (S2ESC) management board. Mr. Aiello holds a Masters in industrial psychology from NYU and a B.S. in computer science and math from Hofstra University. You may contact Mr. Aiello at bob.aiello@cmcmedia.com, link with him at http://www.linkedin.com/in/bobaiello,or visit his corporate website http://yellowspiderinc.com.
Trackback(0)
Comments 
Write comment
 |