Monday, January 02, 2012

Developing for the Cloud

I’ve recently come across two apparently unrelated articles that together imply a lot about how development for the cloud should be done.

The first refers to post by Steve Yegge. In this he explains how Amazon embraced service orientation and what that meant for the developers and the company.

The second article is from Simon Wardley in which he laments that current “enterprise” cloud developments have a product rather than a utility mindset, i.e.:

Unfortunately, many applications are designed with the best practice for a product world i.e. scaling is about bigger machines, resilience is about N+1 and in general the focus is on reliable hardware. Best practice for a utility world involves resilience, scaling and failure modes built around software i.e. design for failure, distributed systems and chaos engines such as Netflix's chaos monkey approach. There is an inevitable cost of architectural transition from one set of best practices to another.

Both of these provide lessons in how to develop for the cloud:
  • Use SOA with clear contracts and a mechanism for handling contract violations. 
  • Loose coupling between sub-systems is essential for business survivability in an unreliable distributed computing environment a.k.a. the cloud.
  • Develop platforms, and with it the ability to continually extend what’s offered.