One of my original goals with the X1Plus Expander program was to try to be as transparent as I could about it -- all the work that I did, where the money went, and where the time went. My best guess was that I wasn't going to make much money from it, and definitely not enough to try to hold secrets about it -- I expected that the most important outcome for me would be educational. And, if I documented the project, it might also serve as good reference material for other people trying to do a similar thing!
I set these as my goals -- make more than zero money; deliver a product; and write about it -- but along the way, I made plenty of predictions just for myself. So here's the question: how many of these goals did I succeed in? And, if I made predictions, did I get anywhere close to calling my shots?
Dolla dolla bill, y'all¶
The not-so-secret here is that I'm really bad at accounting -- mostly because it's a task that I don't have good methodologies around, and also, it's a task that I hate doing, so I keep not doing it. But accounting is like cleaning a toilet -- if you keep up with it regularly, it's not so bad, and if you keep putting it off, it is a disgusting mess.
My books for this project are a disgusting mess.
Top-down cost¶
What we did is that every time I, Dan, or Accelerated Tech spent money, I put it in a Google Sheets with a description of the expense, the date, the dollar amount, and who paid. The good news, I suppose, is that there were few enough expenses that I could categorize it later by hand, and totalize it with a script.
Since I was working on this project as Accelerated Tech, I set up X1Plus Expander in my time-tracking system, TSheets. I "billed time" to Expander when I used hours that I otherwise would have spent doing paying client work. What that meant was if I spent an evening working on Expander firmware because I wanted to, it didn't count -- that was home time. But if I spent an office day forcing myself to test boards, that was billable time, because I sure wasn't going to spend that evening doing client work instead! To put a dollar value on it, I took the number of hours billed to the program, and multiplied by my current open source "friends rate".
Once I categorized everything, I got to do the fun part -- some data
visualization! Because I was
fully budgeting based on vibes, I didn't already know where all the
money went on this project, and this was the first time I got to find out.
I threw it into d3.js, and out came the following Sankey chart.
Hey, this is not a bad outcome at all! I had a few hunches, and this validates them:
- Crowd Supply told me not to price prototype costs in, but I was pretty sure it was going to cover them eventually -- even though the prototype costs felt pretty big at the time (we spent $500 at a time on validation runs of the mainboard). It did; we spent $5,348 on prototype equipment, or about 9% of the whole program budget. I guess that was fine.
- I thought that the COGS was going to be a relatively small percentage of where the money went. That's about right: of the $76,377 that came in, the landed cost of goods at Mouser was $24,751, or 32%.
- I thought that I was going to be net profitable, if you didn't count my time at all. I was -- there was positive profit in there!
-
I wasn't sure where we were going to land on Accelerated Tech cost (that is to say, including time I billed to work), but I had a hunch it was going to be about a wash. It turns out that I spent slightly more time than Accelerated Tech made in profit on this whole program.
If you include the time I spent from work, Accelerated Tech came out in the red by... $711, on a $61,144 program (or, I went overbudget on time by 1.2%). I'd say that's as close as it gets to hitting the nail on the head, especially for my first try at one of these.
Of course, if you consider my and Dan's home time -- conservatively, we spent close to 1500 hours hacking on this? -- well... let's just say the situation becomes a whole lot more grim.
Good thing we agreed not to count that.
Cost of goods sold¶
There's another view -- how did the unit economics for the project compare to what I predicted? I have data on this, too! Roughly:
- When I submitted the project to Crowd Supply in July 2024, I expected that my cost of goods sold, landed in Mountain View, was going to be $47.08/unit, in quantity 200, including extras for yield fallout. (I think I got quotes from JLC for this, and used some hand-waving math to guess everything else.)
- Later, in September 2024, they gave me an actual spreadsheet to work through! I got quotes from a bunch of vendors that time -- I had PCBWay quote me in qty200, I got JLC to autoquote me, and I also got quotes from my final selected vendor, King Credie, in quantities 150, 300, and 500. In quantity 500, I predicted that my landed cost was going to be $29.50/unit, including fallout.
- When all was said and done, I made and sold 567 units, and the total cost by the time it arrived on my front door (including extras) was $15,695.29, or $27.68/unit.
I broke this down graphically by where the specific costs went.
A few things to note:
- I had expected tariffs to be much higher. In reality, I got lucky in three ways. For one, the HTS codes that my products were classified as more towards the 10% side than the 25% side, at the time. For another, many of my shipments were relatively small pieces, and therefore fell under the de minimis threshold -- and so therefore, the tariff load was $0 for those shipments! And third, and most importantly, the shipments (mostly) arrived before the Liberation Day tariffs, which would have easily doubled my COGS. Sheesh.
- I explicitly multiplied out for yield fallout in my preproduction estimates, but when I actually ordered parts, I did this by ordering about 10% more. But, since that was part of the order, I couldn't really split it out of the unit cost -- so it gets folded into each individual piece in the final tally.
- This doesn't include production samples, which I hadn't budgeted for at the beginning; that amortizes to about an extra $1.98/unit. But, on the other hand, if I were going to order another run, the marginal cost of more units would not include this, so I didn't include it here.
All told, I'm also pretty impressed by this! Coming in below my estimate is surprising, especially given that the scope crept a fair bit to add nicer boxes, screws, a document, labels, etcetera; I ended up coming in about 6% under budget, which is pretty darn good. Obviously I got lucky on tariffs, but even if I hadn't, and I had paid 25% on everything that I brought into the US, I would have come in only 9% high.
Schedule¶
I was pretty happy with what I achieved in terms of cost. On schedule, things were... well, a little less rosy. The executive summary is that, over the course of a 13 month program, the delivery dates pushed by about two and a half months. This is not great, but maybe by the standards of crowdfunding projects, it's not the end of the world...
I was going to try to put together a graphical timeline for this, but gosh, this post has taken long enough to write at this point, and I couldn't find a good library to generate one. So, instead, here's a rough chronological history of Expander.
- July 11, 2024: I submitted the project to Crowd Supply. (More on that in some future post, maybe.)
- August 8, 2024: Hey, mail from Josh at Crowd Supply -- we had an agreement signed!
- August 30, 2024: The project pre-launched on Crowd Supply.
- September 19, 2024: In some internal communication to Crowd Supply, I said that for a fund-to-shipment time, an "8 week turn time seems believable ... the initial shipment could be 200 units, with 200 units per week thereafter". Man, that was optimistic!
- October 25, 2024: This one isn't exactly schedule-related, but I commented that "re: the other accessories: I expect the take rate to be relatively low". It was not! I made 567 Expanders, 642 modules, and 315 cases. That's an accessory take rate of, uh... 169%. Well then.
- November 2, 2024: During Supercon, we kicked off crowdfunding! I gave my first public commitment: I said that I'd deliver by April 12, 2025.
- December 13, 2024: Crowdfunding was finished.
- December 16, 2024: I had a signed purchase order in hand from Crowd Supply! (For tax reasons, I had them wait to send me the money until January 1st, but I started executing.)
- January 14, 2025: The first production samples arrived in hand.
- January 23, 2025: In internal communication to Crowd Supply, I optimistically said that "X1P-100 is trending on time". Then I went on vacation to go skiing in Japan for a few weeks.
- March 5, 2025: Three gigantic boxes of mainboard PCBAs arrive on my doorstep. I started questioning my life choices.
- April 10, 2025: PCBs have definitely not left my house. My life choices continue to come into question. I send e-mail saying that I'm "hoping to get the first shipment in the mail to Mouser by the end of April". My (fantastic!) Crowd Supply project manager, Chris, having played this game before, sets the revised ship date on the web site to May 31st, rather than April 30th.
- May 6, 2025: The first shipment goes out to Mouser! It's 80 sets of X1P-800 plastics.
- May 8, 2025: Emboldened by my success, I put another box in the mail, this time some module boards. I figure that I wanted to make sure that there was a good stock of add-ons, so that people who ordered more stuff and gave me more money didn't have to wait longer than people who gave me less money.
- May 22, 2025: The first 48 X1P-100 bundles go in the mail to Mouser! Technically, a non-zero number of X1P-100s have arrived in customer hands by the promised May 31st. We update the site to say "orders placed now ship June 30th".
- June 13, 2025: Enough X1P-100 bundles go in the mail to fulfill all crowdfunding orders (but not preorders placed between December and June!).
- July 30, 2025: We update the box to say "Orders placed now ship August 1st".
- August 16, 2025: Enough X1P-100 bundles go in the mail to fulfill all outstanding orders!
- August 26, 2025: The remaining few bundles and cases go in the mail, finally fulfilling all my obligations to Mouser / Crowd Supply. At long last, I take a deep breath.
I think this outcome is not horrible. Does it seem like something I could improve on? Yeah, it is. But the biggest thing about this is that people were always very happy to receive their packages! And buyers were really quite gracious when I sent e-mails announcing delays. (It is almost like they have bought crowdfunded projects before.) So, you know, all's well that ends well.
Other thoughts¶
Back when I was at NVIDIA, one of the things that I always found interesting is that we tried pretty hard to call our shots. Obviously we wanted silicon to have the best performance and power consumption and all that, and obviously if we missed our specs, that was bad and some manager was probably going to get a bit of a dressing down for that.
But the other direction was about as important! Not only was it important to have good results, but it was important that we were able to accurately predict what we were going to achieve. If we had dramatically better results than we had planned, Jensen was also going to get on someone's case for that, because that was also a bug in our process.
I took that lesson to heart. I knew going into this program that I was not going to make a huge amount of money. That was something I accepted as the cost of getting to learn how to do this. But I did try to be at least reasonably methodical in my estimation of what things would cost -- and if I had to make wild-assed guesses, at least they ought be scientific wild-assed guesses. There is definitely a satisfaction to not just delivering the thing, but approximately doing it when and how I predicted.
At the start, I had claimed to myself that my goals were:
- Make an amount of money greater than or equal to $0
- Deliver roughly what I had promised, roughly when I promised
- Try to write about it and set an example for other people to either follow or avoid
The execution on this project was far from perfect (and that'll be the subject of my last post on the matter, coming next!) ... but through the lens of the above goals, it seems like I might not have done half bad at all.