This document captures various architectural decisions that are proposed and strongly favored in recent architectural discussions.  They are temporarily captured here until they have been formally documented in an OEP.

1. XBlocks can depend on Django (Decided) 

Summary

xBlocks can use standard Django features, such as Django models and Django i18n services, without needing to depend on custom xBlock runtimes to provide these services.

History

Motivation

Although this proposal is mentioned in OEP-12, it hasn't yet been widely announced nor formally captured as a decision.  Essentially, we have decided to allow xBlock developers to depend on Django directly rather than require all Django services and dependencies to be exported via xBlock Runtime services.  This allows them to use standard Django functionality and capabilities rather than us implementing home-grown solutions/wrappers in xBlock runtimes, APIs, etc.

2. Eliminating LMS' dependency on the Modulestore (In Progress)

Summary

The Modulestore's responsibility should be scoped as a read-write storage layer for course structures for Studio only.  Other services, such as LMS, should use alternative read-optimized storage for course content.

History

Motivation

3. Services Isolation, especially in Blocking User-facing requests (In Progress)

Summary

Follow the Reactive Manifesto principles and have inter-service dependencies be asynchronous, without user-facing blocking calls from one service to another.

History

Motivation

Alternatives

Exceptions

4. Break Monolith by Features, not by Studio/LMS split (Evaluating)

Summary

Follow the principles of Domain Driven Design and break services by core domain concepts rather than front-end separations.

History

Motivation (TODO)

5. Plugins and SOLID Principles: edx-platform becomes a Plugin Platform (Decided)

Summary

To reverse the direction of the monolithic evolution of the edx-platform, it is necessary to have individual apps plugin to the platform and follow the S.O.D. of the SOLID principles as described in Django App Plugin.  Additionally, to support the varying feature requirements and experimentation by the open edX community (and within edx.org), a plugin framework provides a powerful flexibility that keeps the edX core as an invulnerable and stable platform but a welcoming enabler.

History

Motivation

6. Automated Communication Engine (In Progress)

Summary

Use edX ACE as the notifications framework for automatically sending messages to users.

History

Motivation

A common extensible and scalable messaging framework used by all edX features that handles personalization, translations, policies and configurability.

7. OLX Data Format and Versioning (Todo)

8. Ubiquitous Language (In Progress)

9. Testing Best Practice (Todo)

10. API Best Practice (Todo)

11. Domain-driven Design Principles

12. Celery usage

13. Authorization (In Progress)