So what does the world of IT as Service and software development look like when they collide? So there are some obvious synergies. Software development over the many years has been moving to a model to deliver business value quicker in an ever expedited world of business where requirements change at a fast pace and hence Agile, Scrum, XP and LEAN etc. have gained popularity Cloud computing, the promise and the tool I believe can deliver some of that Here is some of what I think Cloud computing brings to the table.
Qualities of a Cloud (for software development)
Seems obvious right? Yes it is and its a very fundamental building block and a tenant of Agile development. Developers must be able to provision systems when they need them and in real-time. System resources should not be an impediment. In today’s world that is simply unacceptable!
Cross Platform Provisioning
Another one that seems obvious. Of course in software development we build software for all types of platforms, operating systems and application servers. No single platform dominates and lets hope it stays that way 🙂 However I can name a dozen cloud providers that can give me a Windows or Linux system, but what about HP Unix, AIX or Solaris? Interesting topic and worthy of a another blog, but will the drivers of commodity platform (x86 based) mean that these operating systems become less and less meaningful as utility compute expands?
Automate!! Automate!! Best practices such a continuous integration and deployment are all about getting real-time feedback through automation. An extensive set of cloud API’s gives developers, testers, QA folks that ability to integrate cloud services into SDLC workflows. The possibilities are endless (1) Dynamic scalable build farms (2) Dynamic load generation for load testing
A library of pre-built reusable images and stacks
Many years ago when I was a system administrator I would waste my time by rebuilding systems with a certain stack, over and over again. A good and very motivated administrator (unlike me 🙂 ) has as their disposal many tools to accomplish the rebuilding of system images, but its time consuming. Virtualization and cloud computing to the rescue! Most cloud platforms now provide a catalog of pre-built images or the ability to publish an image. Amazon AWS is a good example there are hundred’s, if not thousands, of AMI’s (Amazon Machine Images) to choose. Best yet, is the ability to create your own AMI’s and have you own catalog of systems. The important concept here is RE-USABILITY. Developer and admins should not build systems from scratch, its simply a waste of time. More powerfully if you add the concept of versioning control to your images they can then align other aspects of software development such as build releases to development/build stacks.
Never heard of a single-users software development environment? Neither have I. A good cloud environment must foster COLLABORATION. Now of course when I mention collaboration I mean in the terms of software development. There should be a single point of entry that allow Role Base Access Control from committing code into a repository all the way to provisioning a system and all the pieces in between, all of this should be centralized. A good cloud environment should be able to provide you with an audit trail all the way from code to system.
Accounting, charge back
So what does this have to do with SDLC? IMHO there is a legacy that is left with us when obtaining hardware from infrastructure groups, in variably in the past this has been difficult, long wait times that involves following a detached process. Once we have jumped through hoops to obtain a machine we cling on to the hardware as we know that obtaining a new system is going to be difficult. The result is “system hoarding”. If we follow the new cloud paradigm then there is no need to follow this left over legacy, computing power is essentially a utility. On-demand but at a cost. The cost accounting could be merely corporate “funny money”, however it will deter abuse of resource, as models such as Amazon AWS will charge an individual for the computing resource that they have reserved regardless or not they are using it!
Above all else empowers developers
A key factor of of high productivity within teams is pushing down the decision making process down to the individuals that are doing the day-to-day work, not middle management! In that same vein, empower developers to decide how best to use the resources that they have, when and where, they above all know what is most appropriate. Cloud computing should not merely used as a tool to continue the dysfunctional methods of infrastructure management but should be leverage as a method to transformation how compute is delivered to the organization.