For the most part, the days of monolithic applications that are hosted within an organization are over. In today's development world, applications tend to be more de-centralized and decomposed into reusable services. To gain performance, applications are no longer developed in a manner that uses serial processing, but rather taps into multi-threading and parallel processing to gain performance speeds and scalability. The tendency to spend years doing large updates and releases have given way to more frequent, often smaller updates. Many organizations have gone to continuous integration and continuous deployment.
Old school developers invested huge amounts of time building and testing solutions with the focus on making sure they wouldn't fail. A measurement of success was the mean time between failures (MTBF). This has given way to a mindset of understanding that failure will happen and thus focusing on handling this by designing for failure. The focus has turned from trying to avoid all bugs and problems to measuring the mean time to repair (MTTR) problems that might occur.
These areas of change in development are emboldened by the advent of Cloud computing and the features and services that Cloud providers offer. The ability for developers to tap into the Cloud has become easy and, in most cases, cost effective.
When measured in "technology time," Cloud platforms have been around for an eternity. Take Amazon AWS and Microsoft Azure as examples. As a platform, Microsoft Azure was announced over nine years ago and has been publicly available for almost eight years. In that time, it has grown from being a basic storage and compute platform to much, much more. Amazon's Web Services platform has been around even longer. Amazon launched their first public Web service from AWS around the end of 2004 with a re-launch in 2006 with their Amazon S3, EC2, and other offerings.
Both the Amazon and Microsoft platforms support the core Cloud computing services, including Software as a Service (SaaS), Platform as a Service (PaaS), Infrastructure as a Service (IaaS), and more. Microsoft Azure has gone from supporting just a few languages and services to now supporting hundreds and hundreds of services. By using these services, developers can build scalable, highly available applications that include the ability to be more resilient than locally hosted applications.
Seven or eight years ago, the easiest areas for developers to tap into the Cloud was for simple storage or simple Web services. Today, the areas that impact what can be used by developers has expanded tremendously. The following are just some of the areas that Cloud service providers offer to developers:
- Compute: Compute provides the ability to run applications and services on the Cloud provider's systems. This gives developers computing power without the need to invest in their own servers.
- Container Support: Container Support includes the ability to host and run containers such as Docker.
- Content Delivery: Content delivery includes the ability to distribute content, including placing objects on the Cloud "edge."
- Database Services: Database services include scalable databases and database services with features such as SSD storage for fast access, data redundancy, data pipelines, access to relation and other database systems, and much more.
- Deployment: Many Cloud providers also offer continuous deployment services, as well as the ability to create automated deployments.
- Machine Learning: Services that help to drive machine learning and artificial intelligence are more recent additions for many Cloud providers.
- Management: As Cloud services and functions have increased, the ability to control and manage those Cloud services has been added. This can range from connecting to Microsoft Active Directory to configuring compliance, security, scalability, authentication, and other services.
- Mobile Services: Mobile services provide access to configure mobile apps and work with mobile app features such as notification services, user authentication, data storage, push notifications, analytics, and more.
- Networking: Networking services can include domain name services, virtual private networking, load balancing, and more.
- Storage: Storage was one of the earlier features provided, and generally includes the ability to do private backup and recovery along with the storage and hosting of data. This can include long-term storage options, high redundancy storage, and more.
- Web Site Management: The ability to manage DNS services, Web services, and more is also available from many Cloud providers. This also can include Web hosting as well as associated features such as analytics, data management, and more.
- Analytics: Analytics includes the ability to tap into business intelligence, analytics, and visualization tools.
- Application Services: Application services include features such as the ability to tap into Web service APIs and more. This can include services such as video and game streaming to providing e-mail, notifications, workflow, SMS, or any other types of app services.
Many development tools also are hosted in the Cloud. Evans Data surveyed Cloud developers to determine what percentage of their development was done with tools running in the Cloud. The results were that many will be using development tools in the Cloud. The results indicated that nearly 45% of the development is currently using tools in the Cloud with an expectation that this will increase to over 58% in 2018. (Source: https://evansdata.com/reports/viewSample.php?sampleID=374)
Figure 1: Use of Cloud development tools
The features and services areas related to Cloud use listed in this article barely scratch the surface of what is offered by Cloud providers today. It is the easy access, low cost of entry, and the scalability of these services that have impacted the approaches to development. Services and systems that previously required large outlays of money to license, configure, and maintain are available at no cost to try and lower cost to start using.
The result is that development teams are empowered to be more responsive in a manner that has changed the approach to architecting, building, and deploying their solutions. Smaller development shops can tap into resources that a decade ago would have been cost prohibitive. Thanks to the Cloud, developers are no longer held back by IT departments or by the high cost of entry.