Slide 1

Slide 1 text

.PCJMF"QQ%FWFMPQNFOU
 GPS1FSM.POHFST OJOKJOLVOYHGY :"1$"TJB 5PLZP

Slide 2

Slide 2 text

w $MJFOU'SPOUFOE&OHJOFFSJOHOJOKJOLVO w $MJFOU#BDLFOE&OHJOFFSJOHHGY w :"1$GN5BMLTIPX "HFOEB

Slide 3

Slide 3 text

$MJFOU'SPOFOE&OHJOFFSJOH 'BCMJDJOD
 OJOKJOLVO

Slide 4

Slide 4 text

OJOKJOLVO w J04"OESPJEFOHJOFFS w IUUQHJUIVCDPNOJOKJOLVO w /+,8FC7JFX1SPHSFTTˑ w /+,4DSPMM'VMM4DSFFOˑ

Slide 5

Slide 5 text

OJOKJOLVO w 'SPOUFOEFOHJOFFS w *OUFSFTUFEJO w #FUUFSVTFSFYQFSJFODF w -FTTDPEF IJHIQFSGPSNBODF

Slide 6

Slide 6 text

'BCMJDJOD w 'MFBNBSLFUBQQl'SJMz w 8PNFOPOMZ w )VOESFETNJMMJPOVTFST w .PCJMF"QQpSTU w ZFBSTPME4UBSUVQ

Slide 7

Slide 7 text

"HFOEB w 6*%FTJHOJOH w 'SPOUFOE&OHJOFFSJOH w 0QFO4PVSJOH

Slide 8

Slide 8 text

6*%FTJHOJOH

Slide 9

Slide 9 text

%FTJHOFSBOE&OHJOFFS w 8FC"QQ w )5.-$44P⒎FSFEEJWJTJPOPGXPSL w /BUJWF"QQ w *NQMFNFOUWJFXTXJUI0CK$+BWB w &OHJOFFSTNVTUJNQMFNFOUNPTUPGUIF6*

Slide 10

Slide 10 text

8IZFOHJOFFSTTIPVMEEFTJHO6* w &OHJOFFSTIBWFLOPXMFEHFDPEFBOE4%, w $PTUJOHBOEBWPJESPMMCBDL w &OHJOFFSTTIPVMEKPJO6*EFTJHOQSPDFTT

Slide 11

Slide 11 text

