Back to Journal

Building Fajr: Lessons from Shipping an LMS in Production

How a real product with real constraints taught me that business-first thinking beats technical perfectionism.

backendproductarchitecture

The Reality Check

For months, I'd been building systems in isolation. Reading architecture books. Debating ORMs. Rewriting things that already worked. Then in early 2023, I got asked a simple question: "Can you build a learning platform for students in Kuwait?"

No ambiguity. No time to overthink. Real people, real deadlines, real money on the line.

That's when everything changed.

Business First, Code Second

Before I wrote a single line, I sat down and asked the questions that actually matter:

The technical architecture came after those answers. Not before.

I could have built a microservices mess. Instead, I chose:

Node.js + Express — familiar, gets out of the way, doesn't force abstraction patterns that don't fit.

PostgreSQL + Prisma — relational data fits a school structure perfectly. Courses have lessons. Students enroll in courses. Transactions matter here.

Redis for sessions — stateless API tier, fast cache layer for frequently fetched data (student grades, lesson listings).

S3 for video storage — don't reinvent the wheel. S3 is simple, reliable, and vastly cheaper than trying to stream from a box under my desk.

Shipping Beats Perfection

Here's what actually happened:

Week 1: Got basic auth and course creation working. Deployed to a VPS. Teachers could log in.

Week 2: Video upload wasn't transcoding properly. Instead of building a perfect video pipeline, I used FFmpeg in a background job. It wasn't elegant. It worked.

Week 3: Query performance tanked when a teacher tried to load a course with 500 students. I added a database index and moved on. Not the fancy NoSQL sharding I'd daydreamed about. Just an index.

Week 4: Students are using it daily. Real feedback. Real bugs. Real priorities.

The system wasn't beautiful. But it shipped, and it solved a real problem. Students in Fajr could upload assignments. Teachers could grade them. Parents could see their kids' progress.

What I Learned

  1. Constraints are gifts. A 3-week deadline isn't punishment — it's permission to stop overthinking and start shipping.

  2. Boring tech wins. My stack wasn't novel. Express, Postgres, Redis, S3. Combined, they've powered millions of production systems. That's not a bug — that's proof.

  3. Real feedback is worth more than perfect architecture. A teacher saying "I can finally see who's submitted their assignment" teaches me more than a week of architectural diagrams ever could.

  4. The next rewrite is always better. Fajr isn't perfect. Neither is any system that's been in use for years. But instead of rewriting it from scratch with "better design," I maintain it, add features, and move on to the next problem.

Now What?

This experience reset how I approach every new project. Ask first. Build second. Ship to real users. Then iterate.

The systems I'm proudest of aren't the most architecturally perfect. They're the ones that actually serve people, handle real constraints, and keep running when I'm not looking.

Fajr taught me that.