Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

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.

Phase 0 Notes:

  • Create plan for automating metadata extraction from code to output the equivalent of the spreadsheet.
  • Create "Draft Best Practices" page.
    • Creation of new things.  Where does it go?  
    • Cleaning up old things.  Common libs pip installed should no longer be pip installed.

Phase 1 Notes:

  • Next Steps:
    1. Validate seams
      1. Review by stakeholders: Learner, Educator, Business, Analytics, TestEng, Platform, Eng Management
        1. JIRA perspective: https://docs.google.com/a/edx.org/spreadsheets/d/15Uz3JrwPVg51Pj6cw02iPUAAZ53AchbtgZ3g1TPmb7g/edit?usp=sharing
      2. Run-through a few use-cases
    2. Move to logical components within edx-platform 
    3. Dependency analysis to find low-level, high-level, etc components
    4. Move low-level components to their own repos
      1. If modified a lot
      2. if not modified a lot
    5. Best practices (OEP)
      1. clear interfaces
      2. folder structure
      3. etc
    6. Move current pip-installable apps in edx-platform into their own repo (common/lib/*)
    7. Reduce # of acceptance tests
  • Folder example:
    • openedx/
      • capa/
      • discussions/
      • grades
      • course-blocks/
      • courses
      • certificates
      • middleware
      • core
      • cms?

Agents

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

  • No labels