Making Sense of Cloud Development in a Complicated Kubernetes World
Burr Sutter has been developing applications for 30 years. He started with ChUI (green screen, amber screen, DOS) applications in the early 90s. Since then, he’s rode the wave of every innovation through Windows GUI apps, client-server, dynamic web apps, SOA, ESBs, enterprise integration patterns, AJAX, and mobile apps. Now he is exploring the possibilities of cloud development across the Kubernetes ecosystem.
Sutter has done it all, ranging from application development to author, public speaker, and respected developer advocate. His tools, materials, and capabilities have helped tens of thousands of developers be more productive in cloud-native app development.
What follows is an interview with Burr Sutter — cloud developer elite:
Question: What development tools do you use as a cloud developer?
Burr Sutter: My primary programming language has been Java, and I primarily use Visual Studio Code. I also use Git and GitHub regularly.
Question: What challenges does every cloud developer face?
There are a LOT of learning curves, antiquated processes, and cultural challenges to overcome to be a better cloud-native developer. In the 90’s, we optimized to deploy apps to physical servers; in the 00’s we optimized to deploy apps to VMs (virtual machines), and now in the 20’s we are optimizing to deploy apps into containers.
Question: What's most exciting about cloud development?
I fundamentally love the freedom to access computers without the historical wait time. Not that many years ago, a developer with an idea, a dream, would have to make a formal request to their manager, starting a requisition process, perhaps suffering through an RFP and N hardware vendor’s proposals. Eventually, IT Ops receive the machines, rack 'em, power, ping, provide remote access, and so many months later, you now have access to 4 cores and 16 GB of RAM to attempt your idea.
This lag time from idea to the first line of code or first component installation fundamentally breaks the creative flow. Currently, I am currently running five Digital Ocean clusters, an EKS, an AKS, a GKE and 3 OpenShift clusters across the globe for a current experiment. This is an unusual prototype focused on gitops and multi-cluster management. Not my typical week, but still totally possible due to the advent of the cloud computing paradigm.
But I do recognize that most developers are blocked from this level of access: they have to file tickets and wait. I believe having an expensive resource like an application developer waiting on a cheap resource like a small Kubernetes cluster is a problem. Clumsy development environments impede creative experimentation, learning, personal growth, and productivity and negatively impact a business’s goals.
Question: What is your secret development weapon?
Break the problem down into the most simple elements and make it super repeatable, and I take lots of notes. When I have learned a new programming language, I will explore loops, conditionals, variables, I/O, and have a ton of code snippets that I might refer back to regularly. When I am exploring a new Kubernetes add-on like Istio, Knative, Tekton, or most recently ArgoCD, I will try to break it down into a series of hello world-like steps that I can repeat, from scratch. And I have a ton of yamls and kubectl commands that I refer back to regularly. Because when I hit a snag, I can "rollback" to something that used to work a week ago or a month ago. I write a ton of tutorials for myself.
Question: What should every cloud developer know when it comes to cloud development?
Build with failure in mind. A big new learning curve for developers landing on Kubernetes is the reconciliation loop and the importance of the Liveness and Readiness Probes. The eventual rolling update of a deployment or the failures associated with image pulls, crash loops, and restarts are intimidating at first. And these elements are part of building and deploying apps in a distributed computing world where things can fail.
Question: What is your most tremendous success as a cloud developer?
In addition to being a developer advocate, I have had a lot of fun leading teams while building some crazy "games" that we use live with 1000+ users with real-time audience interactivity and dashboards for large-scale presentations.
And the key lesson learned is that culture, process, and technique is more than anything else, which negatively or positively impacts developer velocity and custom app delivery success.
- Minimize time to get started/setup for a new project, new team members, new service dependency
- Minimize the time it takes to recreate the environment for debugging a problem
- Minimize time from code commit to production
Question: What has been one of the most difficult development challenges you've ever faced in your career?
I have my own Phoenix Project story (click here to understand the reference). We had committed all the deadly sins of a mismanaged software development project. Here’s the horror list:
- Impossible deadlines and unknown requirements
- It works on my machine where the devs would check-in code that never worked in production
- The throw it over the wall to Ops where there was no empathy, and the code+configuration required notable changes before it could run in production
- We put $5M at risk
- Fortunately, our team figured out some principles of Agile and DevOps through pain and suffering and we lived to tell about it :-)
Burr recently wrote a tutorial on the basics of ArgoCD ApplicationSets for multiple cluster (or cloud) rollouts.
If you're a cloud developer/pro with a cool success story to tell, I'd love to interview you. Please contact me at firstname.lastname@example.org