Last week I was invited to present my ideas about creating an effective developer experience on the Cloud Native Computing Foundation (CNCF) webinar series, which was great fun. Modern “cloud native” foundational tech like Kubernetes provides so many opportunities, but also presents new challenges. One of which, and the topic of the webinar, is how to minimise the friction between having an idea or creating a business hypothesis and getting something running in production in order to validate this.

What is developer experience (DevEx)?

Setting the Scene

I started the talk with an exploration of what the concept of “cloud native” means to me, and then moved on to talk about the three levels of developer experience: infrastructure, platforms and workflow. I’ve been doing a lot of thinking alongside my colleagues at Datawire around the notion of workflow, and one of the core concepts we have discussed is the need for an effective platform and engineering team that supports different ways (and speeds) of working. Rafael Schloming, CTO at Datawire, has delivered several talks on the subject on service-oriented development and workflow.

Platform Drives Developer Experience

I couldn’t resist quoting Kelsey Hightower for the next bit of the presentation:

As is often the case, I found myself agreeing with Kelsey. If you read through the entire Twitter thread you will see that Kelsey concludes the idea by saying that there is nothing wrong with building a PaaS — after all, every development team needs to deploy onto a platform — but you must recognise that you are doing this. There is always an opportunity cost here, where you are trading-off many things, one of which is developer/operations convenience against delivering features that deliver business value.

I’ve seen several companies that are creating a PaaS-like experience on Kubernetes that appear to have struck a nice balance. One good example is Shopify, and Niko Kurtti delivered a fantastic talk at QCon New York recently “Shopify’s Journey to Kubernetes and PaaS”. Don’t forget of course, that they are also fully-formed open source and commercial PaaS offerings already out there that build on Kubernetes, such as OpenShift and Cloud Foundry.

Should You Build a PaaS?

This is the million dollar question, and although I can’t answer this for you (as you know your business and context better than I do), I presented a series of questions and pain points I have identified when consulting with clients. My colleague Kelsey has done a great job of summarising this part of the talk on the Datawire blog.

Workflow Tooling and Techniques

The penultimate section of the presentation discussed tooling and techniques, and drew on the excellent resources by Shahidh K Muhammed “Draft vs Gitkube vs Helm vs Ksonnet vs Metaparticle vs Skaffold” and Matt Farina “Kubernetes: Where Helm And Related Tools Sit”. I also looked at the work the Admiralty team are doing with experimenting with creating an Ambassador Kubernetes Operator using the current tooling for creating Kubernetes Custom Resource Definitions (CRDs) and Controllers.

Based on Shadish’s great post, I added a few other dev/deploy tools

I also presented my thoughts around the need to make Continuous Delivery build pipeline creation self-service, and explored the benefits of using a modern service proxy like Envoy for deployment control. With Envoy proxy acting as the data plane the critical part for the developer experience is the control plane. I recommended having a look at Envoy control planes such as Ambassador (as an API gateway and front proxy), Gloo (as a function gateway), and Istio (for managing inter-service traffic). Observability is also a huge part of developer experience, and Envoy, in combination with tooling like Prometheus (metrics), the ELK stack (logging), and Zipkin (tracing).

Conclusions and Further Reading

The conclusions of the webinar where that how you construct your ‘platform’ impacts the developer experience greatly, and you must intentionally curate the experience of: local development, packaging apps, CI/CD, deployment control, and observability.

You can read more about the webinar and watch the recording on the Datawire blog, and you can find the slides on SlideShare.