Go to where the developers are

Go to where the developers are

I'm still not entirely convinced that we've landed on a definition of "platform engineer." A few years ago, I felt like I turned a corner and all but ran into a big smoothie made of SRE, kubernetes, centralized developer tool groups, and Internal Developer Portals (IDP).? We're still tuning the ingredients as we drink the smoothie. Thankfully, for us crotchety DevOps people, DevOps is still a must-have for the smoothie. Despite the opaque mix, we at least know that .

When a platform engineering team is piecing together its own plans and priorities, a large bucket of work should be focused on the developer experience (DevEx) along that path to production. Platform teams play a major role in accelerating the software delivery cycle by making it easier for dev teams to deliver high quality software, securely, and maybe even have fun doing it.

We have a good idea of the : removing toil, reducing cognitive friction, and integrated security are just a few. Ultimately this leads to more frequent quality software releases, apps that help your business grow and function better, and talent retention. Establishing an ongoing process of intentionally working on DevEx helps put in place a shared culture in development. But how do we get there? Here's two things to start with: thinking about interfaces and capabilities and using a developer toil survey to focus on where to start and what to fix.

First, the platform engineer group needs to go to where the developers are.

There's a concept in software design that's as worn-in as that outline of your phone on your jeans pocket: good user design goes where the user is. That is, instead of requiring a person to break out of their flow, open a new application, and switch context back and forth, you want to add your functionality where the person is already spending most of their time.

This is especially true when it comes to application developers. They spend much (most?) of their time in two places, their IDE and the command line. These are the two places that work is done: writing code, building it, testing it, configuration packaging, launching and deploying, and then testing it more in production. There are other activities, of course, but IDEs and the command line are probably the best places to start for platform engineers.

This principle plays out when you're figuring out what you want developers to use to interact with your platform. Should deploying an app be done in the IDP, on the command line, in the IDE, via a help desk ticket? We know a FAX is a bad idea...probably. If a developer has a question about how to configure load balancing, should they search on a wiki, write a question in a chat window, read a man page, or pick up a phone? Where do you troubleshoot problems in production? Manage the CI/CD pipeline? Is a spreadsheet an effective interface, a CLI tool, or maybe just throwing a paper airplane three desks over at Chris with the word "redeploy" written on the left wing?

Whitney Lee and Abby Bangser are giving a talk at Platform Engineering day that puts forth a framing for all of this: which interface should you use for each capability? The platform engineering team draws up a list of capabilities like the ones above and also a list of possible interfaces. This can be taken to an absurd length - like with a FAX machine! - but at least thinking through some of the silly, and not so silly, combinations even over tacos can be helpful. You'll build up (1) a sense for where the draw the line between interfaces and capabilities, and, (2) start building up the intuition of when an interface is a good match for a capability. With that skill and intuition, platform teams can start thinking about where to locate interfaces for platform users.

For example, usually, an obvious one is that debugging should happen in the IDE. Another example that sends clammy fear all the way down to people's toes is asking which interface to use for developer support. Ticketing systems are comfortable, predictable, and make for a good buffer. They also have a cynical side: a fantastic paper-trail that's useful in the blame-storming fights that erupt in bureaucratic and pathological organizations. But are help desks the best interface to use?

Many platform people I talk with, like teams at Mercedes and Garmin, say that chat is actually great (be it Slack, Matter, Teams, or what-have-you). This is because developers are often already in chat, using it as a primary channel of communication. It also removes the at-arms-length shield of a ticketing system. Finally, using chat builds up an internal community that starts to aid with support. Just as we see on the internet, once you build up a community around an open source project, many questions are answered by developers in that community, rather than relying only on the creators of that project

Ask the developers

I don't know if you've ever talked with application developers, but as a former application developer I can tell you that we excel at one thing, even more than at coding: giving feedback and analysis on operational improvements to achieve better outcomes. You know, complaining. Take a two hour lunch with some developers and you'll get a list of areas for improvement to rival any handful of management consulting summer interns.?


Developer Toil survey questions.

The good way to figure out how to help developers is to ask them what problems they're having. To make that less open-ended, you should run regular survey. We published one of the surveys we use, the developer toil survey, to do just that recently.

The developer toil survey has 36 questions that cover everything from belief in organization strategy, the effectiveness of developer tools, committing code, production support, and more. Most of the questions are answered on a Likert scale (the "strongly agree," "agree," etc. five point scale). This means that you can get a quick prioritization by sorting the results. Sophisticated product managers might want to add a human feel to that sorting, of course.

By sending out this survey, platform engineers first gather a list of improvements to make. By sending it out regularly - perhaps every quarter - the platform team can get a sense of progress. Is the platform team making things better?

There's a danger with just relying on surveys, however. Developers are, after all, just people and they suffer from all the usual cognitive and just run-of-the-mill biases. For example, they might succumb to recency bias and just complain about the last problem they encountered, losing track of the relative scale of the problem. They might also have the usual desire to use new technologies regardless, fully willing to put in the time to switch over to those new technologies, taking on the risk of moving from what works to something new.

While the developer toil survey is a good start and can help you keep track of developer sentiment and happiness, automating the tracking of what developers are struggling with is also important. Things like the DORA and SPACE metrics have some ideas to offer here, though they can be difficult to implement. That focus is likely important as recent work on developer productivity metrics has been arguing.

Platform Design

When that platform engineering smoothie was thrown together, someone in the night kitchen thankfully threw in a handful of platform-as-a-product thinking. To me, this is the most impactful evolution in platform thinking in recent years: product managing the platform for application developers.

The next step in evolving how we build platforms for application developers is paying just as much attention to design: iterating through different approaches to improving developer experience. This means thinking through the capabilities developers need, what interfaces developers will use, and starting with simply asking them what they need help with.

To me, the most important aspect of a "platform" is that it product managed rather than just "delivered." Traditional IT management focuses on delivering services and guaranteeing uptime and performance. These are, of course, required for any services you rely on. The goal of a platform team, however, is to give developers tools and processes that make the developer's work better. They treat developers as customers and, thus, find out the problems their customers have and how they can best solve them. Empowering developers with feedback loops, focusing on reducing friction along the path to production, and embracing a product management philosophy are great ways to start your next platform design and boot-strap what you're building to help out application developers.

I spend a lot of time talking about this with IT practitioners and leaders. Here is a list of some of my talks if you want to learn more about successful modernization efforts, product thinking, cultural transformation, and leadership patterns.

要查看或添加评论,请登录

Michael Coté的更多文章

社区洞察

其他会员也浏览了