Learn how to validate your startup idea by pre-selling it, for only $80 (includes a free 1-hour consultancy call).
Interview with a Successful Startup Founder

Pre-Selling a Programming Course and Making $550k in Revenue

Josh Comeau
Josh Comeau
August 31, 2021
Category of startup
Country of startup
Revenue of startups
Interview with a Failed Startup Founder

Pre-Selling a Programming Course and Making $550k in Revenue

Josh Comeau
Josh Comeau
August 31, 2021
Category of startup
Country of startup
Cause of failure of the startup

Josh built CSS for JavaScript Developers, an online course that combines videos, articles, interactive widgets, and mini-games to help you learn CSS. He opened pre-orders for a week to validate the course and ended up selling $550k.



Hi Josh! Who are you and what are you currently working on?

Hi there! I’m a front-end software developer from Montreal, Canada. I’ve worked for organizations like Khan Academy, DigitalOcean, Concordia University, and Gatsby Inc.

For the past year, I’ve been building an online course called CSS for JavaScript Developers. It’s a comprehensive course that combines various media formats, from videos to articles to interactive widgets and mini-games.

Module 1 CSS Course

My original plan was to finish the course in 3-4 months. After 6 months, in March 2021, I was only about halfway through 😅. Not wanting to spend a year working on something that might flop, I decided to open pre-orders for 1 week, with the goal of selling $50k. The response was overwhelming—I wound up selling about $550k in that one week!

What's your backstory and how did you come up with the idea?

So in March 2020, right near the start of the pandemic, I injured my ulnar nerve.

Frustratingly, I found I wasn’t able to type without pain. For several months, I could only type for a couple of minutes before my elbow would start burning. It was a tricky predicament to be in as a software developer!

Josh Office

Fortunately, I was able to find a way to be productive without the use of my hands, and after about 8 months, I regained the ability to type. But the experience was harrowing, and it taught me a valuable lesson: life is short, and being able-bodied is temporary.

I had been pretty happy working as a staff software engineer, but I wanted to create my own thing. I imagined myself following in the footsteps of Wes Bos or Kent C. Dodds, becoming a full-time educator. So over the summer of last year, I left my job at Gatsby Inc. and started work on CSS for JavaScript Developers!

I chose to focus on CSS because I know so many JS developers who find CSS frustrating. Ask a typical React or Vue developer, and they’ll tell you that their least favorite part of the job is writing CSS. A lot of us really don’t like working with CSS 😅

CSS isn’t inherently bad, though! It’s a really elegant language. The problem is that it’s implicit. The rules of the language are concealed, and if you don’t understand those rules, you’re not going to have a good time.

So the goal for my course is to change that relationship, to help folks realize that CSS can be a lot of fun! It’s a pretty lofty goal, but I wanted to pick something that would be high-impact and long-lasting. I’m excited by the prospect of helping developers realize the elegance of CSS and hopefully make it as fun for them as JavaScript is!

How did you go from idea to product?

So, I did a bunch of stuff wrong, at least according to the indie-hacker best practices.

There are off-the-shelf course platforms I could have used, things like Teachable or Podia. The smart move might’ve been to pick one of them, but they weren’t sufficient for what I wanted to do. My vision was to create a rich, interactive course loaded with explorable examples and mini-games. So for the first couple of months, I focused on building the platform from scratch.

The big benefit here is making the content interactive. This is an active course, not a passive thing where you sit back and watch videos. 

It also meant I could customize the experience and make something unique and premium, and whimsical. For example, I’m pretty sure my course is the only one that celebrates your enrollment with live-animated fireworks.

Welcome Fireworks CSS Course

After those first couple months, I divided my time between content and platform. Once I had a couple of modules ready, I invited about 30 people to test-drive it. I offered free invitations to former students of mine, from when I taught a web-development bootcamp at Concordia University.

I got some good feedback from this process, but it wasn’t really ideal; the bootcamp alumni were busy in their job hunt, and because they hadn’t paid for the course, they weren’t really invested. They were checking it out as a favor to me, not because they were highly motivated to level up their CSS skills.

Towards the end of 2020, I started building in public. I shared quick GIFs of things I was working on, previews of the content and the platform.

This helped build some early traction, and I started covertly selling the course to people who had emailed me asking about it. I got a ton of valuable feedback this way.

By January 2021, I realized that I was still nowhere near completing the course, so I planned an “Early Access” launch. This would essentially be a crowdfunding campaign; for $129, people would get instant access to the first 5 modules, and they’d get to follow along with the course development.

As I mentioned, I set what I thought was an aggressive target of $50k. I wound up hitting that mark in about 10 minutes. 😅

I only kept sales open for 1 week because I still had a ton of work to do finishing the course and knew that a constant drip of new students would divide my attention too much. By the end of the week, I had sold almost 5000 copies:

Revenue Analytics CSS Course

It was a heck of a week. There were a bunch of technical issues (the downside of building your platform from scratch!), and I spent most of that week trying to catch up on an ever-growing mountain of support requests. It was stressful and exhilarating.

Of course, people weren’t paying for a half-baked CSS course. So after taking a couple of days to breathe, I got back to work on the course.

