TinyPilot: Month 3

One-Line Summary

Racing to manufacture a physical product from scratch.

Highlights ๐Ÿ”—︎

  • TinyPilot generated $3,800 in revenue with zero marketing.
  • I went from zero to a complete, custom manufactured product in 26 days.
  • I’m still struggling to manage my 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:

Sell 60 TinyPilot kits and power connectors ๐Ÿ”—︎

  • Result: Sold 29 kits and power connectors.
  • Grade: C+

The limiting factor here was manufacturing the power connectors. I wasn’t able to produce enough to keep up with demand. I sold everything I manufactured, but I couldn’t make them quickly enough.

I take some pride in the fact that these 29 sales happened while I did zero sales or marketing.

Test three new marketing channels ๐Ÿ”—︎

  • Result: Tested zero marketing channels.
  • Grade: F

With inventory so low, I decided to postpone marketing efforts. It didn’t make sense to invest in advertising when I had nothing left to sell.

Interview seven IT professionals about whether they’d use TinyPilot in their work ๐Ÿ”—︎

  • Result: Interviewed two IT professionals about remote administration.
  • Grade: C-

This was a big flop. The inventory squeeze was a legitimate reason to defer marketing, but customer research should have jumped up in priority during my downtime.

The two conversations went positively, though. I stuck to Rob Fitzpatrick’s strategy of gathering information instead of pitching my product. Both interviewees were interested in the idea of a low-cost KVM over IP and asked if they could participate in a demo when I had a product ready for them.

Stats ๐Ÿ”—︎

TinyPilot ๐Ÿ”—︎

MetricAugust 2020September 2020Change
Unique Visitors2,2841,741-543 (-24%)
Total Pageviews6,1367,057+921 (+15%)
Sales Revenue$2,951.40$3,636.03*+$684.63 (+23%)
Donations$94.06$187.40+$93.34 (+99%)
Total Revenue$3,045.46$3,817.99+$772.53 (+25%)
* I’ve made a slight change to how I count “sales revenue.” Previously, I was just adding up all the money that came in, including tax and shipping. With 45% of my orders this month coming from international customers, shipping is a much larger percentage of sales, so starting in September, “sales revenue” excludes taxes and shipping.

Sales are up a bit, though there’s a bit of noise in the data given that everything was listed as backordered for most of August and September. Visits are down, which is unsurprising given the lack of advertising or new content on the site.

Manufacturing a power connector: from start to finish ๐Ÿ”—︎

Last month, I discovered that I had been powering my TinyPilots incorrectly, so I paused sales until I could fix the issue. The fix involved manufacturing a brand new circuit board from scratch while simultaneously 3D printing plastic enclosures for the boards. I had zero experience with either, but I needed the new component urgently, as my sales were frozen until I could produce it at scale.

Here’s what that process looked like from start to finish:

Day 1 ๐Ÿ”—︎

The engineering firm begins work on the circuit board for the power connector.

It’s a simple enough board that they’re able to design it and order 100 printed circuit boards from China the same day.

Day 2 ๐Ÿ”—︎

I reach out to a 3D printing lab and ask them to design a case for the power board. Within hours, they send me a work-in-progress image of the case design.

CAD image of a partially completed case design

Early draft of a 3D printed case for the TinyPilot power connector

Day 5 ๐Ÿ”—︎

The 3D printing lab completes their design and gets ready to begin printing a few prototype cases.

Day 8 ๐Ÿ”—︎

The engineering firm receives the bare PCBs from their overseas manufacturer.

Photo of a panel of uncut, unassembled PCBs

First batch of PCBs for the TinyPilot Power Connector

At this point, the PCBs have an electrical circuit embedded in them, but the engineering firm still has to attach components to the boards, most notably the USB ports.

The same day, the 3D printing lab produces their first two cases. I pick up the cases and overnight them to the engineering firm so that after they finish assembling a board, they can immediately test the case fit.

Day 9 ๐Ÿ”—︎

The engineering firm reports that the cases fit the boards. The only noticeable issue is that there are wide gaps around the microUSB ports.

The large gaps turned out to be intentional. Because I emphasized urgency, the 3D printing lab used wide holes to minimize the risk that the case would get in the way of any plugs. Once we confirm that my USB cables will fit a smaller opening, the lab revises their design to tighten the opening.

Day 10 ๐Ÿ”—︎

I receive the first two board prototypes that the engineering firm soldered by hand before getting their automated processes going.

I check TinyPilot’s functionality: success!

I verify that the Raspberry Pi is receiving full power.

$ sudo journalctl -xe | grep "Under-voltage"

Success! No under-voltage warnings.

It’s a huge relief that the chip works.

Day 13 ๐Ÿ”—︎

The 3D printing shop prints their first batch of 30 cases. There’s still a small gap around the microUSB ports, but it’s definitely not a showstopper.

