Mobile Development with a #devops mindset

Preview:

Citation preview

MOBILE DEVELOPMENT

with a devops mindset

Patrick Debois@patrickdebois

1 YEAR IN MOBILE APPS

with a devops background

Patrick Debois@patrickdebois

info@devopsdays.orgwww.devopsdays.org

@devopsdays

patrick@smalltownheroes.bewww.smalltownheroes.be

@townheroes

patrick@jedi.bejedi.be/blog

@patrickdebois

ABOUT ME

DEVOPS

DEV OPS

contact@company.comcontact2@company.com

e-mail

+49 5847 56 90+49 8739 03 30

Call Us

PAUL PEISNERPAUL PEISNER

https://twitter.com/dysinger

TIM DYSINGERTIM DYSINGER

http://dev2ops.org/2012/09/use-devops-to-turn-it-into-a-strategic-weapon/

TIM DYSINGERDAMON EDWARDS

https://cacoo.com/diagrams/uapwdcN6SDfwClDY-351A0.png

An emerging set of practices

MATHIAS MARSCHALL

http://www.slideshare.net/dev2ops/you-cant-change-culture-but-you-can-change-behavior-and-behavior-becomes-culture

GENE KIM

OPSDEV

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

4 areas of improvement

OPSDEV

Area 1: Extend delivery to production

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

OPSDEV

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

OPSDEV

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

Area 3: Embed Projectknowledge into Operations

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

OPSDEV

Area 4: Embed Operations knowledge into Project

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

Area 3: Embed Projectknowledge into Operations

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Find your bottleneck(s) = friction

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Technical Debt

Social Debt

Remove friction

http://philippe.kruchten.com/2013/11/24/friction/

“Friction: the resistance that one surface or object encounters when moving over another.” [Merriam-Webster dict.]

Feedback from Test(User)s

CONTINOUS INTEGRATION

OPSDEV

Area 1: Extend delivery to production

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

VERSION CONTROLno more old.bak directories

COMMIT LOGthe coding pulse

CI BUILD SYSTEMavoid it works on my machine

https://circleci.com/

https://travis-ci.com/http://www.objc.io/issue-6/travis-ci.html

https://hosted-ci.com/

ARTIFACTSbuild only once

BRANCHESgated releases

BUILD CONFIGSxcode

BUILD CONFIGSandroid

BUILDVERSIONS VS GIT COMMITS1 COMMIT - N BUILDS

DIFFERENT ENVIRONMENTSvisual cues

controlled environment

TO THE TESTERS

DISTRIBUTE BUILDScrashlytics , hockeyapp, testfairy , …

TEST APPSkeep testers up to date

QR CODE URLSscan for URLs

VERSION TRACKINGbuildnumbers

TEST FEEDBACKmake giving feedback easy & consistent

https://github.com/DZamataev/TestFlightFeedback

RECORD SESSIONSSeeing is believing

SCENARIO TESTINGcross technology testing

http://appium.io/

ACCESIBILITY LABELSunique ids for targeting UI elements

#pragma mark - Accessibility

- (void)addAccessibility:(UIView*)view label:(NSString*)label { view.accessibilityLabel = label; [view setIsAccessibilityElement:YES]; }

