This site runs best with JavaScript enabled.

2020 in Review

Photo by Florian Olivo


An overview of what I accomplished in 2020 and a bit about my goals for 2021.

Some words before we get started...

😷 First let me say that I'm so sorry for the people who's lives have been flipped upside down by COVID-19. So many people have lost work, loved ones, and more this year due to the pandemic. We're not through this yet, so please keep wearing a mask and following your local health safety guidelines.

Also, I want to say that this year has highlighted a lot of the social injustices that have plagued the US for... ever. It has been painful for so many and I encourage people to lend their privilege in whatever ways possible. Here's a great post to guide you (also, this podcast series was super enlightening to me).

Let's get started

Regular review and retrospectives is an important aspect to improving yourself in any area. Athletes and musicians often watch/listen to themselves perform. I know a lot of people don't like to, but I actually watch almost every talk, video, and podcast I produce to identify ways to improve.

So, it's with that spirit of personal improvement, that I invite you to join me on my walk through 2020.

The beginning

Hopes and expectations were high. I was gearing up for EpicReact.dev which I was hoping to have released before I started traveling to speak at conferences in March (lol at me for thinking I could get it released so quickly and that I would be traveling in 2020 😂).

I remodeled my office and finally got rid of that ugly yellow paint. I also got a much higher quality "webcam," amazing lighting, and a pull-down green screen. I'm really happy with my office now. You'll find pictures and links on my uses page.

I also switched my family from primarily using custom Google Suite to regular Gmail (this was a much bigger pain than you probably realize which is why it's getting a mention). As part of that, I decided to stop using Google Photos and got us a Synology NAS (you'll find more info about that on the uses page as well). I can recommend a NAS. It's a pain to set up, but with auto-backup to Backblaze, and a public IP address for it, I have access to all my own files wherever I am in the world without sacrificing my privacy or ownership.

EpicReact.dev Masterclass

Like I said, I wanted to get EpicReact.dev released quickly, so I was heads down on improving my workshops. In particular, I needed to create a brand new 2-part "Build React Apps" workshop. I discovered and used react-query and msw. I also tried tailwind with twin.macro. It was a busy time.

I decided that I shouldn't record and sell a workshop I'd never delivered and proven before, so I scheduled the Epic React Masterclass. 9 workshops in total, each one 5 hours long. Over the course of 1 month. I sold 30 premium tickets to that, and then each workshop had 10 tickets for people's a la carte enjoyment. We were sold out. I was super excited!

Interestingly, I made a scheduling mistake on my end and to make a long story short, I thought I had 2 weeks to prepare the "Build React Apps" workshop (which was extremely tight) but turned out I only had 3 days 😱. Turned out pretty good considering that and the fact that it was the first time through that workshop. Also, this format of workshop was pretty different from others I had done. Honestly, I can't believe I managed to make that work, but it did. And the final result is something I'm really proud of (more on that later).

COVID

By the time March came around, we were all pretty much sure that 2020 was going to be really different, but it wasn't until March 12th that everything came crashing down for me and all my plans. Looking through my email, that's around the time that in-person church was "temporarily suspended," flights/hotels were canceled, conferences were canceled (or "postponed" and canceled later), etc. I also had to cancel my last Frontend Masters workshops 😢. All travel plans (personal and professional) were canceled. I was pretty bummed.

COVID shook up our home situation a lot as it did for most people (I have a wife and 4 kids, 2 of whom are school age). Also, I did eventually get COVID later in the year. My symptoms weren't very severe though.

Luckily, I had scheduled the Masterclass workshops already, so I was able to stay very busy. I had a number of friends lose their jobs. Like I said earlier, this was really devastating. I felt quite a bit of anxiety due to the uncertain nature of everything going on.

Remote all the things

Most conferences went remote and even though I reduced my commitments, I still gave 6 remote conference talks and 18 remote workshops in 2020 (🤯 this blew my mind when I looked it up). Half of those were the EpicReact.dev Masterclass. I really wanted to make sure that when I made the recorded version of EpicReact.dev, it was solid (and it was)...

EpicReact.dev

If you haven't heard, EpicReact.dev is a collection of every React workshop I have ever given. It's based on learnings I've had both in shipping React applications to millions of users all over the world as well as what I've learned about teaching this effectively. It's unique because it has all the good things of a live and in person workshop + all the good things about a self-paced recorded course, without the major drawbacks of either (read more below about KCD Learning Clubs & Office Hours).