Photo of 24 completed boards

First batch of completed boards for the TinyPilot Power Connector

Day 19 ๐Ÿ”—︎

I receive the first completed panel of 24 PCBs from the engineering firm.

Photo of 24 completed boards

First batch of completed boards for the TinyPilot Power Connector

The manufacturing process is still a work in progress, so the engineers produced these using a combination of automated mechanisms and manual fixes.

Day 20 ๐Ÿ”—︎

The 3D printer finishes the remaining 70 cases. They include an experimental case that’s dyed black with laser etching to reveal a white print underneath.

Photo of black case for power connector

The 3D print designer sends an experimental black case.

I like this new design so much that I switch all future production to black cases.

Day 21 ๐Ÿ”—︎

I begin sending out the first completed power connectors to customers.

Day 26 ๐Ÿ”—︎

I receive the remaining 74 completed boards from the electrical engineers. With 100 cases and boards ready, the first run of production is complete.

Costs ๐Ÿ”—︎

  • Boards: $2,897.70
    • Design: $241.72
    • Materials: $422.16
    • Assembly, testing, packaging: $2,579.04
    • Postage: $76.95
  • Cases: $500.00
  • Total: $3,297.64

The total cost turned out to be substantially higher than my original estimate of $13/unit, but $33/unit is still doable for a first run.

The dominant cost was the electrical engineers’ person-hours during assembly. Because this was a small production run that had to be finished quickly, the engineers performed many of the steps manually for the sake of expediency.

Long-term, it’s obviously suboptimal to pay highly-trained electrical engineers to manufacture circuit boards by hand. Now that I have some breathing room in my inventory, we’re evaluating cost optimizations, including automating and outsourcing more of the manufacturing process.

In contrast, my 3D printing expenses are fantastically low. My state has a government subsidy for locally-incorporated small businesses that pays 75% of 3D printing costs through state universities. Without it, I would have had to pay $20 per case!

Inventory shortages and the thundering herd problem ๐Ÿ”—︎

So far, maintaining inventory has been the biggest challenge of selling TinyPilot. At this point, I’ve been backordered more days than I’ve had inventory in stock. In some ways, it’s “a good problem to have,” in that it reflects high demand. In other ways, it’s an annoying problem to have because maintaining a backlog of orders is stressful.

When my inventory is healthy, the relationship between my order backlog and stress levels look like this:

Photo of Y-cable

When inventory is well-stocked, I can fulfill orders at a steady, relaxed pace.

I get a few orders a day, my assistant packs them up and schedules a pickup from USPS or DHL. Life is easy!

When I’m backordered, it’s a different picture:

Graph showing large order backlogs and consequent spikes in stress

When there are inventory shortages, orders pile up and need to be cleared quickly, increasing overall stress.

With a backlog, everything gets harder. Instead of a nice, predictable stream of work, there’s nothing to ship for days or weeks. There are other tasks my assistant can do, but it’s more time-consuming for both of us to learn lots of new one-off tasks as opposed to a smaller set of consistent jobs.

This month, when I started running low on power connectors, I marked that item as backordered on my store so that I could continue selling my kits, which have higher margins. That was a useful strategy, but it added complexity to the fulfillment process. We could no longer simply process all open orders as they arrived. We had to keep track of which ones to delay and when they were ultimately due to customers.

I’ve struggled with inventory shortages before, and my solution has been to keep a deeper inventory than I expect to need. The problem there is that I’ve iterated on TinyPilot’s design a few times, changing a few components each time. As a result, there are hundreds of cables and cases sitting in my closet that I no longer ship in any kit. I could liquidate them on eBay, but it’ll probably take four hours of work to list and sell them, yielding maybe $200-300. Alternatively, four hours of marketing or product investment would likely have a higher ROI.

All in all, I prefer letting unused inventory pile up as opposed to letting unmet demand pile up.

Moving forward during a standstill ๐Ÿ”—︎

The biggest mistake I made this month was letting my work ethic slip. I found it hard to stay motivated during my inventory shortage. Every additional sale I made would only put me deeper into the backlog. I continued working, but often on whatever happened to catch my attention, not on what was most useful.

The power connectors perpetually felt like they were only a week away. Had I known on September 1st that the first run wouldn’t be complete until three weeks later, I perhaps would have planned a better strategy. But I kept feeling like, “I don’t know what I should focus on this week, but that’s okay because I’ll be back to normal when the power connectors arrive next week.” But it was the first run, so naturally, there were unanticipated hitches and delays, so that feeling of limbo extended through almost the entire month.

Cool companies I’ve found recently ๐Ÿ”—︎