1BQFS1SPUPUZQJOH w %SBXNPDLXJUIQBQFS w &BTZGPSFOHJOFFST w %PO`UOFFEHSBQIJDBMUFDIOJRVF w %SBX6*JEFBT w 6*1BUUFSO4%,UBLFO w $PPMGFBUVSFQPQVMBSBQQVTFE w *OOPWBUJWFJEFB

Slide 12

Slide 12 text

1BQFSQSPUPUZQJOHDBNQ w ,JDLP⒎OFXSFOFXBQQT w XJUIBEJSFDUPS EFTJHOFS FOHJOFFS w &WFSZPOFESBXQSPUPUZQFT w .BTIVQFBDIQSPUPUZQF w 0VUQVUXJUIUIF101BQQ

Slide 13

Slide 13 text

6TFS5FTUJOH w 5FTUQSPUPUZQFTXJUISFBMVTFST w 0CTFSWFIPXBVTFSVTFTPVSBQQ w *OUFSWJFXXIBUQPJOUJTIBSEUPVOEFSTUBOE

Slide 14

Slide 14 text

'SPOUFOE&OHJOFFSJOH

Slide 15

Slide 15 text

4ZODISPOJTFTUBUFT w 4IBSFTUBUFTCFUXFFO7JFXT w 4UBUFTBSFVQEBUFEBTZODISPOPVTMZ w $BMMXFC"1* HPUSFTQPOTF VQEBUFTUBUF
 ʜBOECSPBEDBTU

Slide 16

Slide 16 text

l-JLFzJO'SJM"QQ

Slide 17

Slide 17 text

l-JLFzJO'SJM"QQ 1045MJLF"1* *UFNNPEFMMJLF )JMJHIUὑJDPO 6QEBUFMJLFDPVOUT /PUJGZMJLFVQEBUF 3FESBXBOJUFNDFMM 1BTTBOJUFNNPEFM 4IPXBOJUFNWJFX

Slide 18

Slide 18 text

l-JLFzJO'SJM"QQ

Slide 19

Slide 19 text

)PXUPTZODTUBUF w (MPCBMOPUJpDBUJPO w 4UBUFNBOBHFSTJOHMFUPO w $IBJOFEEFMFHBUFPSDBMMCBDL w 0CTFSWFS

Slide 20

Slide 20 text

.77. .PEFM7JFX7JFX.PEFM w 7JFX.PEFM w IBTTUBUFBOEMPHJDSFMBUFEUPWJFX w 1PQVMBSJO+4 "OHVMBS 7VF ,OPDLPVUʜ w 3FBDUJWF$PDPB "OESPJE#JOEJOH w "HHSFHBUFTUBUFTUPWJFXNPEFM

Slide 21

Slide 21 text

l-JLFzXJUI.77. 7JFX.PEFM
 -JLF %FUFDU7JFX.PEFMVQEBUF 3FESBXDFMMBVUPNBUJDBMMZ 1BTTl*UFNz 7JFX.PEFM

Slide 22

Slide 22 text

3FBDUJWF1SPHSBNNJOH w 1SPHSBNNJOHXJUIBTZODISPOPVTEBUBTUSFBN w 3FBDUJWF$PDPB 3Y+BWB w 4VJUBCMFGPSXFCTFSWJDFDMJFOUBQQT*UIJOL w #VUʜIBSEUPMFBSO w 5IFJOUSPEVDUJPOUP3FBDUJWF1SPHSBNNJOHZPVWFCFFO NJTTJOH w ʲ຋༁ʳ͋ͳ͕ͨٻΊ͍ͯͨϦΞΫςΟϒϓϩάϥϛϯάೖ໳ IUUQTHJTUHJUIVCDPNTUBMU[FFCDBCDG IUUQOJOKJOLVOIBUFOBCMPHDPNFOUSZJOUSPSYKB

Slide 23

Slide 23 text

0QFO4PVSDJOH

Slide 24

Slide 24 text

044JO.PCJMF"QQT w 044JTBMTPIPUJONPCJMFBQQTSFDFOUMZ w #VUTUJMMGSPOUJFS w 5PPMDIBJO w $PDPB1PET (SBEMF XJUI.BWFO$FOUSBM

Slide 25

Slide 25 text

0446* w 5IFSFBSFNBOZ0446* FMFNFOUT w -PPLJOHGPS044JGDBO`U JNQMFNFOUXJUI4%,TUBOEBSE w #VUʜ6*044BVUIPSJTIBSE w /FFETDBUDIVQ04VQEBUFT FWFSZZFBS

Slide 26

Slide 26 text

4UPMFOGSPNPUIFSMBOHVBHFT w .BHJDBM3FDPSE 6OEFSTDPSFN #MPDLT,JU w "DUJWF"OESPJE "OESPJE2VFSZ 
 "OESPJE#PPUTUSBQ

Slide 27

Slide 27 text

$POUSJCVUJOH w .BOZNPEVMFTIPTUFEPO(JU)VC w 04VQEBUFJTDIBODFUPDPOUSJCVUF w 3FQPSUQSPCMFNTPO04BOEIBSEXBSF

Slide 28

Slide 28 text

1VCMJTI:PVS.PEVMF w 6TFBOJNBUFE(*'JO3&"%.& w "UUBDI%FNP"QQ w 3FMFBTFEFNPUP(PPHMF1MBZ "OESPJE

Slide 29

Slide 29 text

-FBSOGSPN1FSM w 8IBU$1"/BVUIPSTIBWFCFFOEPJOH w $POUSJCVUFUP044CFZPOEDPNQBOJFTBOE JOEJWJEVBMT

Slide 30

Slide 30 text

8SBQVQ w +PJO6*EFTJHOQSPDFTT w .77.BOE3FBDUJWF1SPHSBNNJOHBSF
 UIFGVUVSF w 044DVMUVSFJTBDUJWFBMTPJONPCJMFBQQT

Slide 31

Slide 31 text

8FBSFIJSJOH w J04"OESPJEFOHJOFFST w +PJOPVS69EFTJHOQSPDFTT w 8FCBQQMJDBUJPOFOHJOFFST w 3BJMT &MBTUJDTFBSDI 4FBSDIl'BCMJDz

Slide 32

Slide 32 text

Client-Backend Engineering Fuji, Goro Cookpad Inc. Mobile Application Development for Perl Mongers YAPC::Asia 2014, Tokyo, 2014/8/30

Slide 33

Slide 33 text

@__gfx__ • A client-backend engineer • Working on libraries, environments, and CI on both Android and iOS apps • As a CPAN author: Data::Validator, Text::Xslate • Loving Android Studio and AppCode

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

The number of monthly users 0M 3.6M 7.2M 10.8M 14.4M 18M Jul Oct Jan Apr Jul Oct Jan Apr PC Smartpohone browsers Smartpohone apps Feature phones Others 44.04 million ʢAs of April 2014ʣ

Slide 37

Slide 37 text

The number of installations iOS 1,010m Android 990m ʢAs of April 2014ʣ

Slide 38

Slide 38 text

How Mobile Application Development Runs

Slide 39

Slide 39 text

A long time ago in a galaxy far, far away…

Slide 40

Slide 40 text

Lots of problems • Communication cost: • service teams <~> mobile app team • Different release cycle: • web: 10/day • app: 2/month • The will of installations • Each user sees a random version of apps • Continuous integration is really difficult

Slide 41

Slide 41 text

How our mobile teams were • Cookpad started as a web service • Cookpad mobile apps had followed the web • Service teams were tend to order the new features to the mobile app team (web-first)

Slide 42

Slide 42 text

Lots of good problems ;)

