One of the biggest changes in information technology over the last ten years has been cloud computing. This change is huge and it is here to stay. While cloud is transforming businesses and governments around the world, it provides special advantages for certain types of organisations and work. This article will explain the ways in which cloud can support Agile software development and Lean Startup type organisations.
This is the main benefit that people talk about in the context of cloud computing. Instead of ordering, installing and configuring big expensive servers, which cost a small fortune and take a long time to get running, you can just host your application on the cloud. So you run it on Amazon’s or Microsoft’s servers instead of your own. If you have a pretty specific technical platform, then you might want to rent virtual cloud servers and go with IaaS (Infrastructure as a Service). You have to configure the servers and get your platform running on it which is a bit of work, but you have complete control. Because while they’re virtual, they’re your servers, and they act like normal servers, and you can do whatever you want with them.
Or if you are running on a pretty standard platform like Microsoft .NET or the LAMP stack, then you can go with a PaaS solution (Platform as a Service). You don’t get to control the individual (virtual) servers, you just get the platform and the runtime. Neither approach (IaaS or PaaS) is better or worse than the other, they just have different use cases and advantages. PaaS is easier but has less control. IaaS gives you complete control but there is more setup and configuration and management.
Going with cloud hosting for production infrastructure means:
This is a huge advantage for small organisations especially and really helps improve business and technical agility.
It’s not just your production environments either. Why spend time and money setting up testing and staging environments when you can just rent them in the cloud? You can have some sitting there for running your automated tests day in and day out. And then if you want to do some specific testing, like some performance testing or penetration testing, you can spin up a new test environment. And when you’re done with it, it’s gone.
This can all be done in minutes, instead of days or weeks. Which is what it took (at least) with physical machines. You don’t need to upgrade or maintain or dispose of the machines either.
Another related advantage is that your test and staging environments are now identical to your production environments. I can’t count the number of times I’ve seen weird bugs turn up, but after days of analysis we find out that they’re “environmental issues”. The Test environment has some weird IIS configuration or OS patch or something, and the issue only happens there. And staging is meant to be even more “production-like”, but it never quite is.
With the cloud, they are all the same. They’re all identical virtual machines. Dev, Test, Staging, Production. All identical. This brings you closer to one of the objectives of DevOps: automation of not just configuration, but infrastructure. Your configuration management doesn’t just define your software (application), it defines the infrastructure on which that software runs. So you don’t move software from one random bunch of infrastructure to another, and cross your fingers and hope that it still works. You build software that defines machines on which your application runs. And if it runs on a “test” virtual machine, it will run on a “production” virtual machine because they’re the same software machine. And you defined that software.
This reduces complexity, reduces risk, reduces defects, and improves testability and automation. Everybody wins.
This isn’t maybe the first one that comes to mind, but it’s an interesting one. IDE stands for Integrated Development Environment. It’s a set of tools that developers use to build software. Normally, this is either some big clunky enterprise client tool like Visual Studio, with expensive licenses and a million options, or it’s a cheaper but just as complex alternative, like Eclipse, NetBeans, Android Studio, and so on.There will also be a set of other tools used alongside the IDE, like Git, PL/SQL Explorer, and so on. The total set of software often then forms part of an SOE, or Standard Operating Environment. This is a baseline operating system “image” that developers are supposed to install and use. The problem with these tools is that:
There are a number of cloud IDE offerings now. This is basically a development environment “in the cloud”, or on the web. So instead of loading Visual Studio or whatever, a developer just opens a browser and goes to the website, and starts coding. This has a lot of advantages for a small agile team:
There are a bunch of tools that you can now run cheaply in the cloud. Instead of installing and managing clunky software. For example, analytics. You might not realise it, but analytics are extremely important, especially for new “lean startup” type businesses. Remember, you are trying to capture validated learning. You’re trying to reduce your riskiest assumptions and find out what your customers value and what they don’t. So you need to put analytics all over the place.
In the old days, you’d have to install complex software on your servers, and possibly install some ugly clients, and run a big database that collects all this stuff. That is not the way it is done anymore.
These days, you just put tags on your pages (or app events or whatever), that trigger a request to the analytics provider. They collect the data. They produce the reports. Which you can then go and look at in your browser. No mucking around with installing and managing tools.
There are lots of other SaaS offerings too that can make your life easier and more agile:
There are plenty of great cheap cloud SaaS tools that a startup can use to make their business faster and simpler. The only software your staff should need is a browser! Now you know why companies like Oracle have been trying to talk down the cloud for the last ten years. Because it means they can’t charge small companies millions of dollars a year for licenses and support for big clunky garbage “enterprise” software. Hooray!
This one is really an extension of the first one, Production Hosting. But it’s not quite the same. Production Hosting on the cloud means you can get started quickly and cheaply, and that’s great. It reduces costs and risks and defects and that’s what agile is all about. But scaling is another thing. You can not only get a website or web app up and running quickly, you can quickly scale it up if it takes off.
In the old days, you had to not only spend a lot of time and money get some servers to get you started, but if your business took off, you had to go and order more servers. And those would again cost a lot of money and take a lot of time. While customers are getting Server 503 errors when trying to go to your website. In the cloud, the resources scale up straight away when you need them.
Scalability works both ways too. If your business goes bad, or just enters into a rough patch (or maybe is seasonal and the “off-season” comes around), cloud resources can scale down just as quickly. You only pay for what you use. Some people call this “utility pricing” or “utility computing”. Where computing resources are like an electricity account, and you just pay at the month for what you used each day. That’s great. Because if your business fails, you don’t want to try selling those expensive servers you bought. Because they’re now second-hand, and not the latest models, so nobody wants them.
An important caveat, though: if your business takes off and your cloud hosting quickly scales up to meet the demand, you might be in for a surprise. Cloud pricing is nice and simple and fair in that you pay for what you use, but if you’re using a lot, you pay for a lot. And the cost per unit doesn’t reduce as you scale up, unlike a lot of other industries.
For example, if you buy one server, it costs a lot. If you buy 10 servers, it costs a hell of a lot but it costs less than ten times what one server costs. It might only cost six or seven times. Because you’re “buying in bulk”. Similarly for support. If you have a server, you need to hire someone to run it. A system administrator. But if you buy ten servers, you don’t need ten system administrators, you might only need two or three. The cost curve flattens out. The costs increase but the costs per unit decrease.
Cloud pricing doesn’t work like that. You pay a flat rate. Maybe a certain number of cents per request, or per megabyte, or per thousand CPU cycles, or something like that. And if the volume of units goes up by 20, costs go up by 20. If volume goes up by 2000, costs go up by 2000. Some companies have had a rude shock when they get their cloud bills. And there is now a trend of businesses going from the public cloud back into their own datacentre.
Which is funny, because a few years ago, the trend was the other way. Companies started growing, couldn’t scale quickly, and so moved everything to the cloud. But now it can also be the other way around. Companies start off in the cloud because it’s quick and cheap to get started, then they take off and the cloud becomes too expensive and they get their own datacentres.
Anyway, this is getting off topic a bit. If you’re interested in this stuff (I am, in case you haven’t noticed), I really recommend a book called Cloudonomics by Joe Weinman. It goes into this subject in a lot of detail.