As a software developer, eCommerce is all still new to me. In the process of running TinyPilot, I’ve discovered a few useful companies I thought I’d share. I have no partnerships with any of these companies; I’m just a happy customer.

  • Pirate Ship (self-printed postage and package pickups): I was using the USPS website to print postage, but it’s slow and clunky, as you’d expect a government website to be. Pirate Ship lets you purchase discounted USPS postage and schedule pickups. Their web app is snappy, user-friendly, and when you talk to their customer support, they speak to you in pirate (really). It’s free, so I use it for both business and personal shipping.

  • Mercury (startup banking): I had a surprisingly difficult time finding a bank willing to give me an account for my recently registered TinyPilot LLC. The big banks have rejected me for being too new a business with too small an income. Mercury approved me within a week, and they have a nice, clean web interface. They also offer virtual ATM cards, so you can instantly create additional virtual card numbers with defined transaction limits.

  • Uline (cardboard boxes): When I needed shipping boxes, I was searching “shipping boxes” on Amazon and browsing page after page, looking for something that came close enough to the dimensions I wanted. Then, I realized that there are companies that sell just boxes. Uline is cheaper than Amazon, and you can order basically any dimensions you want. Their standard shipping is next-day delivery if you order by 6 PM, and the shipping cost is still only ~$6.

Legacy projects ๐Ÿ”—︎

Here are some brief updates on projects that I still maintain but are not the primary focus of my development:

Is It Keto ๐Ÿ”—︎

MetricAugust 2020September 2020Change
Unique Visitors49,98144,751-5,230 (-10%)
Total Pageviews125,599110,922-14,677 (-12%)
Domain Rating (Ahrefs)9.010.0+1.0 (+11%)
AdSense Earnings$202.46$161.06-$41.40 (-20%)
AdThrive Earnings$35.00$135.00*+$100.00 (+286%)
Amazon Affiliate Earnings$129.88$83.03-$46.85 (-36%)
Other Affiliate Earnings$118.88N/AN/A
Total Revenue$486.22$379.09-$107.13 (-22%)
* This is an estimate from memory. AdThrive locked me out of my dashboard when I terminated my contract with them, so I won’t know my exact earnings until they (hopefully) pay me in November.

Is It Keto is languishing a bit, as I’m focusing entirely on TinyPilot. Some of the dip is also seasonal, as I saw a slowdown during September last year.

The only notable update is that I switched back from AdThrive to AdSense. I’d heard that AdThrive was the fancy advertiser. They only work with publishers who reach 100k monthly pageviews, and their payout rates are supposed to be significantly higher than Google AdSense.

AdThrive turned out to be a mistake. They couldn’t figure out how to make their ads display properly on Is It Keto because it’s a single-page app (as opposed to a WordPress site or other pre-rendered web app). AdThrive’s ads kept randomly changing as the user viewed the page, causing text on the page to bounce around. After I complained a few times, AdThrive finally gave up on fixing the ads and released me from my contract.

Zestful ๐Ÿ”—︎

MetricAugust 2020September 2020Change
Unique Visitors324333+9 (+3%)
Total Pageviews841849+8 (+1%)
RapidAPI Earnings$9.36$12.27+$2.91 (+31%)
Total Revenue$9.36$12.27+$2.91 (+31%)

Zestful remains quiet and mostly irrelevant. I’ve had no inquiries for enterprise plans recently.Pay-as-you-go usage continues to generate $10-$50/month silently in the background.

Wrap up ๐Ÿ”—︎

What got done? ๐Ÿ”—︎

  • Learned to ship directly to international customers
    • Originally, I was going through eBay’s Global Shipping Program. That was a good first-pass solution, but eBay’s a pain in that they require all communication to stay on their platform. They also have no real solution for sending a replacement part to a customer.
    • Shipping directly through DHL and USPS isn’t that hard (assuming I’m doing it right), but it’s super hard to find information about the requirements. Every Google result on the subject is an article trying to sell you international shipping as a service.
    • This old, overlooked /r/Entrepreneur post summarizes pretty well how to ship internationally.
  • Added several new features to TinyPilot
  • Added shopping cart functionality to the TinyPilot website
    • Previously, customers could only order one item at a time unless they emailed me to manually create the order.
  • Automated the process of building redistributable TinyPilot ISOs
    • Previously, I had to flash a fresh microSD, install TinyPilot, then capture the image of the microSD, which involved physically moving around microSDs a lot. The new method is 100% software and therefore 90% less tedious.

Lessons learned ๐Ÿ”—︎

  • Shipping internationally isn’t that hard to do yourself.
  • Continue over-ordering inventory.
    • It’s better to have too much than to allow sales to freeze when inventory dries up.
  • Remain disciplined, even if temporary circumstances block you from working on the most important thing.

Goals for next month ๐Ÿ”—︎

I’m recycling all my goals from last month with the implied addendum, “…and this time, I really mean it:

  • Sell 60 TinyPilot kits and power connectors.
  • Test three new marketing channels.
  • Interview seven IT professionals about whether they’d use TinyPilot in their work.