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

Design for Continuous Deployment

randyjhunt
December 11, 2011

Design for Continuous Deployment

What is continuous deployment? Why design for continuous deployment? How can engineers help designers think and work in this environment. An overview of how it’s done at Etsy.

randyjhunt

December 11, 2011
Tweet

Other Decks in Design

Transcript

  1. What is Etsy? Etsy is a commerce platform & a

    community where people buy direct from designers & artists who make & sell their own products.
  2. Any creative person can open a shop, list items, receive

    and fulfill orders, promote themselves, connect with other people, curate collections of items, watch site activity...
  3. End to End I’m in the lucky position to be

    creative director at Etsy. I get to be the arbiter of Etsy's experience end-to-end across all channels...
  4. ...and at etsy.com. I’m the design cheerleader, with a critical

    eye. And I make sure great design work gets done.
  5. About 140 people in Product Design & Engineering (that’s designers,

    product managers, engineers, and devops). We have to make that all work!
  6. Design for Continuous Deployment Which brings me to the topic

    at hand. Design for Continuous Deployment.
  7. “What is he doing here?” You might be asking yourself,

    “why is a designer talking to room of developers about deployment?”
  8. How Things are Made Getting great work done means working

    together. And it means valuing how things are made.
  9. Making Together In fact, it means Making Together. THAT is

    designing for continuous deployment. If our engineers practice continuous deployment, so must we. We’re building one product.
  10. “What is continuous deployment?” That brings us to our next

    question. You might be asking, “What is continuous deployment?”
  11. Always Improve Assuming that each change is intended to be

    an improvement (and why wouldn’t it be?), then that means the product is always improving.
  12. Frequent Boring Low-Risk These changes happen often, they’re trivial, and

    because they’re small, they should be low risk. This is really the philosophy of continuous deployment.
  13. Release Early Release Often This is saying frequency another way:

    a catchy way. This is how you say it if you want to remind someone they haven’t released small enought or frequently enough.
  14. Easy to Identify Easy to Fix Again, because the changes

    are small (and we measure what happens) problems are easier to find and easier to fix.
  15. We’re all in this together. Well, we’re working together building

    one product, so we should work similarly. Design doesn’t get left behind in a powerful engineering culture. In fact, design can scale and be more fluid when it’s close to engineering.
  16. Share Early Share Often This is the collaboration counterpart to

    releasing early and often. You encounter problems sooner. You learn sooner. You fix sooner. This isn’t about speed, it’s about quality.
  17. code ...and share it! You’ve made your design in the

    actual application environment. For engineers, no big deal. For designers, this is huge!
  18. Empowerment, Responsibility & Trust And when you get to the

    point of releasing, you’re empowered and trusted to do that. (yep, designers deploy to production too)
  19. People like these things. Being trusted feels good. As Kellan

    our CTO says, “optimize for developer happiness.” When you’re happy, you do better work.
  20. Decentralize Work When everyone can access code and everyone can

    deploy, there’s not single bottleneck or central deployment authority.
  21. Engineers Deployers Here we can see the moment in 2010

    when the number of people deploying to production surpassed the number of engineers on staff. This is good.
  22. Jan Feb Mar Apr May Jun Jul Aug Sep Oct

    Nov 0 10 20 30 40 50 60 70 Engineers Deployers Here we can see the moment in 2010 when the number of people deploying to production surpassed the number of engineers on staff. This is good.
  23. Jan Feb Mar Apr May Jun Jul Aug Sep Oct

    Nov 0 10 20 30 40 50 60 70 15 20 23 26 30 35 42 47 49 55 58 Engineers Deployers Here we can see the moment in 2010 when the number of people deploying to production surpassed the number of engineers on staff. This is good.
  24. Jan Feb Mar Apr May Jun Jul Aug Sep Oct

    Nov 0 10 20 30 40 50 60 70 15 20 23 26 30 35 42 47 49 55 58 7 8 10 15 22 26 32 50 54 57 62 Engineers Deployers Here we can see the moment in 2010 when the number of people deploying to production surpassed the number of engineers on staff. This is good.
  25. Jan Feb Mar Apr May Jun Jul Aug Sep Oct

    Nov 0 10 20 30 40 50 60 70 15 20 23 26 30 35 42 47 49 55 58 7 8 10 15 22 26 32 50 54 57 62 Engineers Deployers Here we can see the moment in 2010 when the number of people deploying to production surpassed the number of engineers on staff. This is good.
  26. Share Language Share Knowledge When designers and engineers work in

    the same environment, they share a language. This makes is easier to share knowledge. It also means you sympathize more with each other’s motivations and challenges.
  27. Version Control Design Assets As an added bonus. When you

    have designers working this way, you get version control of your design assets happening naturally. Nice!
  28. “How do you do it?” Enough with the philosophy and

    motivational messages. “How does this work at Etsy?”
  29. Tools & Process I’ll describe the tools and basic process

    we use on the product design team (and where we intersect with engineering).
  30. Dev Environment We all have a dedicated virtual machine that

    serves as our development environment. They are configured as mirrors of production in almost every way.
  31. Local Environment And we all work locally on our Macs.

    This is like some engineers, but not most of them. Most of them like to work in their development environment directly. Us designers don’t like things like Vim.
  32. Quick Start Guides & Packages Along with our engineers, we’ve

    made quick guides to help designers get started in this environment.
  33. The product design team also uses Campfire (and the Propane

    client) to share visual designs in conversation as well. We’ll post links to dev environments, as well as still and motion screen captures.
  34. send Local Changes to Dev Environemnt Remember those set up

    tools? Well there’s a handy script that auto-sends local changes to your development environment.
  35. Pattern Library We’ve built a design Pattern Library. It allows

    us to quickly get designs roughed. Don’t duplicate efforts. Be more consistent throughout the product. It covers mark-up, style, and behavior.
  36. This doesn’t solve everything, every time, but a patterns solves

    many things many times. Makes it easy to get started. Helps share design decisions between designers and with engineers. If we do something more than once, we patternize it.
  37. Config Flags We put every feature behind config flags. They’re

    dead simple. They live in a few simple PHP files. These allow us to safely work in production code and only deliver designs to the right people at the right time.
  38. These flags turn things on and off. They determine what

    environment they’re on/off in. They can determine what specific users. And they integrate with our a/b experiment framework.
  39. On/Off These flags turn things on and off. They determine

    what environment they’re on/off in. They can determine what specific users. And they integrate with our a/b experiment framework.
  40. On/Off Dev/Prod These flags turn things on and off. They

    determine what environment they’re on/off in. They can determine what specific users. And they integrate with our a/b experiment framework.
  41. On/Off Dev/Prod Whitelist/Co./All These flags turn things on and off.

    They determine what environment they’re on/off in. They can determine what specific users. And they integrate with our a/b experiment framework.
  42. On/Off Dev/Prod Whitelist/Co./All %A/%B These flags turn things on and

    off. They determine what environment they’re on/off in. They can determine what specific users. And they integrate with our a/b experiment framework.
  43. URL Params We’ve implemented very simple template tags that allow

    us to specify URL parameters and next design states or variations inside them.
  44. Commit & Review Before we send our changes back to

    master, we get code reviews from our peers.
  45. We use Crucible or Github or really anything you’d like

    to use to do a code review. The important thing is that we check our work. Designers can learn a ton from engineers in this step.
  46. Push it to Master in Git Wow, tech-y slide. What

    about merging? We merge when we pull. No branches. We only “branch in code” using the config flags. That saves us from any annoying merging issues and keeps everyone accountable. It’s also just simple and easy to understand.
  47. Deploy Queue Who’s turn is it? We find out by

    joining the Deploy Queue. So how do you manage 100 people pushing and deploying code to production? You make them talk to each other.
  48. That’s right, IRC. There’s a special IRC room just for

    Pushes. There’s a little bot that helps you be polite, but the only policy enforcement is self enforcement. We respect the system and respect our peers.
  49. Deployinator When the queueu says it’s okay to deploy, we

    turn to our tool, Deployinator. It’s a dashboard and simple UI for 1-button deploys.
  50. We monitor performance immediately and over the long term. We

    look at business metrics immediately and over the long term. And we watch behavioral metrics and funnels using our analyzer tool.
  51. Performance We monitor performance immediately and over the long term.

    We look at business metrics immediately and over the long term. And we watch behavioral metrics and funnels using our analyzer tool.
  52. Performance Business Metrics We monitor performance immediately and over the

    long term. We look at business metrics immediately and over the long term. And we watch behavioral metrics and funnels using our analyzer tool.
  53. Performance Business Metrics A/B Analyzer We monitor performance immediately and

    over the long term. We look at business metrics immediately and over the long term. And we watch behavioral metrics and funnels using our analyzer tool.
  54. Repeat And we do this over and over and over

    again, deploying up to 50 times day.
  55. Work Closely You end up working closely together, because we

    use the same tools and languages. This is good.
  56. Make Change Easy This makes it easier to make changes

    happen, and get them out in the world.
  57. Make People Happy And when you make great work, the

    people you make it and the people who use it are better for it.