8 lessons I learned from spending 4 years writing one course — Learn JavaScript


I finally completed my JavaScript course — Learn JavaScript — two weeks ago. I spent 4 years writing this course (which is a long time!). Today, I want to reflect on this journey and complete it before I move onto the next one.

If you’re interested in hearing the lessons I learned from dedicating 4 years of my life to building one course, then this article is for you!

Here are the lessons I learned:

You should sell something before you make it

Selling is the only way you can guarantee there’s demand. If you don’t sell before you make something, you run the risk of making something people don’t want.

Making something people don’t want is not a complete waste of time, since you still learn things in the process. But you generate lots of dread, despair and failure for future projects, which is not a good place to be in.

I know this because I made two other courses (without pre-selling them) before I made Learn JavaScript. The results from both of these products weren’t great. I almost had to find a job (and stop producing content) because I couldn’t support my family with the income I earned.

When I decided to work on Learn JavaScript, I was forced to pre-sell the course. If I didn’t earn enough money from it, I would have directed all my energy into a full-time job search.

Lucky for me, this pre-sell generated $10k revenue.. It gave me the courage to try writing a course one more time.

It’s okay to sell as you make something

We have this notion that it’s unethical to sell something you haven’t made yet, so pre-selling is already a big problem. But selling something that’s not complete? That’s an ever bigger problem.

For a long time I’ve rebelled against selling stuff before it’s complete (except for the initial pre-sell). But I have started to relax this notion after 4 years of writing Learn JavaScript.

That’s because I was (again) forced to sell Learn JavaScript to make money, so I can cover my expenses, energy, and time spent to produce a great course.

I first opened up registration for Learn JavaScript 3 months after the initial pre-sell. I did this for two reasons:

  • I expected myself to complete Learn JavaScript in 3 months. (I know it sounds like a bad joke since I took 4 years). I promised some people I was going to open registration up again then.
  • $10k wasn’t enough for me to survive the upcoming year. If I didn’t try to sell something, I would have to go back and find a job.

By the second launch, I already had some content available so people who joined could benefit from my materials immediately. To my surprise, this second launch did far better than the pre-sell. It made approximately $40k in revenue, and it gave me even more time and room to work on the course.

I learned it’s okay to sell something as long as the people buying it get what they want. (More on this in the customer expectation section).

To pay these early supporters back, I told myself I’m going to create the best JavaScript course ever.

I continued to launch Learn JavaScript every 6 months thereafter and each launch gave me $40k revenue. The results were consistent and remain this way today.

If I didn’t sell while I created Learn JavaScript, I wouldn’t have been able to dedicate the time and energy to make Learn JavaScript the best possible JavaScript course out there. I spent so many hours on Learn JavaScript, I even reworked the course midway to optimize a students’ learning experience. And the results were beyond my expectations.

Make things better by making better things

This is my favourite Seth Godin quote so far.

It was worthwhile spending four years working on Learn JavaScript because of the results it received. People were saying things like:

  • Learn JavaScript was the only course that helped them understand JavaScript — when they were on the verge of giving up.
  • I made JavaScript fun and easy to learn by using everyday analogies that make it practical for them to understand.
  • By going through Learn JavaScript, they were able to build something by themselves for the first time, which was impossible for them before.
  • They were able to finally remember some JavaScript and use it to make things. Before this, everything was just a blur.

These testimonials helped me understand that I was making something useful to the public. I was making things better by making better things.

Learn JavaScript slowly grew to become a source of pride and joy because I know it helped people.

I gained confidence in my own product and I’m happy to sell it.

Handling failures and customer expectations

I thought I needed 3 months to make Learn JavaScript. I failed, obviously.

When I failed to meet my deadline, I gave myself another 3 months. But I failed to complete it again.

Then I gave myself 6 months… and I failed once again.

Then I gave myself a year… and you know I failed again.

It was demoralizing.

I felt defeated

Each time I fail to meet the deadline, I would tell my customers about the failure and seek their forgiveness. I would give them the option to get a refund before I failed to deliver my promise on time.

Some customers opted for the refund and talked me down and that felt horrible too. I felt like I was the most irresponsible person on Earth.

But other customers told they’re buying the quality content I’m creating. They said I should take my time — and not half-ass the course because I was rushing to meet the deadline.

This mindset kept me afloat over the four years, when I was filled with feelings of failure and guilt.

I’m grateful to have customers who believe in me. And I’d like to express my thanks right here and now. Thank you.

Today, I’m still afraid of deadlines. I don’t dare to promise anyone I’m going to complete a large project by a specific deadline. This is a trauma I’ve created that I have to wrestle with. I need to learn to score victory over planning and deadlines to become more confident in my ability to deliver going forward.

Promise dreams, not features

The biggest mistake I made with Learn JavaScript is promising features. I should have promised the dream of the feature.

The dream is to be able to understand JavaScript enough to code things from scratch without googling. There are multiple ways to achieve this dream.

One way is to learn a concept thoroughly, then build something with it immediately, so the concept becomes concrete and baked into the brain. This alone, is already sufficient. (I built this into the course btw).

On my pre-sell for Learn JavaScript, I promised 4 features that ended up increasing the complexity of this course.

  • Building Real World Components
  • Building them step by step
  • Improving them as you learn more
  • Building 20 of these real-world components

If you’ve ever built a real-world component, you know how much work it takes. It’s not a problem to promise the first three features since they built up knowledge for the students. It’s something I wanted too.

