mobile development with a #devops mindset

133
MOBILE DEVELOPMENT with a devops mindset Patrick Debois @patrickdebois

Upload: patrick-debois

Post on 21-Apr-2017

5.852 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Mobile Development with a #devops mindset

MOBILE DEVELOPMENT

with a devops mindset

Patrick Debois@patrickdebois

Page 2: Mobile Development with a #devops mindset

1 YEAR IN MOBILE APPS

with a devops background

Patrick Debois@patrickdebois

Page 4: Mobile Development with a #devops mindset

DEVOPS

DEV OPS

Page 5: Mobile Development with a #devops mindset

[email protected]@company.com

e-mail

+49 5847 56 90+49 8739 03 30

Call Us

PAUL PEISNERPAUL PEISNER

Page 6: Mobile Development with a #devops mindset

https://twitter.com/dysinger

TIM DYSINGERTIM DYSINGER

Page 7: Mobile Development with a #devops mindset

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

TIM DYSINGERDAMON EDWARDS

Page 8: Mobile Development with a #devops mindset

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

An emerging set of practices

MATHIAS MARSCHALL

Page 9: Mobile Development with a #devops mindset

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

GENE KIM

Page 10: Mobile Development with a #devops mindset

OPSDEV

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

4 areas of improvement

Page 11: Mobile Development with a #devops mindset

OPSDEV

Area 1: Extend delivery to production

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

Page 12: Mobile Development with a #devops mindset

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/

Page 13: Mobile Development with a #devops mindset

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/

Page 14: Mobile Development with a #devops mindset

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/

Page 15: Mobile Development with a #devops mindset

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Page 16: Mobile Development with a #devops mindset

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Find your bottleneck(s) = friction

Page 17: Mobile Development with a #devops mindset

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Technical Debt

Social Debt

Page 18: Mobile Development with a #devops mindset

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

Page 19: Mobile Development with a #devops mindset

Feedback from Test(User)s

CONTINOUS INTEGRATION

Page 20: Mobile Development with a #devops mindset

OPSDEV

Area 1: Extend delivery to production

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

Page 21: Mobile Development with a #devops mindset

VERSION CONTROLno more old.bak directories

Page 22: Mobile Development with a #devops mindset

COMMIT LOGthe coding pulse

Page 23: Mobile Development with a #devops mindset

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/

Page 24: Mobile Development with a #devops mindset

ARTIFACTSbuild only once

Page 25: Mobile Development with a #devops mindset

BRANCHESgated releases

Page 26: Mobile Development with a #devops mindset

BUILD CONFIGSxcode

Page 27: Mobile Development with a #devops mindset

BUILD CONFIGSandroid

Page 28: Mobile Development with a #devops mindset

BUILDVERSIONS VS GIT COMMITS1 COMMIT - N BUILDS

Page 29: Mobile Development with a #devops mindset

DIFFERENT ENVIRONMENTSvisual cues

Page 30: Mobile Development with a #devops mindset

controlled environment

TO THE TESTERS

Page 31: Mobile Development with a #devops mindset

DISTRIBUTE BUILDScrashlytics , hockeyapp, testfairy , …

Page 32: Mobile Development with a #devops mindset

TEST APPSkeep testers up to date

Page 33: Mobile Development with a #devops mindset

QR CODE URLSscan for URLs

Page 34: Mobile Development with a #devops mindset

VERSION TRACKINGbuildnumbers

Page 35: Mobile Development with a #devops mindset

TEST FEEDBACKmake giving feedback easy & consistent

https://github.com/DZamataev/TestFlightFeedback

Page 36: Mobile Development with a #devops mindset

RECORD SESSIONSSeeing is believing

Page 37: Mobile Development with a #devops mindset

SCENARIO TESTINGcross technology testing

http://appium.io/

Page 38: Mobile Development with a #devops mindset

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>

Page 39: Mobile Development with a #devops mindset

BEHAVIORtesting / selenium style

Page 40: Mobile Development with a #devops mindset

TEAM TALKinform everybody involved

Page 41: Mobile Development with a #devops mindset

TASKBOARDTODO, DOING, DONE

Page 42: Mobile Development with a #devops mindset

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

YOUR TOOLBOX

Page 43: Mobile Development with a #devops mindset

READABLE BUILDScompact output with xctool

https://github.com/facebook/xctool

Page 44: Mobile Development with a #devops mindset

ADHOC BUILDSshenzen

