Scaling Mobile Development

Post on 05-Dec-2014

558 views 0 download

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

2014

Scaling Mobile Development

Stephanie Shupe @steph_shupe

Software Engineer, Lookout

October 10, 2014

#GHC14

2014

2014

Development Team Evolution

2014

Development Team Evolution

2014

Development Team Evolution

2014

Development Team Evolution

2014

Development Team Evolution

2014

Outline

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

2014

Lookout iOS App Case Study

§  New Product ~2011

§  Team grew from 1 to 6 developers

§  Processes developed as team grew in size

2014

Lookout iOS App Versions

0

0.5

1

1.5

2

2.5

3

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

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

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

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Workflow

New Task

Write Code •  Localize* •  Write

Tests

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Planning Tool

§  Lightweight −  Whiteboard −  To-Do Lists

§  Heavyweight −  Task Managing Software / Website

2014

Planning Tool

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

2014

Planning Tool

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Writing Code…

My project no longer

compiles?!

2014

Version Control

git-scm.com github.com

2014

Version Control

github.com

2014

Writing Code…

What’s the style?

2014

Code Style Guideline

2014

Writing Code…

Wir haben andere

Sprachen?

2014

Localization Management

§  Lightweight −  Email strings files back and forth

§  Heavyweight −  Localization Tool

2014

Localization Tool

2014

Localization Tool

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

2014

Writing Code…

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

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];                  });          });  });  

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];                });  });  

2014

Automated User Interface Testing

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

marketplace

2014

Automated User Interface Testing

Run Tests

Generate Screen shots

Linguistic Verification

Quality Assurance

2014

Automated User Interface Testing

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

https://saucelabs.com/appium

2014

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

2014

Automated User Interface Testing

6 languages x

7 supported device resolutions x

3 supported OS Versions

126 Combinations

2014

iOS App Crashes v. Automated Tests

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Verifying Code

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

§  Heavyweight −  Continuous Integration

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

2014

Continuous Integration

http://jenkins-ci.org/

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Reviewing Code…

How do I know that

this code is any good?

2014

Code Review Tool

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

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?

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Committing Code…

I’ve committed,

so I’m done.

2014

Workflow

New Task

Write Code •  Write

Tests •  Localize*

Verify Code •  Build

Project •  Run Tests

Peer Review

Commit Code

Release to Market •  Quality

Assurance

2014

Releasing Code…

There isn’t a magical ‘Release’ button?

2014

Release Process

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

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

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

2014

Got Feedback?

Rate and Review the session using the

GHC Mobile App To download visit www.gracehopper.org