Slide 1

Slide 1 text

Mobile Product Engineering Arnav Gupta

Slide 2

Slide 2 text

Disclaimer: Personal Bias Past experiences which form my opinion ● 1.5 yrs : Platform Team Lead & Mobile Engineering Lead @ Zomato ● 1.5 yrs : Lead Engineer (Android) @ Target ● 10+ years mostly native Android Advice most suited to ● Scaleups / Large tech teams ● Ecom, B2C, large DAU (1M+) products

Slide 3

Slide 3 text

Outline Engineering Org Design Process Testability*

Slide 4

Slide 4 text

Engineering ‘scale’ is different modularisation 3rd party libraries navigation, deeplinks, state

Slide 5

Slide 5 text

‘scale’ is different ● device, OS, version fragmentation ● low bandwidth, low storage size, low RAM devices ○ content consumption apps: frequent customer complaints = data usage ○ in a competitive field: app size ∝ uninstall rate ● txns/day or API hits per sec are STILL important; why ? ○ good caching on frontend, helps backend teams ○ lots of ‘scale’ mitigation happens on frontend (eg: exponential backoff) ○ frontend can DDoS backend

Slide 6

Slide 6 text

modularisation

Slide 7

Slide 7 text

3rd party libraries ● 1 line of code you don’t own = 1 line of risk you undertake ● even the biggies can fail you ○ Google Maps SDK bug: 20M+ users, 96% of top 1000 apps affected ○ Facebook Login SDK bug: 10M+ users, 80% of top 1000 apps affected ● include prebuilt vs add as source ○ build-time hit vs ability to self-fix ○ security considerations ○ CI able to pull 3rd party libs

Slide 8

Slide 8 text

deeplinks, navigation, state ● the closer your navigation graph is to a pure state machine the better you’ll sleep at night ● deeplinks should be idempotent, like GET requests, and just work™ zoma.to/r/135 https://zomato.com/restaurants/ncr/gulati zoma.to/u/34 fb://user/arnav https://facebook.com/@arnav

Slide 9

Slide 9 text

deeplinks, navigation, state

Slide 10

Slide 10 text

Org Design to QA or not to QA pod-wise teams platform team?

Slide 11

Slide 11 text

to QA or not to QA “ We can solve any problem by introducing an extra level of indirection ” - David J Wheeler to Butler Lampson

Slide 12

Slide 12 text

to QA or not to QA “ We can solve any problem by introducing an extra level of indirection… … except the problem of too many levels of indirection ”

Slide 13

Slide 13 text

to QA or not to QA ● PMs do have ability to toggle flags on DB, install apps, capture logs ● PMs will do “strategy”, cannot spend time on run-of-the-mill testing and operational tasks ● Engineers do not test thoroughly, we need a QA to be bulletproof ● Testing features need co-ordinating between frontend + mobile + backend engineers, QA can coordinate with all of them better ● We have compliance reasons ● Why do other companies have QA teams then?

Slide 14

Slide 14 text

pod-wise teams start when > 5 team size OK if 1 pod = 1 person 1 pod owns 2 modules ✅ 2 pods work on 1 module ❌ split pods per business domain ✅ split pods per tech function ❌

Slide 15

Slide 15 text

platform team ? do you need one? platform teams clean up after feature pods ❌ platform teams built libs that feature teams use ✅ platform teams are responsible for reliability/performance ❌ platform teams create tools + monitoring for better app perf ✅ platform teams do releases ❌ platform teams own CI/CD infra ✅

Slide 16

Slide 16 text

Process trunk-based development release train build versioning 1 ticket = 1 branch = 1 build = 1 signoff

Slide 17

Slide 17 text

trunk-based development & release train

Slide 18

Slide 18 text

trunk-based development & release train

Slide 19

Slide 19 text

trunk-based development & release train

Slide 20

Slide 20 text

build versioning ● what is the APK version of the following apps you use on your phone ? ○ Google Maps ○ Google Pay / PhonePe / PayTM ○ Swiggy / Zomato ● product features ↔ version number pairing not needed ● 2022.12 (week num), or 2022.5.1-5472 (YMD+buildnum) ● v10 of Android = v10 of iOS has same features - why ? ● control feature rollout via ○ server side feature flags ○ API headers

Slide 21

Slide 21 text

1 ticket = 1 branch = 1 build = 1 signoff ● 1 short-lived branch created for 1 JIRA ticket ○ scope your work so that this is < 1 week of work ● Use Firebase Test Labs + Test Flight for CD-to-employees ● PM/Design/Business should be able to “install a ticket id” ● Single place to for all stakeholders to - ○ get build for the ticket ○ discuss design / specs / requirements ○ sign off on release

Slide 22

Slide 22 text

Testability unit test vs integration test snapshot tests? debug drawer & feature flags enabling manual testing

Slide 23

Slide 23 text

unit tests vs integration tests ● tooling, difficulty and build time of integration tests ● what are you testing ? ○ input/output of function? ○ business logic? ○ state machine? ● mocking vs faking ○ can we test by hitting real APIs ?

Slide 24

Slide 24 text

snapshot testing do you need it ? fragility & flakiness keeping up with design iteration speed accessibility tests

Slide 25

Slide 25 text

debug drawer & feature flags ● API server domain switching ● A/B test (assuming test/control group) ● Assume user id ● Feature flag local overrides ● Dev Tool enable/disable ○ profiling ○ mem-leak catching ○ event / logs / trace capturing

Slide 26

Slide 26 text

enabling manual testing

Slide 27

Slide 27 text

enabling manual testing

Slide 28

Slide 28 text

good reads

Slide 29

Slide 29 text

blogs developer.squareup.com eng.uber.com/category/articles/mobile slack.engineering zomato.com/blog/category/technology blog.hotstar.com/tagged/engineering