For the complete documentation index, see llms.txt. This page is also available as Markdown.

Mobius onboarding Guide

Mobius

Mobius is our recommended architecture for building Android applications. We also feel that it is much easier to learn Test-Driven Development by starting out to build apps using Mobius.

Day 1: Introduction to Mobius & TDD (4:50 hours)

  • Theory: Introduction to Mobius (1 hour)

    • Eliminating the moving parts using functional programming

    • Pure functions

    • State transition diagrams

    • Model & Event

  • Pairing Activity: The counter app state transition diagram (1 hour)

    • The update() function

    • Introducing the UpdateSpec class

    • Test driving the counter update() function

    • Wiring the update() function to the UI

  • Theory: Test-Driven Development (30 minutes)

    • Principles of TDD

    • The red, green, and refactor cycle

    • TDD as a design practice

Day 2: Mobius Effects & Effect Handlers (5:05 hours)

  • Reflection of Day 1 and discussion around reading materials (30 minutes)

  • Pairing Activity: Login Screen update() Exercise (2 hours)

    • Introducing effects & effect handlers

    • Login example state transition diagram

    • Test driving the login update() function

    • Identifying the primitive obsession code smell (Watch this)

    • The “What to test?” problem

    • Relationship between the number of execution paths and tests

    • Test driving the Username and Password classes

    • Modeling async state transitions

    • Completing the update() function

  • Pairing Activity: Materializing effects using effect handlers (1:30 hours)

    • State verification vs. behavior verification

    • Introduction to Mockito

    • Low confidence behavior verification tests

    • Writing the first effect handler

    • Using the RxJava SubtypeEffectHandler

    • Action, Consumer, and ObservableTransformer

    • Errors of first-class citizens

    • Using Scheduler in tests

  • Pairing Activity: Introduction to Views and View Renderers (45 minutes)

    • Using mockito to verify view rendering logic

  • Recap (20 minutes)

    • Key takeaways

Day 3: Mobius, the final bits (5:35 hours)

  • Reflection of Day 2 (30 minutes)

  • Pairing Activity: Creating the shell (45 minutes)

    • Wiring all the Mobius components

    • Saving and restoring model state

    • The @Parcelize annotation

    • Caveats of saving data using Android’s Parcelable interface

  • Pairing Activity: Subtle bugs introduced by async operations (45 minutes)

    • Handling normal flow of execution using the init() function

    • Handling edge cases using the init() function

    • Using the InitSpec for testing normal flow and edge cases

  • Recap (20 minutes)

Day 4, 5, and (possibly 6): Building the NASA APOD Apps (14:50 - 22:50 hours)

  • Reflection of Day 3 (20 minutes)

  • Individual Activity: NASA APOD Application (8 - 16 hours)

    • Step 1: Drawing the state transition diagram

    • Step 2: Writing the init()the update() tests

    • Step 3: Writing Effect Handler tests

    • Step 4: View and View Renderer Tests

    • Step 5: Wire up the imperative shell

  • Code review and addressal (1:30 hours)

  • Recap (1 hour)

Points of Confusion

  • Effect are more closer to intention for side-effect than performing a side-effect

  • Representing decision making in state diagram

Last updated