https://github.com/nomad/shenzhen

Page 45: Mobile Development with a #devops mindset

DEVICE UDIDmobile provisioning profiles

http://whatsmyudid.com/

Page 46: Mobile Development with a #devops mindset

KEY MANAGEMENTcupertino

https://github.com/nomad/Cupertino

Page 47: Mobile Development with a #devops mindset

FACEBOOK TEST APPSpoint to staging

Page 48: Mobile Development with a #devops mindset

FACEBOOK TEST USERStest users

Page 49: Mobile Development with a #devops mindset

FACEBOOK TESTERwhat is my Facebook ID

http://findmyfacebookid.com/

Page 50: Mobile Development with a #devops mindset

APPS IN BROWSERsimulator builds

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

Page 51: Mobile Development with a #devops mindset

SIMULATORSyou just can’t get enough (speed)

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

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

Page 52: Mobile Development with a #devops mindset

ACCELERATEuse the hardware Luke

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

Page 53: Mobile Development with a #devops mindset

DEVICE IN A (VIRTUAL) BOXno test excuses

Page 54: Mobile Development with a #devops mindset

CLI - ADByour friend

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

Page 55: Mobile Development with a #devops mindset

CLI IOS-DEPLOYlook no UI mama

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

Page 56: Mobile Development with a #devops mindset

ALTERNATE LOGINa phone is personal

https://get.fabric.io/digits

Page 57: Mobile Development with a #devops mindset

CROSS DEVICE STORAGEmultiple devices for 1 user

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

Page 58: Mobile Development with a #devops mindset

API DOCUMENTATIONinterfacing backend & app

Page 59: Mobile Development with a #devops mindset

TO THE APP STORESQuisque fringilla est eget arcu tindidunt

TO THE APP STORES

Page 60: Mobile Development with a #devops mindset

RE-SIGNbuild only once

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

Page 61: Mobile Development with a #devops mindset

ASSETSautomate all the things

https://github.com/SzymonFortuna/xcassettool

Page 62: Mobile Development with a #devops mindset

SCREENSHOTSautomate all the things

Page 63: Mobile Development with a #devops mindset

METADATAautomate all the things

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

http://bou.io/UploadingScreenshotsWithITMSTransporter.html

Page 64: Mobile Development with a #devops mindset

IOS AUTOMATIONnot so official apple API

https://fastlane.tools/

Page 65: Mobile Development with a #devops mindset

OPSDEV

Area 1: Extend delivery to production

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

Page 66: Mobile Development with a #devops mindset

NOW WE WAITWill Apple approve on time ?

NOW WE WAIT

Page 67: Mobile Development with a #devops mindset

REVIEW TIMES

Page 68: Mobile Development with a #devops mindset

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

Page 69: Mobile Development with a #devops mindset

PRE-RELEASEuse date in future or vouchers

Page 70: Mobile Development with a #devops mindset

CAMPAIGNpromote your app

Page 71: Mobile Development with a #devops mindset

LAUNCH3 - 2 - 1

Page 72: Mobile Development with a #devops mindset

WATCHDOGwhat are they doing?

WATCHDOG

Page 73: Mobile Development with a #devops mindset

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/

Page 74: Mobile Development with a #devops mindset

THEY ARE COMINGhow many users are using the app

Page 75: Mobile Development with a #devops mindset

ARE THEY COMING BACKhow engaging is the app

Page 76: Mobile Development with a #devops mindset

FLOWsee what features are used

Page 77: Mobile Development with a #devops mindset

ANALYTICSyou can never send enough

https://segment.com/integrations

Page 78: Mobile Development with a #devops mindset

RATINGSuser feedback android

Page 79: Mobile Development with a #devops mindset

PLAYSTOREautomate all the things

Page 80: Mobile Development with a #devops mindset

APPSTOREuser feedback iOS

Page 81: Mobile Development with a #devops mindset

APPSTOREautomated feedback

https://launchkit.io/reviews

Page 82: Mobile Development with a #devops mindset

TWITTER FEEDBACKwatch social media

Page 83: Mobile Development with a #devops mindset

CRASHESwhat’s happening

Page 84: Mobile Development with a #devops mindset

CRASH REPORTSlink to user ID

Page 85: Mobile Development with a #devops mindset

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

Page 86: Mobile Development with a #devops mindset

REAL DEVICESapptwack

Page 87: Mobile Development with a #devops mindset

REAL DEVICESdoes it even start?

