Howard Creative Co
← Back to Blog

Let's Build a Learning Management System (LMS) | Hands-on Learning Approach

backend 8 min read
Let's Build a Learning Management System (LMS) | Hands-on Learning Approach

![Cover Image](/og-images/articles/lms.jpg)

Introduction

It's been a while since I kick-started my backend engineering journey, and the plan was simply to take each major concept in the backend landscape and **learn it** then **learn one or two of its application** like for example, learning about databases then learning **PostreSQL** & **Mongodb**, for more details checkout this blog article I wrote, which talks about this point in great details:

but essentially after a while, I realized that it's not the most optimum way to make it to the other side where senior backend engineers are! So let's discuss together **why** I'll switch to a more practical and hands-on learning approach and **how** I'll do it...

---

Limitation Of Previous Theoretical Learning Approach

**First** of all, backend engineering is simply building things! of course you need to learn the necessary tools and building blocks (web servers, protocols, proxies, ....) so you can build something with them in the first place! but for someone who already has put a foot in the software engineering world, its easier, funnier and more practical to learn by building projects rather than learning pure concepts that you already have at least a basic idea with, and can be further understood by utilizing them in a project you're building.

![Image that shows the wrong way of learning](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ojymltlle56xevj01mq.png)

**Second**, in the realm of backend, some things aren't just learnable by taking courses or reading articles and documentation, things like architectural concepts like micro-services, webhooks or operational skills like CI/CD and project maintenance and a lot more, one of you may argue that there is plenty of courses, docs and articles that teaches those things in details, but for me such concepts are better learned by doing then use their learning resources as references, just like you do with cooking recipes you don't study the recipe a head of time then cook it later!, the same can be said about a lot of backend engineering knowledge:

> Better learned by doing rather than reading

![Learn by doing not reading gif](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w21asp1l0trwb153lbe9.gif)

**Finally** and most important for me is me realizing that learning backend concepts piece by piece won't take you far, and that because those concepts are glued together in away that makes learning them separately doesn't make to much sense in the real world.

![Web Technologies are realated to each other](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4t5xuor3kr03xo77pgvw.png)

---

The Project We'll Build and It's Requirements

Choosing the right project to work on wasn't easy. I wanted something that's packed with features so I can utilize lots of different technologies and learn as much as possible. But most importantly, it had to be something I'm really passionate about and could work on for a long time.

My choices varied between:

After weighing my options, I've decided to build a **Learning Management System (LMS)**.

An LMS is a great project that will gimme room to implement a lot of core backend concepts: beside the obvious ones: Framework, Database, Authentication I can also implement a lot of other cool things like: splitting it into separate micro-services, implementing a messaging queue so the system is more robust and less coupled and a lot of other technical requirements.

The requirement of the (LMS) I wanna build are as follows:

1. User Roles

**1.1 Teacher**

**1.2 Student**

2. Core Features

**2.1 Course Management**

**2.2 Student Enrollment**

**2.3 Dashboards**

**2.4 Communication**

**2.5 Assessment and Grading**

**2.6 Course Marketplace**

3. Technical Requirements

**3.1 Frontend** which is the thing that it is not my priority for now, I'll focus on implementing a big part if not all the backend logic before I think of the front end

**3.2 Backend**

**3.3 Database**

4. Security and Compliance

**4.1 User Authentication**

**4.2 Data Protection**

**4.3 Access Control**

---

The Chosen Tech-stack and Why

Well well well, the choice of the tech stack will be highly subjective and constrained to the following 3 points:

1. **Keep away from what I already know**: where I'll try to get out of my comfort zone and use technologies that I'm not already familiar with (at the end of the day a lot of standardized technologies I'm not familiar with cuz I'm still kinda of a beginner)

2. **Technology spread and popularity**: This one is pretty straightforward, since I'm new and yet learning no need to choose some fancy rust based backend framework that only few hundred people know how to use on the world!

3. **What I personally see sexy and hot**: Cuz most of the time there is multiple choices that are very popular, and I'm not familiar with but I choose one over the other for no reason but cuz it sounds sexier!

therefor here is my tech-stack for this project:

**Backend Framework:**

**Database:**

**Programming Language:**

**Message Broker:**

**Cloud Hosting Provider:**

**Payment Integration:**

**Object Storage:**

**Caching:**

**Containerization:**

**Container Orchestration:**

**And Who Knows What Else...**

---

Conclusion

What I truly like about this new approach is that there is a lot of skills that I'll be forced to learn, things like Database Design, Operational skills like CI/CD and a lot more. And Concerning Java and DSA nothing changed, my DSA journey is still running and the next blog post will be either **DSA Part 1** or **Relational Database Design**, so stay tuned and see yaaaaaaaaaaaaaaaaaaa

← Back to Blog