scaling mobile dev teams

35
Patterns to scale mobile teams Using examples for Android Priyank Gupta Sahaj Software Solutions Pvt. Ltd.

Upload: priyank-gupta

Post on 20-Feb-2017

330 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Scaling mobile dev teams

Patterns to scale mobile teamsUsing examples for Android

Priyank GuptaSahaj Software Solutions Pvt. Ltd.

Page 2: Scaling mobile dev teams

Mobile is eating the world

Page 3: Scaling mobile dev teams

Evolution in last 5 years

Mobile Inclusive Mobile First Mobile Only

Page 4: Scaling mobile dev teams

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

Worldwide market-share

Smartphone market share - Report

Android

iOS

Others

83%14%03%

Page 6: Scaling mobile dev teams

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

Why mobile is different?

Page 8: Scaling mobile dev teams

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

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

What affects scalability

Page 11: Scaling mobile dev teams

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

Technology selection

Page 13: Scaling mobile dev teams

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

Organizing teams for scale

Page 15: Scaling mobile dev teams

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

.. 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

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

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

Scaleable dev practices

Page 20: Scaling mobile dev teams

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

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

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

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

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

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

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

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

Building reliable safety nets

Page 29: Scaling mobile dev teams

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

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

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

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

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

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

Thanks for pulling through!

priyaaank