- (void)addAccessibility:(UIView*)view label:(NSString*)label value:(NSString*)value { // Set accessibility programmatically // because adding it to the UserInterface Storyboard doesn't allow you to set the value for Appium [self addAccessibility:view label:label]; view.accessibilityValue = value; }

<com.blokken.views.HomeTVGameButton android:id="@+id/button_tvspel" android:layout_margin="1dp" android:contentDescription = "TV SPEL" android:layout_width="@dimen/button_home_size_big" android:layout_height="@dimen/button_home_size_big" android:layout_column="2" /> </TableRow>

BEHAVIORtesting / selenium style

TEAM TALKinform everybody involved

TASKBOARDTODO, DOING, DONE

YOUR TOOLBOXthere’s more than one way to skin a cat

YOUR TOOLBOX

READABLE BUILDScompact output with xctool

https://github.com/facebook/xctool

ADHOC BUILDSshenzen

https://github.com/nomad/shenzhen

DEVICE UDIDmobile provisioning profiles

http://whatsmyudid.com/

KEY MANAGEMENTcupertino

https://github.com/nomad/Cupertino

FACEBOOK TEST APPSpoint to staging

FACEBOOK TEST USERStest users

FACEBOOK TESTERwhat is my Facebook ID

http://findmyfacebookid.com/

APPS IN BROWSERsimulator builds

https://appetize.io/https://app.io/

SIMULATORSyou just can’t get enough (speed)

http://www.andyroid.net/#producthttps://www.manymo.com/emulators

https://www.genymotion.com/#!/

ACCELERATEuse the hardware Luke

https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager

DEVICE IN A (VIRTUAL) BOXno test excuses

CLI - ADByour friend

http://developer.android.com/tools/help/adb.html

CLI IOS-DEPLOYlook no UI mama

https://github.com/phonegap/ios-deploy

ALTERNATE LOGINa phone is personal

https://get.fabric.io/digits

CROSS DEVICE STORAGEmultiple devices for 1 user

http://aws.amazon.com/mobile/

API DOCUMENTATIONinterfacing backend & app

TO THE APP STORESQuisque fringilla est eget arcu tindidunt

TO THE APP STORES

RE-SIGNbuild only once

https://gist.github.com/mediabounds/1367348

ASSETSautomate all the things

https://github.com/SzymonFortuna/xcassettool

SCREENSHOTSautomate all the things

METADATAautomate all the things

https://github.com/realmacsoftware/RMConnecter/

http://bou.io/UploadingScreenshotsWithITMSTransporter.html

IOS AUTOMATIONnot so official apple API

https://fastlane.tools/

OPSDEV

Area 1: Extend delivery to production

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

NOW WE WAITWill Apple approve on time ?

NOW WE WAIT

REVIEW TIMES

EXPEDITEuse with care https://developer.apple.com/contact/app-store/?topic=expedite

PRE-RELEASEuse date in future or vouchers

CAMPAIGNpromote your app

LAUNCH3 - 2 - 1

WATCHDOGwhat are they doing?

WATCHDOG

OPSDEV

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

THEY ARE COMINGhow many users are using the app

ARE THEY COMING BACKhow engaging is the app

FLOWsee what features are used

ANALYTICSyou can never send enough

https://segment.com/integrations

RATINGSuser feedback android

PLAYSTOREautomate all the things

APPSTOREuser feedback iOS

APPSTOREautomated feedback

https://launchkit.io/reviews

TWITTER FEEDBACKwatch social media

CRASHESwhat’s happening

CRASH REPORTSlink to user ID

CRASHESyou didn’t see because the app didn’t start

REAL DEVICESapptwack

REAL DEVICESdoes it even start?

NETWORK ERRORSQuisque fringilla est eget arcu tindidunt

http://newrelic.com/mobile-monitoring/features

MOBILE MONITORINGit’s just another device

LOG CONSOLIDATIONios, android , web , backend, …

ERROR LOGSfilter until errors are errors

LOG DEBUGtagging log lines

METRICS MIDDLEWAREeasy instrumentation

API RESPONSES95 percentile

HTTP # request , performance timings

MACHINE METRICSwhere the rubber hits the road

INFRASTRUCTUREoverview

APP METRICSstatsd is awesome

BUSINESS METRICScustomer focused

EVENTS OVERLAYwhat happened in time

MOBILE OPERATIONSin your pocket

TEAM CHANNEL ++communicate all the things

OPSDEV

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

FIXINGIt does what ?! in production !!?

IT’S BROKE LET’S FIX IT

OPSDEV

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

Area 3: Embed Projectknowledge into Operations

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

NOTIFICATIONSinform the users

https://appbot.co/appbotx/getstarted

CAPTURE FEEDBACKbefore they tell it in the App Store

SUPPORT FAQdon’t repeat yourself

REVIEW PROMPTShappy customer reviews

CONVERSATIONbecause email sucks

GROUND CONTROLchange settings with new submit to App Store

https://github.com/gangverk/Android-RemoteConfighttps://github.com/mattt/GroundControl

UI CONTROLcontrol all text & images from the backend

LIVE PATCHswizzling

https://www.rollout.io/http://nshipster.com/method-swizzling/

KEEP GOINGkeep improving

NEW VERSIONSbecause they need to know

OPSDEV

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

Area 3: Embed Projectknowledge into Operations

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

BUZZkeep the users engaged

BUZZ

OPSDEV

Area 4: Embed Operations knowledge into Project

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

Area 3: Embed Projectknowledge into Operations

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

USER ACTIONShow do they use the app

http://heapanalytics.com

RECORD HEATMAPSwhere do they click

http://appsee.com

A/B TESTINGscience not gut feeling

http://apptimize.com/product

RETENTIONwho returns?

RANKINGkeep track

PUSH ‘NUDGES’Quisque fringilla est eget arcu tindidunt

ALL CHANNELSgo where your users are

https://www.appboy.com/products

OPSDEV

Area 4: Embed Operations knowledge into Business

Area 2: Extend operations feedback to project

Area 1: Extend delivery to production

Area 3: Embed Projectknowledge into Operations

http://www.jedi.be/blog/2012/05/12/codifying-devops-area-practices/

DEVOPSit’s all about the fast feedback

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Find your bottleneck(s) = friction

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Technical Debt

Social Debt

Remove friction

http://philippe.kruchten.com/2013/11/24/friction/

“Friction: the resistance that one surface or object encounters when moving over another.” [Merriam-Webster dict.]

ALL TOGETHEReveryone is involved

ALL TOGETHER NOW

patrick@smalltownheroes.bewww.smalltownheroes.be

@patrickdebois

Come Help US

Recommended