A cloud is a network of data centers that offers compute resources to developers. In the 1990s, software companies purchased servers–an upfront capital expense that required tens of thousands of dollars. In the early 2000s, cloud computing started, and turned that capital expense into an operational expense.

Instead of a huge bulk purchase of servers, a software developer can pay as they go–which is so much easier on the budget than the bulk purchase. This transformation of capital expense to operational expense significantly lowered the barrier to entry to starting software companies: cloud computing created an economic boom that continues to today, and shows no signs of slowing down.

Of course, the upfront capital expense did not disappear. It got aggregated into the cloud providers. Instead of individual software companies buying servers like they did in the 90’s, cloud providers buy thousands of servers and build data centers around the world. Because the of the aggregation, cloud providers get economies of scale–it is much cheaper for a single cloud provider to buy 1000 servers than for 1000 software companies to buy 1 server.

The first wave of cloud computing was all about deploying our applications to servers that run in cloud data centers. The next wave of cloud computing is moving more and more of our application logic into managed services.

In the first wave of cloud computing, we had to spin up a server to run our database. We needed a server for our search engine, and our load balancer. The logical unit of a server comes with the risk that the server will crash, or will be hacked, or will develop a bug that is difficult to solve.

Managed services abstract away the notion of a server. Database-as-a-service, search-as-a-service, load balancing-as-a-service; these services are reliable lego blocks that we can build entire applications out of. Developers pay a premium for a managed service–but they are happy to pay that premium because it represents a promise that this service will not crash, will not be hacked due to a software vulnerability, and will not develop bugs that are the responsibility of the developer.

Developers are very happy to pay higher unit prices for these managed services than they pay for raw servers. And cloud providers are very happy to develop these managed services–because it turns the infrastructure-as-a-service business into a software-as-a-service business. Software-as-a-service has better margins, better retention, and better competitive differentiation than infrastructure-as-a-service.

As a developer, I’m looking forward to building applications completely out of specialized managed services. But we are still pretty far from that time.

Today, developers still need to write their own application logic and their own backend services. But there are a set of tools that allow developers to write their own services while getting some of the resiliency and scalability of managed services. These tools are functions as a service and Kubernetes.

Functions as a service let developers deploy stateless application logic that is cheap and scalable. Functions as a service still have some problems to overcome in the areas state management, function composition, usability, and developer education.

Kubernetes is a tool for managing containerized infrastructure. Developers put their apps into containers on Kubernetes, and Kubernetes provides a control plane for deployment, scalability, load balancing, and monitoring. So–all of the things that you would want out of a managed service become much easier when you put applications into Kubernetes.

This is why Kubernetes has become so popular–and it is why Kubernetes itself is being offered as a managed service by many cloud providers–including IBM.

For the last decade, IBM has been building out its cloud offerings–and for two of those years, Jason McGee has been CTO of IBM Cloud Platform. In this episode, Jason discusses what it is like to build and manage a cloud, from operations to economics to engineering.

If you like this episode, we have done many other shows about engineering cloud services at Microsoft, Google, Amazon, and Digital Ocean. To find all of our old episodes, you can download the Software Engineering Daily app for iOS and for Android. In other podcast players, you can only access the most recent 100 episodes. With these apps, we are building a new way to consume content about software engineering. They are open-sourced at github.com/softwareengineeringdaily. If you are looking for an open source project to get involved with, we would love to get your help.

Sponsors

It’s never been easier to hit the ground running: MongoDB Atlas is the only database as a service from the engineers who built MongoDB. With continuous backup, VPC peering, monitoring, and security features, MongoDB Atlas gives you everything you need from MongoDB in an easy-to-use service. And even if you’re already running MongoDB in the cloud, Atlas makes migrating your deployment from another cloud service provider trivial, with its Live Import feature. Get started with a free, 3 node replica set: no credit card required. As an exclusive offer for Software Engineering Daily listeners, use code SEDaily for $10 dollars of credit for when you’re ready to scale up at mongoDB.com/sedaily.

Dice helps you accelerate your tech career. Whether you’re actively looking for a job or need insights to grow in your role, Dice has the resources you need. Dice’s mobile app is the fastest and easiest way to get ahead. Search thousands of tech jobs – from software engineering to UI/UX to product management. Discover your worth with Dice’s Salary Predictor based on your unique skill set. Uncover new opportunities with Dice’s new career pathing tool which can give you insights about the best types of roles to transition to – and the skills you’ll need to get there. Manage your tech career and download the Dice Careers app on Android or iOS today. So check out Dice and support Software Engineering Daily, go to Dice.com/sedaily. Thanks to Dice for being a sponsor of Software Engineering Daily.

When your application is failing on a user’s device, how do you find out about it? Raygun lets you see every problem in your software and how to fix it. Raygun brings together crash reporting, real user monitoring, user tracking, and deployment tracking. See every error and crash affecting your users right now. Monitor your deployments, to make sure that a release is not impacting users in new ways. And track your users through your application to identify the bad experiences they are having. Go to softwareengineeringdaily.com/raygun, and get a free 14 day trial to try out Raygun and find the errors that are occurring in your applications today. Raygun is used by Microsoft, Slack, and Unity to monitor their customer facing software. Go to softwareengineeringdaily.com/raygun and try it out for yourself.