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

Tips and Tricks for Productive Mobile Development

Tips and Tricks for Productive Mobile Development

Talk from The Assembly event in Dubai on June 18th, 2022. This version is more intended for managers and team leads.

Ahmed El-Helw

June 18, 2022
Tweet

More Decks by Ahmed El-Helw

Other Decks in Programming

Transcript

  1. Ahmed El-Helw June 18, 2022
    Productive Mobile Development
    Tips and Tricks for Productive Mobile Development

    View Slide

  2. View Slide

  3. Mobile Apps are the connection
    to the customer

    View Slide

  4. Source

    View Slide

  5. Faster Iterations are Essential

    View Slide

  6. Factors affecting Speed
    Things to Consider
    • Distractions

    View Slide

  7. Source

    View Slide

  8. Factors affecting Speed
    Things to Consider
    • Distractions

    • Communication Problems

    View Slide

  9. View Slide

  10. Factors affecting Speed
    Things to Consider
    • Distractions

    • Communication Problems

    • Con
    fl
    icting Priorities

    View Slide

  11. View Slide

  12. Factors affecting Speed
    Things to Consider
    • Distractions

    • Communication Problems

    • Con
    fl
    icting Priorities

    • Technical Debt

    View Slide

  13. View Slide

  14. Factors affecting Speed
    Things to Consider
    • Distractions

    • Communication Problems

    • Con
    fl
    icting Priorities

    • Technical Debt

    • Production Fires

    View Slide

  15. Source

    View Slide

  16. Factors affecting Speed
    Things to Consider
    • Distractions

    • Communication Problems

    • Con
    fl
    icting Priorities

    • Technical Debt

    • Production Fires

    • Hardware

    View Slide

  17. Source

    View Slide

  18. Process Bottlenecks
    Mobile Bottlenecks
    • Company release process

    • Application store review process

    • Application store rejections

    • Adoptions take time

    View Slide

  19. Source

    View Slide

  20. Experiments and Toggles

    View Slide

  21. Choosing between
    Implementations

    View Slide

  22. Deciding on a Direction

    View Slide

  23. Ask the Customer
    Running Customer Studies
    • You are not your customer

    • Wireframes and discussions

    • Prepare

    • Question

    • Understand

    View Slide

  24. Comparing between Variants

    View Slide

  25. 72.31%
    of all statistics are made up on the spot

    View Slide

  26. Tim Campos
    “Data wins Arguments”

    View Slide

  27. Customer Behavior
    Understanding and Monitoring Customer Behavior
    • Dashboards

    • critical business statistics

    • conversion funnels

    • Slice by application version

    • Alerts

    View Slide

  28. Run Experiments

    View Slide

  29. Source

    View Slide

  30. Problems Happen

    View Slide

  31. Dealing with Problems
    How to React to Problems
    • Ignore it for now

    • Hot Fix in Production

    • Release takes time

    • Adoption takes time

    • Risky

    View Slide

  32. Source

    View Slide

  33. What if we just turn it off?

    View Slide

  34. Feature Toggle

    View Slide

  35. Other Considerations
    Things to Keep in Mind
    • Be mindful about:

    • The e
    ff
    ect of experiments on each other

    • The e
    ff
    ect of feature
    fl
    ags on each other

    • Dead Experiments increase Technical Debt

    View Slide

  36. Data

    View Slide

  37. Data
    Some odds and ends about Data
    • Building trust with Customers

    • Compliance

    • App Stores

    • Governments

    View Slide

  38. Policy Changes are often a
    Surprise

    View Slide

  39. MetaFilter via Forbes Article
    “If you're not paying for it, you become the
    product”

    View Slide

  40. As a company grows, so too
    does the value of its data

    View Slide

  41. Structures and Methodologies

    View Slide

  42. How to Structure Teams

    View Slide

  43. Structuring Teams
    How to Structure Teams
    • Single full stack vertical teams

    • Separate splits between frontend and backend

    View Slide

  44. It Depends

    View Slide

  45. Evaluate and Adopt

    View Slide

  46. You are not Spotify

    View Slide

  47. Scrum? Agile?

    View Slide

  48. It Depends

    View Slide

  49. Source

    View Slide

  50. Source

    View Slide

  51. Communication is Key

    View Slide

  52. RFCs

    View Slide

  53. Structuring Code

    View Slide

  54. Modularize

    View Slide

  55. Define a Set of Rules

    View Slide

  56. Split API and Implementation

    View Slide

  57. Better Isolation of Features

    View Slide

  58. Easier Sharing

    View Slide

  59. Faster Build Times

    View Slide

  60. Ability to Stub Implementations

    View Slide

  61. Faster Testing

    View Slide

  62. Standalone Apps

    View Slide

  63. Sharing Code Across Platforms

    View Slide

  64. How do we Save Time?

    View Slide

  65. Options
    Sharing Code Between Platforms
    • Frameworks that handle Everything

    • Do it yourself Tooling

    View Slide

  66. React Native

    View Slide

  67. 5 Part Series
    React Native at Airbnb

    View Slide

  68. Flutter

    View Slide

  69. Frameworks that Handle Everything
    Sharing Code Between Platforms
    • Pros

    • Potentially easier to hire for

    • Write once, use everywhere

    • Faster development (hot reload, etc)

    • Potential for hot loading code

    View Slide

  70. Frameworks that Handle Everything
    Sharing Code Between Platforms
    • Cons

    • Need to explicitly separate UI for iOS and Android

    • Doesn’t “feel” native irrespective

    • New platform features are di
    ffi
    cult to adopt - need to wait

    • Overhead on binary size

    • Rejections Likely

    View Slide

  71. C/C++

    View Slide

  72. C/C++
    Sharing Code Between Platforms
    • Pros

    • High performance

    • Easier to obfuscate code

    View Slide

  73. C/C++
    Sharing Code Between Platforms
    • Cons

    • Di
    ffi
    cult

    • Still have to handle di
    ff
    erences between platforms

    • Custom development environment

    View Slide

  74. Dropbox Blog Post
    The (not so) hidden cost of sharing code
    between iOS and Android

    View Slide

  75. Kotlin Multiplatform

    View Slide

  76. Kotlin Multiplatform
    Sharing Code Between Platforms
    • Pros

    • Completely native

    • Easy to learn for engineers writing Swift

    • Lots of third party libraries

    • Backed by JetBrains and Google

    • Supports a plethora of platforms

    View Slide

  77. Kotlin Multiplatform
    Sharing Code Between Platforms
    • Cons

    • iOS inter-op with Objective-C instead of Swift

    • Convincing iOS Engineers is Di
    ffi
    cult

    • Tooling

    • Still in the process of maturing

    View Slide

  78. Which one?

    View Slide

  79. It Depends

    View Slide

  80. What to Share

    View Slide

  81. Analytics

    View Slide

  82. Business Logic

    View Slide

  83. More?

    View Slide

  84. Benefits and Costs
    Sharing Code Across Platforms - KMP
    • Pros:

    • Keeps iOS and Android consistent

    • Maintenance is cheaper

    • In the long run, development may become cheaper

    View Slide

  85. Benefits and Costs
    Sharing Code Across Platforms - KMP
    • Cons:

    • Might be more expensive initially

    • Di
    ffi
    cult to get buy in from iOS engineers

    • Inter-op with Objective-C instead of Swift

    View Slide

  86. What to Share Across Platforms

    View Slide

  87. Vocabulary

    View Slide

  88. Features

    View Slide

  89. Architecture

    View Slide

  90. Design System

    View Slide

  91. Versioning

    View Slide

  92. Release Process

    View Slide

  93. CI/CD

    View Slide

  94. Production Issues take Time

    View Slide

  95. Time is Money

    View Slide

  96. Catching Mistakes Early Saves


    Time and Money

    View Slide

  97. Defense Mechanisms

    View Slide

  98. Code Review

    View Slide

  99. Tests
    Catching Issues Early
    • Tests

    • Unit Tests

    • Integration Tests

    • On-Device Integration Tests (“UI Tests”)

    • Screenshot Tests

    View Slide

  100. Automated Checks

    View Slide

  101. Lint

    View Slide

  102. Code Styling Enforcer

    View Slide

  103. Code Smell Detection

    View Slide

  104. Expose Hidden Changes
    Catching Issues Early
    • Transitive Dependencies

    • Binary Size

    • Permissions

    View Slide

  105. Release Early

    View Slide

  106. Release Often

    View Slide

  107. Staged Rollouts

    View Slide

  108. Beta Program

    View Slide

  109. Engineering Culture

    View Slide

  110. Engineers are Humans

    View Slide

  111. Humans make Mistakes

    View Slide

  112. Blame is Bad

    View Slide

  113. Blame is not Productive

    View Slide

  114. Learning from Mistakes


    is Productive

    View Slide

  115. How could we have prevented it?

    View Slide

  116. Build Ownership

    View Slide

  117. Hire Good Engineering Managers

    View Slide

  118. Give Developers Good Hardware

    View Slide

  119. Keep Learning and Improving

    View Slide

  120. Focus on Impact

    View Slide

  121. Thank You

    View Slide

  122. Q & A

    View Slide