The Making of Cloud Applications: An Empirical Study on Software Development for the Cloud
Presentation of our research paper "The Making of Cloud Applications: An Empirical Study on Software Development for the Cloud" at the ESEC/FSE'15 conference in Bergamo, Italy.
Application IaaS PaaS SaaS Managed by Client Managed by Cloud Vendor Higher Abstraction Less Restrictions Hardware Virtualization Database App Server Application Runtime Data Application Hardware Virtualization Database App Server Application Runtime Data Application
al. 2012, Marshall et al. 2011] Cloud Performance Scientific applications [Iosup et al. 2011], SaaS applications [Bezemer et al. 2014] Industry Surveys DevOps Survey [PuppetLabs 2014], Enterprise Cloud Development [Gigaom 2014] None of the work discussed so far has empirically evaluated how cloud software is actually developed in practice
interviews Interviews with 25 professional cloud developers 8 companies of varying sizes, 9 years experience (± 6.5), deploy on IaaS or PaaS Quantitative Survey with 294 cloud developers Contacted Github users that favourited popular Cloud repositories (AWS, Azure,…) Analysis of transcribed interviews and quantitative survey data Extraction of codes, categories, comments
Product, Productivity Faster Delivery, Time-to-market Lower Costs/TCO (Total Cost of Ownership) Automation, Deployment Pipelines Easier Infrastructure Setup and Maintenance Scalability / Elasiticity 31% 30% 22% 11% 10% 9% Perceived Advantages of Software Development for the Cloud “What are the main differences for you when developing an application for the cloud as opposed to non-cloud environments?”
application deployment in the cloud largely automated Servers are not seen as durable entities Any changes in infrastructure are defined in code ”What happens in our infrastructure is a lot more obvious. Everything we do on that level [infrastructure] is over code (...) So, I don’t need ask my colleague what he did to get that process running - I just look at the code and maybe the commit history”
“Which tools do you use specifically for development for the cloud that you did not use before?” Percentages 0 10 20 30 40 50 60 Other Analytics (Usage/Cost Tracking, ..) Cloud Provider SDK (EC2 API, Heroku Toolbelt,...) Performance Management (APM Tools, New Relic, Pingdom,...) Log Management & Analytics (Splunk, Loggly, Librato, ...) Configuration Management (Chef, Vagrant, Docker,...) 13% 18% 27% 39% 57%
Hot fixes are discouraged and searching for logs in production is often not possible anymore Reproducing issues has become both tougher and easier: > Tougher because cloud applications are inherently distributed > Easier through deployment automation to spin up test environment
approach to dealing with metrics Alerts (beware of alert fatigue!) Performance Issue reported in issue trackers ”I try to reproduce and solve the issue locally. Looking for the particular issue in the dashboard and jumping back and forth between the code is rather tedious” Developers rather go by their gut feeling than looking at runtime data
study interviewing 25 developers and surveying 294 developers] Cloud is full of uncertainty. Servers are not durable entities anymore, they are terminated and re-created regularly. Developers must rely heavily on infrastructure automation, log and metric management — which are also best practice, but in the cloud they are a must for successful development and operation.
infrastructure part of software evolution Support Developers in Managing Logs and Metrics Log-writing recommender systems in accordance with log management solutions Tools for Developer Targeted Analytics Refine analytics data to be actionable for developers J. Cito et al., “Runtime Metric Meets Developer – Building Better Cloud Applications Using Feedback,” in SPLASH Onward’15