In this post, you’ll learn how I built my own Learn Management System (LMS) to launch my courses (VSCode.pro and now NodeCLI.com). This is a compilation of two posts I wrote back in 2017 and 2018. Mostly random thoughts instead of an actual blog. Here goes nothing…
If you have ever been to a conference where I gave a talk, or if you are one of my meetup attendees — then you know one thing about me. I love to teach.
I know it’s genetic and all that, but I can’t help it. Brain dumping has a nice effect on my mood. But that’s a story for another day.
👌 So, in 2017, I finally became serious about teaching online. I have been teaching via in-person workshops. But online, there’s a huge audience.
🤔 I knew I had to invest in a better mic, create videos, find a good learn-management system (let’s call it a course-building platform), and boom.
🚀 So, here’s how I went about it, read it like you are sitting inside my brain and can actually hear what my brain is thinking and ordering me to do next
⚠️ WARNING: Do NOT try this at home. ;)
- 🕵️♀️ STEP #1: Research everything, talk to my friends like Kent C Dodds, Morten, etc., and figure out the best way to move forward. I spent an entire month (part-time) doing just that.
- ⏺ STEP#2: Settle for a recording software → I use ScreenFlow, Adobe After Effects, and Adobe Auditions to record and edit my screencasts on Mac.
- 📹 STEP #3: Get a nice DSLR camera (for no reason at all) → My camera is Nikon D5300 with Tamron 17-50mm f/2.8 VC and a Slik s304 tripod-pro professional tripod. I have since switched to a Mirrorless Sony A7C with Sigma Art and Song G-master Lens. You can read about all the tools I use here. I also use a Logitech BRIO 4K and have the old Logitech C920 as well — I’d say they’re both okayish cams.
- 🎙 STEP #4: Invest in a good quality Mic. I acted upon the advice of Chris Coyer and Shawn Hesketh → My mic is the Rode Podcaster on a Rode PSA1 Boom Arm with the Rode PSM1 Shockmount and a Rode WS2 pop shield. It works pretty well. But now I have switched to the awesome Shure SM7B. More on this page.
- 🎤 STEP #5: Have a portable mic for when I am traveling → I also bought a portable mic called Blue Snowflake. Here’s a picture of it and a silly custom boom arm with it.
- 🙈 STEP #6: Get distracted and research about different mics, and audio systems (learn Audacity again, and step it up a little — to learn Adobe Audition this time), and get these new mics shipped here (since they are not available in the local market), fight with customs officials (they didn’t let me ship it), get my sister-in-law Nida to buy the Rode podcaster in London and get it shipped to Qatar, from where my brother-in-law Usman brought it to Lahore. There we go, another month spent.
- 🕸 STEP #7: Buy six domains for different courses. I will record it because we are too excited, aren’t we? Set up two domains first — let’s do a free and a pro course.
- 💸 STEP #8: Since I am an open sourcerer — I thought I should make my first course free — not sure why. I spent two weeks pinning down the details of a free + pro course and recorded 90% of the free course.
- 😩 REVIEW PROGRESS: After all this, I was ten and a half months into my next big endeavor (sold two of my commercial products and a share to my partners to support my time on this). I had all the equipment, all the details, domains, servers, frameworks, custom landing pages, heck even built myself a custom course platform, but instead of recording the last four videos, here’s what I chose to do. Engineers!
- 🏗 STEP #11: Over-engineer the course platform
✅ I should know who’s taking my course; their name is the least I could ask for, but not at the registration page (that would mean low conversion rates), but after they log in for the first time. Built another custom solution for this.
✅ The registration should happen with WP REST API, and my users should get a login URL on signing up. A custom solution was built again.
✅ Oops — WP REST API: Does NOT Trigger New User Notifications! Create a core Trac ticket to patch the WordPress core #40477.
✅ How about the ability to know a user’s progress? How many videos does a user watch? Maybe send them an email if they left at 60% progress. — That’d be cool. But how do I do emails this time?
✅ Instead of embedding Vimeo Pro, let’s stream it via an HTML5 player. Yet another custom HTML5 player was built, with custom speed controls and animating speed dial.
- 🙃 STEP #12: Launch the course. 🤔 hmm… ⁉
So, yes. I did all that and spent about ten months on this.
✅ It was a hard thing to watch myself dwell in the pool of over-engineering. I was sold a couple of my commercial projects product to support the time spent on this, but I had a few things going, so it was kind of a part-time side-hustle thing.
✅ I was also doing 10 to 15 hours per week of contract work and five hours of consultancy during this time. So, at least, it was not all that bad.
But what bothers me most is I never got around releasing any of it, that’s the sucker here. BUT I hope to release my courses this year (2018). 💯
The rest of the post is from 2017, when I finally launched an online course. Go easy on me. It was my first time.
Building A Course Platform — Launching VSCode.pro
I’m super excited to share that I finally launched my VSCode.pro and then NodeCLI.com courses. I have a bunch more you can check My Courses page. I love to teach. I come from a family of teachers; both parents and grandparents are teachers — defo a genetic bug?! Haha.
But why I released a course on VSCode.pro, what it took for me to do that, and the kind of impact I think I’ve had here?
In the last two years, as a consultant, I worked with Googlers and engineers from Microsoft, Netflix, MongoDB, and a couple of other major tech companies — to find out almost everyone was using VSCode — the new open-source editor from Microsoft. Must be a reason for that.
✅ So, I decided to check it out. The moment I switched to VSCode from Sublime, I felt overwhelmed, to say the least. But I’ve had serious issues with Sublime whenever I wanted to debug code, write TypeScript, or autoformat via ESLint/Prettier. It’s been 10 years since I’ve been using Sublime Text, but the eco-system has gone stale. Updates are years apart.
🤔 I wanted a guide, sort of a course where someone would make it easier for me to make this switch. After searching for a course, I didn’t find any. So, in 2017, I announced my intent to create such a course.
🙌 1,000+ hours of building, recording, getting sick 🤧, then re-recording & finally launching my course in over a year has been a nerve-racking task. I’ve poured my dev-heart out in this course.
The best way to get to know what you get in this course is by watching this 4 min long video — which I think is too long, but it has a hilarious ending. 🤣
🌟 If you can then support my work & buy the masterclass at →
Making of VSCode.pro Course#
It took a lot to launch this course online simply. It took a lot of decisions on which mic to choose, which audio software to buy and learn, the screen resolution best for most users, the video recording and editing software, getting an excellent audio engineer/DJ to improve the filters in Adobe Auditions, learning ScreenFlow deeply to do all audio/video and even writing some of the Closed Captions myself. And then, before all that — building my own custom Learning Management System where developers could log in to take the course.
♻️ I did everything from scratch. The entire life cycle of this course. Built the course site, the Learning Management System (LMS), recorded & edited the videos, audio engineering, built a home studio, modeled for the pitch video (my first time selling something on camera, it felt weird), and more.
💸 Lifetime subscription with a one-time payment. Many friends suggested I use a SaaS teaching platform. Save time and build a monthly subscription model. But I didn’t want to do any of that. Built from scratch. Pushed me back at least one year.
I wanted to be considerate of my student’s money and time. Now I don’t have to pay a monthly SaaS fee, so my students don’t have to care about a monthly subscription. It’s a lifetime subscription with a one-time payment and free updates. I am proud of what I’ve built here.
😩 Recording a course is extremely hard. You are sick; you have the flu; it’s the rush hour traffic time (lots of noise), or even if you are traveling — you can’t record a course in these conditions and more. It’s super tough. I’ve so much respect for fellow course authors. Honestly, it’s one of the hardest things I did. Salute to y’all.
☀️ I would wake up at 4 AM to record early every day. People would wake up by the time I was done for the day. Completely exhausted from recording for four to five hours, my throat would hurt, and I felt dizzy — all that to avoid noisy rush hour traffic and other normal-day interruptions.
😱 Silly accidents that taught me a lot. I recorded hours-long videos twice, only to find out I had forgotten to press the RECORD button. Or the disc space was full, and the recording stopped without any notice due to buggy software. I felt like crap. I wanted to quit. Sometimes, I did. I took a break for one week and then couldn’t get back to recording the same damn thing again.
🤔 Avoiding sleep-inducing boring content. Don’t get me wrong, I love teaching, but this course was different. Imagine how boring it would be if you had to teach people about 20 different shortcuts in a single video that should be less than 5 mins long. I had to rewrite and rerecord several times — perfectionist much.
⏰ Wasted time, or was it?! In 2017, I wrote about spending months trying to buy the right mic, testing it, and over-engineering the LMS I was building. That was worth it if you see the final result; I mean, video/audio is super crisp and high quality — but that much time wasted I’d never get back.
👨💻 Coding a custom LMS (Learning Management System). I researched almost 8 different LMS scripts. None of them fit the bill. So, I built one using Node.js, React.js, and WordPress as a backend/database because why not, I built my mailing server coupled with a small set of microservices hosted via Docker and managed with a small Kubernetes cluster (Go-lang for the win).
📹 #OneDevMinute videos. I’ve written a lot of content and managed content teams. But after setting up this entire video recording setup, I feel comfortable doing the same with video learning. Also, why I am launching a free video tips series called #OneDevMinute — I already shared a few.
🤣 Dumb mistakes. You’re bound to make mistakes when you build all that from scratch. I didn’t have time to test the platform much. Imagine how I felt when someone messaged me, “It’s not working”, also “Where are the videos,” and “I didn’t get the email”. It took quite a few sleepless nights but the platform pulled together, handing ~15,000 developers learning VSCode.
Impact of Building A Course#
Honestly, I always wanted to do this. I had done talks, workshops, and in-person and online one-to-one training but had never really done an online course.
I spent about a year building my audience, the VSCode community was new to me. I started by contributing code and documentation for this open-source software. I built the Shades of Purple theme, which went viral.
At the time of writing this, I’ve collected the following stats:
- 😮 14,184 developers are becoming VSCode Power Users
- 🏛️ ~400 companies bought team packages 60% to 70% off
- 👨🎓👩🎓 7,128+ students from 83+ universities took my course
- 👐 Donated $20,000 worth of course material to dev community
- 🇳🇬🇵🇰🇧🇷🇮🇳🇮🇩🇪🇬🇺🇿🇦🇿🇹🇯🇹🇳🇳🇵🇱🇰🇻🇳🇬🇭🇵🇭🇧🇳🇰🇼🇶🇦🇧🇭🇦🇪🇻🇪🇲🇽 and 149 other countries enjoy my courses on a 40% to 58% discounted price. It’s called Purchasing Power Parity — I support all countries that don’t have strong economies, like the US and 25 other economically strong countries. For me, this is a Learning > Earning initiative. Supporting diversity FTW!
✅ I’ve put a lot of effort into building VSCode.pro course. It can help save you 10 to 20 hours every month. You can switch to this open source and free editor in less than a yearly subscription of normal editors and learn it deeply through my course.
If you’re a company, a student — then contact me to get a discount code. If you’re from an emerging market part of a diverse community — just visit VSCode.pro and generate a coupon code to use during the check out. I’m running a 40% off discount for everyone right now (no coupons need for that). Thank you, for supporting my work.
I’ve also just announced my new course on NodeCLI.com, where I help developers learn how to build Node.js Command Line Interface (CLI) applications to automate grunt work.
I’m super excited about this course because it will help developers make better use of their time, impress their managers, improve their products, and make more money by building developer tools. That last part is important nowadays during COVID-19.
Stay ahead in the web dev community with Ahmad's expert insights on open-source, developer relations, dev-tools, and side-hustles. Insider-email-only-content. Don't miss out - subscirbe for a dose of professional advice and a dash of humor. No spam, pinky-promise!
✨ 172,438 Developers Already Subscribed
Awesome. It’s a labor of love. I wish y’all luck.
In case all y’all wanna read what it took me to build one like five years ago, a story of over-engineering at its best.
Gave it a read. Loved the amount of work you put into making all this happen.
Recording is not a simple task, even a short 5 minutes video take more than 20 minutes to prepare, record, edit.
You are right about that. Especially coz it’s not our first lang.