What do developers want?


What Do Developers Want?

January 22, 2020 - by admin | appeared on better-programming

Enhancing developer experiences with Kubernetes

More often than not, developers just want to write clean, secure, maintainable code for their applications. No developer ever said, “the best part about my job is writing the k8s manifest for deployment”. In fact, you’ve heard the opposite. Developers often complain about time lost in deployment — writing stateful-sets, PVCs, config-maps, and other things. Developer experience concerns around Kubernetes are not new. In a recent New Stack survey, over 17% of the community said that developer experience should be the top area that the core Kubernetes project needs to address.

But what do developers want?

Independence: Self-Service Deployment

If there’s anything that bugs a developer, especially one in an agile team, it’s waiting for a DevOps engineer to provision the infra and set up the environment. Having to wait for this is not just a hit on productivity, but also overall motivation and effectiveness. Let’s say a developer is debugging something and wants to test in a different environment. If the DevOps team has an SLA of two days to enable that, they’re unlikely to persist. They might try to debug within the resources available to them. This can be constraining.
Developers want to quickly and independently deploy to any k8s cluster on any cloud for dev, test, or delivery purposes, without back-and-forth with the delivery team.

Speed: Idea to Code to Outcome

DevOps tends to conjure up an image of the development and operations halves of the cycle as not just equal, but also symmetrical — remember the infinity visual of the DevOps cycle? The reality is a little more complex. Application teams want as little time and energy spent on deployment and operations as possible. They want to quickly propagate app changes and focus on understanding customer feedback, planning feature improvements, writing better code and optimising application performance. Time spent by a developer learning the peculiarities of Kubernetes is time snatched away from focusing on customer-centric application development

As a result, developers want to speed up the journey from idea, to code, to outcome. They want to declare their end-game and have the process be taken care of.

Accuracy: Eliminating Errors and Version Problems

Idiosyncrasies of delivery processes are directly proportional to the size of the team and the freedom they have. A large enterprise might have guide rails for deployment practices, but smaller teams at startups may not. Either way, a developer writing a custom script for deployment is bound to be inconsistent with the next person. This is most likely to result in go-live errors, version mismatches, and delivery delays.

Developers don’t want to write custom scripts either. Give them a tool that standardizes it and they’ll be glad.

Performance: With CI/CD

A robust CI/CD pipeline goes a long way to making a developer more productive. It automates testing for each codebase, identifies errors quickly, prevents code from breaking, enables you to ship quickly, and so much more. Without a good CI/CD pipeline, development teams will be waiting in queue for deployment, investigation, and bug-fixing. They’ll spend time monitoring the various versions of the system, maintaining a log of code changes and so on.

Developers wants a flexible, yet robust CI/CD pipeline, which also integrates well with other Kubernetes tools for deployment optimization.

Flexibility: Developing and Testing Locally

Developers like to develop and test locally. To test their code, they might need to call other microservices, which may be on local or remote clusters. This can get cumbersome — for example, when there are myriad dependencies across microservices and applications.

Developers need a system that can integrate local development and testing to the remote Kubernetes clusters without hassle.

Experimentation: Production-Grade Beta Testing

For every new application version/feature, customer validation is extremely important. Developers want more than what beta testing can offer — they want their code tested in a production environment, by real customers, without the whole system breaking if something isn’t right.

Developers want the ability to seamlessly perform canary deployments.

Visibility: Single-Pane View of Changes

Multiple developers making changes to microservices in any application is rather common. This is made more complex when the same application is deployed on a multi-cloud strategy. Developers fear their code breaking or their feature not working as expected because of this.

Therefore, developers want visibility into the changes made across microservices — so that updates are clean and accountable.

Leveraging Tools for Enhancing the Developer Experience

Even if these look like a rather unattainable wish list, in the end, developers just want to write code that works. They want automation that can take care of platform issues. They want tools that can integrate effortlessly with their existing systems. They want to keep track of the work they’ve done and the progress they’ve made.

Working directly with Kubernetes can seem convoluted and daunting, but there are several products on the market that can help you. You might find one product for each of your wants, or one that can handle them all. For example, we’ve been working on an open-source app delivery tool that can generate Docker files, build Docker images, generate Kubernetes manifests and deploy to any k8s cluster — significantly reducing the manual work developers have to do.

It’s widely noted that the k8s ecosystem isn’t the most user-friendly. Adam Jacob of Chef called it “hot garbage, from a user experience perspective”. But it doesn’t have to be. If you know what you want, there will definitely be a tool for it!