Slide 1

Slide 1 text

Principles of Developer Experience Ray Tsang @saturnism James Ward @_JamesWard

Slide 2

Slide 2 text

Proprietary + Confidential ex·pe·ri·ence /ˌikˈspirēəns/ noun practical contact with and observation of facts or events

Slide 3

Slide 3 text

Setup / configure a service via command line or UI Use a library or API Read documentation / learn Troubleshoot problems Make something work. Anything! Developer Experiences

Slide 4

Slide 4 text

What is Good Developer Experience?

Slide 5

Slide 5 text

Bad

Slide 6

Slide 6 text

Good

Slide 7

Slide 7 text

node-v12.14.1-linux-x64.tar.xz How do I extract this?? Frustrating

Slide 8

Slide 8 text

Easy

Slide 9

Slide 9 text

Proprietary + Confidential Developer Experience is...

Slide 10

Slide 10 text

It feels good It feels nice It feels horrible It feels difficult It feels ...

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

"If your application starts up in 2 seconds locally, but it takes 21 seconds to start in the Cloud…"

Slide 13

Slide 13 text

"It depends"

Slide 14

Slide 14 text

"It depends on what is more productive"

Slide 15

Slide 15 text

Value I can reach my goals, e.g. finishing the project I can get more than I expected DX = Value / Time Time I can reach my goals in shorter time I can finish a tutorial with fewer steps

Slide 16

Slide 16 text

Low Fewer steps in tutorial, but didn't learn anything useful High More steps, but accomplished more goals than otherwise possible High Spend little time, and everything worked! ZERO Spend a lot of time, and nothing worked It's a Ratio!

Slide 17

Slide 17 text

Productivity is measurable (But not in loc)

Slide 18

Slide 18 text

Brainstormed a lot of things that we feel is good Developer Experience

Slide 19

Slide 19 text

- Accomplishing something in a reasonable amount of time. - Try your experience from scratch, just like a normal user would - Initial success in 5 minutes - Fail fast with meaningful directional error messages (i.e. how do I resolve this error) - Getting started docs paired with very detailed reference docs - Layered approach - If a how-to references a feature / function then it should link to the detailed reference doc for that - A workaround is a bug - Not personal taste, but measurable productivity - Implement the right pattern the first time, and peel back abstractions - Highest abstractions first, - Local dev first & local testing - Incremental learning / No forward references - Guarantee success - Users don't remember details, they remember how they felt - Aim for a positive emotional reaction - Abstractions should not prevent learning - Users goal is to learn - Magic is frustrating - "Do this because of this" - Each step should be meaningful - I can take this & apply it somewhere else - Am I doing this to learn something or to satisfy the system - The DX needs to be consistent with the industry best practices - For example: semver, repeatable build, dependency - Docs must be versioned - Bring the beginner's mind - Assume the mind of your target audience - Minimality Rule - Don't make things hard for no reason - Do the simplest thing possible to achieve a goal/purpose - Make every step is minimal of a change as possible - Every part of a step should be meaningful - DRY - Avoid redundant - Information architecture should be feature oriented - Content types are: Quickstart, Feature Docs, API Docs - Quickstart - Feature 1 - Sample, tutorial, link to API Docs - Feature 2 - Sample, tutorial, link to API Docs - API Docs - Don't label with "How-to Guides" / "Tutorials" / "Samples" instead just list the feature names - Product overview should list the headline features - Typography matters - Documentation should build trust - Reflect reality - Don't say do "x" to achieve "y" if it's not true - Docs should not be used to smooth over product gaps & oddities - You can't fix the confusing overlap between Cloud Run and GAE by saying one is for "services" and one is for "apps"

Slide 20

Slide 20 text

Proprietary + Confidential dx.reduce(toPrinciples).size == 4

Slide 21

Slide 21 text

Before Principle 1 - Respect developer knowledge and goals After

Slide 22

Slide 22 text

Principle 1 - Respect developer knowledge and goals

Slide 23

Slide 23 text

"Was this experience consistent with the way I do things? yes or no" "Did you learn something useful? yes or no?" "Did you solve your problem, accomplish your goal? yes or no" Respect developer knowledge and goals Measurements - Principle 1

Slide 24

Slide 24 text

Before Principle 2 - Do the simplest thing that could possibly work After

Slide 25

Slide 25 text

Principle 2 - Do the simplest thing that could possibly work

Slide 26

Slide 26 text

How many of these to accomplish a goal: ● unrelated tasks ● required prerequisites ● steps ● snippets copied ● Google searches ● docs Do the simplest thing that could possibly work Measurements - Principle 2 ● CLI commands ● clicks ● context switches ● mistakes ● wasted effort ● decisions

Slide 27

Slide 27 text

Before Principle 3 - Learning should be incremental . . . After

Slide 28

Slide 28 text

Principle 3 - Learning should be incremental docs.docker.com/get-started

Slide 29

Slide 29 text

"Did you find the relevant information easily and quickly?" "Did you find what you were searching for in the first search result?" "Do you know where to go next to continue learning?" Learning should be incremental Measurements - Principle 3

Slide 30

Slide 30 text

Before Principle 4 - Wasted time is a waste After

Slide 31

Slide 31 text

"Did this take longer than it should have?" "How much time did you feel you needed vs how much time did you actually spend?" "How much time do you feel you've wasted?" "Which step prevented you from accomplishing the task?" Wasted time is a waste Measurements - Principle 4

Slide 32

Slide 32 text

Principle 4 - Wasted time is a waste Principle 3 - Learning should be incremental Principle 2 - Do the simplest thing that could possibly work Principle 1 - Respect developer knowledge and goals

Slide 33

Slide 33 text

But How?

Slide 34

Slide 34 text

Friction Logs

Slide 35

Slide 35 text

Subjective

Slide 36

Slide 36 text

Respect developer knowledge and goals The use/support of industry standard tools (Gradle, IntelliJ) is nice. There was some bespoke setup. Do the simplest thing that could possibly work There wasn't a good starter project that I could find / reference. Learning should be incremental Resolving my issues took significant time on StackOverflow and tinkering with the build. Wasted time is a waste It took much more time than it should have to get a simple build working.

Slide 37

Slide 37 text

Collecting Metrics

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

What does it mean to be OK? Why isn't it excellent?

Slide 40

Slide 40 text

In addition to open feedback, ask the questions you want answers to. Make it easy for users to provide the feedback.

Slide 41

Slide 41 text

Other Ideas

Slide 42

Slide 42 text

Apply the principles from start Work with UX, PM, Docs, Libraries...

Slide 43

Slide 43 text

Proprietary + Confidential Questions?