Skip to content

Instantly share code, notes, and snippets.

@naoyamakino
Created November 2, 2016 06:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save naoyamakino/b493cb8a4bb190a25a88c7107c1a2ea1 to your computer and use it in GitHub Desktop.
Save naoyamakino/b493cb8a4bb190a25a88c7107c1a2ea1 to your computer and use it in GitHub Desktop.
Note from Uber Engineering meetup tonight about building and releasing mobile applications
# Uber Mobile Meetup
This is a very rough note from Uber Engineering meetup tonight about building and releasing mobile applications.
https://www.uber.com/p/uber-mobility/
## Uber release release team
- nightly build/beta testing
- internal/external
- FF
- weekly release
- soft/force upgrade
### weekly cut:
- weekly build -> patches for any fixes from internal test build -> beta test through Google Play Store -> staged rollout (1, 10, 50, 100%)-> soft/force update
### steps to take deployment
- signals -> tickets
- every alpha crash gets a ticket
- automate: turn off features based on classified crashes
- reminder: new build
- stage rollout everything
## Facebook
in-production features releasing engineering
in-app bug reporter
They have interface that user can report bugs; attach images, draw stuff, and record screens.
- user reports bugs. pics, video, and comments and report
- UI is driven by server. any features can be turned on/off from server
- 2M beta testers
- in app messages to into beta testers
- force update
- auto-updater for employees
- React Native with server update support (no app updates necessary)
version number scheme
100.0.0.20.70
major release.hotfix.none.beta.alpha
## building at uber scale
### architecture
several hundred mobile developers
hundred of commits daily
50% change / month
shared modular codebase with hundreds of modules
### code architecture
- features are built as plugins and shared between apps
- monoropo helps with modularization and sharing
### workflow
asynchronous change merging
submit queue
stacked diffs
run extensive code quality checks per merge
UI tests
deep static analysis
- build times
- 15 mins build for a single line change via gradle
- use buck for both iOS and Android
- less than 10 seconds for incremental builds on android
- incremental build
- cache immutable state
- works well for monorepo
- iOS, 4x faster/20x faster
- android 6~30x faster
- remote build cache
### tooling
- 50K+ CI jobs/ day
- code formatting
- build, unit tests
- UI static analysis
###opensource
[OkBuck](https://github.com/uber/okbuck) - grade plugin let you grand projects with buck
[Buck http cache](https://github.com/uber/buck-http-cache) - a distributed build artifact cache service
###Invest right tools early on
having shared workflow/tools across platforms helps a lot in long run
fail faster, keep master green
12 ppl for architecture change
## automating mobile releases
90℅ code coverage for automated deploy
## Uber
- Single repo, single flavor, geo fencing for region specific features
- Resource specific modules
- No QA, developers responsible for testing, PR comes with code coverage, checklist to go through before or merge
- No arbitrary value in XML, lint rule for that
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment