On September 17th, 2014, I published my first article which means that today is the 5th birthday of Practical Business Python. Thank you to all my readers and all those that have supported me through this process! It has been a great journey and I look forward to seeing what the future holds.
This 5 year anniversary gives me the opportunity to reflect on the blog and what will be coming next. I figured I would use this milestone to walk through a few of the stats and costs associated with running this blog for the past 5 years. This post will not be technical but I am hopeful that my readers as well as current and aspiring bloggers going down this path will find it helpful. Finally, please use the comments to let me know what content you would like to see in the future.
I’m always curious about other people’s site traffic, so here’s a view of my traffic over time. I’m now averaging around 90K monthly visitors:
I remember watching the views when I first started and never expected to see it grow as much as it has. In other ways, it has definitely been a long process to get here.
I also find it interesting to see which articles are driving my traffic. This post is my 70th article and here are the top 5 articles over the lifetime of this blog:
- Creating Pandas DataFrames from Lists and Dictionaries
- Pandas Pivot Table Explained
- Guide to Encoding Categorical Values in Python
- Overview of Python Visualization Tools
- Overview of Pandas Data Types
From a personal perspective, one of the articles I refer to the most in my own usage (and am personally proud of) is this one:
Combined, these 5 articles drive 35% of the traffic to the site over this time frame. Some of the articles have been around a lot longer so at some point in the future I might try to adjust these numbers based on the length of time they have been published.
As far as where the traffic comes from, about 85% of the daily traffic is driven by organic search. I would try to given you more details but after converting the site to serve over ssl, the search integration with google broke and for the life of me, I can not figure out how to get the search console to link back to google analytics.
Site Costs and Revenue
There are many options for hosting a blog. Overall, I have been very happy with the static blog hosting using pelican. When the blog started, the AWS costs were pretty minimal. As the traffic has grown, the costs have started to add up. In order to give you a sense for how much it costs to run the blog, here are the year to date costs for AWS:
The costs started to rise in May and that’s when I realized that my RSS feed was getting really big and was consuming a lot of my bandwidth. After making the simple change described in the tweet below, costs went down considerably.
Pro tip - if you are using pelican for your blog, set a value for FEED_MAX_ITEMS— Chris Moffitt (@chris1610) July 9, 2019
My all.atom.xml file was generating over 48GB worth of downloads over the past 2 weeks because the default pelican config included all posts from the past 4.5 years. oops pic.twitter.com/Kv2LNg82Kp
One of my other big costs is disqus. I think comments are important but I really dislike the distracting ads that could be shown on the site. I decided to pay $108/year in order to remove the disqus ads. I think it’s a good investment.
In July 2018, I started my mailing list and it has grown to over 2200 subscribers in that time. The one area I am not happy with is the cost of Mailchimp. It now costs $34.99/month for my list which is a lot considering the low volume of email I send. I will likely be looking for another solution in the upcoming months.
The only direct source of revenue I get from the blog is when someone purchases something from my affiliate links. To be honest, most months I generate about enough to almost pay for my AWS costs. Jeff Bezos giveth and Jeff Bezos taketh away!
Clearly I’m not making enough to retire early. So, why am I doing it? I have two main motivations.
First, I want to continue to learn about python. When I started the blog, I knew python but very little about pandas, scikit-learn and python data visualization. Over the past 5 years, I have learned a lot. Learning about concepts and writing them on this blog has been really helpful in expanding my python and data science knowledge.
The second reason is that I want to give back to the python community. Python has been a very useful tool for me and I think it can help a lot of other people. I hope that in some small way this blog has helped others. The other community benefit is that the blog gives me a reason (or excuse) to participate more consistently in the python community. Without the blog, I would have a lot less reason to actively participate in this wonderful community.
I also have a more selfish motivation. At some point in the future, I would like to make a move where I am able to spend more time focusing on python. I do not know exactly what that will look like but I suspect this blog will play a key role in that future state.
As far as changes go, I would like to update the site’s style so it looks more modern and less like the default template. I also want to figure out a better cadence for sending content to my email list. There are several articles that I need to update to reflect the most recent changes in python.
Going forward, I will likely continue creating the same type of content. I am always interested in learning about the types of articles you would like to see so please comment below if you have any ideas. I can not guarantee I will write about it but I will do some research and put it on my list for potential future topics.
Thanks again for all your support over the past 5 years and I look forward to seeing what the next 5 will bring!
Photo by Elisha Terada on Unsplash
- ← Combine Multiple Excel Worksheets Into a Single Pandas Dataframe
- Binning Data with Pandas qcut and cut →