Developer Experience

Design and user experience (UX) are widely accepted as critical aspects of consumer-facing products and services. More recently, user experience has become a focus in the domain of business software, with the much-heralded trend of the consumerization of the enterprise. But experiences are not limited to packaged end user products and services — increasingly, concepts from the field of user experience are being applied in the context of software development as well.

Definitions

First, to level-set, user experience is much more than GUI design or "fonts and colors”. Wikipedia defines user experience as "a person's behaviors, attitudes, and emotions about using a particular product, system or service.” UX encompasses the totality of an experience, be that a visit to a web page, an airline journey, or an interaction with a consumer device. Part of the experience is the physical manifestation of the product, including the visual design and user interface elements in the case of software. Even more important, though, is the emotional reaction to interactions with the product or service.

Given this definition, consider the concept of user experience applied to software development. Programming languages, application frameworks, developer tools, and APIs each inherently project a personality or vibe which in turn provokes an emotional response among developers who engage with them. Just as with consumer products, both personal taste and social dimensions play an essential role in driving behavior and attitudes.

In the context of software development, user experience is often not about graphical user interfaces and tangible screen layouts (though in some places they play a role). In fact, for many aspects of the software development lifecycle, a text-oriented command line (or REPL loop) is a key element of the experience.

Attributes of Developer Experience

At a high level, we might think about development experience in terms of a few key attributes:

1) Time to value — How long does it take a developer to get productive with a new system, to the point where they can effectively put it to use in solving an actual problem? The best developer experiences start with a clear statement of value, and then lead developers down a well-defined path. Boilerplate code and development environment setup tasks should be minimized as much as possible.

2) Cycle time - How quickly can a developer iterate through the change -> build -> test -> run cycle? Reducing the cycle time is an essential ingredient to maximizing developer flow, the familiar yet elusive state of high productivity and energized focus in software development.

3) Reduced cognitive load — How much does a developer need to keep in their head at one time? In an ideal situation, the developer has a limited number of systems at play at any one time, with straightforward APIs, syntax, and tools that are well matched to the task at hand.

Role Models

Some examples of technologies that have differentiated themselves in terms of developer experience include:

1) Ruby on Rails, and more recently, Play Framework — these frameworks have turned the experience of building web applications on its head, by focusing relentlessly on fast time to value, quick cycle time, and lots of scaffolding to reduce the administrative burden on developers.

2) MongoDB — love it or hate it, MongoDB’s document-oriented model offers a strongly differentiated user experience to a large audience of developers, who are freed from the cognitive load of traditional object-relational mapping tools. The experiential aspects of MongoDB are at the heart of its rapid adoption.

3) Stripe and Twilio — each of these services wraps a complex universe (payments and telephony, respectively) in a straightforward API that provides dramatically quicker time to value than previously existing options.

4) Node.js — while the complexity of the callback-heavy programming model is debatable, it’s clear that node.js appeals to a meaningful audience in part because it enables front-end and back-end development in a common programming environment (Javascript), reducing cognitive load.

Beyond Code

The syntax of a programming language or the design of an API certainly plays a role in developer experience, but so do supporting elements like documentation and packaging. For example, high quality project web presences, tutorials, and getting started guides are critical for attracting developers and demonstrating time to value. Just like an eCommerce site has a limited opportunity to acquire a user and convert them to a sale, a developer technology has a restricted window in which to convert a developer from interest to engagement.

Often overlooked, community is another key contributor to developer experience. Is there a critical mass of discussion on sites like StackOverflow or project mailing lists? Are there established patterns and cookbooks for applying a particular technology? Is there a liquid market of open source code on Github to learn from or extend? Are trusted tastemakers signaling their buy-in through informal channels like social media? All of these social elements are critical to the overall developer experience.

User experience is at the heart of many human interactions. Let’s be sure to look beyond the syntax, API, and feature matrix to consider the behavioral and emotional aspects that underly the experience of software development.

Follow me on Twitter @dff