Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Tips and Tricks for Productive Mobile Development

Tips and Tricks for Productive Mobile Development

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
  2. None
  3. Mobile Apps are the connection to the customer

  4. Source

  5. Faster Iterations are Essential

  6. Factors affecting Speed Things to Consider • Distractions

  7. Source

  8. Factors affecting Speed Things to Consider • Distractions • Communication

    Problems
  9. None
  10. Factors affecting Speed Things to Consider • Distractions • Communication

    Problems • Con fl icting Priorities
  11. None
  12. Factors affecting Speed Things to Consider • Distractions • Communication

    Problems • Con fl icting Priorities • Technical Debt
  13. None
  14. Factors affecting Speed Things to Consider • Distractions • Communication

    Problems • Con fl icting Priorities • Technical Debt • Production Fires
  15. Source

  16. Factors affecting Speed Things to Consider • Distractions • Communication

    Problems • Con fl icting Priorities • Technical Debt • Production Fires • Hardware
  17. Source

  18. Process Bottlenecks Mobile Bottlenecks • Company release process • Application

    store review process • Application store rejections • Adoptions take time
  19. Source

  20. Experiments and Toggles

  21. Choosing between Implementations

  22. Deciding on a Direction

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

    your customer • Wireframes and discussions • Prepare • Question • Understand
  24. Comparing between Variants

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

  26. Tim Campos “Data wins Arguments”

  27. Customer Behavior Understanding and Monitoring Customer Behavior • Dashboards •

    critical business statistics • conversion funnels • Slice by application version • Alerts
  28. Run Experiments

  29. Source

  30. Problems Happen

  31. Dealing with Problems How to React to Problems • Ignore

    it for now • Hot Fix in Production • Release takes time • Adoption takes time • Risky
  32. Source

  33. What if we just turn it off?

  34. Feature Toggle

  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
  36. Data

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

    with Customers • Compliance • App Stores • Governments
  38. Policy Changes are often a Surprise

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

    you become the product”
  40. As a company grows, so too does the value of

    its data
  41. Structures and Methodologies

  42. How to Structure Teams

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

    vertical teams • Separate splits between frontend and backend
  44. It Depends

  45. Evaluate and Adopt

  46. You are not Spotify

  47. Scrum? Agile?

  48. It Depends

  49. Source

  50. Source

  51. Communication is Key

  52. RFCs

  53. Structuring Code

  54. Modularize

  55. Define a Set of Rules

  56. Split API and Implementation

  57. Better Isolation of Features

  58. Easier Sharing

  59. Faster Build Times

  60. Ability to Stub Implementations

  61. Faster Testing

  62. Standalone Apps

  63. Sharing Code Across Platforms

  64. How do we Save Time?

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

    • Do it yourself Tooling
  66. React Native

  67. 5 Part Series React Native at Airbnb

  68. Flutter

  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
  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
  71. C/C++

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

    • Easier to obfuscate code
  73. C/C++ Sharing Code Between Platforms • Cons • Di ffi

    cult • Still have to handle di ff erences between platforms • Custom development environment
  74. Dropbox Blog Post The (not so) hidden cost of sharing

    code between iOS and Android
  75. Kotlin Multiplatform

  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
  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
  78. Which one?

  79. It Depends

  80. What to Share

  81. Analytics

  82. Business Logic

  83. More?

  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
  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
  86. What to Share Across Platforms

  87. Vocabulary

  88. Features

  89. Architecture

  90. Design System

  91. Versioning

  92. Release Process

  93. CI/CD

  94. Production Issues take Time

  95. Time is Money

  96. Catching Mistakes Early Saves Time and Money

  97. Defense Mechanisms

  98. Code Review

  99. Tests Catching Issues Early • Tests • Unit Tests •

    Integration Tests • On-Device Integration Tests (“UI Tests”) • Screenshot Tests
  100. Automated Checks

  101. Lint

  102. Code Styling Enforcer

  103. Code Smell Detection

  104. Expose Hidden Changes Catching Issues Early • Transitive Dependencies •

    Binary Size • Permissions
  105. Release Early

  106. Release Often

  107. Staged Rollouts

  108. Beta Program

  109. Engineering Culture

  110. Engineers are Humans

  111. Humans make Mistakes

  112. Blame is Bad

  113. Blame is not Productive

  114. Learning from Mistakes is Productive

  115. How could we have prevented it?

  116. Build Ownership

  117. Hire Good Engineering Managers

  118. Give Developers Good Hardware

  119. Keep Learning and Improving

  120. Focus on Impact

  121. Thank You

  122. Q & A