Developers deploying to distributed environments need to consider techniques like automation, decoupling of systems and instrumentation, says Anthony Eden, lead developer at Heavy Water Software, to help deal with the messy environment of cloud computing. "All of these things require deep integration between developers and operations, which I think is the core difference between deploying to the cloud and deploying internally."
How many can go from GUI development to advanced database design and then to server-client communications with ease?"
That isn't to say that a DevOp drops programming knowledge to become expert in networking issues. It's additive. Eugene Steinberg, CTO of Grid Dynamics discovered that changing from traditional programming to cloud application development required him to learn how to properly take advantage of distributed infrastructure to maximize application reliability, and dynamically scale to match the load.
Building cloud applications, Steinberg learned, meant keeping in mind the distributed and elastic nature of the infrastructure that supports his applications. "Self-healing and auto-scaling logic should be a standard part of the code base for any application running in the cloud. These are not typical practices in traditional infrastructures, where an app is hosted on a single server. If the server dies, you can't self-heal the application. Also, if there is too much load on a server and you need to add another, you can't do it programmatically, unless you sit on top of a cloud infrastructure," he says. "In other words, the system as a whole has to be architected and coded so that if any one component of the system stops working, seamless failover to another node is automatic and immediate. Reliability in the cloud is achieved through replication. Failure of one component is a natural situation of any system hosted on the cloud because cloud infrastructure, although highly elastic and distributed, is more complex and prone to failure of individual nodes."
With Amazon's EC2 service, a developer needs to create and manage her own machine instances, understand the difference between blob and relational storage architectures, manage data backups, deal with load balancing, and consider the cost model and her budget, says Dan Griffin, founder and managing partner of JW Secure. Or she'll need to coordinate with her IT operations people to do some or all of that stuff (and it'll all be new to them, too). "But has she ever had to work that closely with IT operations people before? And since the IT people won't own the machines (Amazon does), do they even want to support this project? All of those considerations have software architecture implications as well."
"Self-healing and auto-scaling logic should be a standard part of the code base for any application running in the cloud. These are not typical practices in traditional infrastructures."
Perhaps this sounds as though programmers are expected to be jacks-of-all-trades again. Certainly, the DevOp role makes me think of the Robert A. Heinlein quote (speaking through Lazarus Long), "A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a well, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly. Specialization is for insects."
"It's still early days," says Griffin. An experienced web application developer eventually will figure things out, but, Griffin says, "Hardly anybody has this particular combination of experience yet."