Operation Tame: Attack Plan

Problem Statement

Because of the unwieldy size and low maintenance of edx-platform, we see:

  • code complexity
  • code coupling
    • circular dependencies amongst modules
    • unclear interfaces and boundaries
  • lack of code organization
    • code located in surprising places
    • tests duplicated and in multiple places
  • lack of documentation
  • lack of testing standards

As a result of the above, we see:

  • high developer cognitive load
  • slow tests
  • escaped bugs
  • low team velocity
  • high tech debt

Plan of Attack

We are attacking this issue from various directions, including:

  1. Creating Component Architecture documents in the Architecture space with
    1. Sequence Diagrams
    2. Component Diagrams
  2. Developing an agreed upon Testing Best Practices with Testing tools for interface testing with realistic data.
  3. Developing a hierarchical system-level architecture diagram with clear roles and responsibilities
    1. Phase 0 (CURRENT): Create spreadsheet enumerating all folders within LMS, CMS, and openedx/common.
      1. Include sub-folders that have large enough sub-features/responsibilities.
      2. Fill out the following columns: path, name, role & responsibility, known violations.
    2. Phase 1 (DESIRED): Group folders from Phase 0 into logical containers, each with their own role and responsibility.
      1. Create a dependency hierarchy for a desired layered architecture.
      2. Denote points of desired decoupling by both space (independent deployment units) and time (async connections)
    3. Phase 2 (ASSESS): When working in an area, a team can take the desired behavior from Phase 1 and assess the subsystem.
      1. Define synchronous and asynchronous interfaces.
      2. Document violations of abstractions and layering.
    4. Phase 3 (MODIFY): When working in an area, a team can refer to the assessment in Phase 2 and update the subsystem as desired.

Agents

Robert RaposaAndy Armstrong (Deactivated)Scott Dunn (Deactivated)Nimisha Asthagiri (Deactivated)