Mobile @ Facebook - QConSF 2013

2,156 views

Published on

Mobile @ Facebook - QConSF 2013

Published in: Technology, Sports

Mobile @ Facebook - QConSF 2013

  1. 1. Mobile @ Facebook Christian Legnitto (christianl@fb.com) Mobile release engineering
  2. 2. Who is this guy?
  3. 3. Who is this guy? Facebook • Manage Mobile Release Engineering • I’m hiring • Run the iOS and Android releases • Ran Facebook.com web pushes for ~3 months
  4. 4. Who is this guy? Facebook • Manage Mobile Release Engineering • I’m hiring • Run the iOS and Android releases • Ran Facebook.com web pushes for ~3 months Mozilla • Firefox release manager • Helped design & implement 6 week releases • Desktop ( 3 platforms ) & mobile ( Android ) • Still a community member
  5. 5. Who is this guy? Facebook • Manage Mobile Release Engineering • I’m hiring • Run the iOS and Android releases • Ran Facebook.com web pushes for ~3 months Mozilla • Firefox release manager • Helped design & implement 6 week releases • Desktop ( 3 platforms ) & mobile ( Android ) • Still a community member Apple • Jaguar → Lion updates • OS X pre-release updates • Safari, Xcode, Java, iApps • Build system, scrubber, PM tools
  6. 6. 874,000,000 MAUs 507,000,000 DAUs
  7. 7. iPads & iPhones native & web supports iOS6+
  8. 8. native & web +1M beta testers supports Froyo+ 15 apks +20K alpha testers
  9. 9. How we USED to develop
  10. 10. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker ... ... ... Events team Photos team Android core team iOS core team
  11. 11. Doesn’t SCALE
  12. 12. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team
  13. 13. Mobile core team owned mobile Desktop Web Events team Photos team Android core team iOS core team Group messages Group messages Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums 20 iOS Chat Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 10 30 20 20
  14. 14. Mobile core team owned mobile Desktop Web Photos team Android core team iOS core team (numbers made up) Group messages Group messages Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Events team 20 iOS Chat Messages team Android Photo picker Photo picker 10 30 20 20
  15. 15. Mobile core team owned mobile Desktop Web Events team Photos team Android core team iOS core team Group messages Group messages Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums 20 iOS Chat Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 10 30 20 20
  16. 16. Mobile core team owned mobile Desktop Web Photos team Android core team iOS core team Group messages Group messages Chat Events team iOS Group messages Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 10 30 20 20 20
  17. 17. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team 30 20 20 20 10
  18. 18. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team 20 20 20 60 30 10
  19. 19. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Messages team Android Photo albums Photo albums Photo picker Photo picker Photo picker 20 60 30 10 20 Events team Photos team Android core team iOS core team 20
  20. 20. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker 20 60 30 10 20 20 Events team Photos team Android core team iOS core team
  21. 21. Doesn’t produce the BEST product
  22. 22. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team
  23. 23. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team product experts
  24. 24. Mobile core team owned mobile Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker Events team Photos team Android core team iOS core team product experts platform experts
  25. 25. How we USED to ship
  26. 26. Feature-based releases
  27. 27. Feature-based releases Decide on features
  28. 28. Feature-based releases Decide on features Furiously work on them
  29. 29. Feature-based releases Decide on features Furiously work on them Test
  30. 30. Feature-based releases Decide on features Furiously work on them Test Ship when all features are done
  31. 31. All features are PRIORITY #1
  32. 32. Decide on features Desktop Web Group messages Chat Upcoming events Birthdays Photo albums Photo picker ...
  33. 33. Decide on features Desktop Web 1. Emoji 2. Green dot 3. Naming convos Group messages Chat Upcoming events Birthdays Photo albums Photo picker ...
  34. 34. Decide on features Desktop Web 1. Emoji 2. Green dot 3. Naming convos Group messages 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Chat Birthdays Photo albums Photo picker ...
  35. 35. Decide on features Desktop Web 1. Emoji 2. Green dot 3. Naming convos Group messages 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events 1. Automatic upload 2. Tag suggestions 3. Change cover photo Chat Birthdays Photo albums Photo picker ...
  36. 36. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo
  37. 37. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo 1. Emoji 1. Reply inline 1. Automatic upload
  38. 38. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo 1. Emoji 1. Reply inline 1. Automatic upload 2. Green dot 2. Birthday reminder 2. Tag suggestions
  39. 39. Decide on features Desktop Web Android 1. Emoji 2. Green dot 3. Naming convos Group messages Group messages Chat Chat 1. Reply inline 2. Birthday reminder 3. Gifts integration Upcoming events Upcoming events Birthdays Birthdays Photo albums Photo albums Photo picker Photo picker ... ... 1. Automatic upload 2. Tag suggestions 3. Change cover photo 1. Emoji 1. Reply inline 1. Automatic upload 2. Green dot 2. Birthday reminder 2. Tag suggestions 3. Naming convos 3. Gifts integration 3. Change cover photo
  40. 40. The market and company CHANGES RAPIDLY
  41. 41. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  42. 42. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  43. 43. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  44. 44. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  45. 45. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  46. 46. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  47. 47. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  48. 48. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  49. 49. Decide on features Android Group messages Chat Upcoming events Birthdays Photo albums Photo picker ... 1. Emoji 2. Reply inline 3. Automatic upload 4. Green dot 5. Birthday reminder 6. Tag suggestions 7. Naming convos 8. Gifts integration 9. Change cover photo
  50. 50. Don’t know when code SHIPS
  51. 51. Feature-based releases Can’t judge risk vs reward
  52. 52. Feature-based releases Can’t judge risk vs reward 80% done?
  53. 53. Feature-based releases Can’t judge risk vs reward 80% done? Good enough
  54. 54. Confuses DEV and RELEASE
  55. 55. Development process Create the best product possible → Focus on improving
  56. 56. Development process Create the best product possible → Focus on improving Release process Ship finished work in a timely manner → Focus on not regressing
  57. 57. Took lessons learned from DESKTOP WEB and applied them to MOBILE
  58. 58. How we develop NOW
  59. 59. Old and busted Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker ... ... ... Events team Photos team Android core team iOS core team
  60. 60. New hotness Desktop Web iOS Group messages Group messages Group messages Chat Messages team Android Chat Chat Upcoming events Upcoming events Upcoming events Birthdays Birthdays Birthdays Photo albums Photo albums Photo albums Photo picker Photo picker Photo picker ... ... ... Events team Photos team Android core team iOS core team
  61. 61. Engineers committing mobile code iOS and Android
  62. 62. How we ship NOW
  63. 63. features quality schedule
  64. 64. features quality schedule pick 2
  65. 65. features quality schedule pick 2
  66. 66. Date-based releases Rule #1 We ship on time
  67. 67. Date-based releases Rule #2 Make users no worse off
  68. 68. Date-based releases Rule #3 There’s always the next one
  69. 69. Date-based releases Rule #4 Retreat to safety
  70. 70. tiv na Automated cut every 4 weeks e m ile ob 4 weeks of development 4 weeks of development master 3.5 weeks of stabilization release branch RC
  71. 71. p to sk de Automated cut every 1 week w eb 1 week of development 1 week of development trunk Stabilize Release branch release branch Weekly Twice Daily
  72. 72. tiv na Automated cut every 4 weeks e m ile ob 4 weeks of development 4 weeks of development master 3.5 weeks of stabilization release branch RC
  73. 73. tiv na Dogfooding e m ile ob master release branch
  74. 74. How we write CODE
  75. 75. Source control Git >100,000 commits >150,000 files >300 engineers
  76. 76. Code review Phabricator
  77. 77. Continuous integration Buildbot Builds Lint / static analysis Tests Facebook i386 Facebook arm Messenger i386 Messenger arm ... regex clang android findbugs ... OCUnit snapshot JUnit robolectric ... https://github.com/facebook/ios-snapshot-test-case
  78. 78. Continuous integration Buildbot Before diff Create diff (optional) (mandatory) Diff updated Landing queue (mandatory) (optional) Git commit (mandatory)
  79. 79. Continuous integration Mac minis
  80. 80. Android
  81. 81. Building & running tests Buck - build tool • • • • Fast • Distributed Cassandra build cache • buckd for background builds Scalable and extensible “buck clean is a bug” Android and generic Java support
  82. 82. Building & running tests Buck - build tool • • • • Fast • Distributed Cassandra build cache • buckd for background builds Scalable and extensible “buck clean is a bug” Android and generic Java support
  83. 83. Building & running tests Buck - build tool “Gerrit Code Review recently switched its build process from Maven to Buck, reducing build time by 67-98% while improving build reproducibility, maintainability and developer happiness. The Gerrit project migrated itself out of the Maven tarpit into a ” better build. - Shawn Pearce (Google)
  84. 84. Building & running tests Buck - join us! Start using Buck: http://facebook.github.io/buck/ Get help in the discussion group: https://groups.google.com/forum/#!forum/buck-build File bugs and submit patches on GitHub: https://github.com/facebook/buck
  85. 85. iOS
  86. 86. Building & running tests xctool - build tool Makes iOS & Mac continuous integration easier. • CLI tool, runs tests just as Xcode.app would • Can parallelize test runs • Can emit JSON objects for every build/test event • Reporters for Phabricator, JUnit XML • Attractive, concise output
  87. 87. Building & running tests xctool - “pretty” reporter
  88. 88. Building & running tests xctool - “json-stream” reporter
  89. 89. Building & running tests xctool - how it works xctool xcodebuild xcodebuild-shim.dylib Injected otest (SenTestingKit) xctest (XCTest) test-shim.dylib Injected test-shim.dylib Injected
  90. 90. Building & running tests xctool - join us! On GitHub: github.com/facebook/xctool On Homebrew: brew install xctool Also available on Travis-CI
  91. 91. Crash reports atos
  92. 92. Crash reports atosl
  93. 93. Crash reports atosl github.com/facebook/atosl
  94. 94. Changed how we DEVELOP Changed how we SHIP Changed how we WRITE CODE Kept our CULTURE
  95. 95. Facebook is mobile Learn from our experience and use our tools
  96. 96. Links to mentioned awesomeness Contact me Buck christianl@fb.com, https://fb.me/legnitto, @LegNeato http://github.com/facebook/buck XCTool http://github.com/facebook/xctool atosl http://github.com/facebook/atosl Snapshot Test http://github.com/facebook/ios-snapshot-test-case
  97. 97. Mobile @ Facebook Christian Legnitto (christianl@fb.com) Mobile release engineering

×