Scaling Mobile Development

54
Scaling Mobile Development Stephanie Shupe @steph_shupe Software Engineer, Lookout October 10, 2014 #GHC14 2014

description

Lookout iOS developer Stephanie Shupe presented at the Grace Hopper Celebration of Women in Computing on October 10, 2014. She explains the processes that Lookout has used to successfully scale its mobile app.

Transcript of Scaling Mobile Development

Page 1: Scaling Mobile Development

2014

Scaling Mobile Development

Stephanie Shupe @steph_shupe

Software Engineer, Lookout

October 10, 2014

#GHC14

2014

Page 2: Scaling Mobile Development

2014

Development Team Evolution

Page 3: Scaling Mobile Development

2014

Development Team Evolution

Page 4: Scaling Mobile Development

2014

Development Team Evolution

Page 5: Scaling Mobile Development

2014

Development Team Evolution

Page 6: Scaling Mobile Development

2014

Development Team Evolution

Page 7: Scaling Mobile Development

2014

Outline

§  Lookout Case Study §  Tools to scale mobile development §  Key Recommendations

Page 8: Scaling Mobile Development

2014

Lookout iOS App Case Study

§  New Product ~2011

§  Team grew from 1 to 6 developers

§  Processes developed as team grew in size

Page 9: Scaling Mobile Development

2014

Lookout iOS App Versions

0

0.5

1

1.5

2

2.5

3

Page 10: Scaling Mobile Development

2014

App Versions v. Developers

0

1

2

3

4

5

6

7

Sep-11 Jun-12 Mar-13 Dec-13 Sep-14

iOS App Version Developers

Page 11: Scaling Mobile Development

2014

App Versions v. Developers

0

1

2

3

4

5

6

7

Sep-11 Jun-12 Mar-13 Dec-13 Sep-14

iOS App Version Developers

Page 12: Scaling Mobile Development

2014

Tools for any size team Process / Tool 1 dev 2-4 devs 5+ devs Version Control l l l Planning Tool m m l Unit Testing l l l Code Review Tool m l Integration Testing m l Automated UI Testing m m l Continuous Integration m l Localization Tool m Code Style Guideline l Release Process l

Page 13: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 14: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Localize* •  Write

Tests

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 15: Scaling Mobile Development

2014

Planning Tool

§  Lightweight −  Whiteboard −  To-Do Lists

§  Heavyweight −  Task Managing Software / Website

Page 16: Scaling Mobile Development

2014

Planning Tool

https://www.atlassian.com/software/jira

Page 17: Scaling Mobile Development

2014

Planning Tool

Page 18: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 19: Scaling Mobile Development

2014

Writing Code…

My project no longer

compiles?!

Page 20: Scaling Mobile Development

2014

Version Control

git-scm.com github.com

Page 21: Scaling Mobile Development

2014

Version Control

github.com

Page 22: Scaling Mobile Development

2014

Writing Code…

What’s the style?

Page 23: Scaling Mobile Development

2014

Code Style Guideline

Page 24: Scaling Mobile Development

2014

Writing Code…

Wir haben andere

Sprachen?

Page 25: Scaling Mobile Development

2014

Localization Management

§  Lightweight −  Email strings files back and forth

§  Heavyweight −  Localization Tool

Page 26: Scaling Mobile Development

2014

Localization Tool

Page 27: Scaling Mobile Development

2014

Localization Tool

§  Command line tool § Graphical interface for translators §  Cross-project translation database

Page 28: Scaling Mobile Development

2014

Writing Code…

Something is broken, but I don’t know why!

Page 29: Scaling Mobile Development

2014

Unit Testing describe(@"+isExpired:",  ^{          context(@"when  date  occurred  in  past",  ^{                  beforeEach(^{                          subject  =  [NSDate  dateWithTimeIntervalSinceNow:-­‐10];                  });                  it(@"should  return  expired",  ^{                          [[theValue([NSDate  isExpired:subject])  should]  beYes];                  });          });          context(@"when  date  occurs  in  future",  ^{                  beforeEach(^{                          subject  =  [NSDate  dateWithTimeIntervalSinceNow:1000000];                  });                  it(@"should  return  not  expired",  ^{                          [[theValue([NSDate  isExpired:subject])  should]  beNo];                  });          });  });  

