3

TinyPilot: Month 25

 2 years ago
source link: https://mtlynch.io/retrospectives/2022/08/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Are blog posts worthwhile, even when they succeed?

Highlights 🔗︎

  • My blog post about redesigning the TinyPilot website became my second most popular article of all time
  • I’m exploring ways to preserve more knowledge on my blog
  • I’ve lowered TinyPilot’s prices in an effort to reduce inventory

Goal Grades 🔗︎

At the start of each month, I declare what I’d like to accomplish. Here’s how I did against those goals:

Finalize plans for managing TinyPilot licenses 🔗︎

  • Result: Made no progress
  • Grade: F

Migrating to the next-gen update system took longer than I expected, so I ended up not making progress on this.

Migrate TinyPilot Community to the next-generation update system 🔗︎

  • Result: We’re close but haven’t pulled the trigger yet
  • Grade: C

Overhauling our update system is one of those things that keeps seeming like we’re days away from finishing, and then we find more things to fix. So, it’s taking a long time, but I think it’s a symptom of how complicated our old system was. I’m looking forward to the better maintainability of our new system.

Publish the blog post about the TinyPilot website redesign 🔗︎

I thought it would be easy to write this since I’d written so much in my retros, but it took me about two months to complete. It got an unexpectedly strong response with 157k unique readers in its first week. It continues to ripple out and attract new visitors as people see it in other channels and then add it to things like design newsletters.

TinyPilot stats 🔗︎

MetricJune 2022July 2022Change
Unique Visitors10,05621,242+11,186 (+111%)
Total Pageviews18,76433,578+14,814 (+79%)
Sales Revenue$65,597.73$56,954.66-$8,643.07 (-13%)
Enterprise Subscriptions$47.75$290.70+$242.95 (+509%)
Royalties$1,710.27$2,513.71+$803.44 (+47%)
Total Revenue$67,355.75$59,759.07-$7,596.68 (-11%)
Profit-$4,230.17-$7,485.91*-$3,255.74 (77%)

* July profit is just a naive estimate based on change in cash holdings until I do real bookkeeping mid-month.

Sales are still strong following the website redesign. There was a 13% drop, but that’s almost entirely due to a single order. In June, a large company placed a complicated, custom order for $4,200. The day after we shipped it, they changed their minds and canceled the order. So, $8,400 of the delta between the last two months was because June had the revenue and July had the refund.

But oof on that negative profit. Every month, I feel like I’ve seen the last of my large, one-time costs, and then something pops up that eats up the profit. This month, it was $17k in hardware engineering to redesign around the chip shortage and a $10k invoice from an old vendor who hadn’t gotten around to billing me for work done a year ago.

My redesign regret blog post 🔗︎

“I Regret My $46k Website Redesign” is now my second most popular blog post of all time, attracting 157k unique readers in its first week. It was the second most upvoted post on Hacker News for all of July, and it reached the top spot of the /r/web_design and /r/programming subreddits. The only article I’ve ever written that’s attracted more attention was, “Why I Quit Google to Work for Myself,” which had 389k readers.

Graph of visitors to blog post on Plausible showing 157k unique visitors, 197k total pageviews, 87% bounce rate, 34m19s time on page

”I Regret My $46k Website Redesign“ became my second most popular blog post of all time, with 157k unique readers in its first week.

The day after I published it, Jonathan Stark invited me to be a guest on his podcast, Ditching Hourly. Jonathan felt like the whole debacle was due to hourly billing creating poor incentives. I respectfully disagreed, and I think we had an interesting discussion.

Why was the post so popular? 🔗︎

I’m honestly surprised that the post got as much attention as it did.

Any of my posts can flop, but I thought this one had an especially high risk of failure. It had several factors working against it:

  • It’s 4,100 words and an estimated 20-minute read, nearly twice as long as my usual posts.
  • It’s a good match for Hacker News, but I wasn’t confident it would match anywhere else.
  • Paying a web design agency $46k is not a relatable experience to most people.
  • If it missed on social media platforms (Hacker News, reddit), it had little chance of discovery through Google because nobody searches “website redesign regret.”

Seeing the post succeed, I realize I failed to consider a few important strengths.

First, it’s a story, and people love stories. Most of my successful blog posts are stories. Even if a reader is not particularly interested in a topic, they’ll stick around if they connect to the human elements of the story.

