Android at Scale in Mercari

7ace70cd355db1983dea895fbe01a4ef?s=47 rallat
October 04, 2018

Android at Scale in Mercari

7ace70cd355db1983dea895fbe01a4ef?s=128

rallat

October 04, 2018
Tweet

Transcript

  1. None
  2. None
  3. 100 ENGINEER TEAM

  4. None
  5. DIFFICULT TO MODIFY

  6. DIFFICULT TO MODIFY EASY TO BREAK

  7. DIFFICULT TO MODIFY EASY TO BREAK SLOW DEVELOPMENT

  8. None
  9. Israel Ferrer Camacho Android Tech Lead | @rallat

  10. Israel Ferrer Camacho Android Tech Lead | @rallat ANDROID @

    SCALE
  11. None
  12. QUALITY

  13. QUALITY CONSISTENT

  14. QUALITY CONSISTENT REUSABLE

  15. QUALITY CONSISTENT REUSABLE

  16. WHAT IS QUALITY?

  17. QUALITY

  18. NO BUGS QUALITY

  19. PREVENT BUGS WITH TEST QUALITY

  20. QUALITY

  21. MANUAL TEST QUALITY

  22. MANUAL TEST UI TEST QUALITY

  23. MANUAL TEST UI TEST INTEGRATION TEST QUALITY

  24. MANUAL TEST UI TEST INTEGRATION TEST UNIT TEST QUALITY

  25. MANUAL TEST UI TEST INTEGRATION TEST UNIT TEST QUALITY

  26. QUALITY UNIT TEST

  27. QUALITY Easy to write UNIT TEST

  28. QUALITY Easy to write Easy to maintain UNIT TEST

  29. QUALITY Easy to write Easy to maintain Fast to run

    UNIT TEST
  30. Run unit test for each commit Immediate quality feedback! For

    engineers is a safety net QUALITY UNIT TEST
  31. Feature proofs the code for future changes QUALITY UNIT TEST

  32. QUALITY CONSISTENT REUSABLE

  33. QUALITY CONSISTENT REUSABLE

  34. DEFINE PRINCIPLES CONSISTENT

  35. PRINCIPLES CAN EVOLVE CONSISTENT

  36. CONSISTENT NEW ARCHITECTURE

  37. CONSISTENT LAYERED ARCHITECTURE

  38. CONSISTENT SINGLE RESPONSIBILITY

  39. None
  40. View layer

  41. View layer Logic layer

  42. Data layer View layer Logic layer

  43. View layer Data layer Logic layer

  44. View layer Data layer Logic layer

  45. View layer Data layer Logic layer

  46. View layer Data layer Logic layer

  47. REUSABLE?

  48. BUSINESS LOGIC REUSABLE

  49. USE CASES LAYER REUSABLE

  50. Use cases View layer Data layer Screen behavior

  51. View layer Data layer Sort Items Buy Item Like Item

    Comment Item Screen behavior
  52. Use cases View layer Data layer Screen behavior

  53. Use cases View layer Data layer Screen behavior

  54. Use cases Screen behavior View layer Data layer

  55. Use cases Screen behavior View layer Data layer QUALITY

  56. Use cases Screen behavior View layer Data layer QUALITY CONSISTENT

  57. Use cases Screen behavior View layer Data layer QUALITY CONSISTENT

    REUSABLE
  58. HOW TO REUSE CUSTOM VIEWS, COMPONENTS, UTILS?

  59. DISCOVERABILITY?

  60. HOW CAN 100 ENG WORK IN THE SAME CODEBASE?

  61. REUSABLE

  62. MONOLITHIC 
 REUSABLE

  63. MONOLITHIC 
 MONOLITHIC TO
 MODULAR REUSABLE

  64. 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL #VUUPO "QQ #VUUPO #VUUPO

    REUSABLE
  65. . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL #VUUPO "QQ #VUUPO

    #VUUPO REUSABLE
  66. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL #VUUPO "QQ

    #VUUPO #VUUPO 6*$PSF
  67. 6*$PSF REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL #VUUPO

    "QQ #VUUPO #VUUPO
  68. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL "QQ #VUUPO

    6*$PSF #VUUPO #VUUPO
  69. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL "QQ 6*$PSF

    #VUUPO #VUUPO #VUUPO
  70. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL "QQ 6*$PSF

    #VUUPO #VUUPO #VUUPO
  71. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL /FUXPSL "QQ 6*$PSF

    #VUUPO #VUUPO %FQFOETPO
  72. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL /FUXPSL "QQ 6*$PSF #VUUPO

    #VUUPO %FQFOETPO /FUXPSL /FUXPSL
  73. REUSABLE . 4DSFFO 4DSFFO 4DSFFO /FUXPSL "QQ 6*$PSF #VUUPO #VUUPO

    %FQFOETPO /FUXPSL /FUXPSL /FUXPSL
  74. REUSABLE . 4DSFFO 4DSFFO 4DSFFO "QQ 6*$PSF #VUUPO #VUUPO %FQFOETPO

    /FUXPSL /FUXPSL /FUXPSL /FUXPSL
  75. REUSABLE . 4DSFFO 4DSFFO 4DSFFO "QQ 6*$PSF #VUUPO #VUUPO %FQFOETPO

    /FUXPSL /FUXPSL /FUXPSL /FUXPSL
  76. REUSABLE 4DSFFO 4DSFFO 4DSFFO "QQ 6*$PSF #VUUPO #VUUPO %FQFOETPO /FUXPSL

    /FUXPSL /FUXPSL /FUXPSL %FQFOETPO
  77. REUSABLE 4DSFFO 4DSFFO 4DSFFO %FQFOETPO /FUXPSL /FUXPSL /FUXPSL /FUXPSL %FQFOETPO

    6*$PSF #VUUPO #VUUPO
  78. REUSABLE 4DSFFO 4DSFFO 4DSFFO %FQFOETPO /FUXPSL /FUXPSL /FUXPSL /FUXPSL %FQFOETPO

    'FBUVSF 6*$PSF #VUUPO #VUUPO
  79. REUSABLE 4DSFFO 4DSFFO 4DSFFO %FQFOETPO /FUXPSL /FUXPSL /FUXPSL /FUXPSL %FQFOETPO

    'FBUVSF 'FBUVSF 6*$PSF #VUUPO #VUUPO
  80. REUSABLE 4DSFFO 4DSFFO 4DSFFO %FQFOETPO /FUXPSL /FUXPSL /FUXPSL /FUXPSL %FQFOETPO

    'FBUVSF 'FBUVSF 'FBUVSF 6*$PSF #VUUPO #VUUPO
  81. ADVANTAGES MODULAR

  82. ADVANTAGES MODULAR

  83. ADVANTAGES MODULAR Improve reusability

  84. ADVANTAGES MODULAR Improve reusability Improve discoverability

  85. ADVANTAGES MODULAR Improve reusability Improve discoverability Less code conflicts

  86. ADVANTAGES MODULAR Improve reusability Improve discoverability Less code conflicts Faster

    build time in Gradle
  87. MERCARI MODULES

  88. REUSABLE

  89. REUSABLE Core

  90. REUSABLE Core Identity

  91. REUSABLE Core Identity Util

  92. REUSABLE Core DB Identity Util

  93. REUSABLE Core Network DB Identity Util

  94. REUSABLE Core Network DB Identity Core-java Util

  95. REUSABLE Core Network DB Identity Core-java Android Core Util

  96. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

  97. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    Model
  98. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model
  99. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model Features
  100. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model Features Search
  101. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model Features Live Search
  102. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model Features Live Offer Search
  103. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model Features Live Offer Payment Search
  104. REUSABLE Core Network DB Identity Core-java Android Core Util Util-Android

    UI Model Features Live Offer Payment Search Listing
  105. None
  106. QUALITY

  107. QUALITY CONSISTENT

  108. QUALITY CONSISTENT REUSABLE

  109. HOW LONG?

  110. THIS IS NOT A TEMPORARY PROJECT

  111. None
  112. NOT A SOLO PROJECT

  113. None
  114. LONG LASTING CHANGE ENGINEERING CULTURE

  115. FROM CODER

  116. FROM CODER TO ENGINEER

  117. ENGINEER CODER

  118. ENGINEER CODER Writes Code

  119. ENGINEER CODER Writes Code Writes Code

  120. ENGINEER CODER Writes Code Writes Code Code reviews

  121. ENGINEER CODER Writes Code Writes Code Code reviews Best solution

    for a problem
  122. ENGINEER CODER Writes Code Writes Code Code reviews Best solution

    for a problem Cares about Performance
  123. ENGINEER CODER Writes Code Writes Code Code reviews Best solution

    for a problem Cares about Performance Cares about Quality
  124. ENGINEER CODER Writes Code Writes Code Code reviews Best solution

    for a problem Cares about Performance Cares about Quality Feedback to the Team
  125. ENGINEER CODER Writes Code Writes Code Code reviews Best solution

    for a problem Cares about Performance Cares about Quality Feedback to the Team Feedback to the product
  126. HOW?

  127. WRITE A PROPOSAL

  128. WRITE A PR WITH EXAMPLE

  129. COLLABORATIVE WORK

  130. WRITE GUIDELINES

  131. COLLABORATIVE WORK

  132. TRAIN THE TEAM

  133. OFFICE HOURS

  134. PAIR PROGRAMMING

  135. CODE REVIEWS

  136. RESULTS

  137. NEW ARCHITECTURE QUALITY 100% Adoption in new features

  138. CODE COVERAGE QUALITY

  139. 0 5 10 15 20 June July August Sept CODE

    COVERAGE QUALITY
  140. 0 5 10 15 20 June July August Sept CODE

    COVERAGE QUALITY
  141. STRONG ENGINEER

  142. CREATE BETTER PRODUCTS

  143. THANKS! JOIN US! Challenge awaits you!