$30 off During Our Annual Pro Sale. View Details »

Retours sur l’aventure Capitaine Train

Retours sur l’aventure Capitaine Train

Conférence présentée avec Mathieu Calba[1] et Jérémie Martinez[2].

L’aventure Capitaine Train débute en 2010. L’objectif est simple et clair : offrir une alternative crédible à la vente de billet de train en Europe. Aujourd’hui, Capitaine Train, rachetée en 2016 et renommée entre temps « Trainline », vend plusieurs millions de billets chaque année.

Construire l’application Android a requis évidemment beaucoup de travail et de rigueur. Durant cette présentation nous détaillerons chacun des aspects qui ont permis à l’app Android Capitaine Train d’apporter régulièrement de nouvelles fonctionnalités, de respecter nos critères de qualité tout en répondant aux attentes des utilisateurs. Nous aborderons notamment l’organisation interne de l’équipe, le recrutement, les processus de développement et de mise en production, l’approche produit, le design, etc.

[1] https://speakerdeck.com/mathieu_calba
[2] https://speakerdeck.com/jeremiemartinez

Cyril Mottier

October 20, 2017
Tweet

More Decks by Cyril Mottier

Other Decks in Technology

Transcript

  1. A look back at
    CAPITAINE TRAIN

    View Slide

  2. A look back at
    CAPITAINE TRAIN
    *aka Captain Train, aka Trainline
    *

    View Slide

  3. Disclaimer
    We don’t work at Trainline anymore.
    Everything discussed in this presentation relates
    to what we experienced from 2013 to 2017.

    View Slide

  4. 2009
    Capitaine Train
    founded

    View Slide

  5. 2009
    Capitaine Train
    founded
    May
    2010
    Beta
    website

    View Slide

  6. n
    May
    2010
    Beta
    website
    October
    2012
    Public
    website

    View Slide

  7. October
    2012
    Public
    website
    March
    2013
    Cyril’s
    arrival

    View Slide

  8. March
    2013
    Cyril’s
    arrival
    October
    2013
    iOS
    app

    View Slide

  9. October
    2013
    iOS
    app
    November
    2013
    Mathieu’s
    arrival

    View Slide

  10. November
    2013
    Mathieu’s
    arrival
    March
    2014
    Android
    app

    View Slide

  11. March
    2014
    Android
    app
    July
    2014
    Android Wear
    app

    View Slide

  12. July
    2014
    Android Wear
    app
    September
    2014
    Flavien’s
    arrival

    View Slide

  13. September
    2014
    Flavien’s
    arrival
    September
    2015

    View Slide

  14. September
    2015
    October
    2015
    Flavien
    left

    View Slide

  15. October
    2015
    Flavien
    left
    November
    2015
    Jérémie’s
    arrival

    View Slide

  16. November
    2015
    Jérémie’s
    arrival
    Trainline buys
    Captain Train
    March
    2016

    View Slide

  17. Trainline buys
    Captain Train
    March
    2016
    September
    2016

    View Slide

  18. September
    2016
    2017
    We all leave

    View Slide

  19. Recruiting smart people is hard
    Take your time and be demanding

    View Slide

  20. What are we looking for?

    View Slide

  21. Autonomy
    What are we looking for?

    View Slide

  22. Autonomy
    What are we looking for?
    • Curiosity

    View Slide

  23. Autonomy
    What are we looking for?
    • Curiosity • Honesty

    View Slide

  24. Autonomy
    What are we looking for?
    • Curiosity • Honesty • Involvement

    View Slide

  25. View Slide

  26. A multi-step process
    Application
    Quiz
    Technical project
    Face-to-face
    interviews

    View Slide

  27. Step 1
    Application

    View Slide

  28. Capitaine Train
    20 rue Saint-Georges
    75009 Paris
    France
    Capitaine Train Pre-Interview (Android)
    1. What is the difference between LinkedList and ArrayList?
    2. What is the difference between an interface and an abstract class?
    3. What is the difference between fnal, fnally and fnalize?
    4. What is an Adapter? How to use it? How to create one in your project?
    Step 2
    Quiz

    View Slide

  29. Step 3
    Technical project
    “ Make an app using the
    Star Wars API at
    https://swapi.co/

    View Slide

  30. Step 4
    Face-to-face interviews

    View Slide

  31. View Slide

  32. View Slide

  33. View Slide

  34. It doesn’t make sense to hire smart
    people and then tell them what to
    do; we hire smart people so they
    can tell us what to do.
    – Steve Jobs

    View Slide

  35. Company
    values
    Minimise interruptions
    Trust by default

    View Slide

  36. Letting you
    do your best work

    View Slide

  37. A scattered
    Android team
    Cyril
    Jérémie
    Mathieu

    View Slide

  38. Synchronise time together
    In Paris office at the same time

    View Slide

  39. Take advantage of
    time together

    View Slide

  40. Meetings

    View Slide

  41. Meetings Make decisions

    View Slide

  42. Meetings
    Make decisions
    Confront ideas

    View Slide

  43. Meetings
    Make decisions
    Confront ideas
    In person - Hangouts

    View Slide

  44. Meetings
    Make decisions
    Confront ideas
    In person - Hangouts
    Keep a written record

    View Slide

  45. Regular
    meetings

    View Slide

  46. Regular
    meetings
    Sync with release

    View Slide

  47. Regular
    meetings
    Sync with release
    Assign features wisely

    View Slide

  48. Regular
    meetings
    Sync with release
    Assign features wisely
    Check progress

    View Slide

  49. Regular
    meetings
    Sync with release
    Assign features wisely
    Check progress
    About every 2 weeks

    View Slide

  50. Impromptu
    meetings

    View Slide

  51. Impromptu
    meetings
    Discuss feature design
    technical solutions

    View Slide

  52. Impromptu
    meetings
    Discuss technical solutions
    feature design

    View Slide

  53. Making remote work
    Keep communicating

    View Slide

  54. Text
    communication

    View Slide

  55. Text
    communication
    Share knowledge

    View Slide

  56. Text
    communication
    Share knowledge
    Ask questions

    View Slide

  57. Text
    communication
    Share knowledge
    Ask questions
    Transmit information

    View Slide

  58. Text
    communication
    Share knowledge
    Ask questions
    Transmit information
    Video when needed

    View Slide

  59. Importance of
    being offline

    View Slide

  60. work in
    autonomy
    communication

    View Slide

  61. Keep it simple, stupid
    aka KISS principle

    View Slide

  62. View Slide

  63. View Slide

  64. Keep in mind the
    long run

    View Slide

  65. After
    v27 - 06/12/2016
    Before
    v1 - 03/03/2014

    View Slide

  66. After
    v27 - 06/12/2016
    Before
    v1 - 03/03/2014

    View Slide

  67. Go beyond the application
    Get to know the platform and how to interact with it

    View Slide

  68. Android
    iOS

    View Slide

  69. Android
    iOS

    View Slide

  70. Embrace the platform design language
    Guidelines are a first step, a kickstart

    View Slide

  71. Android
    iOS

    View Slide

  72. Android
    iOS

    View Slide

  73. Android
    iOS

    View Slide

  74. Design is a balance
    Getting the best out of a set of constraints

    View Slide

  75. View Slide

  76. Design is never done…
    Now Future ?

    View Slide

  77. Secret to good design is
    iteration

    View Slide

  78. Software release trains

    View Slide

  79. TIME
    Train vN Train vN+1

    View Slide

  80. TIME
    Train vN Train vN+1

    View Slide

  81. TIME
    Train vN Train vN+1

    View Slide

  82. TIME
    Train vN Train vN+1

    View Slide

  83. TIME
    Train vN Train vN+1

    View Slide

  84. TIME
    Train vN Train vN+1

    View Slide

  85. TIME
    Train vN Train vN+1

    View Slide

  86. TIME
    Train vN Train vN+1

    View Slide

  87. 6 weeks
    release cycle

    View Slide

  88. Day to day

    View Slide

  89. Code

    View Slide

  90. Merge
    request
    Code

    View Slide

  91. Monitoring
    Merge
    request
    Code

    View Slide

  92. No kidding?
    Business as usual

    View Slide

  93. Monitoring
    Merge
    request
    Code

    View Slide

  94. Code Git best practices

    View Slide

  95. Git best practices
    Several subjects in parallel
    Code

    View Slide

  96. Code
    Git best practices
    Several subjects in parallel
    Backlog always full

    View Slide

  97. Code
    Git best practices
    Several subjects in parallel
    Backlog always full
    Defensive programming

    View Slide

  98. The backend
    is not your friend

    View Slide

  99. Monitoring
    Merge
    request
    Code

    View Slide

  100. Autonomy
    Merge
    request

    View Slide

  101. Merge
    request
    Autonomy
    Conventions over tools

    View Slide

  102. Autonomy
    Conventions over tools
    Save time for review
    Merge
    request

    View Slide

  103. Merge
    request
    Autonomy
    Conventions over tools
    Save time for review
    In depth

    View Slide

  104. Merge
    request
    Autonomy
    Conventions over tools
    Save time for review
    In depth
    QA

    View Slide

  105. One hour of review per day
    Keep the bugs out

    View Slide

  106. Monitoring
    Merge
    request
    Code

    View Slide

  107. Monitoring
    Crash monitoring

    View Slide

  108. Monitoring
    Crash monitoring
    Analytics

    View Slide

  109. Monitoring
    Crash monitoring
    Analytics
    Play Store

    View Slide

  110. Monitoring
    Crash monitoring
    Analytics
    Play Store
    Customer support

    View Slide

  111. With great autonomy comes
    great responsibility

    View Slide

  112. And great pride

    View Slide

  113. Disclaimer
    The architecture was created in 2013.
    There was no real popular solution for
    architecting your app back then.
    Choices would probably be different today

    View Slide

  114. How to build your
    architecture?

    View Slide

  115. Use proven technologies &
    focus on features

    View Slide

  116. Must be understandable by
    new developers easily

    View Slide

  117. Design for scale
    but do not over-engineer it

    View Slide

  118. Adapt your architecture to
    your product
    (and your API)

    View Slide

  119. An account was
    mandatory

    View Slide

  120. AccountAuthenticator

    View Slide

  121. Users use the app while
    travelling in a train

    View Slide

  122. Offline
    by default

    View Slide

  123. Use case
    search & book a ticket

    View Slide

  124. Operations
    100% online

    View Slide

  125. Operations
    100% online • quick

    View Slide

  126. Data is valid for
    short period of time

    View Slide

  127. API call directly
    from the screen

    View Slide

  128. Use case
    after-sales

    View Slide

  129. Operations
    100% online

    View Slide

  130. Operations
    100% online • maybe minute(s)

    View Slide

  131. We need to keep
    operation’s state

    View Slide

  132. Live with your
    architecture

    View Slide

  133. Libraries must be
    carefully chosen

    View Slide

  134. Tech debts
    It impacts your

    View Slide

  135. Tech debts
    It impacts your
    • Productivity

    View Slide

  136. Tech debts
    It impacts your
    • Productivity • APK size

    View Slide

  137. How do we select one?

    View Slide

  138. How do we select one?
    1. Maintained

    View Slide

  139. How do we select one?
    2. Simple & focused

    View Slide

  140. How do we select one?
    3. Not a core part

    View Slide

  141. How do we select one?
    4. Documented

    View Slide

  142. in that order.

    View Slide

  143. How do we maintain them?
    Part of our
    release cycle

    View Slide

  144. View Slide

  145. How do we maintain them?
    Test their
    integration

    View Slide

  146. Thank you!
    @cyrilmottier
    @JeremMartinez

    View Slide

  147. Thank you!
    @cyrilmottier @JeremMartinez @Mathieu_Calba

    View Slide