Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Built With ❤️ - Why Developer Experience Matters

Built With ❤️ - Why Developer Experience Matters

One evening you’re browsing Twitter and you stumble on a really cool new Open Source tool. The README is intuitive, the installation is seamless and you’re up and running in no time. When using the tool, error messages are clear and how to fix the issues obvious. Before you know it, you’ve achieved what you wanted and you feel like a superstar! But the experience is very different the next day at work. You just spent a couple weeks fiddling to get a project running locally but now you have to jump through hoops to get the application built and deployed with that dreadful internal tool. Why can’t our day time experiences look like our weekend passion projects? It can!

In this session you’ll be introduced to the concept of Developer Experience and why it matters. You’ll then embark on a journey to build a new tool with Developer Experience as a core focus. You’ll learn how certain targeted approaches can improve the Developer Experience through the entire Experience Lifecycle. At the end of the talk you will be equipped with ways to improve the Developer Experience in your work; whether you’re building tools for developers, collaborating with other developers on a business project, or just building a side project one your own.

Presentation given at:

- Web Unleashed 2019
- Keynote at DevOps Days Boston 2019

Arthur Maltson

September 23, 2019
Tweet

More Decks by Arthur Maltson

Other Decks in Programming

Transcript

  1. User Experience @amaltson Speaker Note: Before we start talking about

    Developer Experience, let’s start off with a fairly well know concept, User Experience. We can over simplify the concept to taking angry customers and with some research, design, aesthetics and functionality changes turn them into happy customers. But User Experience wasn’t always considered important.
  2. User Experience @amaltson Speaker Note: Before we start talking about

    Developer Experience, let’s start off with a fairly well know concept, User Experience. We can over simplify the concept to taking angry customers and with some research, design, aesthetics and functionality changes turn them into happy customers. But User Experience wasn’t always considered important.
  3. User Experience @amaltson Speaker Note: Before we start talking about

    Developer Experience, let’s start off with a fairly well know concept, User Experience. We can over simplify the concept to taking angry customers and with some research, design, aesthetics and functionality changes turn them into happy customers. But User Experience wasn’t always considered important.
  4. @amaltson Speaker Note: Even as recent as 2005 this is

    what websites looked like. But in only the span of a decade and a bit…
  5. ✨ ✨ ✨ ✨ @amaltson Speaker Note: But did this

    happen because we sprinkled some magic pixie dust on the website and made it more functional and aesthetically pleasing. No! It took a bunch of research and experimentation through which we built up a knowledge base. We then took that knowledge, applied our creativity and engineering prowess. Did this happen because of a fundamental technology shift?
  6. ✨ ✨ ✨ ✨ @amaltson Speaker Note: But did this

    happen because we sprinkled some magic pixie dust on the website and made it more functional and aesthetically pleasing. No! It took a bunch of research and experimentation through which we built up a knowledge base. We then took that knowledge, applied our creativity and engineering prowess. Did this happen because of a fundamental technology shift?
  7. ✨ ✨ ✨ ✨ @amaltson Speaker Note: But did this

    happen because we sprinkled some magic pixie dust on the website and made it more functional and aesthetically pleasing. No! It took a bunch of research and experimentation through which we built up a knowledge base. We then took that knowledge, applied our creativity and engineering prowess. Did this happen because of a fundamental technology shift?
  8. ✨ ✨ ✨ ✨ @amaltson Speaker Note: But did this

    happen because we sprinkled some magic pixie dust on the website and made it more functional and aesthetically pleasing. No! It took a bunch of research and experimentation through which we built up a knowledge base. We then took that knowledge, applied our creativity and engineering prowess. Did this happen because of a fundamental technology shift?
  9. ✨ ✨ ✨ ✨ + @amaltson Speaker Note: But did

    this happen because we sprinkled some magic pixie dust on the website and made it more functional and aesthetically pleasing. No! It took a bunch of research and experimentation through which we built up a knowledge base. We then took that knowledge, applied our creativity and engineering prowess. Did this happen because of a fundamental technology shift?
  10. @amaltson Speaker Note: Not really, I mean sure JavaScript, HTML,

    and CSS have evolved, but much of the underlying capability was already in place in 2005. What it required was a prospective change. You’ll note that I’m talking about MapQuest here and not Google Maps, because in 2005 Google Maps looked very similar to how it looks now. They understood and invested in UX, Google had made the prospective change.
  11. @amaltson Speaker Note: Not really, I mean sure JavaScript, HTML,

    and CSS have evolved, but much of the underlying capability was already in place in 2005. What it required was a prospective change. You’ll note that I’m talking about MapQuest here and not Google Maps, because in 2005 Google Maps looked very similar to how it looks now. They understood and invested in UX, Google had made the prospective change.
  12. @amaltson Speaker Note: Not really, I mean sure JavaScript, HTML,

    and CSS have evolved, but much of the underlying capability was already in place in 2005. What it required was a prospective change. You’ll note that I’m talking about MapQuest here and not Google Maps, because in 2005 Google Maps looked very similar to how it looks now. They understood and invested in UX, Google had made the prospective change.
  13. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  14. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  15. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  16. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  17. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  18. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  19. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  20. @amaltson Speaker Note: But what caused this change? Businesses and

    individuals saw that when you invest a bit of money in the form of creativity and developer time into User Experience, they’d see a big increase in users and make a huge return on those investments. One of the earliest companies to see this was Apple when they took a sledgehammer to the boring beige boring boxes and as Steve Jobs said, it’s not just the aesthetics but the functionality, you need both. But it’s not just Apple saying it, studies from Google, IBM and many others point to the importance and RIO focusing on UX.
  21. User Experience @amaltson Speaker Note: Looking back on only a

    decade, we clearly know how much we missed out on by not focusing in User Experience and have remedied that now. The question is, what are we missing out on by…
  22. Developer Experience @amaltson Speaker Note: … not focusing on Developer

    Experience now? Wait, hold on, what is Developer Experience? Good question, we haven’t defined it yet. Developer Experience is similar to User Experience in that…
  23. Developer Experience @amaltson Speaker Note: … we take a frustrate

    developer, make a bunch of changes to the tool or project they're working on, and get a happy developer.
  24. Developer Experience @amaltson Speaker Note: … we take a frustrate

    developer, make a bunch of changes to the tool or project they're working on, and get a happy developer.
  25. @amaltson Speaker Note: Someone that saw this early on is

    was Steve Ballmer with the famous “developers, developers, developers”. I hope to not get that sweaty.
  26. @amaltson Speaker Note: Someone that saw this early on is

    was Steve Ballmer with the famous “developers, developers, developers”. I hope to not get that sweaty.
  27. @amaltson Speaker Note: There’s three main arguments why Developer Experience

    is something worth focusing on and investing in. The first is the fiscal cost of a poor Developer Experience. The next is the cost to the mental energy of developers. And the last is the hit to moral of a poor developer experience.
  28. @amaltson Speaker Note: There’s three main arguments why Developer Experience

    is something worth focusing on and investing in. The first is the fiscal cost of a poor Developer Experience. The next is the cost to the mental energy of developers. And the last is the hit to moral of a poor developer experience.
  29. @amaltson Speaker Note: There’s three main arguments why Developer Experience

    is something worth focusing on and investing in. The first is the fiscal cost of a poor Developer Experience. The next is the cost to the mental energy of developers. And the last is the hit to moral of a poor developer experience.
  30. @amaltson Speaker Note: There’s three main arguments why Developer Experience

    is something worth focusing on and investing in. The first is the fiscal cost of a poor Developer Experience. The next is the cost to the mental energy of developers. And the last is the hit to moral of a poor developer experience.
  31. @amaltson Speaker Note: Technology professionals cost a lot of money.

    Overall compared with other professions we’re doing pretty well. If you take a group of developers and have them spend a week on setting up their workstations, that’s a huge cost where they’re not working on the next feature.
  32. @amaltson Speaker Note: Technology professionals cost a lot of money.

    Overall compared with other professions we’re doing pretty well. If you take a group of developers and have them spend a week on setting up their workstations, that’s a huge cost where they’re not working on the next feature.
  33. @amaltson Speaker Note: Technology professionals cost a lot of money.

    Overall compared with other professions we’re doing pretty well. If you take a group of developers and have them spend a week on setting up their workstations, that’s a huge cost where they’re not working on the next feature.
  34. @amaltson Speaker Note: Technology professionals cost a lot of money.

    Overall compared with other professions we’re doing pretty well. If you take a group of developers and have them spend a week on setting up their workstations, that’s a huge cost where they’re not working on the next feature.
  35. @amaltson Speaker Note: Technology professionals cost a lot of money.

    Overall compared with other professions we’re doing pretty well. If you take a group of developers and have them spend a week on setting up their workstations, that’s a huge cost where they’re not working on the next feature.
  36. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  37. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  38. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  39. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  40. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  41. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  42. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  43. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  44. @amaltson Speaker Note: To provide a good analogy for mental

    energy, let us represent it with a certain number of coins you start the day with. For our American friends, these are Canadian one dollar coins, also known a loonie because they have a loon on the front, not because they’re loony, though they could be. Fun fact, we also have a toonie for 2 dollars, but I digress. Anyway, everyone has different energy levels so they’d start with a different amount. Every decision we make or frustration we run into will cost some coins. Steve Jobs recognized this, choosing to wear the same cloths every day (black turtle neck and jeans) as a way to reduce decision points. Imagine how much energy gets drained frustration with a corporate proxy or that downstream system being down.
  45. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  46. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  47. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  48. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  49. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  50. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  51. @amaltson Speaker Note: From a moral prospective, most developers start

    off with a lot of excitement and energy. But as the days and weeks go by, and the workstation issues drain the first few weeks, access control the next week, misleading docs, poor error messages, and well, eventually you’re punching through your laptop.
  52. Developer Experience @amaltson Speaker Note: So why should you care

    about developer experience? For fiscal reasons, optimizing metal energy use and improving overall moral.
  53. Developer Experience @amaltson Speaker Note: So why should you care

    about developer experience? For fiscal reasons, optimizing metal energy use and improving overall moral.
  54. Developer Experience @amaltson Speaker Note: So why should you care

    about developer experience? For fiscal reasons, optimizing metal energy use and improving overall moral.
  55. Developer Experience @amaltson Speaker Note: So why should you care

    about developer experience? For fiscal reasons, optimizing metal energy use and improving overall moral.
  56. @amaltson Speaker Note: OK, but now what? Yes it matters,

    but how do we even go about improving developer experience?
  57. @amaltson Speaker Note: OK, but now what? Yes it matters,

    but how do we even go about improving developer experience?
  58. @amaltson Speaker Note: Before we start improving it, we need

    to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  59. @amaltson Speaker Note: Before we start improving it, we need

    to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  60. @amaltson Speaker Note: Before we start improving it, we need

    to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  61. Experience Lifecycle @amaltson Speaker Note: Before we start improving it,

    we need to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  62. Experience Lifecycle @amaltson Speaker Note: Before we start improving it,

    we need to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  63. Experience Lifecycle @amaltson Speaker Note: Before we start improving it,

    we need to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  64. Experience Lifecycle @amaltson Speaker Note: Before we start improving it,

    we need to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  65. Experience Lifecycle @amaltson Speaker Note: Before we start improving it,

    we need to understand what we’re dealing with. There’s two distinct facets of developer experience, one is the developer experience of using a tool and Developer Experience working on a project with others. To fully understand how to improve Developer Experience in those facets, we need to understand the entire “Experience Lifecycle”. From the very beginning, eg. first time you join the team or just started using that tool. To your first major change or your first couple days with the tool. To the day-to- day working on a code base or using the tool. And finally to the retirement of the project or your migration away from the tool you’re using.
  66. @amaltson Speaker Note: The concepts carries over regardless of whether

    you’re doing front end development, backend development or DevOps tooling, but the specific implementation will differ depending on the language.
  67. @amaltson Speaker Note: The concepts carries over regardless of whether

    you’re doing front end development, backend development or DevOps tooling, but the specific implementation will differ depending on the language.
  68. @amaltson Speaker Note: The concepts carries over regardless of whether

    you’re doing front end development, backend development or DevOps tooling, but the specific implementation will differ depending on the language.
  69. @amaltson Speaker Note: The concepts carries over regardless of whether

    you’re doing front end development, backend development or DevOps tooling, but the specific implementation will differ depending on the language.
  70. @amaltson Speaker Note: Our guiding principle for improving developer experience

    should be empathy. Being empathetic with others and with yourself. We’re not trying to be sympathetic as in “oh it sucks”, we want to acknowledge we and others feel and provide a concrete improvement.
  71. @amaltson Speaker Note: Let’s put on our construction boots and

    get more concrete and discuss a specific problem.
  72. @amaltson Speaker Note: And that specific problem is how to

    do pair programs or even mob programming, but how do you ensure everyone gets a bit of that sweet, sweet green GitHub squares?
  73. @amaltson Speaker Note: You know what I mean, we want

    those sweet green squares filling the whole timeline! We need to attribute work to everyone mobbing.
  74. @amaltson Speaker Note: There are a bunch of tools out

    there to give the proper attribution, one of them is called Pair Up. Pair Up achieves this by using a little trick in Git, it sets the GIT_AUTHOR_NAME/EMAIL to the primary person and the GIT_COMMITTER_NAME/ EMAIL to the pair. But this only works for pairing, not mobbing since you can only set for two people. It also doesn’t fully reflect how the code was written.
  75. @amaltson Speaker Note: Fortunately, a year and a half ago

    GitHub added support for the now standardized “Co-authored-by” syntax in commit messages, this renders much nicer in GitHub but the challenge is Pair Up doesn’t support it.
  76. @amaltson Speaker Note: Fortunately, a year and a half ago

    GitHub added support for the now standardized “Co-authored-by” syntax in commit messages, this renders much nicer in GitHub but the challenge is Pair Up doesn’t support it.
  77. @amaltson Speaker Note: But to rebuild Pair Up, we’ll need

    a snazzy new name… hmm.. I know! Mob Up!
  78. Pair Up Up @amaltson Speaker Note: But to rebuild Pair

    Up, we’ll need a snazzy new name… hmm.. I know! Mob Up!
  79. Mob Up @amaltson Speaker Note: But to rebuild Pair Up,

    we’ll need a snazzy new name… hmm.. I know! Mob Up!
  80. Experience Lifecycle @amaltson Speaker Note: So for this imaginary project,

    let’s start by talking about working on mob-up in team with other developers and how to improve the experience there.
  81. Experience Lifecycle @amaltson Speaker Note: So for this imaginary project,

    let’s start by talking about working on mob-up in team with other developers and how to improve the experience there.
  82. Getting Started @amaltson Speaker Note: When introducing a new developer

    to the mob up code base, the reaction to new code is often like this. Right? Where do you even start with the code, how do you get in and start understanding what’s happening?
  83. Getting Started @amaltson Speaker Note: When introducing a new developer

    to the mob up code base, the reaction to new code is often like this. Right? Where do you even start with the code, how do you get in and start understanding what’s happening?
  84. Getting Started @amaltson Speaker Note: When introducing a new developer

    to the mob up code base, the reaction to new code is often like this. Right? Where do you even start with the code, how do you get in and start understanding what’s happening?
  85. Getting Started @amaltson Speaker Note: One approach my team and

    I have found a lot of success with is using sequence diagrams. It’s a bit old school, but it can really help paint a picture of how data flows through your system at a high level and that’s really important to know how the code interacts. Now you might bemoan opening a diagram drawing tool, and it’s hard to source control but what you don’t know is that diagram is generated from source code using PlantUML.
  86. Getting Started @amaltson Speaker Note: One approach my team and

    I have found a lot of success with is using sequence diagrams. It’s a bit old school, but it can really help paint a picture of how data flows through your system at a high level and that’s really important to know how the code interacts. Now you might bemoan opening a diagram drawing tool, and it’s hard to source control but what you don’t know is that diagram is generated from source code using PlantUML.
  87. Getting Started @amaltson Speaker Note: The best part is, there’s

    a VSCode plugin for PlantUML which live previews the diagram. Makes it really easy to author them.
  88. Getting Started @amaltson Speaker Note: In order to create an

    amazing getting started experience to work together on mob-up we need to..
  89. Getting Started • Data flow sequence diagrams @amaltson Speaker Note:

    In order to create an amazing getting started experience to work together on mob-up we need to..
  90. First Commit @amaltson Speaker Note: The first commit is often

    anxiety ridden. Even if the new member has made the mob-up changes locally and got the build green, there’s still a matter of proposing that first change. What’s expected of you?
  91. First Commit @amaltson Speaker Note: The first commit is often

    anxiety ridden. Even if the new member has made the mob-up changes locally and got the build green, there’s still a matter of proposing that first change. What’s expected of you?
  92. First Commit @amaltson Speaker Note: To ease that anxiety and

    also maintain consistency across the whole project, we can introduce a Pull Requests checklist to mob-up. We can use the PR checklist to guide new people and remind old hats what’s required to get a successful merge. And we all know checking off check lists makes you feel like a super star!
  93. First Commit @amaltson Speaker Note: To ease that anxiety and

    also maintain consistency across the whole project, we can introduce a Pull Requests checklist to mob-up. We can use the PR checklist to guide new people and remind old hats what’s required to get a successful merge. And we all know checking off check lists makes you feel like a super star!
  94. First Commit @amaltson Speaker Note: To ease that anxiety and

    also maintain consistency across the whole project, we can introduce a Pull Requests checklist to mob-up. We can use the PR checklist to guide new people and remind old hats what’s required to get a successful merge. And we all know checking off check lists makes you feel like a super star!
  95. First Commit @amaltson Speaker Note: In order to create an

    amazing Developer Experience for the first commit to mob-up..
  96. First Commit • Pull Request checklist @amaltson Speaker Note: In

    order to create an amazing Developer Experience for the first commit to mob-up..
  97. @amaltson Speaker Note: Alright, that’s the first commit experience. Let’s

    now look at improving the Developer Experience in our day to day.
  98. @amaltson Speaker Note: Alright, that’s the first commit experience. Let’s

    now look at improving the Developer Experience in our day to day.
  99. Day to Day @amaltson Speaker Note: As we work day

    to day on a project like mob-up, it’s hard to keep track of all the changes happening especially if there are more than a couple developers on the project. It’s hard to remember what’s changed.
  100. Day to Day @amaltson Speaker Note: As we work day

    to day on a project like mob-up, it’s hard to keep track of all the changes happening especially if there are more than a couple developers on the project. It’s hard to remember what’s changed.
  101. Day to Day @amaltson Speaker Note: As we work day

    to day on a project like mob-up, it’s hard to keep track of all the changes happening especially if there are more than a couple developers on the project. It’s hard to remember what’s changed.
  102. Day to Day @amaltson Speaker Note: To improve the experience,

    consider keeping a changelog of what’s been change in the application. Keeping track of changes is hard, but writing a CHANGELOG shouldn’t be about expressing that frustration . One aspect that’s hard with writing a CHANGELOG is similar to starting a README, a blank page is hard to fill in. This is where the excellent keepachangelog.com comes in. It provides a handy and clean template for standardizing your CHANGELOG and guiding you through the process of writing it.
  103. Day to Day @amaltson Speaker Note: To improve the experience,

    consider keeping a changelog of what’s been change in the application. Keeping track of changes is hard, but writing a CHANGELOG shouldn’t be about expressing that frustration . One aspect that’s hard with writing a CHANGELOG is similar to starting a README, a blank page is hard to fill in. This is where the excellent keepachangelog.com comes in. It provides a handy and clean template for standardizing your CHANGELOG and guiding you through the process of writing it.
  104. Day to Day @amaltson Speaker Note: To improve the experience,

    consider keeping a changelog of what’s been change in the application. Keeping track of changes is hard, but writing a CHANGELOG shouldn’t be about expressing that frustration . One aspect that’s hard with writing a CHANGELOG is similar to starting a README, a blank page is hard to fill in. This is where the excellent keepachangelog.com comes in. It provides a handy and clean template for standardizing your CHANGELOG and guiding you through the process of writing it.
  105. Day to Day @amaltson Speaker Note: To improve the experience,

    consider keeping a changelog of what’s been change in the application. Keeping track of changes is hard, but writing a CHANGELOG shouldn’t be about expressing that frustration . One aspect that’s hard with writing a CHANGELOG is similar to starting a README, a blank page is hard to fill in. This is where the excellent keepachangelog.com comes in. It provides a handy and clean template for standardizing your CHANGELOG and guiding you through the process of writing it.
  106. Day to Day @amaltson Speaker Note: In order to create

    an amazing Developer Experience for the day to day in mob-up..
  107. Day to Day • Keep a CHANGELOG @amaltson Speaker Note:

    In order to create an amazing Developer Experience for the day to day in mob-up..
  108. @amaltson Speaker Note: No matter how well we’ve factored the

    code is, at one point or another a project comes to an end and is retired. Let’s look at how to make a great Developer Experience for retiring a project like mob up.
  109. @amaltson Speaker Note: No matter how well we’ve factored the

    code is, at one point or another a project comes to an end and is retired. Let’s look at how to make a great Developer Experience for retiring a project like mob up.
  110. Retirement @amaltson Speaker Note: While the team is probably sad

    about the project retiring, let’s think about the Developer Experience of others who may stumble on the code later on. They might see it as a treasure chest of awesome capability, and get confused when they open it up and the project hasn’t been touched in some time. They might even mistakenly send a PR to the project, then get confused and sad when it’s not actioned.
  111. Retirement @amaltson Speaker Note: While the team is probably sad

    about the project retiring, let’s think about the Developer Experience of others who may stumble on the code later on. They might see it as a treasure chest of awesome capability, and get confused when they open it up and the project hasn’t been touched in some time. They might even mistakenly send a PR to the project, then get confused and sad when it’s not actioned.
  112. Retirement @amaltson Speaker Note: While the team is probably sad

    about the project retiring, let’s think about the Developer Experience of others who may stumble on the code later on. They might see it as a treasure chest of awesome capability, and get confused when they open it up and the project hasn’t been touched in some time. They might even mistakenly send a PR to the project, then get confused and sad when it’s not actioned.
  113. Retirement @amaltson Speaker Note: While the team is probably sad

    about the project retiring, let’s think about the Developer Experience of others who may stumble on the code later on. They might see it as a treasure chest of awesome capability, and get confused when they open it up and the project hasn’t been touched in some time. They might even mistakenly send a PR to the project, then get confused and sad when it’s not actioned.
  114. Retirement @amaltson Speaker Note: While the team is probably sad

    about the project retiring, let’s think about the Developer Experience of others who may stumble on the code later on. They might see it as a treasure chest of awesome capability, and get confused when they open it up and the project hasn’t been touched in some time. They might even mistakenly send a PR to the project, then get confused and sad when it’s not actioned.
  115. Retirement @amaltson Speaker Note: The major undertaking to improve the

    experience is to leave the project in a good state. Close off all the issues, maybe marking them as “won’t fix”, but at least closing them off. Try to get the open PRs merged in. Make sure to leave the build green. Why you may ask? Leaving everything in a clean state is important not necessarily because the project may come back, which is possible, but more because you may come back and reuse some of the code and leaving it in a good state will facilitate reuse.
  116. Retirement @amaltson Speaker Note: The major undertaking to improve the

    experience is to leave the project in a good state. Close off all the issues, maybe marking them as “won’t fix”, but at least closing them off. Try to get the open PRs merged in. Make sure to leave the build green. Why you may ask? Leaving everything in a clean state is important not necessarily because the project may come back, which is possible, but more because you may come back and reuse some of the code and leaving it in a good state will facilitate reuse.
  117. Retirement ✅ @amaltson Speaker Note: The major undertaking to improve

    the experience is to leave the project in a good state. Close off all the issues, maybe marking them as “won’t fix”, but at least closing them off. Try to get the open PRs merged in. Make sure to leave the build green. Why you may ask? Leaving everything in a clean state is important not necessarily because the project may come back, which is possible, but more because you may come back and reuse some of the code and leaving it in a good state will facilitate reuse.
  118. Retirement @amaltson Speaker Note: And to put a bow on

    it, use “Archive this repository” feature in GitHub (if you use GitHub) and make the project read only. You can always revive it later, but don’t delay making the project read only to avoid those PRs to a decommissioned project. It’s read only so we can always reuse the code in the future.
  119. Retirement @amaltson Speaker Note: And to put a bow on

    it, use “Archive this repository” feature in GitHub (if you use GitHub) and make the project read only. You can always revive it later, but don’t delay making the project read only to avoid those PRs to a decommissioned project. It’s read only so we can always reuse the code in the future.
  120. Retirement @amaltson Speaker Note: And to put a bow on

    it, use “Archive this repository” feature in GitHub (if you use GitHub) and make the project read only. You can always revive it later, but don’t delay making the project read only to avoid those PRs to a decommissioned project. It’s read only so we can always reuse the code in the future.
  121. Retirement @amaltson Speaker Note: In order to create an amazing

    Developer Experience for the retirement of mob-up, definitely not something we generally think about.
  122. Retirement • Leave code in a good state @amaltson Speaker

    Note: In order to create an amazing Developer Experience for the retirement of mob-up, definitely not something we generally think about.
  123. Retirement • Leave code in a good state • Archive

    it @amaltson Speaker Note: In order to create an amazing Developer Experience for the retirement of mob-up, definitely not something we generally think about.
  124. Developer Experience @amaltson Speaker Note: Let’s do a quick review

    of how to make an amazing Developer Experience throughout the Experience Lifecycle when working with other developers on mob-up.
  125. Developer Experience @amaltson Speaker Note: Let’s do a quick review

    of how to make an amazing Developer Experience throughout the Experience Lifecycle when working with other developers on mob-up.
  126. Developer Experience • Data flow sequence diagrams @amaltson Speaker Note:

    Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when working with other developers on mob-up.
  127. Developer Experience • Pull Request checklist • Data flow sequence

    diagrams @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when working with other developers on mob-up.
  128. Developer Experience • Pull Request checklist • Keep a CHANGELOG

    • Data flow sequence diagrams @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when working with other developers on mob-up.
  129. Developer Experience • Pull Request checklist • Keep a CHANGELOG

    • Leave code in a good state • Archive it • Data flow sequence diagrams @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when working with other developers on mob-up.
  130. Experience Lifecycle @amaltson Speaker Note: Now that we understand how

    to improve Developer Experience when collaborating with others, let’s look how we can improve the experience as a tool author building tools for other developers to use.
  131. Experience Lifecycle @amaltson Speaker Note: Now that we understand how

    to improve Developer Experience when collaborating with others, let’s look how we can improve the experience as a tool author building tools for other developers to use.
  132. @amaltson Speaker Note: And this is where we need to

    make a slight tangent, to discuss the type tools we’re building.
  133. @amaltson Speaker Note: And this is where we need to

    make a slight tangent, to discuss the type tools we’re building.
  134. @amaltson Speaker Note: I mean to meet developers were they

    are in terms of the tooling they use. And what tooling is that? Well, most developers live in their Editor/IDE of choice writing code, and most of the time running that code through their trusted terminal. Therefore, if we’re building a tool for developers, does it make sense to build it as a GUI web app or a CLI with maybe integration into their editor of choice? I’d argue the latter makes more sense.
  135. @amaltson Speaker Note: I mean to meet developers were they

    are in terms of the tooling they use. And what tooling is that? Well, most developers live in their Editor/IDE of choice writing code, and most of the time running that code through their trusted terminal. Therefore, if we’re building a tool for developers, does it make sense to build it as a GUI web app or a CLI with maybe integration into their editor of choice? I’d argue the latter makes more sense.
  136. @amaltson Speaker Note: I mean to meet developers were they

    are in terms of the tooling they use. And what tooling is that? Well, most developers live in their Editor/IDE of choice writing code, and most of the time running that code through their trusted terminal. Therefore, if we’re building a tool for developers, does it make sense to build it as a GUI web app or a CLI with maybe integration into their editor of choice? I’d argue the latter makes more sense.
  137. GUI @amaltson Speaker Note: I mean to meet developers were

    they are in terms of the tooling they use. And what tooling is that? Well, most developers live in their Editor/IDE of choice writing code, and most of the time running that code through their trusted terminal. Therefore, if we’re building a tool for developers, does it make sense to build it as a GUI web app or a CLI with maybe integration into their editor of choice? I’d argue the latter makes more sense.
  138. GUI CLI @amaltson Speaker Note: I mean to meet developers

    were they are in terms of the tooling they use. And what tooling is that? Well, most developers live in their Editor/IDE of choice writing code, and most of the time running that code through their trusted terminal. Therefore, if we’re building a tool for developers, does it make sense to build it as a GUI web app or a CLI with maybe integration into their editor of choice? I’d argue the latter makes more sense.
  139. CLI @amaltson Speaker Note: I mean to meet developers were

    they are in terms of the tooling they use. And what tooling is that? Well, most developers live in their Editor/IDE of choice writing code, and most of the time running that code through their trusted terminal. Therefore, if we’re building a tool for developers, does it make sense to build it as a GUI web app or a CLI with maybe integration into their editor of choice? I’d argue the latter makes more sense.
  140. CLI @amaltson Speaker Note: One could argue that argued building

    a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  141. CLI Command Line Interface @amaltson Speaker Note: One could argue

    that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  142. CLI Command Line Interface @amaltson Speaker Note: One could argue

    that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  143. CLI Command Line Interface Well Factored Code @amaltson Speaker Note:

    One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  144. CLI Command Line Interface Well Factored Code @amaltson Speaker Note:

    One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  145. CLI Command Line Interface Well Factored Code Web App @amaltson

    Speaker Note: One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  146. CLI Command Line Interface Well Factored Code Web App @amaltson

    Speaker Note: One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  147. CLI Command Line Interface Well Factored Code Editor Plugin Web

    App @amaltson Speaker Note: One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  148. CLI Command Line Interface Well Factored Code Editor Plugin Web

    App @amaltson Speaker Note: One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  149. CLI Command Line Interface Well Factored Code Editor Plugin Web

    App Electron App @amaltson Speaker Note: One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  150. CLI Command Line Interface Well Factored Code Editor Plugin Web

    App Electron App @amaltson Speaker Note: One could argue that argued building a CLI doesn’t preclude building a GUI, but building a GUI often precludes building a CLI. Therefore, it’s best to start CLI first. Once you’ve built a CLI, many devs can start using it. And if you’ve built on top of a well factored code base, other devs can jump in and maybe get excited and build a GUI for business users. After some time you might build an editor plugin leveraging the CLI to make it easier, which brings in other devs. They might get excited and build an advanced GUI on top of Electron for more advanced users.
  151. CLI @amaltson Speaker Note: Point is, if you start CLI

    first, you get the best of both worlds. So our examples going forward we will assume we are build a CLI and talk about Developer Experience with a CLI.
  152. Experience Lifecycle @amaltson Speaker Note: Alright, tangent done, let’s get

    back to looking how to improve the Developer Experience in the lifecycle of using a tool.
  153. Getting Started @amaltson Speaker Note: And nothing makes that initial

    getting started experience painful like having a laundry list of prerequisites, like installing some language you’re not familiar with and manually installing third party dependencies. And once you get over that hump, the instructions for tool installation are a multi- step process.
  154. Getting Started @amaltson Speaker Note: And nothing makes that initial

    getting started experience painful like having a laundry list of prerequisites, like installing some language you’re not familiar with and manually installing third party dependencies. And once you get over that hump, the instructions for tool installation are a multi- step process.
  155. Getting Started @amaltson Speaker Note: And nothing makes that initial

    getting started experience painful like having a laundry list of prerequisites, like installing some language you’re not familiar with and manually installing third party dependencies. And once you get over that hump, the instructions for tool installation are a multi- step process.
  156. Getting Started @amaltson Speaker Note: A better approach is to

    provide installation options developers expect. Whether it’s Homebrew on the Mac, a native package for various OS flavours, or what SecOps consider the devil’s package manager, a curl bash install (you install blindly with no vetting of the shell script).
  157. Getting Started @amaltson Speaker Note: A better approach is to

    provide installation options developers expect. Whether it’s Homebrew on the Mac, a native package for various OS flavours, or what SecOps consider the devil’s package manager, a curl bash install (you install blindly with no vetting of the shell script).
  158. Getting Started @amaltson Speaker Note: A better approach is to

    provide installation options developers expect. Whether it’s Homebrew on the Mac, a native package for various OS flavours, or what SecOps consider the devil’s package manager, a curl bash install (you install blindly with no vetting of the shell script).
  159. Getting Started @amaltson Speaker Note: A better approach is to

    provide installation options developers expect. Whether it’s Homebrew on the Mac, a native package for various OS flavours, or what SecOps consider the devil’s package manager, a curl bash install (you install blindly with no vetting of the shell script).
  160. Getting Started @amaltson Speaker Note: But all of those installation

    techniques work really well when tool is written in a way that it compiles to a nice binary format, like with Go or Rust. But when it’s written in something else, especially that needs a native OS dependency, things can go up in flames fast.
  161. Getting Started @amaltson Speaker Note: But all of those installation

    techniques work really well when tool is written in a way that it compiles to a nice binary format, like with Go or Rust. But when it’s written in something else, especially that needs a native OS dependency, things can go up in flames fast.
  162. Getting Started @amaltson Speaker Note: But all of those installation

    techniques work really well when tool is written in a way that it compiles to a nice binary format, like with Go or Rust. But when it’s written in something else, especially that needs a native OS dependency, things can go up in flames fast.
  163. Getting Started @amaltson Speaker Note: But all of those installation

    techniques work really well when tool is written in a way that it compiles to a nice binary format, like with Go or Rust. But when it’s written in something else, especially that needs a native OS dependency, things can go up in flames fast.
  164. Getting Started @amaltson Speaker Note: But all of those installation

    techniques work really well when tool is written in a way that it compiles to a nice binary format, like with Go or Rust. But when it’s written in something else, especially that needs a native OS dependency, things can go up in flames fast.
  165. Getting Started @amaltson Speaker Note: To not have that happen,

    we’re going to take our application and put it into a larger package, a Docker container. And then using a tiny bit of shell scripting, we can make an “executable” that looks and feels like a binary package and allows you to control all the dependencies you need. I’ve found this particular trick very handy for packaging Ruby and Python programs. Best part is, they’re always up to date!
  166. Getting Started @amaltson Speaker Note: To not have that happen,

    we’re going to take our application and put it into a larger package, a Docker container. And then using a tiny bit of shell scripting, we can make an “executable” that looks and feels like a binary package and allows you to control all the dependencies you need. I’ve found this particular trick very handy for packaging Ruby and Python programs. Best part is, they’re always up to date!
  167. Getting Started @amaltson Speaker Note: To not have that happen,

    we’re going to take our application and put it into a larger package, a Docker container. And then using a tiny bit of shell scripting, we can make an “executable” that looks and feels like a binary package and allows you to control all the dependencies you need. I’ve found this particular trick very handy for packaging Ruby and Python programs. Best part is, they’re always up to date!
  168. Getting Started @amaltson Speaker Note: Quick summary for making an

    amazing getting started experience for your tool.
  169. Getting Started • Provide one liner installation @amaltson Speaker Note:

    Quick summary for making an amazing getting started experience for your tool.
  170. Getting Started • Provide one liner installation • If not

    easily installable, use Docker! @amaltson Speaker Note: Quick summary for making an amazing getting started experience for your tool.
  171. @amaltson Speaker Note: Alright, that’s getting started. Once we have

    the tool installed, we want to start using it.
  172. @amaltson Speaker Note: Alright, that’s getting started. Once we have

    the tool installed, we want to start using it.
  173. First Contact @amaltson Speaker Note: That’s what we can think

    of as first contact. It’s the first experience the developer has using your tool, after getting it installed that is. This is most nerve wracking part of using a new tool.
  174. First Contact @amaltson Speaker Note: How do we get that

    wow experience and reduce the nervous experience? We could consider doing work on behalf of the user. Imagine instead of asking all the contact details like Pair Up does today…
  175. First Contact @amaltson Speaker Note: How do we get that

    wow experience and reduce the nervous experience? We could consider doing work on behalf of the user. Imagine instead of asking all the contact details like Pair Up does today…
  176. First Contact @amaltson Speaker Note: We go out and use

    the GitHub API and find the user’s name and email automatically. Now that’s a wow experience.
  177. First Contact @amaltson Speaker Note: We go out and use

    the GitHub API and find the user’s name and email automatically. Now that’s a wow experience.
  178. First Contact @amaltson Speaker Note: So to have an awesome

    “first contact” experience, we need to have…
  179. First Contact • Do work on the user’s behalf @amaltson

    Speaker Note: So to have an awesome “first contact” experience, we need to have…
  180. @amaltson Speaker Note: Now our user has started using our

    tool, how can we improve the day to day Developer Experience?
  181. @amaltson Speaker Note: Now our user has started using our

    tool, how can we improve the day to day Developer Experience?
  182. Day to Day @amaltson Speaker Note: Improving our day to

    day experience, we need to think of the source of frustration for most users, and that’s often unclear error messages.
  183. Day to Day @amaltson Speaker Note: Improving our day to

    day experience, we need to think of the source of frustration for most users, and that’s often unclear error messages.
  184. Day to Day @amaltson Speaker Note: Improving our day to

    day experience, we need to think of the source of frustration for most users, and that’s often unclear error messages.
  185. Day to Day @amaltson Speaker Note: But many tools have

    really good error messages. You’ve probably seen this from Git when you mistype a command. Not only do they clearly explain what the problem is, but also suggests how to fix it. Can we do something like this for mob-up?
  186. Day to Day @amaltson Speaker Note: The answer is yes,

    we need to use something called Levenshtein distance. Which is a simple… err not so simple mathematical formula. But before you throw me off the stage…
  187. Day to Day Levenshtein distance @amaltson Speaker Note: The answer

    is yes, we need to use something called Levenshtein distance. Which is a simple… err not so simple mathematical formula. But before you throw me off the stage…
  188. Day to Day Levenshtein distance @amaltson Speaker Note: The answer

    is yes, we need to use something called Levenshtein distance. Which is a simple… err not so simple mathematical formula. But before you throw me off the stage…
  189. Day to Day Levenshtein distance @amaltson Speaker Note: … the

    big value with the formula is getting a single number representation of how close two words are. Take this example where the distance between “kitten” and “sitting” is 3 because you need to substitute 3 letters in “kitten” to make it “sitting”. Not so bad right?
  190. Day to Day Levenshtein distance @amaltson Speaker Note: … the

    big value with the formula is getting a single number representation of how close two words are. Take this example where the distance between “kitten” and “sitting” is 3 because you need to substitute 3 letters in “kitten” to make it “sitting”. Not so bad right?
  191. Day to Day Levenshtein distance @amaltson Speaker Note: We can

    then use this handy algorithm to really turn up our Developer Experience to 11. Since we know all of our keywords, for example in configuration we have “name”, “email”, “timeout”, etc, we can run a Levenshtein distance of a misconfigured word against all the keywords and the one with the lowest score (least transformations, up to a threshold of course) is probably the one they meant!
  192. Day to Day Levenshtein distance @amaltson Speaker Note: We can

    then use this handy algorithm to really turn up our Developer Experience to 11. Since we know all of our keywords, for example in configuration we have “name”, “email”, “timeout”, etc, we can run a Levenshtein distance of a misconfigured word against all the keywords and the one with the lowest score (least transformations, up to a threshold of course) is probably the one they meant!
  193. Day to Day @amaltson Speaker Note: Recapping, to have an

    awesome day to day Developer Experience we should …
  194. Day to Day • Levenshtein distance suggestions @amaltson Speaker Note:

    Recapping, to have an awesome day to day Developer Experience we should …
  195. @amaltson Speaker Note: As much blood, sweat and tears we

    put into a tool, at some point all good things come to an end.
  196. @amaltson Speaker Note: As much blood, sweat and tears we

    put into a tool, at some point all good things come to an end.
  197. @amaltson Retirement Speaker Note: Provide a bridge from the current

    tool and to the next one, if it exists. If there’s multiple, look at the most promising one and direct users. Imagine how the user feels, they’re now aware your tool is getting deprecated and confused where to go next. We need to provide that guidance to gracefully retire the tool. But how do we get that “wow” experience?
  198. Retirement @amaltson Speaker Note: Our users would really love it

    if someone would help them out. That someone needs to be us. For the optimal retirement, consider partnering with the authors of the new tool and build a migration tool. Worst case scenario, build the tool for them. Remember, as a tool author you’re the force multiplier, you make one change and you can potentially save hundreds of hours for teams.
  199. Retirement @amaltson Speaker Note: Our users would really love it

    if someone would help them out. That someone needs to be us. For the optimal retirement, consider partnering with the authors of the new tool and build a migration tool. Worst case scenario, build the tool for them. Remember, as a tool author you’re the force multiplier, you make one change and you can potentially save hundreds of hours for teams.
  200. Retirement • Clear and automated migration @amaltson Speaker Note: Recapping,

    to have an awesome Developer Experience retiring a tool we should …
  201. Developer Experience @amaltson Speaker Note: Let’s do a quick review

    of how to make an amazing Developer Experience throughout the Experience Lifecycle when building mob-up for other developers to use.
  202. Developer Experience @amaltson Speaker Note: Let’s do a quick review

    of how to make an amazing Developer Experience throughout the Experience Lifecycle when building mob-up for other developers to use.
  203. Developer Experience • Provide one liner installation • If not

    easily installable, use Docker! @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when building mob-up for other developers to use.
  204. Developer Experience • Do work on the user’s behalf •

    Provide one liner installation • If not easily installable, use Docker! @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when building mob-up for other developers to use.
  205. Developer Experience • Do work on the user’s behalf •

    Levenshtein distance suggestions • Provide one liner installation • If not easily installable, use Docker! @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when building mob-up for other developers to use.
  206. Developer Experience • Do work on the user’s behalf •

    Levenshtein distance suggestions • Clear and automated migration • Provide one liner installation • If not easily installable, use Docker! @amaltson Speaker Note: Let’s do a quick review of how to make an amazing Developer Experience throughout the Experience Lifecycle when building mob-up for other developers to use.
  207. @amaltson Speaker Note: Well that was a whirl wind tour

    of tips and tricks to improve developer experience.
  208. @amaltson Speaker Note: Well that was a whirl wind tour

    of tips and tricks to improve developer experience.
  209. User Experience @amaltson Speaker Note: Looking back now, we know

    we left a lot of value on the table by not focusing on User Experience a decade ago.
  210. User Experience @amaltson Speaker Note: Looking back now, we know

    we left a lot of value on the table by not focusing on User Experience a decade ago.
  211. Developer Experience @amaltson Speaker Note: We then discussed the three

    costs of not focusing on Developer Experience now: monetary, mental energy and moral.
  212. Developer Experience @amaltson Speaker Note: We then discussed the three

    costs of not focusing on Developer Experience now: monetary, mental energy and moral.
  213. Developer Experience @amaltson Speaker Note: We then discussed the three

    costs of not focusing on Developer Experience now: monetary, mental energy and moral.
  214. Developer Experience @amaltson Speaker Note: We then discussed the three

    costs of not focusing on Developer Experience now: monetary, mental energy and moral.
  215. Developer Experience • Pull Request checklist • Keep a CHANGELOG

    • Leave code in a good state • Archive it • Data flow sequence diagrams @amaltson Speaker Note: We went through some practical tips to improve Developer Experience when working with others.
  216. Developer Experience • Do work on the user’s behalf •

    Levenshtein distance suggestions • Clear and automated migration • Provide one liner installation • If not easily installable, use Docker! @amaltson Speaker Note: We then went through some practical tips to improve Developer Experience when building a tool for others to use.
  217. Developer Experience @amaltson Speaker Note: … the Developer Experience of

    what you’re working on. Introduce just one or two of these ideas..
  218. Developer Experience @amaltson Speaker Note: … and start improving the

    Developer Experience and turn your angry developers into happy developers.
  219. Developer Experience @amaltson Speaker Note: … and start improving the

    Developer Experience and turn your angry developers into happy developers.
  220. • Slides: https://www.slideshare.net/ArthurMaltson • Mob Up (someday): https://github.com/amaltson/mob-up • GitHub

    PR Templates • Keep A Changelog • PlantUML sequence diagram syntax • PlantUML VS Code Plugin • PairUp, Git Duel (actively maintained), and Git Mob (has VS Code plugin) Arthur Maltson We’re Hiring! @amaltson
  221. Credits • assorted-color yarns, Karly Santiago, https://unsplash.com/photos/E7zsz8JA8FM • MapQuest in

    2005, Wayback Machine Internet Archive, https://web.archive.org/web/20050625054602/http://www.mapquest.com/ • MapQuest in 2019, MapQuest, https://www.mapquest.com • Google_Maps_Beta, Wikimedia, https://en.wikipedia.org/wiki/File:Google_Maps_Beta.png • Calculate RIO, https://uxplanet.org/how-to-calculate-the-roi-of-your-ux-activities-b7ba7023246a • Users love simple and familiar designs – Why websites need to make a great first impression, https://ai.googleblog.com/2012/08/users-love-simple-and-familiar-designs.html • Canadian_Dollar_-_reverse, Wikimedia, https://en.wikipedia.org/wiki/File:Canadian_Dollar_-_reverse.png • Toonie.2012.design.reverse, Wikimedia, https://en.wikipedia.org/wiki/File:Toonie.2012.design.reverse.png • Empathic: https://www.grammarly.com/blog/empathetic • Cecily Strong Shrug Gif By Saturday Night Live, Saturday Night Live, https://gph.is/2d1eSi8 • Co-authored-by instructions: https://github.blog/2018-01-29-commit-together-with-co-authors/ • Working on new code base Tweet, Sarah Drasner, https://twitter.com/sarah_edo/status/1172210626573111296?s=21 • I Have No Memory Of This Place, gifbay, https://giphy.com/gifs/lost-gandalf-memory-FPjbHO0jJxGsE • Funny changelog: https://www.androidpit.com/here-are-the-most-hilarious-change-logs-ever-written • brown wooden trunk, Lena De Fanti, https://unsplash.com/photos/W4HtdHYqmUg • Home Office Remodeling Project (23), Michael Sauers, https://flic.kr/p/7xqsxK • Borg trekkie?, Nathan Rupert, https://flic.kr/p/cAfMoj • Typing Montage GIF, ReactionsEditor, https://gph.is/2oW0XKw • Homebrew logo, Homebrew, https://brew.sh • Debian logo, Wikimedia, https://commons.wikimedia.org/wiki/File:Debian-OpenLogo.svg • Red Hat logo, Wikimedia, https://en.wikipedia.org/wiki/File:Red_Hat_Logo_2019.svg • Curl Logo, Curl, https://curl.haxx.se/logo/ • Go gopher, Renee French, https://github.com/golang-samples/gopher-vector • Rust logo, Rust Lang, https://github.com/rust-lang/rust-artwork • Moby logo, Docker Inc, https://www.docker.com/company/newsroom/media-resources • Arrival still, Paramount Pictures, https://www.wired.co.uk/article/arrival-science-fact-fiction • Levenshtein distance, Wikipedia, https://en.wikipedia.org/wiki/Levenshtein_distance • Bicentennial Trail, Michael Hicks, https://flic.kr/p/assieJ • Dog Puppy Gif, Giphy, https://gph.is/1ko3wyq • Toronto Raptors Gif, Giphy, https://gph.is/g/aK5By84