LMS Content Import and Export Feature
Our client is a global provider of cloud-based learning management systems (LMS) for millions of students and teachers worldwide. They also provide educational institutions with a range of technical services, from one-off training sessions through to full-scale system implementations.
The client asked us to join their team to collaboratively implement a solution for importing content from other LMS platforms that use package formats such as Moodle and IMSCC, and for exporting content from the client’s LMS back to Moodle and IMSCC.
The required features included:
- mapping package content types to client’s LMS content types
- correct handling of rich content (images, files, other embedded media).
Besides, the solution should be:
- cloud-native, as the client uses AWS as the primary cloud platform
- platform-agnostic, capable of running on any cloud provider or on premises
- scalable horizontally
- resilient
- fault tolerant
- able to handle long-running and asynchronous processing reliably
- easily extensible to handle new content and package types, as the client anticipated supporting additional package formats in the future.
After analysing the client’s LMS capabilities and reviewing the Moodle and IMSCC specifications, we identified which APIs and components were missing in the client’s LMS and needed to be implemented.
Choosing architecture: domain-centric design
For the service design, we adopted the Onion Architecture to keep domain logic independent of infrastructure and implementation details. The customer’s team defined the initial architecture and domain structure, which we then refined and extended. This domain-centric approach supports long-term maintainability and confident platform evolution.
Components: cross-platform compatibility, modern runtime features
The final solution consists of two stateless services:
- API Service: responsible for uploading packages, creating tasks, and emitting events to trigger task execution.
- JobManager Service: listens for events and executes the corresponding tasks.
The domain, application layer, and most infrastructure components are implemented using .NET Standard*, ensuring cross-platform compatibility. Only the API and JobManager services target .NET 9**, enabling modern runtime features while keeping the core logic independent from infrastructure.
* More about .NET Standard: .NET Standard is a specification defining the minimum set of APIs that must be supported by every implementation of the .NET runtime (e.g., .NET Framework, .NET Core, Xamarin). It enables writing libraries that can be used across different platforms and .NET versions without modification, ensuring compatibility and simplifying cross-platform application development.
** More about .NET 9: .NET 9 is a stable version of .NET Framework. Released in 2024, it provides better security, improved performance and facilitates cross-platform development, and offers better integration with modern frameworks and tools.
Data: scalability, high availability
For data persistence, we selected AWS DynamoDB, a fully managed, cloud-native NoSQL database that aligns well with the solution’s data structures and access patterns and provides built-in scalability and high availability.
Message queuing: resilience to failures
For asynchronous messaging and decoupling between services, we used AWS SQS, integrated via MassTransit, enabling reliable event delivery, retry mechanisms, and resilience to failures.
Operational visibility in the distributed system
The JobManager performs multiple API calls while processing tasks, which may be long-running, rescheduled, or cancelled. To ensure operational visibility in this distributed system, we implemented OpenTelemetry for distributed tracing and monitoring, making it easy to track execution flows and diagnose issues across services.
After implementing the missing APIs and components in the client’s LMS, developing the integration services, and fully integrating the solution into the LMS, the client gained a robust, cloud-native content import and export solution.
The solution is easily extensible to support new package formats, automatically scales up and down based on demand, and is both resilient and fault tolerant. In addition, it is platform-agnostic and can run on any cloud provider or on-premises. With observability in place, understanding system behaviour and performance is significantly easier.
The whole project—implementing the solution, refining and finalising—was realized in 1.5 years.
Related Cases
Read allRTSM Solution: Data Ingestion Improvement
Removing issues in data architecture and processing in order to provide a solid foundation for future growth of the platform.
Content Generation with Copilot Studio and MCP Servers
A solution to help new teachers rapidly adapt to the educational system while providing easy access to the existing content base.
AI for Predicting the Number of Visitors
A web solution for planning employees' workload in retail networks with AI feature for predicting the number of visitors.