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 meetups 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 tripo-pro professional tripod. DSLR setup for videos was so complex that I badly need an easy to use yet really good webcam. So, I bought a Logitech HD Pro Webcam C920 — super impressed with it.
- 🎙 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.
- 🎤 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, audio systems (learn Audacity again, and step it up a little — to learn Adobe Audition this time), get these new mics shipped here (since 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 am going to record 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. Spent two weeks pinning down the details of a free + pro course and recorded 90% of the free course.
- 😩 REVIEW PROGRESS: Now 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 had 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 a user has watched, and 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 actually do all that and spent about ten or so months on this.
✅ It was a hard thing to watch myself dwell into the pool of over-engineering. I was sold a couple of my commercial projects product to support the time spent on this but had a few things going so, it was kind of a part-time thingy.
✅ 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). 💯
Now you’ll read the post from 2018 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 course in November 2018. I love to teach. I come from a family of teachers, both my parents and grandparents — a genetic bug in me?! Haha.
I am going to share with you 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.
Launching the VSCode Power User Course
In the last two years, as a consultant, I worked with Googlers and engineers from Microsoft, Netflix, MongoDB, 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 been having 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 VSCode.pro 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. 🤣
Making of VSCode.pro Course#
It took a lot to simply launch this course online. 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, building a home studio, modeling for the pitch video (my first time selling something on camera, felt weird), and more.
💸 Lifetime subscription with a one-time payment. Many friends suggested me to 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 SaaS monthly fee which means 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 flue, 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 single day. People would wake up by the time I was done for the day. Completely exhausted with 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. Two times, I recorded hours-long videos, only to find out I had forgotten to press the RECORD button. Or the disc space was full and 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 a different kind of animal. Imagine how boring it would be if you have 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 on 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, WordPress as a backend/database because why not, built my own mailing server coupled with a small set of microservices hosted via Docker and managed with 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 to do the same with video learning. Also why I am launching a free video tips series called #OneDevMinute — already shared a few.
🤣 Dumb mistakes. When you build all that from scratch you’re bound to make mistakes. 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, in-person, and online one-to-one training but had never really done an online course.
I spent about a year building my audience, VSCode community was new for 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.
Pre-order the Node.js CLI Automation Course
I’ve also just announced my new course on NodeCLI.com where I am going to 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 I believe this 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 COVID19.
Takeaway my professional opinion on open-source, developer relations, growing your business with family, and everything in between! Delivered to your inbox a couple of times every year. I'm even funny at times. I hate spam — pinky-promise!