This post was first published here.
Watch as a video on YouTube:
In 2018, I started Coding With Flutter as the go-to place for learning Flutter. I already blogged about how it all started back then.
2019 has been a very busy year for me, as I've continued to grow Coding With Flutter (now CodeWithAndrea.com) on multiple fronts.
This article is a complete retrospective of the year just gone. Here I share my journey as a content creator, along with all the numbers from my YouTube channel, and a full income report from my Udemy sales.
For reference, these were my goals for the year:
Year 2019: Goals
- Launch my Flutter Udemy course and reach $4000 in monthly recurring revenue (MRR)
- Reach 10000 YouTube subscribers
- Relaunch
Coding With FlutterCodeWithAndrea.com as a self-hosted website
Let's see how I have done. 😉
Flutter Udemy Course
Here are my sales numbers for 2019:
Before I tell you how I got there, I want to share my reasons for becoming an instructor:
- Share my knowledge and help people become better developers
- Do this full-time by creating a sustainable business
Following the amazing feedback from my prior YouTube videos, I felt that I could create a great course.
Back in 2018, there were a handful of Flutter courses of Udemy. The top three spots were already taken by high-quality, full courses by established instructors.
And I felt that I could earn a top-three rank also.
As January started, I was already producing the video content, and had been for the past three months.
Udemy or Teachable?
At the time I was trying to choose the right platform to sell my course.
I was quite torn between Udemy and Teachable, and posted an analysis with my thought process on r/Entrepreneur
, to get some advice.
After much deliberation, I decided to go with Udemy. I felt that my audience was still too small to generate enough income on a self-hosted platform.
And I figured that Udemy's traffic would give my course much needed exposure, despite taking 50% commission on sales and heavily controlling pricing.
Early access
I was planning to release more than 20 hours of content.
My course was still far from complete, but I didn't want to wait until launch to get valuable feedback.
Back then, I wanted to include a module with an introduction to the Dart Language.
So I decided to share it for free on YouTube, and get some more sign-ups for my newsletter.
By March time, I opened the course for early access, by invitation only.
I sent an email to my 2000 subscribers, giving away the first 50 copies for free. These sold out within hours and gave me the first few students and reviews.
Then, I started giving away discounted coupons every few weeks, with prices ranging from $10 to $15.
In the first month, I made nearly $900 in sales from my own promotions. More importantly, I validated two things:
- People did actually pay for my content
- Students really liked the course
This was a much-needed boost. From there, I started to publish new chapters weekly, and answer all questions on the course Q/A.
Sometime in May, I made the course password-protected, shared an announcement on YouTube, and added links to the description of all my other videos. 😇
Result: another boost in sales, totaling $1600 for the month. And I also reached 200 enrolled students with an average rating of 4.8.
Google I/O took place, and Angela Lu published her official Flutter course, in collaboration with Google.
Udemy was getting quite crowded, and I knew it would be harder and harder to reach top-ranking spots as time went along.
As summer started, my freelance work was winding down, giving me more time to focus on the course.
Late in August, I finally managed to complete all the recordings, and set a launch date for the 9th of September.
Course Launch
I went all in, making big launch announcements on my newsletter, blog, YouTube channel and social media.
For the whole month of September, I was closely following sales, traffic, impressions, conversion rates, and my rankings on Udemy.
On launch day, my course ranked #38 for Flutter (out of 72), and managed to climb to #8 over the coming week.
Around the same time, I joined the the published Instructor Club on Udemy, where I found some tips improve my ranking (I even took this Udemy SEO course, which taught me a few tricks).
September ended with 380 enrollments and $2650 in sales. Of this number, $2000 were from my own promotions, and the rest from Udemy.
I felt this was satisfactory, but still shy of my $4000 goal.
However, I could see that other higher-ranked courses had many more students. Top courses were growing ~10x faster than mine.
I discovered some interesting statistics on the Udemy insights page for Flutter:
Top earning courses make over $15000 per month. But the median monthly revenue is around ~$100.
In other words, the winner takes all. And only courses that rank very high get a chance.
So I needed to improve the course ranking to get more sales. To that effect, I did a few things:
- Improve the course metadata (landing page, keywords etc.)
- Drive direct traffic from my promotions
- Answer all questions timely to keep students happy
In fact, I offered great support since the beginning. I answered over 90% of questions within 24 hours. And went to great lengths to help out my students. This was worth it and often resulted in amazing reviews.
Takeaway: As an instructor, care about your students - it pays off.
In October I did some big course updates, and also recorded a new course preview.
And I shifted my attention to my YouTube channel, as a way to get more subscribers, and ultimately, more sales.
November was the highest grossing month at $2850 as Udemy was running many promotions (including Black Friday). I went on holidays for two weeks, and I was still earning $100/day without actively working. 😎
December was a more regular month, and I ended up with $2100 in sales.
The value of the mailing list
Having a mailing list was crucial to getting sales on Udemy.
Since day one, I have asked visitors to sign up on my website.
Being able to email my followers with announcements and promotions has been key in getting students and good reviews.
Takeaway: get people's emails (but don't spam them).
My YouTube Channel
My vision was always to publish high-quality, free tutorials alongside my paid content.
Some of my videos from 2018 were very popular, and I wanted to replicate that success in 2019.
However, course production took a huge chunk of my time (more on this later), and I was only able to publish new videos infrequently until September.
My newest videos weren't getting watched as much as the older ones. So I set out discovering why.
Truth be told, my first 12 months as a YouTuber were a bit of an experiment.
I didn't think strategically about how to make great videos, nor I cared about what other successful instructors were doing.
That is, until I discovered fireship.io, which is my favourite programming channel to this day.
I really liked Jeff's fast-paced and humourous style, and I saw his channel grow hugely compared to my (comparatively) modest progress.
So after launching my course, I set out to ramp up my YouTube production, and raise the bar for myself.
To that effect I:
- better organized my videos with playlists
- included very short "like and subscribe" prompts in my videos
- started interacting more with the community on the channel
- added end-screens to get extra subscribes and increase watch-time
But despite that, my videos were still underperforming.
Until I published Design, Develop, Deliver: My Favorite Tools for Building Flutter Apps.
Within a week, this single video earned 10000 views, which was ~10x my channel average.
Around that time I learned a new trick watching one of Sean Allen's videos, where he shared his YouTube business numbers.
The trick was to go beyond my specific niche (Flutter) and occasionally do beginner videos that appeal to a wider audience.
This helps to bring in new subscribers, that can then go more in depth with my other videos.
Beyond that, I still had many questions about what content I should create:
- Beginner vs Intermediate vs Advanced videos?
- Tutorial style: code-along or code-walkthrough?
- What topics to focus on?
I asked some of these questions directly to my subscribers, and received good insights.
I made a point of checking what other successful instructors were doing.
I discovered some other great channels such as Code With Mosh (one of my new favorites) and Traversy Media, who even made a video about 20+ Developer YouTube Channels To Follow.
It dawned on me that the most successful programming channels are primarily teaching web development, and the two most popular programming languages - Python and Javascript.
As far as my content goes, I still 💙 Flutter, so I won't be switching languages any time soon. But 2020 may bring something complementary to the mix. 😉
YouTube in numbers
I'm happy to report that I reached my 10K subscribers goal, and exceeded 1 million minutes of watch time.
So here's a Sean Allen-inspired table with my YouTube numbers:
October was by far the best month, and growth has picked up since then.
Flutter Interact took place in December. And many developers turned their attention to Flutter for the first time.
I took advantage of this and published What's great about Flutter, an in-depth high-level overview about Flutter.
This video reached 2x my average watch time - but nothing spectacular.
Overall, the lifetime views on my channel have spiked considerably since October:
And here are the total lifetime numbers for the top 10 videos:
The very first videos I made are still the most popular to date. They were beginner-friendly and ideal for anyone just getting started with Flutter. To this day, people keep praising my original layout and Firebase authentication videos.
The value of YouTube
Overall, I feel that YouTube is an amazing platform and launchpad for paid courses.
I put some of my best content on YouTube, and plan to continue doing so in 2020, while experimenting with new formats.
My Blog in 2019
I focused heavily on my course and YouTube channel in 2019. But I still found some time to sneak in a few articles. 😉
Here are my three most popular ones:
- Widget-Async-Bloc-Service: A Practical Architecture for Flutter Apps (15K views)
- Super Simple Authentication Flow with Flutter & Firebase (14K views)
- Flutter State Management: setState, BLoC, ValueNotifier, Provider (8.4K views)
I also started writing transcripts for some of my videos. Transcripts are good for reference, and some people prefer to read rather than watch.
I will write more articles in the future. But these will no longer be on Medium. 😉
CodeWithAndrea.com
When I started blogging about Flutter in 2018, I was using Medium.
It was easy to use, and got me a lot of traffic in a few occasions.
Later on, Medium pivoted from a free platform to an "open paywall" model, with the premise of letting writers make money on their articles.
This was not a welcome change for readers, and certainly it didn't align with my goals. In fact, I wanted full control on what content I made free to everyone (my articles and videos), and what was paid (my course).
I shared the same sentiment as the rest of the community, and wanted to move my blog to a self-hosted solution.
During WWDC in June, John Sundell announced that he was building a static site generator in Swift, and shared more details on his talk at ServerSide.swift.
I have been a great fan on John for a long time, and the prospect of using Swift to create a lightning-fast, Javascript-free website was exciting.
So I decided to hold-off from using other site generators (e.g. Jekyll, Gatsby), and wait patiently for him to open source his work.
The fruit of his work came to light in December, and I started building my own site.
The launch didn't quite make it by the end of the year, but it was close and I'm very happy that you're reading this retrospective here.
Code With Andrea is a great platform for all my future tutorials. And when readers are on my site, all my courses are just one click away. 😎
Passive Income or Full Time Business?
As I learned first-hand, starting an online teaching business and making (good) courses is a huge time commitment.
I didn't see the first dollar until six months after I started making the course.
For reference, I spent 1468 hours growing my business so far. That's 9 months of full time work.
Here's a breakdown by activity type:
- Course Production: 540h
- Coding: 272h
- YouTube Production: 236h
- Blogging: 162h
- Website & Setup: 78h
- Community Engagement: 57h
- Promotion: 49h
- Other: 74h
The biggest chunk of the pie here is course production. This includes scripting, recording, editing and publishing.
That alone accounted for 540 hours, without including the coding work I did in preparation.
Given the total time invested, valued at $50 per hour (still less than my contracting rate), I would have to make $73400 in sales to break even.
Assuming steady sales of $2000 per month, it would take 2.5 years to reach that figure.
Bottom line: getting started is hard. Return on investment can take years (even with high-quality videos/courses). Your mileage may vary.
Life as a content creator
Beyond the technical analysis of my business, 2019 has been a big transition for me.
Going from freelance developer to content creator is a big change.
For starters, my previous pay was very predictable for months at a time, and mostly based on competitive market rates for app development (especially in London).
As a content creator my pay is determined entirely by course sales (and potentially other avenues in the future).
Not only return on investment is delayed by months or years, but payouts can change widely month by month.
Beyond that, the nature of the work is completely different.
App development works on the tick-tock of sprints, where requirements are massaged into stories that are ready for developers to pick up, work on, and deliver. Rinse and repeat.
There may be differences in how teams work, but the flow of work is often predictable.
As a content creator, none of that exists. And it is a case of coming up with the right topics to teach.
My video creation process is made of these steps:
- test my idea with a demo app
- write a well-strucured script
- record, compose and edit the video
- publish and share
Sometimes videos perform extremely well, sometimes not much. There's no secret formula to success, other than consistency and developing some intuition about what might work.
As a content creator, I learned a lot of new skills beyond app development, and I very much enjoy the creative aspect of it.
But it is a very lonely effort as I have no in-person contact with my students. This is by design, as I need thousands of paying students to make my business sustainable.
So the social side of things lacks compared to any team or office-based work. There are some benefits though:
On the plus side, I decide how much I want to work and when, and when I do I work as smart as I can. Even as a full-time content creator, I work ~30 hours a week. For me that's the right life-work balance.
Bottom line: I love being a content creator, but it has its downsides and it's not for everyone.
Lessons Learned & Future Outlook
I have learned many lessons along the way, and I feel that doubling my monthly sales from $2000 to $4000 should take less effort than going from $0 to $2000.
My audience is growing, and a lot of my students would love to see a second course.
According to Udemy, there are 400K students learning Flutter, and the FlutterDev subreddit has grown to 27K followers since early 2018.
In retrospect, perhaps my biggest mistake was to launch a course that was too big, took too long to complete, and "missed the boat" when there was less competition on Udemy.
Course pricing is a whole other sticky point.
Udemy often discounts courses for $15 or less (as low as $10). I felt that a fair price for my course is around $50, but decided to offer it for $15 and hope for volume sales.
And by the time Udemy takes its share of the pie, I'm earning just over $7 per sale (on average).
Given Udemy's pricing model, launching smaller courses may be a better strategy, and more sustainable in the long term.
Was Udemy worth it?
To this day, sales from my own promotions have surpassed sales from the Udemy organic, affiliate and ad programs combined, nearly every month.
Given my target sales, Udemy as a platform has been under-performing so far.
Since launch, my course rank for "flutter" has risen from #38 to #8, down to #15, and back to #7 recently. But it also shows at #3 under the "Mobile Apps" -> "Google Flutter" category, meaning that more people find and buy it from discovery than search.
In fact, I recently started monitoring visitors to my course by traffic source:
This table (along with the revenue report) is already revealing some interesting insights:
- The traffic from Udemy contributes to ~40% of my revenue.
- Traffic from my own channels (promotions, YouTube, website, Twitter) drives 60% of my revenue.
I can't do much to influence Udemy traffic. But with the launch of CodeWithAndrea.com and the growth of my YouTube channel, I should see some better numbers in the future. 🙂
Going forward I'd like to get a feel for Teachable, perhaps by launching a smaller course. And then I can take it from there.
2020 Goals
In 2019 I laid the foundations for solid growth in the future.
So here are my goals for 2020:
- launch (at least) one more course
- $5000 monthly recurring revenue
- 30K subscribers on YouTube
I'll try to diversify my revenue beyond course sales, and my new website will be a strong platform to grow my business.
Helping People Learn
Both my course and YouTube channel have helped many, many people.
In 2019, I have taught nearly 800K minutes to over 2000 students in my course, and over 1M minutes on YouTube.
My ratings are very high, having ranged from 4.7 to 4.8 for the lifetime of the course.
My students and subscribers love my content, and have said so on many occasions.
I have a very supportive audience, which keeps me going.
I love being a content creator. Helping others become better developers - while growing a sustainable business - is very rewarding.
I'd like to extend my warmest thanks to everyone who has been with me on this journey, and I hope to do even better in 2020.
If you're planning to create your own content - whether it's a blog, YouTube channel or courses - I hope this retrospective has helped you. If you have any feedback on this, you can write me on Twitter or email me.
Credits
The following people have greatly inspired me in my journey in 2019:
Top comments (1)
Thank you for such a concise article. The visualizations and your detailed break downs taught me a lot about online education. Keep pushhin! 🛹