OOPSLA Debate: Cloud Computing for the Wrong Reasons
Trying to keep up with the buzz and hype of Cloud Computing is like being on a conference call with 100 people shouting into a megaphone. Having been around for the latest 20 years of computer science evolution, it's still a bit of a surprise (or maybe it isn't) that we end up with the same deafening choir each time a new technology emerges. The technology evolution cycle of 4-5 years means further opportunities to make more money. Computing has evolved from mainframe to client-server, case-tools, dot-com, enterprise architectures like EJB and DCOM, SOA and now Cloud Computing. The IT-business has always been and will always be about making money.
So what are the reasons for people to look to Cloud Computing as the next best thing? Letís start with the typical developers and architects; they really like the concept of Infrastructure-as-a-Service. No wonder, many of them have been living in a straightjacket for most of their lives where internal IT or outsourcing vendors have been a bottleneck in the development phase. Now they can finally write applications and deploy anywhere they want without anyone interfering.
For typical big brand vendors with complex technology stacks Cloud Computing provides a new distribution channel for their product and services. Since they pre-configure and pre-package the services, it can (allegedly) be used by people who do not have the necessary skill or experience to appropriately configure and operate the product. Big business will also find that it is a way to earn money on surplus hardware. Since there are very few cloud computing standards customer retention will be very high due to vendor lock-in.
For business executives IT based on Cloud Computing makes sense. It offers a economic model of pay-as-you-go. It is easy to balance cost with income - a dream come true...
For academic researchers Cloud Computing represent a fantastic opportunity with numerous areas to explore. It even makes past research efforts in parallelism, scaling and virtualization relevant.
So what is Cloud Computing really?
- It's more of the stuff you don't need
- It's not the holy grail of reusable services
- it's not the general purpose Swiss army knife of development and hosting
If all you need is a bicycle, having a space shuttle instead isn't a good thing (even when it's at the cost of a bicycle). The keyword is complexity. What do you do when it doesn't start? What do you do when it doesn't behave as you wanted? How do you change its behaviour? Unless you are a rocket scientist you're out of luck. Do you have the requirements for all (or even most) of the features? Do you have the skill and experience to use the architecture on your own? If you don't, it doesn't matter whether you are using Cloud Computing or not...
"Software development is expensive so we should reuse as much as possible". Yeah, here is news for you: for 40 years we have been trying to reuse code and it hasn't worked! Cloud Computing represents no fundamental change in the challenges we face when reusing software. Reuse requires both very similar requirements and context. The main problem today is that every customer has a slightly different context for use and a slightly different requirements. It may become easier from a technical point to integrate services within the same cloud, but complexity will increase in areas like security and quality of service. Reuse of data with simple services (map/geodata services) has some benefits, but it won't change that fact that you still need a developer to code the new functionality.
IT refers to more than just Internet start-up companies such as Facebook and Amazon. It is about supporting the business processes. Some processes can be supported with the use of Cloud Computing, but most shouldn't. It is a decent hosting platform for suitable applications, but most applications require integration, security and flexibility that impossible to support on general purpose Cloud Computing platform.
Software-as-a-Service is a nice idea, but it is not for everyone. The number and types of standards that will arise in Cloud Computing will make SOA and services look like child's play, and most will be ignored so we are not really moving on at all! Rewriting software that already works is really expensive and has few real business values. Let's face it, only a small percentage of software will become Cloud-oriented in the next 5-10 years. And by that time the next big thing will have already happened to make Cloud Computing obsolete.
So what are the right reasons to use Cloud Computing? It is great for niche solutions like:
- Startup companies without technical infrastructure and with the need of rapid scalability
- Data centric reuse like geodata, government information etc.
- Office desktops (mail-, browser-, calendar-type applications)
- Gaming (server based 3D-rendering with cheap terminals)
- Businesses with dynamic high volume processing
- Applications with high volume and relaxed security requirements
So what should the developer really look for? Internal IT departments and/or hosting vendors with adequate self-service solutions where security, standards, patching etc. are well taken care of. Environments which enable the development of "bicycle" solutions based on what you need and not what you get for free. In fact, academic researchers should stop fuelling the Gartner's hype curve with unrealistic expectations for Cloud Computing and let time to market and productive requirements drive the sustainability of emerging technologies like Cloud Computing.
Big vendors should probably realize that "more of the stuff you don't need" isn't the way to go. They need to "help developers deliver what they promise" with less complexity.
Business executives should change how their IT-organization work. The emergence of Agile and Lean thinking makes it possible to create a much closer bond between business and IT. Making it possible to switch from a cost-oriented approach (how much will it cost me) to an income oriented approach (how much money did I earn based new functionality I got in the previous release).
We challenge you to respond to this article and prove us wrong. Give us real use scenarios, not hype and buzz! For anyone that would like to join us in a face-to-face in a "Duel at Dawn", we will be at the Cloud Computing Workshops at OOPSLA 2009.
To me right now Cloud looks like solution in search of a problem.
Reuse is-not an option
I would just say two things:
1) If you don't understand how versioning is intimately related to reuse, just look at the services you consume in your everyday life. How often are you notified that a service changed? how offen are you impacted when a service changed? If you don't understand anything about Forward versioning, start here. Reuse IS-NOT about reusing what has been written, reuse is about being able to modify what has been written without impacting whoever is currently using that code. The existing consumer reuse the new code, not the other way around. Once you'll understand that, everything will be different.
2) Reuse IS-NOT an option. Look around in the enterprise, every single business object, in every single industry: PO, Invoice, Payment, Customer, Account, Product..., every single BO in every single industry has a lifecycle, this lifecycle is independent of the processes in which the BO, a.k.a resource, participates. Not reusing a BO lifecycle is the absolute black hole for IT. This is why duplicated business logic ends up in different places and everything is hard to change and integrate. Not reusing BO lifecycles has vast implications in terms of cost, compliance, security...
At the end of the day there are technologies and a programming model that help with reuse. This is not true of any technology or any programming model. The technologies and programming models that Computer "Scientists" have pushed down the throat of IT for decades are all MVC based (even the way RESTafarians use REST is MVC based), that is the problem, not the solution.
Chanting that "reuse does not work" is simply wrong.
Re: Reuse is-not an option
Francisco Jose Peredo Noguez
I will not be at OOPSLA 2009, but I will leave you with a real-world scenario. We deployed a moderately complex Java Application (six distributed sub-systems and database). For the past nine months, we have had an up-time of 99.998 - one outage due to human error. We got this by being able to run the application hot-hot in multiple instances in multiple locations. Did we need 'cloud' to do this? No. Did it makes things a lot simpler (and less expensive)? Yes. In our case, we used 'cloud' to by-pass the bureaucracy (cost and schedule delays) created by our Internal IT organization and to be able to cost-effectively deploy an application in multiple locations.
I agree with your assertion that 'cloud' is over-hyped. However, I would be careful in limiting it to 'niche' applications. A lot of folks are going to build on cloud, because it is the latest 'hype', but some folks are going to use it for significant advantage.
Re: Cloud Definition
Making an informed decision to use cloud computing instead of internal infrastructure as you say can be a good thing. The services provided of the likes of Amazon is really a first class. They surpas most internal IT-organzations both in terms of quality and services. But it needs to be an informed decision. One shouldn't use something just because it exists (and it's hyped).
I'm I right in assuming that you have an internet based application (most users access the system via internet) and that it has limited integration(outside the cloud) and medium security requirements (no financial transactions or military information)?
If you can share more information about you setup, I (and other readers of this thread) would be very interested hearing about what worked well and challenges you faced using cloud computing a a plattform.
Re: Reuse is-not an option
An excellent comment. I do agree, but it's also the core our disagreement. Being a long time developer and software architect I don't think the reason that we haven't go the benefits we expected from reuse, is that we haven't yet had the right tools or skills to do it. SOA and BMP comes to mind in terms of tools should help us. From a reuse point of view, I don't think Cloud Computing will be any different. We will raise high expectations from the business and fail to deliver.
Not reusing a BO lifecycle is the absolute black hole for IT. This is why duplicated business logic ends up in different places and everything is hard to change and integrate. Not reusing BO lifecycles has vast implications in terms of cost, compliance, security...
This is a balancing act. In theory having one defintion of BOs with the corret behaviour would be benefical, but my personal expirence have been that:
A) Different parts of the enteprise have contradictionary requirements, hence you get you own variants anyway.
B) It's very difficult to combine with modern development practises like lean and agile. You often end up with centralized bottlenecks. Even worse is that you get distributed domain knowledge. Maintainers of BOs has deep knowledge about some areas of the business. Developers a deep knowledge of pieces outside the BOs.
Chanting that "reuse does not work" is simply wrong.
I could have written that reuse have failed to meet business expectaions for 40 years, but I wanted to get people thinking. Putting it plainly often helps :-)
Re: Cloud Definition
We looked at Amazon EC3 about a year ago, but it was missing a few key components - static IPs (which it now has) and sufficient flexibility in deploying software (e.g., replicated databases, email server, DNS).
We do limited integration both with our customers and with internal applications.
Integration is via Web Services (REST and SOAP), file transfer and messaging.
One of the applications sends secure (encrypted) documents. Because the application runs on dedicated hardware, it was relatively simple to secure the product with Firewall and IPS. However, we have been tracking VM based security products (check out Deep Security as an example) and I think that over time, you will see robust and accepted offerings in this space.
The point is that while EC2 and Google App Engine are the public face of cloud computing, there is a comparable movement going on inside both co-location/hosting facilities (think GoGrid, Rackspace) and internal data centers (large private clouds built on 3tera and VMWare). Each environment provides different cost models and capabilities. Smart architects, are going to match system requirements to the appropriate environment.
Re: Cloud Definition
For many larger companies this make more sense than going for a truly public cloud solution like Amazon. You get most of the benefits (flexibility, cloud tools etc.) and get reasonable control over virtual servers.
Smart architects, are going to match system requirements to the appropriate environment.
Hopefully more architects will understand the balancing requirements is a craft (and not some kind of exotic art)!
Thanks for your excellent comments!
For e.g. ERP companies implement their solutions for small to big corporates with the same architecture.