I am currently working on a new web application that will power all of my courses, both paid and free.
There are a lot of reasons why I am building the new courses site, so in this post I’ll try to discuss the current situation, what is wrong with it, other motivations for building a new course site, and then I’ll get into discussing what specifically I am working on and my progress.
Right now most of my courses are hosted across a variety websites. Gophercises.com has its own backend that I originally built as way to understand the space a little better. Web Development with Go and Test with Go have both of their landing pages hosted on Netlify as static HTML pages, but the material for both courses is all hosted on a custom members page. Finally there is my mini-course, Gopher Kit, which is just a playlist on YouTube.
The situation kinda sucks for a number of reasons.
For starters, it makes discovering some of the courses a little harder. You can sign up for Gophercises and never realize that I released Gopher Kit, so you can struggle to get a decent dev environment setup even though I have some resources available. Similarly, you might finish Gophercises and want to dive into web development but have no idea that I even offer a Web Development with Go course.
As I release new courses this issue becomes more and more pronounced, so I want to redo the course website now to fix it once and for all. That way once I release my new (and free!) course, Algorithms with Go, I will be able to share it with more people who could benefit from it.
Maintenance & upkeep are also rather annoying with the current setup. For instance, whenever I have a sale on a course I have to go update this in Gumroad (my payment processor), on each course page, and then I have to redeploy them all.
Or let’s say I wanted to improve the course experience with a new feature; even something simple like auto-playing the next video would require me to implement it on multiple web applications.
Again, when there were only one or two courses this was fine, but as I release more material this becomes tedious.
Another issue is the fact that the members page was not really designed for multiple courses, so the user experience there isn’t ideal. If you purchase both Test with Go and Web Development with Go you can access both from the members page, but you have to scroll down past all of the contents of one course to see the next and this can give the impression that a course is missing when it really isn’t.
That last section makes it sound like the current course experience is awful. In reality, the current course experience isn’t that bad. It just has plenty of room for improvements.
In addition to those improvements, there are also a few other factors motivating me to build a new course backend. For instance, I currently use Gumroad for all of my course payments, but Gumroad invoices have a tendency to land in the spam folder and this is definitely the number one cause for support emails. Redoing the course application would give me a chance to make it easier to discover invoices, even if the original email ends up in your spam folder. It would also give me a chance to explore alternative payment options.
I commonly refer to the new course website as the “course backend” because this is what powers the course viewing experience after you purchase, and I often view the landing/sales page as the “frontend” but those terms are probably not the best. Just be aware that if I say “backend” I probably mean the entire page - both UI and server - used to host my courses.
Other motivators weren’t even related to problems with the current website. A great example of this is my upcoming course, Advanced Web Development with Go. When building courses like this I prefer to build more than one application using the technologies in the course while taking meticulous notes about ways to introduce each concept, possible pitfalls, and more. This probably slows down the entire course-creation process, but it also leads to much better courses in my experience.
Redoing the course website seemed like a prime candidate for this. It is something I wanted to build anyway, and it is complex enough that it should cover most of the things I want to teach. I doubt I’ll actually rebuild my course website in the final course, but this helps me make a better final course and plan the project used in the course.
A final factor here is the fact that I have gained experience and knowledge about how users consume courses and how I can improve that experience. Some of these improvements are obvious in retrospect and exist in many other sites; for instance I plan to add tracking around which videos you have completed so that I can make it easier to jump right back to where you were when you return to the site. Other improvements are likely more novel, but will require more work to implement.
I’ll cover those ideas in a later post, but the short version is that I want to improve the user experience as much as possible, but in order to do that I need a unified experience to build from. I’m hoping that the new course website will provide me with that unified experience to build upon.
Right now I am working on building the React frontend, with a primary focus on the pages used to browse courses and lessons. For instance, here is the current lesson page.
In the new course backend, everything will be separated into sections, and then inside each section there will be lessons. If you are used to my web dev course, that means each chapter will become a section, and each sub-chapter (eg 13.2) will become a lesson.
If you are familiar with any of my other courses, this UI will look different and you can probably spot a few new features. For instance, there is a small progress bar below the section title (Testing multiple cases) that keeps track of your progress in this specific section. I’m trying to keep these relevant to wherever you are, so there will probably be a progress bar for the entire course when you are on the course selection page, and then as you go down into specific lessons it will show how far along you are with the current section.
This page is pretty much entirely complete, though it probably needs a refactor. My goal this week is to work backwards from here building entire pages in react. Specifically, the next two pages I am working on are the course dashboard where you choose which course you want to view and see other courses you have access to, and the page for a specific course where you can browse all of the sections and lessons for that course.
Once these are done I’ll probably have enough that I can start building out the Go API, and then after I’ll be able to release a beta version for users to try out.
After the beta version is out and stable I’ll probably start looking into options to migrate all of my other courses (eg Gophercises) to the new course website and I’ll record the first module for Algorithms with Go and release that as well.
Algorithms with Go is going to be released in “modules”. What this really means is it will be released as if it were many different mini-courses, each with their own sections and lessons.
I pretty much have all of my notes completed for the first module of Algorithms with Go, so once the course backend is done the process of recording and releasing should be pretty quick. It just requires me to find recording time, which can sometimes be tricky with noisy kiddos 🤣.
I don’t have an ETA because I don’t know when the new course backend will be done, but my hope is that you will start seeing this material before June, 2019.
In an effort to be a bit more transparent, I’m hoping to release an update like this every week or two. I might talk about lessons learned, problems I encountered, or it might just be a quick, “Here is where I am, here’s what I’m doing next” post. It will vary from week to week, but if you are finding value in any of these updates please let me know so I know to keep making progress updates 😁
This article is a progress update. View other progress updates.
Sign up for my mailing list and I'll send you a FREE sample from my course - Web Development with Go. The sample includes the first few chapters from the book, and over 2.5 hours of screencasts.
You will also receive emails from me about upcoming courses (including FREE ones), new blog posts, and course discounts.
Jon Calhoun is a full stack web developer who also teaches about Go, web development, algorithms, and anything programming related. He also consults for other companies who have development needs. (If you need some development work done, get in touch!)
Jon is a co-founder of EasyPost, a shipping API that many fortune 500 companies use to power their shipping infrastructure, and prior to founding EasyPost he worked at google as a software engineer.
Jon's latest progress update: Writing Course Notes
Spread the word
Did you find this page helpful? Let others know about it!
Sharing helps me continue to create both free and premium Go resources.
Want to discuss the article?
©2018 Jonathan Calhoun. All rights reserved.