Today marks one year since I published my first post on this website. Coincidentally, it is also the week that I reached 10,000 unique visitors in the last 30 days.
When I started this blog, I spent longer than I care to admit scouring the web looking for validation.
How many visitors should my blog be getting? How long does it take to start ranking on Google? How long does it take to reach 10k monthly visitors? Is 100 page views a day considered a ‘good’ amount of traffic? etc…
The responses I found on Google to these questions varied wildly. The answer is: it depends. Every blog is different.
Blog owners spend different amounts of effort on their websites. Some will post every week, some only once a month. Some will aggressively promote their posts across different online forums and social platforms. Others only rely on organic search traffic. As you might expect, this results in contrasting outcomes.
I have always appreciated people being transparent with their online journeys. I am aware that 10k visitors a month for a tech blog after one year is not extraordinary. But, I thought I would publish my numbers and thoughts, hopefully providing an honest and realistic summary for others thinking of starting a developer blog (Spoiler: everyone should).
Why I started a developer blog
Learning aid and reference
Writing tutorials is a great way to improve and find gaps in your knowledge.
There is a fabulously blunt quote from The Pragmatic Programmer :
“If you can’t describe what you are doing as a process, you don’t know what you’re doing.”
It is amazing how much better you understand a topic after writing about it.
You cannot concisely write about a topic unless you truly understand it. When publishing a tutorial online, you will naturally be more diligent about recording the process you are describing. Other people will see it, you need to make sure you have not written something incorrectly!
Additionally, by writing on a blog over time, you build up a library of content that you can refer. Easy to access when refreshing your memory on a topic, rather than having to go through the source code of previous projects.
Improve my writing and communication
Writing is a hard skill, underappreciated and generally taken for granted. It is the sort of thing you learn at school but then don’t put much thought or effort into improving later in life. Even though you use it every day.
Writing has never been a strong point for me. English was my least favourite subjects at school – my old English teacher would laugh if I told her I now write a blog.
I am trying to make a conscious effort to improve my writing communication (I even read a book on it). Creating written content online is a great way to practice, improve and gain feedback.
This brings me to the next motivating factor.
Learning in public
Last year, I read a great little book called Show Your Work! by Austin Kleon.
It encouraged me to get over my impostor syndrome and put myself and my work out there.
You don’t need to be an expert to create content.
The internet is vast. Your knowledge and experiences will be valuable to someone. Particularly in software development. If you struggled to complete a task, no doubt, there will be someone else struggling as well. Writing about how you solved the problem is valuable and worth sharing.
Learning in public provides the opportunity to receive feedback on your work. Who knows who might read it and what opportunities it could lead to?
Here are a couple of my favourite quotes from the book:
“Amateurs know that contributing something is better than contributing nothing”
“Carving out a space for yourself online, somewhere where you can express yourself and share your work, is still one of the best possible investments you can make with your time”
Potential to make a side income
I’ll be honest, being able to make a ‘passive’ income online is a major motivator for me to start the blog.
I’m not expecting to quit my day job any time soon. This is a long term project. Publishing content online is a slow burner, compounding overtime as your audience builds. But who knows, maybe in a few years, this blog could have a large enough audience to launch a product/course/ebook etc.
What were my targets and expectations when starting the blog?
This website is primarily a casual side project. I have a full-time job as a data/ML engineer so I wanted to be realistic about how much time I could devote to writing.
It is easy when starting to set goals such as: “I want to reach X visitors per month”, “I want to make $X in revenue”.
I’ll admit, I fell into this trap too. I had a vague idea that it would be cool to reach 10,000 monthly visitors and make at least $1.
A tiny goal that will change your life:— jckbtchr (@jackbutcher) April 21, 2020
Make $1 on the internet. pic.twitter.com/JPlJypuA4U
I remember watching a video by Ali Abdaal a few years ago. It explains, when it comes to publishing content online, that you should focus on what you can control.
When it comes to publishing content online, you are at the mercy of the ‘search algorithm gods’.
Of course, there are steps you can take to increase the chances of ranking highly (e.g. investing in SEO and aggressively promoting your posts on social media). But in reality, you cannot control or predict the success of any particular post.
All that you can control is the quality, consistency and volume of content.
For me, consistency was the key focus. I know how easy it is for side projects to peter out after a few months. I didn’t want this website to join my side project graveyard.
Consistency is important for building the habit of writing and improving your rankings with Google.
Quality is also no doubt important as well. But it is very easy to be a perfectionist, spending ages on blog posts that never receive any traffic.
I wanted to be realistic about how much time I could spend in a month writing. So I decided on the following target: Create at least two pieces of content each month.
I did not have a real strategy for creating content. I tended to write about topics tangential to what I was currently working on. They were the easiest to write about.
I keep a list of potential topics in my note-taking tool and pick the one that most interests me at the time.
I haven’t invested too much time into SEO keyword research, but I am aware of the importance of SEO for growing the blog.
I took the low hanging fruit such as optimising my site as much as possible for performance, accessibility, best practices etc… I also used some SEO tool free trials to complete some high level research on topics.
I also signed up for Monica Lent’s free email course called BloggingForDevs which I found useful and implemented some of her tips.
Again, I haven’t been that aggressive trying to post my articles on social media, and my growth has been almost entirely organic. I was happy to write in ‘stealth mode’ and see how organic traffic would naturally come to my blog from search engines.
I did create a Twitter account to announce new articles, but haven’t spent too long trying to boost engagement or traffic via socials.
Naively, on day one of starting the blog I applied to Google AdSense expecting to monetise my site with adverts straight away. Turns out you need a fair amount of content on your site before being approved for AdSense. I was rejected.
Reflecting on this initial disappointment, I decided against putting ads on the blog (at least for the short term). With only a few thousand visitors a month I would only make a few dollars at the expense of greatly diminishing the user experience. A situation where nobody wins.
Another method for monetisation I wanted to try was creating a digital product to sell. I often create revision flashcards when preparing for exams so I decided to publish my revision cards for an exam I recently took (the Kafka Developer Certificate ) on Gumroad. I was sceptical that anyone would pay for revision cards so decided to release them for free, with the option for customers to leave a ‘tip’.
Finally, I explored affiliate marketing. Although my blog doesn’t primarily cover consumer items, I created a page with affiliate links to the equipment/tools that I use. I find looking at other people’s work setups/equipment useful, so wondered if sharing my workflow items would be interesting to others.
So how did it go…
The Numbers📈: One year of blogging
- 35 posts (average 2.9 per month)
- Total visitors: 29,292
- Total page views: 49,112
- Visitors (last 30 days): 10,015
- Page views (last 30 days): 12,421
- Domain: $14 per year
- Hosting: Free (Netlify)
- Email list: Free (Convertkit)
You will get no traffic for 8 months
When you start your blog it will take around 6-8 months to escape the Sandbox and start seeing your articles rank on Google.
As you can see in the chart at the beginning of this post, it took 8 months until I started to see any traction. This was after posting around 20 pieces of content.
This period was tough and initially disappointing. Keeping the motivation to post quality articles is difficult when they seem to disappear into a void with no validation or feedback.
Although, in hindsight I think you could look at slow traction as a good thing. It provides a barrier to entry as many people fail to push past this initial hurdle. If you can break through this quiet period and post consistently you will come out the other side with a growing blog with less competition.
Consistency is key
Keeping yourself accountable to posting a (realistic) number of articles each month is important. It is so easy to come flying out of the gates with enthusiasm, only to give up with no traffic after 3 months.
Consistency is essential for building the habit of writing. After pushing through the initial quiet period, you will come out the other end with 20-30 posts which start ranking on Google. As you can see from the first chart in this post, growth after this point is quite fast and exciting!
Writing good tutorials is hard
One of the most surprising lessons I have learned this year is that writing good tutorials is actually quite difficult.
In particular, choosing good examples and datasets for your tutorial is hard. You don’t want to use a too complex example, but equally, an example that is too simple is unhelpful to the reader as well. You also want to avoid conflating many topics together which introduce prerequisite knowledge, that distracts from the main purpose of the article.
For example, I found this problem during my series describing how to build a dashboard using Voilà! . Creating a simple Voilà application, at a minimum, only requires some markdown text in a Jupyter notebook. But to make the example more interesting you need to introduce knowledge of Jupyter widgets for interactivity and Docker containers for reproducibility. How much effort should you spend explaining these new topics which are additional to the original topic?
Don’t spend too long writing a single post
It is easy to get bogged down writing a single article. Endlessly trying to perfect it before hitting publish.
Quality is certainly important but ‘perfection is the enemy of progress’. Consistency is the most important factor for success. Don’t let perfectionism become a bottleneck for posting content.
Some of my most popular articles are the ones I only spent a few hours researching and writing. Others which took weeks to write are a ghost town.
Don’t underestimate the ancillary benefits of writing a blog
Writing blog posts has been a great learning aid for me. After writing an article or tutorial on a topic, I find I understand it more thoroughly, making the content easier to remember in the future. Even if I forget, there is a tutorial written in my own words for me to easily refer to.
Although my audience is small, I have still received several offers for collaboration, job recommendations and general feedback. Publishing your work is a great way to make connections, build your brand and take part in the community.
I’m pretty happy with the progress of Engineering for Data Science over the last year. If someone had said to me that in one year I would have 10k monthly visitors I would have taken it.
The website will continue to be a side project for me. But I am interested in continuing to post content and narrow down my niche. I’ll admit that the current content is quite random and arguably not completely aligned with ‘engineering’ in data science.
My main focus this year will be to build the email list and consider monetisation strategies more carefully. I am starting to reach the limits of the free tier services that I use and I don’t want to run the website at a significant loss. I’ll look into developing more digital products such as a newsletter, email course or other revision guides/cheat sheets.
I’m looking forward to seeing how the blog progresses, if the current growth continues it should be a really interesting year!
Here are some resources I found useful when learning about SEO and building a blog:
- Data Science Setup on MacOS (Homebrew, pyenv, VSCode, Docker)
- Five Tips to Elevate the Readability of your Python Code
- Automate your MacBook Development Environment Setup with Brewfile
- SQL-like Window Functions in Pandas
- Gitmoji: Add Emojis to Your Git Commit Messages!
- Do Programmers Need to be able to Type Fast?
- How to Manage Multiple Git Accounts on the Same Machine