Next, it’s more relatable than I considered. Even though a minuscule portion of the population hires designers, nearly everyone has opinions about design. And I know almost nothing about design, so it was impossible for me to alienate anyone with language that was too jargony or academic. I also wonder if people related to it on the level of feeling taken advantage of by a business, which is more common than the specific experience of hiring a design agency.

Last, it’s about blowing a lot of money on something stupid, and people find those stories compelling. It’s fun to hear about money and (relatively) big numbers, whether it’s gaining or losing.

Why didn’t you name and shame the agency? 🔗︎

One of the most common responses I heard was that I should have named the agency instead of referring to them by a pseudonym.

I had a few reasons for keeping the agency anonymous:

  • The point was to learn from the experience, and blaming everything on the agency doesn’t teach me much.
  • I didn’t want them to respond and have a whole public back-and-forth about who was to blame.
  • I didn’t want people harassing the agency on the basis of my one-sided story.

But in writing up this retro, I realized none of those reasons explain my decision. I’ve named and shamed companies in the past where all of those reasons would have applied:

  • I accused Stripe of collecting excessive data about their customers.
  • I accused a keto bread company of underpaying its affiliates.
  • I accused a crypto company of putting its customers at risk and being generally incompetent.

I think the real reason I didn’t name the agency was that it just felt too personal. I’d worked with these people for eight months and frequently spoke with them face to face. It felt extremely cold to turn around and villainize them on my blog.

If the agency’s shortcomings had been more egregious, then I’d happily name them. Like if they’d tried to install a backdoor or cryptocurrency miner onto my website, then sure — all bets are off. But applying Hanlon’s razor, I think this was more a consequence of poor management rather than bad faith, so it didn’t feel like a public shaming was warranted.

Is it worth writing blog posts like this? 🔗︎

Since starting TinyPilot, I’ve drastically cut back on writing. For most of last year, I felt like I didn’t have enough hours in the day to complete critical TinyPilot work, so it didn’t make sense to spend an hour per day blogging.

Back in March, I found enough free time to start blogging again, but only about topics that tie back to TinyPilot. So, is it worth it?

The new blog posts have been successful at bringing people to the TinyPilot website. Looking at visitor analytics for 2022, there are clear spikes around when I published blog posts related to TinyPilot:

Screenshot of Google Analytics for 2022, showing visit spikes correlating with my last two blog posts

But visitors aren’t all paying customers. Especially with an article like the one about redesigning the website, a large proportion of visitors are just curious about the site and have no interest in the product.

Looking at sales data, the blog posts don’t correlate as strongly with increases in purchases:

Note: The sales spike after my first blog post is a bit exaggerated because it includes a large order from a customer who ended up canceling. Due to a bug in Shopify’s analytics, this order is counted twice in the graph. So, the spike should be $8,400 shorter than it is.

Coming back to the question of whether these blog posts are worth the investment: I say yes, but I don’t really have a strong evidence.

I enjoy blogging, and I strongly dislike the feeling that I’m too busy to write. Although I can’t prove that my articles translate into TinyPilot sales, I think there’s a long-term positive effect in terms of awareness. I believe my articles make people aware of TinyPilot who might otherwise not even realize a product like mine exists.

Less tweeting, more blogging 🔗︎

Last month on Twitter, Josh Pitzalis asked me about something I’d written about programmatic SEO:

@deliberatecoder I remember reading something you write a while ago about programmatic SEO and how you generated a bunch of local SEO pages for a side project.

I can't find the article on your blog, where did you post it?

— Josh (@joshpitzalis) July 2, 2022

I knew I’d used programmatic SEO to generate pages for my local comedy site, but I couldn’t figure out what he was talking about. I vaguely remembered writing something, but I couldn’t find anything in my blog.

A few hours later, Josh ended up finding the thing he’d remembered reading: a Twitter thread I’d completely forgotten:

I did a neat long-tail SEO thing. In just one week, I got WanderJest to appear on the first page of Google results for searches related to live comedy.

I don't have a way to scale it yet, but it's fun seeing the experiment work.

A short thread about how I did it. pic.twitter.com/Qxjk1vSnox

— Michael Lynch (@deliberatecoder) July 4, 2021