But the 4th feature — the 20 components — is the killer.

Since I promised 20 real-world components, I had to include a lot of content for the 20 components to become real enough.

If I didn’t focus on “20 components” as a feature, I could have split the course into many smaller courses which focused on one aspect at a time. Examples include:

  • Basic JS with simple components
  • Advanced components with DOM Manipulation
  • Components with asynchronous JS
  • Keyboard and screen reader accessibility
  • Reusability

If I saw these possibilities, I could have spilt the course up. I could have sold each segment at a lower price point, and helped more developers learn a specific aspect they had problems with.

But I was blind to these possibilities because I was so focused on the 20 component feature.

I won’t do anything to Learn JavaScript right now since I’m exhausted from writing the course. But I may come back and split this up into smaller courses going forward. No promises though.

Panic and greed doesn’t change results

I was panicking about results in Year 1. “Can I make $40k again in the next 6 months?“. I kept asking myself this question. The panic grew and I tried to look for freelance opportunities. I even hired a coach to help me with it.

Turns out, I didn’t want to freelance at all. I couldn’t dedicate the energy towards freelance when I have such a huge course to write. So even though I paid money for a course, I couldn’t use it effectively. No results there.

I kept panicking about money throughout Year 2 as well. Again, I was unsure whether I would make $40k revenue every 6 months. It’s painful not to know. During this time, I also tried reworking the sales emails for each launch. But there were no difference in results. My efforts didn’t show any results.

In Year 3, I panicked too. But this time it was because I have a huge commitment looming over me — I bought a house and we were in debt. I wanted to pay off this debt quickly. And I got greedy trying to “increase the money” as much as I can. I bought into another coaching program that promised personal coaching and accountability (which didn’t get delivered). Aside from that, I also couldn’t spend enough time and energy to dedicate myself to that course. So it became another waste of money.

After these attempts, I’ve gotten to a point where I know my greed and panic is not going to help. I know buying courses about marketing/sales is not going to help me more towards increasing revenue of the business. And I need to double down my efforts into creating something useful again. That’s the best possible path forward.

Happiness isn’t simple math

I am making a decent amount of money from Learn JavaScript. I am also serving people and helping them improve. I should be happy. Right?

And I was. I was happy when I made the money. I was happy when I helped people understand something. I was happy when they got Aha moments. I was happy when they told me they got jobs because of my course. But this happiness was short-lived. It dissipates quickly, sometimes even within seconds of receiving the message.

I bought into the bullshit that “serving others” would bring me joy. Although this statement was true — it’s a fact it brought me some joy — I couldn’t depend on “serving others” to make me happy.

I felt miserable all the time and I didn’t understand why.

Although I was happy doing the work of creating amazing content, I wasn’t happy because I didn’t give myself the chance to do things I enjoy.

  • I wasn’t making new websites
  • I wasn’t playing with new designs
  • I wasn’t making apps — which is why I got into web development in the first place

So while joy was being generated, it was also being consumed extremely quickly because of my scarcity in joy from other areas of my life. I cannot depend on joy from one area to fill the pain in another area. I to had work on the area that gave me problems instead.

So happiness isn’t a simple arithemetic equation where I could add the total amounts of joy up and subtract the pain from it.

It’s a weighted arithmetic.

This weighted arithmetic determines the overall state I am in.

Focus on systems that work

One important process often touted these days is to create habits that work.

Habits here are simply unconscious behaviours that have been baked into our systems. It is NOT about doing something daily forever (although daily reinforcement certainly helps).

Daily habits here don’t really help for me because I can’t stick to them all the time — my life varies wildly depending on the commitments I’m keeping up.

I can’t always depend on “cornerstone” habits like exercising and meditating everyday. Sometimes I was forced to drop these habits. And later on when I have more bandwidth, I would pick them up again.

What I’m saying is although habits help, it’s more important to focus on the systems.

What do I mean by a system?

Systems are strategies you have developed that allow you to focus on a process to achieve the results you want.

One example is writing.

When I’m writing, there are three stages that I have to tackle separately

  • Writing a lousy brain-dump draft of the entire article
  • Re-writing the article again with a focused intention.
  • Editing the article

If I follow through this process strictly, I would have an article in 3 pass-throughs. If I don’t follow this process, I get stuck. (And I don’t follow these processes perfectly, unfortunately).

Another example is blogging.

I know I need to create one article each week. I also need to create lessons for Learn JavaScript. One simple strategy is to write 1 article each week and focus the rest of the time on Learn JavaScript.

But this strategy doesn’t work because I’m unable to pull myself back into blogging mode when I’m neck-deep in Learn JavaScript concepts.

As an alternative, I focus on writing 4-5 articles in one week (or 8-10 articles in two) before I dive into Learn JavaScript. Here, I know I can dedicate the entire month to writing the course without having to worry about my blog. I also have an assistant that helps me publish my blogs so I don’t have to remember to publish them, which takes me out of the writing flow.

I hope these examples help to spell out what a system means for me.

What did you take away?

  • Did you learn anything from reading this article?
  • How would you approach a large project?
  • How would you build systems that improve your productivity and happiness?

I’d love to hear your thoughts! Please share them with me via email or twitter! (I read all replies).

Want to become a better Frontend Developer?

Don’t worry about where to start. I’ll send you a library of articles frontend developers have found useful!

  • 60+ CSS articles
  • 90+ JavaScript articles

I’ll also send you one article every week to help you improve your FED skills crazy fast!