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

Your Build Pipeline is a Product

chendo
January 25, 2017

Your Build Pipeline is a Product

Why your Build Pipeline is a Product and how we used that thinking at Dr Me to significantly improve developers' experience and efficiency with UX improvement processes.

chendo

January 25, 2017
Tweet

More Decks by chendo

Other Decks in Programming

Transcript

  1. Hi, I'm chendo • Sometimes known as Jack Chen •

    @chendo on Github, Twitter • Chief Technology Officer at Dr Me
  2. The Product • An app that allows patients to have

    a consultation with a doctor • Doctor can issue medical certificates, prescriptions, referrals, pathology, imaging • iOS, Android and Web
  3. The Stack • Rails backend • Deployed as set of

    containers to a DC/OS cluster • React frontend • Deployed to mobile with Cordova as hybrid app • ES6, Flow, GraphQL, styled-components • Buildkite for CI
  4. Why is a Build Pipeline a Product? • It provides

    some sort of value • Prevent bugs • Automate process • It has users: you!
  5. Why treat it as a Product? • Apply product design

    principles and processes • Iterate and improve • Keep your developers happy
  6. User Experience Flow • Push a change • Wait for

    build • If broken, figure out what broke and why • Fix it • Ensure broken test(s) are fixed locally • Push the fix ---^
  7. Iteration #1 • Nightwatch: JS testing tool • Frontend is

    JS • docker-compose to run backend, frontend, tests and selenium
  8. Issues • ! Effort++ to figure out what broke and

    why • Need to look at test source to find out what happened before it failed • Screenshots were annoying to look at • Need to run the tests locally to see JS errors • ! ! Unable to test video chat flow
  9. Iteration #2 • ! RSpec/Capybara • ! JS console output

    • ! Interactive test writing [demo] • ! Video call tests • " Step-by-step output via TracePoint • " Screenshots displayed near error point
  10. Issues • ! Error & backtrace at the end of

    output • ! Need to scroll through a lot of output to find actual issue • ! Current notification methods annoying • Email is noisy enough, Slack integration is noisy
  11. Iteration #3 • ! Hide unnecessary output • https://github.com/chendo/buildkite-rspec-formatter •

    ! 'Need to know' Slack notifications • Bonus: Slack notification for Github comments • " Move error & backtrace with the others • " Per-step JS console output
  12. Issues • Still need to do manual testing to verify

    things work visually • Builds take too long • Concurrent frontend builds on the same machine causes it to grind to a halt • Tests begin failing due to timeouts
  13. Iteration #4 • ! Visual regression with Percy.io • Easy

    to integrate • " Parallelise tests with Knapsack • " Restructured Buildkite agents • " rspec-retry
  14. Summary • Significantly decreased effort to understand failure • Per-step

    logging • JS console output • Screenshots • Localised useful info (error, backtrace, screenshot) • Hide irrelevant output • Improved confidence with visual regression testing
  15. Summary • Improved feedback cycle • Faster test suite •

    Notifications rather than polling • Made writing integration tests much easier • Happy developers! !
  16. Roadmap • Backend logs in output • Get relevant build

    output into notification • Per-step screenshots • Video of tests • Rebuild and unblock builds from Slack • Automated on-device integration testing
  17. Conclusion • Your build pipeline is a product and you

    should improve it • Tooling and processes are also products and you should improve them