I've never spent so much time on a single deliverable. And I didn't build it myself. Oh no! I was responsible for creating the material, recording the videos, and marketing the heck out of it. This amazing team did the rest. Working with these folks was a delight.

The "Build React Apps" workshop got split into 4 workshops in all. When I delivered it that first time I realized there was too much material for 2 workshops, so I made a third, and then I added a workshop on testing. Those are supposed to be the practical workshop where we take what we've learned in all the other workshops and make something real.

I also added a workshop specific to testing that wasn't a part of the original masterclass. So it ended up being 11 workshops 😱 When delivered live, they're each 5 hours long (and I often skip the extra credits). I also decided to put together a (free) podcast, a series of (free) articles, and a series of interviews with React experts as well.

All told, it's 19 hours of video instruction (which is supplemental to actually working through the exercises), 10 hours of expert interviews, 14 articles, and ~6.5 hours of podcasts 🤯 All for the same price as one of my remote workshops (and we also support purchasing power parity!!).

Some folks have finished everything, but most people need several months to go through all this material. I made it well suited for beginners and experienced engineers. Your ability to go through the material has a lot to do with how much experience you bring to the workshops.

It's been outrageously successful. I knew it would be huge, but didn't realize how big it really would be. And the number of positive comments I've heard from people on this just fills my heart with joy. I have an EpicReact.dev tweet wall you can visit to get an idea of what people have said (beware, a LOT of tweets are on that page and will take a lot of data to load). It's really helping people. EpicReact.dev has been the best thing I've done to push my mission forward: "help people make the world better through quality software."

