Mobius onboarding Guide


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 modified 1yr ago