Page 88: Mobile Development with a #devops mindset

NETWORK ERRORSQuisque fringilla est eget arcu tindidunt

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

Page 89: Mobile Development with a #devops mindset

MOBILE MONITORINGit’s just another device

Page 90: Mobile Development with a #devops mindset

LOG CONSOLIDATIONios, android , web , backend, …

Page 91: Mobile Development with a #devops mindset

ERROR LOGSfilter until errors are errors

Page 92: Mobile Development with a #devops mindset

LOG DEBUGtagging log lines

Page 93: Mobile Development with a #devops mindset

METRICS MIDDLEWAREeasy instrumentation

Page 94: Mobile Development with a #devops mindset

API RESPONSES95 percentile

Page 95: Mobile Development with a #devops mindset

HTTP # request , performance timings

Page 96: Mobile Development with a #devops mindset

MACHINE METRICSwhere the rubber hits the road

Page 97: Mobile Development with a #devops mindset

INFRASTRUCTUREoverview

Page 98: Mobile Development with a #devops mindset

APP METRICSstatsd is awesome

Page 99: Mobile Development with a #devops mindset

BUSINESS METRICScustomer focused

Page 100: Mobile Development with a #devops mindset

EVENTS OVERLAYwhat happened in time

Page 101: Mobile Development with a #devops mindset

MOBILE OPERATIONSin your pocket

Page 102: Mobile Development with a #devops mindset

TEAM CHANNEL ++communicate all the things

Page 103: Mobile Development with a #devops mindset

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/

Page 104: Mobile Development with a #devops mindset

FIXINGIt does what ?! in production !!?

IT’S BROKE LET’S FIX IT

Page 105: Mobile Development with a #devops mindset

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/

Page 106: Mobile Development with a #devops mindset

NOTIFICATIONSinform the users

https://appbot.co/appbotx/getstarted

Page 107: Mobile Development with a #devops mindset

CAPTURE FEEDBACKbefore they tell it in the App Store

Page 108: Mobile Development with a #devops mindset

SUPPORT FAQdon’t repeat yourself

Page 109: Mobile Development with a #devops mindset

REVIEW PROMPTShappy customer reviews

Page 110: Mobile Development with a #devops mindset

CONVERSATIONbecause email sucks

Page 111: Mobile Development with a #devops mindset

GROUND CONTROLchange settings with new submit to App Store

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

Page 112: Mobile Development with a #devops mindset

UI CONTROLcontrol all text & images from the backend

Page 113: Mobile Development with a #devops mindset

LIVE PATCHswizzling

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

Page 114: Mobile Development with a #devops mindset

KEEP GOINGkeep improving

Page 115: Mobile Development with a #devops mindset

NEW VERSIONSbecause they need to know

Page 116: Mobile Development with a #devops mindset

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/

Page 117: Mobile Development with a #devops mindset

BUZZkeep the users engaged

BUZZ

Page 118: Mobile Development with a #devops mindset

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/

Page 119: Mobile Development with a #devops mindset

USER ACTIONShow do they use the app

http://heapanalytics.com

Page 120: Mobile Development with a #devops mindset

RECORD HEATMAPSwhere do they click

http://appsee.com

Page 121: Mobile Development with a #devops mindset

A/B TESTINGscience not gut feeling

http://apptimize.com/product

Page 122: Mobile Development with a #devops mindset

RETENTIONwho returns?

Page 123: Mobile Development with a #devops mindset

RANKINGkeep track

Page 124: Mobile Development with a #devops mindset

PUSH ‘NUDGES’Quisque fringilla est eget arcu tindidunt

Page 125: Mobile Development with a #devops mindset

ALL CHANNELSgo where your users are

https://www.appboy.com/products

Page 126: Mobile Development with a #devops mindset

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/

Page 127: Mobile Development with a #devops mindset

DEVOPSit’s all about the fast feedback

Page 128: Mobile Development with a #devops mindset

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Page 129: Mobile Development with a #devops mindset

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Find your bottleneck(s) = friction

Page 130: Mobile Development with a #devops mindset

Production

Components (architecture)People (process)

Dev, Test, QA

EndUserBusiness

Technical Debt

Social Debt

Page 131: Mobile Development with a #devops mindset

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

Page 132: Mobile Development with a #devops mindset

ALL TOGETHEReveryone is involved

ALL TOGETHER NOW

Page 133: Mobile Development with a #devops mindset

[email protected]

@patrickdebois

Come Help US