Year in Review (2018)
I’m a big believer in setting goals and tracking progress (or lack thereof). With that in mind, here is my review of 2018 and goals for 2019.
This past year was the first one where I decided to focus on creating technical content. I’ve had a lot of upfront costs and learnings along the way so hopefully sharing these will help others.
I published two books in 2018, Django for Beginners in March and Django for APIs in June. And then in August I updated both to Django 2.1 which was an interesting–and time-intensive preview–of what it takes to keep framework-related content current.
Writing the books was probably the easiest part of the process. Much more difficult was all the logistics involved. First there’s creating the actual book files in multiple formats for print, Kindle, PDF, etc. I ended up using Leanpub for this which automates the book creation. The approach isn’t perfect but it does allow me to make changes in a matter of minutes which is essential since I’m constantly iterating on both due to reader feedback.
I spent time trying to find a good artist to do the covers for each book and ultimately just decided to do it myself. As with many aspects this year, learning how to do things myself was important as was not letting perfect get in the way of good.
I also made substantial progress on a third book, Django for Professionals, which I initially intended to release by the end of the year but am now aiming for an April release date when Django 2.2 comes out.
I ended up writing 72 new tutorials on wsvincent.com and updated several dozen more that had been up earlier. Post length varied quite a bit but many were quite long. I’m a bit shocked at how prolific I was here to be honest. It’s in part because I’ve invested the time to setup my site so I can seamlessly publish new material; I write quickly; and I was learning a lot myself so part of that process is teaching it to others to solidify my own understanding.
Site traffic hockey sticked during the year. In January I averaged 1,500 unique visitors a week and ended the year at 20,000 unique visitors a week. Not bad.
It’s always dangerous to make predictions on traffic but if traffic stops growing completely I’ll have almost 1,000,000 unique visitors in 2019 which is a large number to think about. My goal is to invest time to keep tutorials up-to-date and continue growing the site traffic so we’ll see where that goes.
Many of my book readers find me through the personal site so in addition to being something I enjoy doing, it is my primary marketing channel at the moment.
A big goal for 2019 is to spend time on email marketing and building up my newsletter. I have over a thousand subscribers due to literally slapping a bad looking MailChimp form at the bottom of my site earlier in the year. Such neglect on my part!
There are many ways to go nuts with email–segmenting, drip campaigns, etc–but I’ve settled on a monthly newsletter for now. I write enough new content that I can share it in that format and I’m starting to share other tutorials and resources I like. It’s a work in progress.
I gave two talks at Django Boston this year and a 40 minute one at DjangoCon, which I attended for the first time in October. The DjangoCon talk (video up on YouTube now) took an immense amount of time to prepare. It’s much more than twice the work to do a 40 minute talk vs a 20 minute, especially when it’s quite technical and has a corresponding Github repo.
Attending DjangoCon for the first time was great. I met in person a lot of folks I’d corresponded with only online and met some new faces too. However the cost of the trip, given that I’m self-employed, was substantial. And traveling cross-country wiped me out for a few days after. So…worth it but a commitment for sure.
In the summer and fall I spent quite a bit of time on a new project alongside Michael Herman. We both wanted a text-based LMS and decided to build one in Django. The result is TestDriven.io which is now live. I learned a lot collaborating with an expert developer and also figuring out how to balance consulting work with book writing. Oh, and I traveled out to Denver for a few days which was a lot of fun. Amazing food, weather, and scenery. If I didn’t have family ties to the East Coast I’d be very tempted to move there myself.
I appeared as a guest on the two most popular Python podcasts: Podcast Init in September and Talk Python in December.
I really enjoyed both conversations. It made me think about how to talk about myself better and also explain Django concepts in different ways. In both cases the hosts and I talked a bit about being a self-published author which seems to be of interest to people. I’ve written up two detailed posts specifically on this for those interested.
This year I dipped my toes into open source for the first time with DjangoX, DRFX, and awesome-django. I only have a few hundred stars on each but it’s been fun to share some of my own code with others. It was a big step for me to go from: It’d be nice if a simple starter project existed for Django/Django REST Framework to just writing my own version and publishing it.
I don’t do any publicity on these so I’m not sure how folks find them, but they do. There have already been some helpful PRs that I’ve incorporated. I don’t feel any obligation on these projects which is key: they are fun. As long as they are fun I’ll keep them up-to-date but once that stops, I’m not going to let it bother me.
The business side of being a self-employed author is interesting and time consuming. For the first time I set up a company, business checking account, business credit card, started tracking income and expenses with accounting software. On and on it goes.
It’s a good problem to have but the drag of success is real. Much of my fall was consumed with many matters related to this. I have a tendency to want to optimize everything so I’ve really educated myself on all this and automated as much as possible. The end result is going forward taking care of the business side of things should only be a few hours a month. I hope so!
The last segment is emails. I freely give out my email address and receive 10-30 emails a day from readers. For now I’m able to respond to everyone: the feedback loop helps me stay in tune with how my content resonates and readers know that I’m available and accessible.
However keeping up with all this is not sustainable. I find myself answering many of the same Django-related questions again and again which often leads to blog posts but also isn’t the best use of my time. I need to figure out the balance here between staying clued-in to my readers and not spending all day doing email.
I also have received a number of tempting consulting and employment offers throughout the year. I think I wasted time on both. I wasn’t honestly sure if books would be a full-time thing for me so it was flattering to receive the interest. However for consulting I now refer people to consultancies I admire rather than spend any time scoping out projects. And I’ve stopped considering full-time work until my third book is done, even from very appealing companies.
For the first time in my career I experienced severe and almost crippling burn out. I haven’t taken a proper “break” in about 5 years since I’ve been either self-employed, consulting, or working at early-stage startups the entire time. This isn’t a good strategy and I started to feel the effects in the last few months.
Wes Bos once noted that he considered not burning out to be his greatest competitive advantage and I’m inclined to agree. There is something about programming–probably the fact that it is enjoyable, all-consuming, and yet ever-changing–the makes it especially prone to burnout.
Add in the anxieties of being self-employed and the mix is pretty potent. I need to manage this better going forward.
Looking ahead to 2019
So what does 2019 hold? I spent 2018 pumping out content and setting up my business. In 2019 I’d like to release new content, prioritize keeping existing content up-to-date, and focus more on marketing.
My instincts are to just pump out new stuff because it’s fun, I’m good at it, and it “feels” productive. But really if I have 3 complete books and a popular website, that’s a lot to manage as is and it’s smarter to spend the time spreading the word versus just creating.
I hope 2019 affords me the chance to have some recurring revenue that frees up time for both “work” and “play” with coding.
In terms of specifics, my big project is to finish Django for Professionals by the spring. Then allot time to update my existing books and tutorials to Django 2.2 in April and Django 3.0 in December.
I’ve submitted a talk to PyCon and would like to also attend DjangoCon again. If my talk is accepted, great. But if not being able to relax a bit more and just attend will be nice too!
Beyond that I intend to keep responding to reader emails while keeping an eye open for ways to make sure that my total email time does not become overwhelming.
I want to focus more on my newsletter in 2019 and create a free ebook to help entice readers to sign up. Probably it will be a Django Deployment guide of some sort, so something between Django for Beginners and Django for Professionals. Or maybe it will be a guide to Django Payments with Stripe? I won’t write it until the summer but many potential options.
I’m very tempted to do my own Django-focused podcast, either solo or with a co-host. Something for me to explore. There is a ton of content in my head that I’d love to share with others and podcasts seem a good way right now to do so. Of course this entails setting up a podcast production environment, logistics, etc etc etc so I’m wary of this while also excited.
The final big area is video content. I want to do videos of my existing books. However this will take several months to become comfortable with and Django updates twice in 2019 so I may focus on YouTube videos on more general topics before launching something for Django 3.0 in December. Then there is the question of building my own video-hosting platform (fun, would be good to have a large scale project to maintain) vs using a service (way less work, can’t customize, leaves me without a major Django project to keep working on). We’ll see.
The final goal is to pace myself a bit more. I have young kids and a wife who works so there isn’t much down time for me outside of work. I need to build in some proper vacations and rest or I will burn myself out.
Thanks for reading and happy 2019 to everyone!