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

iOSCon 2018: Sustainable Releases

iOSCon 2018: Sustainable Releases

Danielle Tomlinson

March 22, 2018
Tweet

More Decks by Danielle Tomlinson

Other Decks in Technology

Transcript

  1. Sustainable Releases
    A tale of teams and automation
    @dantoml
    @dantoml [she/they] - iOSCon 2018

    View Slide

  2. $ whoami
    @dantoml [she/they] - iOSCon 2018

    View Slide

  3. CocoaPods
    @dantoml [she/they] - iOSCon 2018

    View Slide

  4. ! fastlane !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  5. CircleCI
    @dantoml [she/they] - iOSCon 2018

    View Slide

  6. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  7. !!!
    @dantoml [she/they] - iOSCon 2018

    View Slide

  8. This is not a talk about
    how CD will solve all of
    your problems
    @dantoml [she/they] - iOSCon 2018

    View Slide

  9. !"
    @dantoml [she/they] - iOSCon 2018

    View Slide

  10. !"
    @dantoml [she/they] - iOSCon 2018

    View Slide

  11. Backstory
    @dantoml [she/they] - iOSCon 2018

    View Slide

  12. It didn’t build.
    @dantoml [she/they] - iOSCon 2018

    View Slide

  13. !"
    @dantoml [she/they] - iOSCon 2018

    View Slide

  14. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  15. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  16. Sound Familiar?
    @dantoml [she/they] - iOSCon 2018

    View Slide

  17. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  18. ! all the things?
    @dantoml [she/they] - iOSCon 2018

    View Slide

  19. No amount of ! will save
    you from a dysfunctional
    environment.
    @dantoml [she/they] - iOSCon 2018

    View Slide

  20. It's about
    delivering value
    @dantoml [she/they] - iOSCon 2018

    View Slide


  21. @dantoml [she/they] - iOSCon 2018

    View Slide

  22. How often do you ship?
    @dantoml [she/they] - iOSCon 2018

    View Slide

  23. Release more often
    @dantoml [she/they] - iOSCon 2018

    View Slide

  24. Every release is an
    opportunity to make
    users happy.
    @dantoml [she/they] - iOSCon 2018

    View Slide

  25. TypicalCorp: Milestone based releases
    @dantoml [she/they] - iOSCon 2018

    View Slide

  26. TypicalCorp: Milestone based releases
    → Y Features need to be in by X date
    @dantoml [she/they] - iOSCon 2018

    View Slide

  27. TypicalCorp: Milestone based releases
    → Y Features need to be in by X date
    → On X date we send to QA
    @dantoml [she/they] - iOSCon 2018

    View Slide

  28. TypicalCorp: Milestone based releases
    → Y Features need to be in by X date
    → On X date we send to QA
    → After QA we fix bugs
    @dantoml [she/they] - iOSCon 2018

    View Slide

  29. TypicalCorp: Milestone based releases
    → Y Features need to be in by X date
    → On X date we send to QA
    → After QA we fix bugs
    → Then we ship
    @dantoml [she/they] - iOSCon 2018

    View Slide

  30. Atlassian, the business case for continuous delivery blog
    @dantoml [she/they] - iOSCon 2018

    View Slide

  31. @dantoml [she/they] - iOSCon 2018

    View Slide

  32. So what can we improve?
    @dantoml [she/they] - iOSCon 2018

    View Slide

  33. You can ship smaller
    changes
    @dantoml [she/they] - iOSCon 2018

    View Slide

  34. Manage Expectations
    @dantoml [she/they] - iOSCon 2018

    View Slide

  35. @dantoml [she/they] - iOSCon 2018

    View Slide

  36. You don't need deadlines.
    @dantoml [she/they] - iOSCon 2018

    View Slide

  37. ⚗ Experiment!
    @dantoml [she/they] - iOSCon 2018

    View Slide

  38. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  39. ! Metrics
    @dantoml [she/they] - iOSCon 2018

    View Slide

  40. So what now?
    @dantoml [she/they] - iOSCon 2018

    View Slide

  41. Release !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  42. Some Requirements
    @dantoml [she/they] - iOSCon 2018

    View Slide

  43. Some Requirements
    → Automated build + test for branches/prs
    @dantoml [she/they] - iOSCon 2018

    View Slide

  44. Some Requirements
    → Automated build + test for branches/prs
    → Automated internal builds
    @dantoml [she/they] - iOSCon 2018

    View Slide

  45. Some Requirements
    → Automated build + test for branches/prs
    → Automated internal builds
    → Automated App Store builds
    @dantoml [she/they] - iOSCon 2018

    View Slide

  46. But it's not just automation
    @dantoml [she/they] - iOSCon 2018

    View Slide

  47. But it's not just automation
    → Policy for escalating hot fix builds
    @dantoml [she/they] - iOSCon 2018

    View Slide

  48. But it's not just automation
    → Policy for escalating hot fix builds
    → Set release cadence for the App Store
    @dantoml [she/they] - iOSCon 2018

    View Slide

  49. But it's not just automation
    → Policy for escalating hot fix builds
    → Set release cadence for the App Store
    → Prioritised backlog of work
    @dantoml [she/they] - iOSCon 2018

    View Slide

  50. RandomCorp: Release Trains
    → Sends a nightly internal+qa build
    → Releases every other Tuesday w/ CI
    → Uses a release branch to make pushing hotfixes
    easier
    @dantoml [she/they] - iOSCon 2018

    View Slide

  51. !"#
    @dantoml [she/they] - iOSCon 2018

    View Slide

  52. Testing
    @dantoml [she/they] - iOSCon 2018

    View Slide

  53. Acceptance Testing
    @dantoml [she/they] - iOSCon 2018

    View Slide

  54. XCUITest
    @dantoml [she/they] - iOSCon 2018

    View Slide

  55. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  56. Changelog!
    @dantoml [she/they] - iOSCon 2018

    View Slide

  57. !"
    @dantoml [she/they] - iOSCon 2018

    View Slide

  58. @dantoml [she/they] - iOSCon 2018

    View Slide

  59. scheme("SnapshotGenerator")
    devices([
    "iPhone 6",
    "iPhone 6 Plus",
    "iPhone 5",
    "iPhone 4s"
    ])
    languages([
    "en-US",
    "de-DE",
    "es-ES",
    ["pt", "pt_BR"] # Portuguese with Brazilian locale
    ])
    launch_arguments(["-username Felix"])
    output_directory('./screenshots')
    clear_previous_screenshots(true)
    @dantoml [she/they] - iOSCon 2018

    View Slide

  60. Localisation
    @dantoml [she/they] - iOSCon 2018

    View Slide

  61. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  62. ! Feature Toggles
    @dantoml [she/they] - iOSCon 2018

    View Slide

  63. Toggles are intentional Technical Debt
    @dantoml [she/they] - iOSCon 2018

    View Slide

  64. Review Times
    @dantoml [she/they] - iOSCon 2018

    View Slide

  65. Tooling
    @dantoml [she/they] - iOSCon 2018

    View Slide

  66. Real World Example*
    *by which i mean a totally contrived example.
    @dantoml [she/they] - iOSCon 2018

    View Slide

  67. @dantoml [she/they] - iOSCon 2018

    View Slide

  68. !
    @dantoml [she/they] - iOSCon 2018

    View Slide

  69. Thank you
    @dantoml
    @dantoml [she/they] - iOSCon 2018

    View Slide