It’s currently August, and I plan to launch the course in full next month, on September 27th.

Which were your marketing strategies to grow your business?

My primary strategy has been to be as helpful as I can be! Both because I enjoy being helpful and because it’s a great way to show folks what they’re getting with me. If I’ve helped you solve a problem in the past, you’ll be more likely to trust my course!

I’m active on Twitter, sharing “quick tips” and small digestible bits of developer knowledge.

I also have a blog, joshwcomeau.com.

Google Analytics CSS Course

The blog posts are essentially “deep dive” versions of the tweets. They’re mainly on the topic of JS and CSS, though I have some posts about career and personal development.

My goal in mid-2019 was to publish 1 post every 2 weeks. My nerve injury got in the way of that goal, but I’ve managed to publish about 60 posts since then. It gets between 60-90k unique visits a month, according to Google Analytics.

When people visit my blog, they’re asked to join my newsletter. About 20k people have opted in so far.

I have two other email lists managed with ConvertKit.

  • I wrote a short book in 2020 focused on building a developer portfolio site. I self-published it and gave it away for free (though I do require an email address to send it to). About 12k people have downloaded the book.
  • I created a waitlist for folks who wanted updates on my CSS course. About 11k people have signed up for that one.

Email has been the most significant lever for me so far, and the only reason I have an email list is my blog.

Twitter has also been helpful (responsible for about 14% of sales, according to the referrer), but email is king.

How are you doing today and what are your goals for the future?

It’s been a busy 6 months since the Early Access pre-launch!

I’ve been spending the bulk of my time working on the course, filling in the last 5 modules. I’m also active in my course’s Discord, helping students who have been going through the course from the Early Access period.

In the future, I don’t think I’ll do things this way. It’s a surprising amount of pressure to be on the hook for delivering something that people have paid for! I’d rather work with a small group of test students and open sales to the public once the course is fully completed.

The flip side is that I’m not too worried about the launch in terms of revenue. The pre-launch has already funded the business for a few years, so any additional sales at this point are just frosting on the cake.

Organizationally, the “team” is just me and a part-time couple-hours-a-week contractor who helps with general admin tasks (customer support, video captioning, etc.). My expenses are pretty low, probably about $1000 per month.

I’m not looking to grow too quickly; I’m a fan of Paul Jarvis’ Company of One, and growth for growth’s sake isn’t something I’m interested in. For now, my focus is on creating a sustainable business for myself. Though I expect my ambitions will grow over the next couple of years!

Since starting CSS for Javascript Developers, what have been your main lessons?

So, super tactically: don’t do limited-edition coupons.

The night before the prelaunch opened, I sent an email to the waitlist with a coupon for $20 off. It was limited to the first 50 people who used it.

That coupon got used up in the first 90 seconds.

It takes more than 90 seconds for an email broadcast to complete, so there were people who clicked the link the moment they got the email, only to discover that the coupon code didn’t work. Dozens of people emailed me telling me that the coupon was broken.

Worse, about 50 people were shown that the coupon was successfully applied but later realized they were charged the total amount because the coupon expired in the seconds between when it was applied and when the checkout process was completed. I issued partial refunds for everyone affected, but it was chaos for those first couple of days. 

More broadly, I think that the pre-launch was so successful because I have such a high-quality bar. It’s trendy in certain circles to ship quickly, start with a barebones MVP, and iterate. And while I do agree that perfectionism can be dangerous, I do think it’s worth spending the time required to make sure you’re delivering something solid. 

It’s a nice idea to spend 2 weeks on a proof-of-concept to validate demand, but what if the only thing you’re validating is that people don’t want to buy something that only took you 2 weeks to build?

If you’re doing something totally unprecedented, then this is probably a good idea. But if you’re following in the footsteps of successful businesses, as I was with Wes Bos and Kent C. Dodds, the demand is already validated. You just need to nail the execution.

What were the biggest obstacles you overcame? What were your worst mistakes?

I mentioned the coupons, right? 😅

The biggest challenge has probably been how difficult it is to forecast work accurately. This won’t come as a surprise to anyone working on a technical product, but stuff always takes longer than you think. I had expected to finish this course in 3-4 months when in reality, it will have taken more than a year of full-time work.

I’m reminded of Hofstadter's Law: It always takes longer than you expect, even when you take Hofstadter's Law into account. If you think something will take 2 weeks, so you give yourself 4 weeks, it’ll probably take 8 weeks.

What tools & resources do you recommend?

In terms of tooling, I don’t use a ton of services. And the ones I do use are pretty run-of-the-mill.

I will say, for the developers reading this: Next.js is fantastic, even for complex full-stack applications! You don’t need a separate Node API; you can do everything with Next.js.

Another one for devs: join the Blogging for Devs community! It’s been a fantastic resource, a great place to learn about blogging and SEO.

Here are some books and podcasts I found helpful:

Where can we go to learn more?

You can find me on Twitter at @joshwcomeau, learn more about my CSS course at css-for-js.dev, or check out my blog at joshwcomeau.com.


The All-In-One Newsletter for Startup Founders

90% of startups fail. Learn how not to with our weekly guides and stories. Join +40,000 other startup founders!

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.