Digital transformation is becoming a business imperative. Almost every industry has seen the emergence of new iconic digital-native companies that have dominated mindshare in their space and turned business models upside down. Non-digital players in every vertical are now seeking re-invention and transformation, in a battle for relevance or even survival. Companies like Amazon began disrupting retail, initially with books, then hardware and electronics. Today, Amazon has become the “everything store,” sending established retailers back to school on e-commerce.
Similarly, Google and Facebook began to change established advertising models and fundamentally altered the media landscape. Netflix, Pandora, Spotify, and others have upended film and music distribution with their all-digital products. Airbnb and Uber leveraged the micro-transaction sharing economy, enabled by pervasive computing and started revolutionizing hospitality, real estate management, and transportation.
What is the common denominator that underlies so much of the innovation and disruption taking place today? The answer is a reliance on cloud systems. Without elastically scalable, highly efficient, and disaster-resilient cloud architectures, these disruptive innovations would not be possible. Thus the central transformational axis for established players is software development competency in the cloud. The implication is that all companies must rethink their cloud software development competency and begin to follow best practices adopted by disruptors.
So what are the attributes of great cloud software? Here are the seven key characteristics of modern cloud applications:
- Agile. It is nearly impossible to leverage the value of cloud computing without agile development processes. This means frequent and incremental iterations on design, development, and deployment, and rapid response to changes in requirements. It means teams working in an integrated and collaborative fashion with integrated stakeholders from the businesses that are the audience of the software being developed. It also implies lean approaches such as the pursuit of a minimum viable product (MVP).
- Cloud-developed. Software development in the cloud means that project assets are stored in the cloud to catalyze collaboration between stakeholders. It means using cloud resources for all the important types of application testing needed (e.g., functional and integration testing, performance and stress testing, device testing, and other tests). It also means using mobile back-end services such as authentication and notification and adopting more abstract and machine-independent application models for back ends in the form of PaaS. Generally, cloud developed apps eliminate the need to provision hardware.
- Microservices-oriented and API-backed. The move to microservices involves a comprehensive shift to componentize and granularize back-end software to achieve applications that evolve faster. Microservices architectures use standardized, loosely coupled, and lightweight APIs to reduce complexity and maximize module accessibility. Architectural decoupling between software components are key ingredients of this approach. Central to microservices is the role of API routing and management capabilities.
- Continuously integrated and delivered. Modern cloud applications are typically developed using modern CI/CD workflows. The implication is that any significant change to the application is followed by running the full automated testing process. Increasingly, development teams operate on the assumption that the application has to be ready to deploy in its current form at any time, even with a minimal or partial implementation of needed new functions.
- DevOps-enabled. In modern cloud applications, software development and operations teams work in an integrated fashion. Developers are accountable for the production quality of the delivered application and work seamlessly with operations staff in a continuous cycle of release and refinement. Operations staff are responsible for providing developers with an environment that can be leveraged for innovation without slowing down the application development process. Modern cloud applications typically rely on automation tools to manage the configuration and change, and they utilize monitoring and logging tools to ensure that any issues are tracked, rapidly diagnosed, and quickly fixed.
- Analytics-infused and user experience-centric. Modern cloud developers require rich intelligence on application operation, performance, and usage. Data on app modules and screen elements are collected and stored in the cloud for regular analysis by developers. Additionally, developers typically field experiments and tests with automation and quick turnaround (e.g., A/B testing of planned features), using capabilities provided in the cloud. Finally, modern cloud applications require a focus on user-interface design and appearance that brings the front-end designer and/or application programmer into the enterprise development process more fully than ever before.
- Lightweight. Modern cloud applications are gravitating towards complex software that is less time-consuming to install, learn, and use. Lightweight denotes a smaller resource footprint—including on-disk, memory, and CPU—and shorter startup and recycling times. This trend is seen in both the tools sphere, such as the increased use of editors or online IDEs in the development process, and in deployment architectures, such as the use of web servers in place of app servers, NoSQL in place of relational databases, and containers (e.g. Docker) in place of virtual machines. Lightweight implies higher efficiency, lower cost, and most importantly, more responsive applications.