Page 30: Scaling Mobile Development

2014

Integration Testing context(@"when  a  request  is  made  with  malformed  data",  ^{                  it(@"should  return  an  error",  ^AsyncBlock  {  

     Request  *request  =  [Request  new];    

     ...                                                                                                                  

     expect(error).toNot.beNil();                                                                                  

     expect(httpResponse.statusCode).to.equal(500);                                                                                                                          

     [client  enqueueRequest:request];                });  });  

Page 31: Scaling Mobile Development

2014

Automated User Interface Testing

§  Automates Manual Tests §  Test the same app you submit to the

marketplace

Page 32: Scaling Mobile Development

2014

Automated User Interface Testing

Run Tests

Generate Screen shots

Linguistic Verification

Quality Assurance

Page 33: Scaling Mobile Development

2014

Automated User Interface Testing

§ Open Source §  Interacts with UI Elements §  Tests can be written in Ruby, Java, ObjC

https://saucelabs.com/appium

Page 34: Scaling Mobile Development

2014

Page 35: Scaling Mobile Development

2014

Automated User Interface Testing

Language

English

Japanese

Russian

German

Spanish

French

Device Resolution (px)

480x320

960x640

1024x768

1136x640

1334x750

1920x1080

2048x1536

OS Version

iOS 6

iOS 7

iOS 8

Page 36: Scaling Mobile Development

2014

Automated User Interface Testing

6 languages x

7 supported device resolutions x

3 supported OS Versions

126 Combinations

Page 37: Scaling Mobile Development

2014

iOS App Crashes v. Automated Tests

Page 38: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 39: Scaling Mobile Development

2014

Verifying Code

§  Lightweight −  Manually compile project −  Manually run tests −  Minimal Continuous Integration

§  Heavyweight −  Continuous Integration

Page 40: Scaling Mobile Development

2014

Continuous Integration

http://jenkins-ci.org/

§  Build project −  pre- or post- code check in

§  Run test suites §  Report back status §  Code Review plugin support

Page 41: Scaling Mobile Development

2014

Continuous Integration

http://jenkins-ci.org/

Page 42: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 43: Scaling Mobile Development

2014

Reviewing Code…

How do I know that

this code is any good?

Page 44: Scaling Mobile Development

2014

Code Review Tool

https://code.google.com/p/gerrit/

Page 45: Scaling Mobile Development

2014

Code Review Tool

Push Code

•  git push gerrit HEAD:refs/publish/master

Gerrit •  Kick off Jenkins Build* •  Code review interface

Jenkins •  Task number? •  Project builds? •  Tests pass?

Page 46: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 47: Scaling Mobile Development

2014

Committing Code…

I’ve committed,

so I’m done.

Page 48: Scaling Mobile Development

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

Page 49: Scaling Mobile Development

2014

Releasing Code…

There isn’t a magical ‘Release’ button?

Page 50: Scaling Mobile Development

2014

Release Process

Page 51: Scaling Mobile Development

2014

Tools for any size team Process / Tool 1 dev 2-4 devs 5+ devs Version Control l l l Planning Tool m m l Unit Testing l l l Code Review Tool m l Integration Testing m l Automated UI Testing m m l Continuous Integration m l Localization Tool m Code Style Guideline l Release Process l

Page 52: Scaling Mobile Development

2014

Lookout’s Mobile Dev Toolbelt Process / Tool What Lookout Uses Version Control Git Planning Tool JIRA Unit Testing JUnit, Kiwi Code Review Tool Gerrit Integration Testing Robotium, Specta Automated User Interface Testing Appium Continuous Integration Jenkins Localization Tool Web Translate It (WTI) Code Style Guideline Google / Apple code style guidelines Release Process Wiki documents

Page 53: Scaling Mobile Development

2014

Additional tools to consider §  Code coverage §  Code guideline enforcement §  Automated releases §  Automated builder setup §  Crash tooling §  Error logging §  Agile Processes §  Performance testing §  Code Modularization §  Dependency Manager

Page 54: Scaling Mobile Development

2014

Got Feedback?

Rate and Review the session using the

GHC Mobile App To download visit www.gracehopper.org