Why include business context in project readiness? ADAPT - a framework for scaling teams
Scaling mobile dev teams
-
Upload
priyank-gupta -
Category
Technology
-
view
329 -
download
1
Transcript of Scaling mobile dev teams
![Page 1: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/1.jpg)
Patterns to scale mobile teamsUsing examples for Android
Priyank GuptaSahaj Software Solutions Pvt. Ltd.
![Page 2: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/2.jpg)
Mobile is eating the world
![Page 3: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/3.jpg)
Evolution in last 5 years
Mobile Inclusive Mobile First Mobile Only
![Page 4: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/4.jpg)
Building it for 3.2 billion people
7.1 Billion - World population
7.9 Billion mobile devices
3.2 Billion Internet Users
State of connectivity 2015 - Report
Mobile users are the internet users
![Page 5: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/5.jpg)
Worldwide market-share
Smartphone market share - Report
Android
iOS
Others
83%14%03%
![Page 6: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/6.jpg)
Everything in ‘context’
Discovery
DeliveryMedia
Payments
Aggregation
Discovering content, deals, products, places and information happens based on location, context and conversations..
Payments, wallets, money transfers and currency conversions happens via mobile apps instantaneously.
News doesn’t come from media houses. News is crowd sourced, crowd curated and pushed real-time to consumers on mobile.
Delivery is done across diverse products and services; ordered, scheduled and tracked via mobile real-time.
Services are aggregated and made available on mobile across all domains. Delivery, taxis, food, handy-work etc.
![Page 7: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/7.jpg)
Why mobile is different?
![Page 8: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/8.jpg)
Challenges
Multiple platforms and
form types
No control on environment /
device
Work across version and device types
Design with usability at center. Stay
ahead of competing feature set
Forced SDK update and
different runtimes
Dalvik, ART, Arm6, Arm7
![Page 9: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/9.jpg)
Survival for fittest
IdeasTons of ideas see daylight in an healthy ecosystem
SaturationRedundant businesses cause saturation to occur
ConsolidationConsolidation in form of acquisition, mergers and natural death.
Healthy co-existenceWinning teams are lean, agile, ahead of competition and know how to scale.
![Page 10: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/10.jpg)
What affects scalability
![Page 11: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/11.jpg)
Things that matter
Hiring & People
Team organization
Technology selection
Development practices
Scalable design
Testing & Safety nets
Release cycle & practices
![Page 12: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/12.jpg)
Technology selection
![Page 13: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/13.jpg)
In business of delivering experience
HTML5
Native
Custom Bridges
Cordova
HTML5+Service workers
React Native
Xamarin
Selecting mobile implementation strategyExperience + Reach
Cost
Laser
Cover your bases
Long term strategy should focus on building a native experience. The journey can be gradual or with a jump start.
No adoption
No magic bullets
![Page 14: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/14.jpg)
Organizing teams for scale
![Page 15: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/15.jpg)
Technology teams vs..
Release 1 - Mix of feature X & Y
Android
iOS
Services
Siloed by technology/platform
If feature parity is important then lowest denominator goes into release
Missed opportunity to optimize services based on common domain across platform
Easier to draw boundaries.
Initial velocity gain due to technical know how.
![Page 16: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/16.jpg)
.. Product team
Release 1 - Feature X
Release 1 - Feature Y
Services iOS Android
Initial velocity impact
Shared understanding of product as a
whole
Feature parity
maintained in releases
Can get away with a leaner
team. Problems
solved once.
Service design can have
considerations for clients
baked in right from start
![Page 17: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/17.jpg)
Handovers & feedback loops
Development
Design
Testing
Story started
Story done
Quicker feedback loops keeps the cost of change low and validates the shared understanding constantly.
![Page 18: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/18.jpg)
Services are part of product
Services
App
Own services as first class
deliverable
Use patterns to decouple
legacy services
Leverage REST Level-3
characteristics to make service
adaptive
Use patterns to optimize services
for target consumer platform
![Page 19: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/19.jpg)
Scaleable dev practices
![Page 20: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/20.jpg)
Predictability & Consistency
Where would you find the code to fetch details from database?
Can you predict how someone on team would fetch images in background?
Will everyone know how to find the service call you wrote?
Can everyone on team predict what’s going to be covered in an espresso test?
Do you know where to find the styling for a specific UI element?
Using conventions you can build predictability on team to simplify mental models needed to understand the codebase
![Page 21: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/21.jpg)
Define the simple machines
Screw Wheel & Axle Pulley Lever
A simple machine can hammer in the basic principle and allow far more complex machines to be developed with coherence.
![Page 22: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/22.jpg)
Adopting patterns
Persistence / db
Web ServicesUI / Styles Debugging
Invest time in first of everything. Build a team-wide definition and reuse the pattern to promote consistency and predictability.
Background tasks / Services
Device hardware
![Page 23: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/23.jpg)
Web service patterns
for consistent service calls across features. Retrofit + Singletons + Observers
Callback implementation for Retrofit API (Singleton)
Retrofit service interface
Observers
Activities, fragments or services
Data retrieved from service (possibly cached)
![Page 24: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/24.jpg)
External integrations patterns
BFF approach | Adaptive API
Adaptive API
Backend for frontend
Downstream systems
Adaptive proxy APIs
Consumer centric abstractions - BFFs
for optimal experience of services on devicesAdaptive APIs BFFsor
![Page 25: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/25.jpg)
for consistent execution of short async tasksAsync task wrapper + Observers Thread (Pools)or
Asynchronous tasks patterns
Obtain instance
Set data
Fire task
Check references
Call observers
Die or loop
Main thread
Spawned/Pooled thread
![Page 26: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/26.jpg)
Scaling commits with patterns
Feature one
Feature two
Master
Feature toggles explained
vs
Requires complex CI setup to constantly identify and merge branches and test state at any point of time.
Requires building a feature toggle functionality with dynamic toggles and tests to validate all feasible path.
Master
Feature onetoggled off
Feature twotoggled off Feature two
toggled on
Feature onetoggled on
![Page 27: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/27.jpg)
Debugging and logging patterns
Force upgrade Debug console Thread local logging
Crashlytics
Build consistent set of practices to debug issues using Debug console Crashlytics Thread logging
![Page 28: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/28.jpg)
Building reliable safety nets
![Page 29: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/29.jpg)
TDD - Achieving 80-85% coverage
1
2
3
4
5
6
With domain logic extraction
Dependency injection with constructors
Mock objects using mockito
Powermock + Mockito for static classes **
Countdown latches & listeners for threads
Presenter pattern to extract view logic
Building the most comprehensive set of tests at unit level
![Page 30: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/30.jpg)
Behavior tests with page object pattern
pattern comes in handy to modularize behavior tests and mimic flow relationshipsPage Object
Home screen
Product listing
Notifications
Orders
Execution context
![Page 31: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/31.jpg)
Asserting app behavior
Service Stubs
Real Service
APIs
can be used to address the coverage gap left by unit tests in AndroidEspresso
WireMock Mountebank Stubby
![Page 32: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/32.jpg)
Making behavior tests effective
Turn on ‘don't keep activities in
background’
Among all others, run the
smallest supported
emulator with software keyboard
Immediate app
distribution to alpha. Hallway testing
Multiple emulators in cloud or via
Docker images across CI agents
Keep behavior tests lean, quick and focused on happy path
![Page 33: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/33.jpg)
Testing the service contract
Actual Service/APIsContract
Tests
Service Stubs
Contract tests run typically few times a day. A stub replaces remote service for behavior tests to keep tests responsive, stable and predictable.
Every commit
Periodically
![Page 34: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/34.jpg)
Testing cross app flows
is a great starting place to orchestrate tests across apps
Uber engineering blog
Octopus by Uber
Consumer app
Warehouse app
Consumer on iOSOrchestrator
![Page 35: Scaling mobile dev teams](https://reader031.fdocuments.us/reader031/viewer/2022030207/58aa31e81a28abbb108b5b05/html5/thumbnails/35.jpg)
Thanks for pulling through!
priyaaank