Effective Developer Experience (DX)
When Apple introduced the iPhone, the device captured the imaginations of its users. Its features satisfied basic needs and also inspired ideas of what could be done when the Internet was always in your pocket. Eight months later, Apple made the iOS SDK available, transforming the iPhone from a product into a platform.
A platform is a product that can be extended by a user for the benefit of other users. Platforms are not new; the concept is as old as the computer. Any product can become a platform by providing methods for people to extend it, and the Internet has enabled products to become platforms more easily by lowering the communication barrier between products.
When a product transitions into being a platform, it takes on a new type of user: the third-party developer. When developers build their own products on a platform, they are in effect users of that platform. But they are a special type of user, one that behaves as an intermediary between end users and the platform product.
An end user’s experience with a platform product, such as the iPhone, includes the experience of using third-party apps. Every app is a use case that should reflect the user experience of the principal product. Platform product owners must be concerned with assisting developers in accomplishing this if end users are to have a good user experience overall. Attention to these details is called developer experience (DX), and enabling app developers to be successful through better DX will create a more successful UX for the platform product.
Trust & Communication
Effective DX begins with a relationship of trust between app developers and the platform product company. Communication is the foundation for building this trust.
Developers will be spending significant time and resources building their own products with a dependency they cannot control: the platform product. To assuage concerns about this dependency, a platform company’s internal discussions must be communicated externally. Developers need to know where the platform is going so they can adequately prepare for changes that may affect their business and product strategies. This look ahead to plans and changes is commonly referred to as a roadmap, and should include changes to terms of service, backwards incompatibilities, and new features from which app users could benefit. More importantly, app developers should be included in a platform’s long term strategy when possible.
Appropriate channels for developers to submit concerns and suggestions should be established to reach platform decision-makers. Developers will be able to identify problems for end users before the problems affect UX, and they will often be able to suggest solutions. Acknowledging and responding to developer concerns in a timely manner encourages productive communication that will improve the quality of apps and the platform.
DX can be thought of as an ecosystem—an interconnected web of relationships that benefit all participants. Within this ecosystem is a virtuous cycle. Third-party developers expand the appeal of the platform product by adding features. These features often involve discovery of more optimal methods for accomplishing a task technically, and sometimes create a user experience that could benefit the entire platform. These improvements are then incorporated into the platform product, bringing new users and encouraging additional app development.
Documentation is essential to easing developers into a platform’s app development process. Unlike many end users, developers actually want to read about how to use the platform product. Documentation should explain the reasoning behind design decisions and the platform should lead by example when explaining functionality, policy expectations, and user interface conventions. This reasoning will allow developers to better understand the UX expectations of the platform so that they can build on it in a consistent manner.
Tutorials and example projects should accompany documentation. Like end users, app developers want to know how to accomplish a task. Merely providing a dictionary of API methods and properties is not enough. Demonstrations of best practices for code organization and platform integration better illustrate these concepts.
Documentation is also an opportunity for peer education. Commenting systems and wiki-style editing allow for contextualized assistance that enhances the value of the documentation as the primary resource for answering a developer's questions. Allowing developers to clarify details and provide common solutions helps build a community while identifying areas of improvement for the platform. Collectively, these reduce the effort and time required for a developer to research problems and allow for more time to be spent creating and designing a better UX.
Many development tools for a platform are products and sometimes platforms themselves, such as Apple Xcode, Microsoft Visual Studio, and Apigee.com. The quality of these tools can by judged by their effectiveness in assisting developers to create products that are natural extensions of the platform. If the organization that created the platform has created apps for the platform as well, those apps should be produceable using the tools provided to app developers. This standard is known as “dogfooding.” Even if the platform company does not plan on releasing its own apps built on the platform, it should produce sample apps as an exercise in evaluating the quality of the development tools, as well as for identification of potential problems with the platform itself.
Often, the development process involves testing code in an environment different from where the product eventually will be used. Emulators, simulators, sandboxes, and similar tools must be dependable—meaning that their results should match the production environment’s actual behavior reliably. Additionally, production environments should allow for some manner of final testing before apps are released to end users to ensure developers can test precisely the product they are delivering.
All of the considerations prior to this section have been about supporting the development process. An effective DX cannot exist without that support. However, the quality and usability of the features provided by the platform that the third-party apps depend upon are of even greater importance. If a platform does not allow a developer to utilize its capabilities and resources effectively, the other considerations are irrelevant.
The method by which a platform product enables third-party development commonly is referred to as an Application Programming Interface (API). As GUIs are to end users, APIs are to developers. Like GUIs, usability is the top consideration for APIs because they are how the platform’s capabilities are exposed to the platform user (the app developer).
The usability of an API can be determined by how easily a developer achieve a goal on behalf of an end user. Developers should be able to intuit the correct manner by which to interact with the platform. Best practices for code organization, design patterns, and naming conventions should be consistent and communicated. Usability also extends to error and status messages. When errors do occur, developers need to be able to easily identify where the problem occurred and what specifically was unexpected.
Developers should be able to to create a natural extension of the platform product’s capabilities for the end user. Any capability utilized by the platform product should be offered to app developers so end users have a consistent user experience. While some precautions may be necessary to prevent abuse, app developers will be able to create the best user experience when trusted with a platform's full capabilities.
Together, We Can Do So Much
From social games on Facebook to business intelligence apps on Salesforce.com to thousands of “apps for that” on smartphones, platforms represent a significant opportunity for UX. Platforms allow end users to obtain more value from a product. By focusing on core strengths, platform owners can create products with broad appeal while app developers extend the product's usefulness to more people. Successful DX leads to a more successful UX by the creation of value greater than two products independent of each other.