Sometimes I think about it all (like I'm doing now) and I'm still blown away by how much I did. Wow.

Discord

I had a spectrum.chat (RIP) for TestingJavaScript.com, but I wanted to get something a bit better. I noticed some OSS projects were migrating from Slack to Discord and one day I decided to just take the plunge and create my own "KCD Community on Discord" where folks could talk with and support each other regarding my courses and workshops. It ended up being much more than that.

Setting up a server was surprisingly easy. But as with everything I do, I wanted to complicate it. For one thing, I take my code of conduct seriously, so I wanted to make sure everyone who joined the server had at least opened it up. So I started with a form you'd submit on my website and that would send you an email with an invite link. The problem with that was that folks couldn't create their own invite links and it felt disjointed.

So I decided to make a bot (yes it's open source of course) that intercepts users as they come in and chats with them one-on-one in a temporary channel, collecting info about them. Here's what I collect in the onboarding process:

  1. First name (I auto-set the Nickname to this to make things more human).
  2. Email address (I check for throw-away emails, I also tell them this will add them to my mailing list if they're not already on it).
  3. Accept the Code of Conduct ("yes" is the only correct answer)
  4. Test them on whether they actually opened the Code of Conduct by asking them what email address people report violations to (a disappointing/surprising number of people give up here).
  5. If they don't have a photo, I invite them to add one (and I even load one for them from gravatar if the email they gave me is on there, I really want Discord to be human, and avatars help with that, but it's not required).

They have to answer questions 1-4 before they can see anything other than the one channel where they're talking to the bot. The friction here is very intentional. It ensures that the kind of people who join the community are the kind of people who are willing to go through that. A LOT of people don't, and that's fine. I like to think that this process has contributed a great deal to us have very few issues for the (terrific) moderators to do anything about.

The Discord community has become so much more than I imagined. Plenty of people are there chatting about my material (TestingJavaScript.com and EpicReact.dev especially), but most of the conversations have nothing to do with me. It's just a super awesome and friendly group of developers helping each other out and making positive connections. It's a much better place to hang out than twitter.

We have over 7k members (despite my slip-up) and ~1k are online at any time. Almost half members actually participate in conversations. It's awesome. You should join, and be sure to thank the bot.

KCD Learning Clubs & Office Hours

One thing I learned from the EpicReact.dev Masterclass is that there's something special that happens when you have a group of engineers going through the same curriculum together over a period of time. When you take some training and make it self-paced you lose that and I didn't want to lose that.

So the idea of KCD Learning Clubs was born (original called "KCD Cohorts"). We've had 32 learning clubs on all subjects in the ideas repo. Each club has experienced varying degrees of success, but for the most part it's been a super positive experience for people and that makes me happy.

Another thing that I wanted to not lose with EpicReact.dev being recorded is the ability to ask the instructor questions. You can't really ask a video questions. I've delivered this content so often that I generally answer people's questions before they get a chance to ask, but sometimes there's a gap in understanding or something someone wants to ask for clarification.

Unfortunately, I don't have time to field those questions all day every day, so I created KCD Office Hours as an opportunity for anyone (not just license owners) to come and ask me anything they'd like. It's an hour long live streamed Zoom call. This has been a great use of my time as well. I'm happy to have had the opportunity to help answer so many people's questions (or at least say "huh, I don't know, sorry 🙃").

The rest

Here's some other stuff I thought I'd bring up before closing...

Tweets

Here are my top tweets of 2020 (in order of impressions):

Books

I listened to a LOT of books this year (in particular, I re-listened to almost every Cosmere related book by Brandon Sanderson) in preparation for Rhythm of War (and he writes long books, so that amounts to hundreds of hours of audio). Unfortunately, I don't have a way to find a list of those that I re-listened to, but here are some new books I bought in 2020 (in the order I purchased/listened to them):

Blog

I'm not going to count this up. I kept pretty close to my schedule of writing one blog post a week. Some of my posts appeared on EpicReact.dev/articles as well. So I wrote ~50 posts give or take this year. No plans to slow that down.

Podcasting

I had a busy year podcasting

Fun

And yes, I did ride my OneWheel a lot this year. Hit a top speed of 27.7 MPH (way too fast, do not do this), and I'm at 1,524 miles on this. Most of that was in 2020. I love this thing:

Even though this happens sometimes:

I got a new replacement helmet and writs guards after this happened.

2021

So what's coming up in 2021? Honestly, I feel really optimistic about 2021. I think it'll be a while before COVID goes away and we can return to making our world better in other ways, but I'm still optimistic.

My theme for the year is "planning." When I was homeschooled in the 5th grade (the only year I was homeschooled), my mom would write down a list of all the assignments I had for the next day. I would wake up at 5:00 AM and work through that list until I finished at around 9 or 10 AM. Then I had the whole day to do whatever I wanted. That year was transformative for me and I loved it.

I want that productivity again. Also, I'm planning on working fewer hours this year and spending more time with my family, so I really need that productivity too! So in 2021, I'm ending every day by writing down on a physical notepad (which I keep in my pocket) a short list of the things that I want to accomplish the next day. I've been running this a week so far and it's been going well. Let's hope I can keep it up!

Anyway, I have a lot of ideas for things I'll be working on in 2021. Here are some of them:

  • Migrating kentcdodds.com from Gatsby to Remix (I will probably livestream lots of this)
  • TypeScript-ifying everything I do, including workshops (old and new)
  • A TypeScript workshop series
  • Updating TestingJavaScript.com to be workshop-based rather than course-based (Like EpicReact.dev or the Testing Node.js Apps module is).
  • Updating EpicReact.dev to the latest of everything (react-query v3 is the biggest change so far, luckily it's not a huge change, but it impacts a LOT of the videos). I might swap Emotion for Tailwind as well... We'll see.
  • Adding new workshops to EpicReact.dev
  • Chats with Kent Season 4
  • Weekly blog posts
  • Daily 3 minute podcasts

And for any significant new or updated workshops I make, I'll be hosting remote workshops to perfect it before recording it, so keep an eye on my workshops page.

Lots to do!

Conclusion

2020 was full of really terrible things for a lot of people, and lots of that continues into 2021. I'm optimistic that things will get better, and I'm looking forward to what the future holds for us all. I hope that I can continue on my mission to make the world a better place for us all, and I invite you to join me. I've tried to prioritize my time a bit which has involved some cut-backs on what I do. But I trust that together we can all optimize for the things we enjoy doing most and still make the world better while we're at it.

Good luck!

Discuss on TwitterEdit post on GitHub

Share article
Kent C. Dodds

Kent C. Dodds is a JavaScript software engineer and teacher. He's taught hundreds of thousands of people how to make the world a better place with quality software development tools and practices. He lives with his wife and four kids in Utah.

Join the Newsletter



Kent C. Dodds