Ever since that exchange, I’ve been thinking about how I can write more on my blog and less on other platforms. Twitter is an especially bad medium for preserving knowledge because it’s ephemeral by design. I forget what I post there, and searching my post history is slow and tedious.

When I started blogging, it was because I kept running into technical problems where I wished a tutorial existed, so I’d write my own. Over time, I found that readers responded more to the story of me figuring something out than the solution itself. For example, my article about building a plant watering robot was one of my first popular posts, and it was because I focused more on the story than the technical details.

My change in style has helped me write more popular articles, but I’m once again left with the problem of not having a good place to share solutions to things I found challenging. So, I’m experimenting with posts that aren’t meant to attract a wide readership but are just a place for me to share useful knowledge.

My first attempt to return to a “capture knowledge” style of article was a post I published last week called, “Back Up Encrypted ZFS Data without Unlocking It.” It didn’t get much traction anywhere, but it’s now the top result on Google for the (admittedly specific) search query of “back up encrypted zfs data”:

Screenshot of my article at #1 for Google search of 'back up encrypted zfs data'

My logs say I spent just under 6 hours writing it, so I feel like it was a good return on investment. Writing it clarified my understanding of how ZFS worked, and I feel like it will be a useful reference for me even if nobody else reads it.

Though I’m trying to keep more content on my blog, I think some things are still a better fit for Twitter. For the past two weeks, I’ve been trying to figure out why PicoShare keeps crashing on systems with low RAM, and I’ve been tweeting my progress.

I've been trying to debug a crash I'm seeing with PicoShare, my minimalist web app. Follow me on the journey, and perhaps you'll have some ideas!

PicoShare randomly exhausts memory and dies, even when nobody's accessing it. pic.twitter.com/fGvYiX4zGK

— Michael Lynch (@deliberatecoder) July 27, 2022

People seem to enjoy the thread, and I’ve received lots of great advice that helped me identify issues much more quickly than if I’d been doing it by myself. That’s the ideal content for Twitter because I’m sharing live progress and not a finished result.

Experimenting more with TinyPilot pricing 🔗︎

In July, I reduced prices on TinyPilot products for the first time this year.

For a long time, I’d been moving in the other direction — gradually increasing prices in search of the limit where people would think it’s too expensive. Every time I raised prices, I thought, “People aren’t going to buy at this new price. That’s crazy!” And then it seemed like revenues stayed the same or increased. And even if revenues stay flat in response to price increases, that’s still a win because it’s easier to support a smaller number of higher-paying customers.

Another factor keeping prices high was that we couldn’t manufacture new devices. The Voyager 2 requires a custom PCB that our hardware engineering partner designed. We did an initial run of 900 units, but then we couldn’t produce more due to part shortages. The hardware engineers had to redesign the PCB, so I increased prices to stretch out our inventory.

Fortunately, the hardware engineers were able to redesign and manufacture a new batch of PCBs just in time. We were down to our last six devices! For the next few months, at least, we should be unconstrained by manufacturing capacity.

Now, we have a backlog of raw materials, so I’d rather sell them and not have so much of the company’s assets tied up in inventory that’s just taking up shelf space. I’ve reduced prices to see if it will increase our sales velocity:

ProductOld PriceNew PriceChange
Voyager 2 Standard$389$349-$40 (-11%)
Voyager 2 PoE$448$398-$50 (-11%)

In theory, lowering prices should increase sales, but these things are hard to predict. It could be that anyone who’d buy TinyPilot at $349 would also buy it at $389. In that case, I’m just forfeiting $40 per sale. I’ll hopefully have a better idea of the effects by the end of the month.

I’m also curious to see how this affects the ratio of sales between the PoE version and the non-PoE version. Historically, the non-PoE version has outsold the PoE version 2:1. In the limited time since I’ve adjusted pricing, the ratio has drifted closer to 1:1, so I’ll see if that holds.

Wrap up 🔗︎

What got done? 🔗︎

Lessons learned 🔗︎

  • People might relate to parts of a story that you don’t expect
  • Although Twitter is short-term satisfying, there’s better long-term value in capturing knowledge on my blog

Goals for next month 🔗︎

  • Migrate TinyPilot Community and TinyPilot Pro to the next-generation update system
  • Finalize plans for managing TinyPilot licenses
  • Send TinyPilot Voyager to two YouTube creators or bloggers for review

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK