Five years ago, "the cloud" was a crazy thing Amazon and a few others were trying. Today entire businesses run in cloud infrastructures that take many different forms. For businesses that aren't entirely "in the cloud," it's now common practice to use cloud infrastructure to extend and enhance the computing power available for everything from corporate infrastructure to development to testing and customer management. We can do anything in the cloud! And cheaply! Well, we can if we're careful.
Cloud computing, even for internal use, creates new concerns and requires new management techniques to achieve the cost effective scalability that it promises. This article describes some of those techniques and cost concerns, focusing on software development and testing.
Do resource calculations before saying, ‘yes’
The availability of vast amounts of resources sounds enticing. It's easy to say yes when the answer to "we need hardware" costs a few cents an hour instead of hundreds or thousands of dollars of capital expenditures. Too easy. At the end of the month the bill comes, and it can be an unpleasant surprise – the cost of ‘yes.’ In addition, having the computing power to build something or perform a test doesn't mean we have the people or the expertise to do it. Tragically, cloud computing has not given us more hours in the day!
So before we say yes to a project or a test, we need to consider how we will manage our resources. We need
- Is there someone who has time to design and set up the project?
- Is there someone who has time to analyze the results?
- What will the team do to respond to the results?
- What hardware, software and data do we need, and is it available?
Resource calculations help us ensure that we can not only find people and time to do the work of setting up and running the project, but that we're prepared to handle the results. It's no good to run a test or do analysis if you know before you start that you aren't going to do anything with the outcome. Oh, and saying, "Boy, I hope that doesn't happen in production!" is not handling the outcome.
Cloud computing changes the cost of projects
Another thing to consider is that using cloud computing changes the cost of projects. Instead of the sunk cost of physical hardware in your data center, the cost is measured very clearly by the amount of time you use hardware (real or virtual), the hardware and software you need, and the amount of data that flows through the system. Using cloud resources in a cost-effective manner means using only the hardware you need, only for as long as you need it and only passing data around if you really need to. Before you get too deep into a project, you should be able to answer:
- How much hardware is needed?
- How am I going to install additional software quickly and correctly?
- What resources do I need during the project, and what do I need to save after the project?
- What logs, system information, binaries, and test data do I really need? What can I avoid copying around?
- How much management do I need and what types of service level agreements must I have?
When using cloud computing environments, the costs are switched from capital expenditures (one big upfront cost in an asset that depreciates over time, and minimal cost per use) to operational expenditures (little or no upfront cost, no depreciation, but pay per use). Thus, machine utilization can and should be optimized. Because we're paying specifically for that time, making setup and deployment faster translates directly to cost savings. Because we're paying specifically for that time, leaving machines running so that we can get logs we might need later increases our costs. Investing in automated deployment and automatic gathering of log and system information provides a tangible and immediate return.
Different projects have different needs, which also factor into the cost. A transient test is very different from a long-term internal development project and the cloud provider you choose and the service plan you pay for should reflect that. Different cloud providers offer different types of services, from backups to load balancing across time zones to uptime guarantees. Pay for what you need, and don't pay for it if you don't.
The good news is that with cloud computing, infrastructures are more extensible than ever before. The bad news is we have to mange that scalability. The good news is that the techniques you already know will continue to work – you just have to make sure to use them. Think about resources – human and machines. Think about using them effectively. And then embrace the power you can now have more cheaply than ever before!
This was first published in November 2011