Slide 43

Slide 43 text

Communication Cost

Slide 44

Slide 44 text

Before “Mobile First” Era

Slide 45

Slide 45 text

1SFNJVN4FSWJDF 5FBN 0UIFS 5FBNT )BQQZ"VUIPS 5FBN 'FBUVSF 3FRVFTU 'FBUVSF Entrusted Development 'FBUVSF 3FRVFTU 'FBUVSF 3FRVFTU .PCJMF'JSTU 5FBN

Slide 46

Slide 46 text

After “Mobile First” Era

Slide 47

Slide 47 text

1SFNJVN4FSWJDF 5FBN 0UIFS 5FBNT )BQQZ"VUIPS 5FBN .PCJMF'JSTU 5FBN )FMQ There are 20+ engineers on mobile applications 'FBUVSF 'FBUVSF 'FBUVSF 'FBUVSF 3FMFBTF .BOBHFNFOU Service Oriented Development

Slide 48

Slide 48 text

Our Adventure Has Just Begun

Slide 49

Slide 49 text

Release Cycle

Slide 50

Slide 50 text

Web and Mobile Apps • Cookpad has a successful workflow: continuous delivery • Mobile app development should be successful with the same way!

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

Defects Rise No rollbacks

Slide 53

Slide 53 text

Differences in Release Cycle • Web: • continuous delivery • easily rollbacks code on problems • App: • frequent release makes users irritated • no rollbacks; all the versions remain in the world

Slide 54

Slide 54 text

Different release cycle should make different workflow

Slide 55

Slide 55 text

Branching Model • Web: github-flow • Keeps the master branch deployable • App: git-flow • Makes a release branch on code freeze

Slide 56

Slide 56 text

Pull-Request Development • All the changes are merged via pull requests • Do not commit changes to master directly • All the pull requests should be reviewed

Slide 57

Slide 57 text

$PEF 'SFF[F NBTUFS GFBUVSF 3$ JNQPSUBOU CVHpY OFX GFBUVSF TVCNJUUFE 2" 4UBSU .PCJMF"QQT #SBODIJOH.PEFM

Slide 58

Slide 58 text

The Principle: KISS ! but not to be too simple

Slide 59

Slide 59 text

Continuous Integration w #VJMEJU w -JOUJU w 5FTUJU w %FQMPZCFUBT

Slide 60

Slide 60 text

%FQMPZ(BUF 5FTU'MJHIU -PDBM.BDIJOF QVTI LJDL QVCMJTI CVJME Development Workflow

Slide 61

Slide 61 text

Release Engineering Tasks • Kicks the Jenkins job for a release package • Builds it, lints it, tests it, makes a tag • Uploads the package to Google Play / AppStore • Writes recent changes • Publishes it (in iOS: after Apple reviewing)

Slide 62

Slide 62 text

Too Many Tasks in Releng

Slide 63

Slide 63 text

Release Engineering as Code • External repositories that build app projects • Android Publisher API (Google Play Developer API) • No API on AppStore / iTunes Connect yet • Monitoring - not yet, but will try

Slide 64

Slide 64 text

That’s all.

Slide 65

Slide 65 text

We are hiring ;) • There are a lot of good problems in Cookpad!

Slide 66

Slide 66 text

Free Talks: YAPC.fm • How to test mobile apps? • How about IDE / programming languages? • What to learn from the Perl community?