Want just the graphs and not a whole freaking biography? Scroll down to the bottom.

Hoping to sell a product? Rather start by using free services until you have some actual revenue? Curious how that will work out?

Here’s how it did for me — along with the various good and bad luck along the way.

Selling to Developers

I started writing an ebook in February called “Rebuilding Rails”. The idea is that the reader builds a Rails-like framework starting from Rack (Ruby’s web compatibility layer). They understand Rails better because they’ve built something similar. The book is (I hope) useful for all Ruby web developers — lower-level Ruby web stuff is horribly documented and there’s not a lot of good information about how to build on it.

As of this moment it has made me $1094.91 in revenue after processing fees, or about $1000 in profit.

Is an ebook really a product? Yes. Also, this isn’t an ebook sold through Amazon or even O’Reilly – I’m selling it like I would sell software. I market it all by myself. I also fully wrote and entirely maintain the web site that backs it. I’m doing all the traffic and conversion tracking on my own and I’m generally using the ebook as a sort of tutorial. When I start selling software I’ll already know the basics of marketing, billing and whatnot. You may have a head start too if you read this post.

It’s also a product in that I started selling it in beta at a discount. This isn’t a single “it’s done!” book launch, but a long series of “buy before it’s done!” blog posts and marketing emails. I’ll tell you whether that works in a few months, shall I?

I’m actually writing it as part of Amy Hoy’s 30x500 class in product design. Not only was it a great way to survey the audience in advance, but the alumni list is tremendously supportive. Great folks!


I already had an unused MailChimp account. I built a sales site (rebuilding-rails.com) and a lightly-edited email signup form. My design skills are crap but my audience is Rails programmers, who are more forgiving than random consumers.

I started writing my book in Google Docs (pro tip: don’t). I finished the first chapter in about a night and just kept going.

I knew I wanted to put up the first few chapters for free download, so I was racing to get them done and get people on the email list. The plan was to sell a beta ebook at a discount and gradually raise the price as it neared completion — that’s still the plan.

By the end of February I had four people on my email list, all of them people I knew and had told in person. Well, okay, three that I knew plus me.

I also emailed Jesse Storimer, the author of Working with Unix Processes, out of the blue. I asked him what selling an ebook was like.

He wrote back! He loved the book! He has been, and continues to be, wonderful and supportive despite never having seen me in person. You may note a prominent quote from him on the sales page.


I worked occasionally on the book through March — “occasionally” because I’m a dad, I have a day job with a great company and, hey, I’m a busy guy.

The sales site went from “utter crap” to “good enough to not repel somebody really interested” over this time, and Jesse gave me a great quote to headline with. Amy Hoy, my teacher in 30x500, tweeted about my site. I got around 30 email signups.

I sent out an introductory email, which MailChimp tells me nobody ever opened. So if it’s still buried in your inbox then it’s a collector’s item!

I wasn’t selling the book yet. I was terrified about asking people for money. I was trying to figure out how to set up Stripe in a way that wasn’t likely to bankrupt me accidentally when some hideous bug happened. Stripe is very good at what they do, which didn’t stop me from worrying.

I switched from Google Docs to Apple Pages during this time because Pages has tolerable PDF export (GD does not). I upped the font size and generally made the book prettier, and discovered that a horrible three-way merge of content doesn’t make my life better. Apple Pages was not a seamless transition, though I’m glad I did it.

I switched on Stripe payments late in March, having emailed that I would do so. MailChimp says nobody opened that email, either. I was so bummed about email and how it was (not) working out that I didn’t email anybody again until late July.

I was up to 39 list subscriptions, though.

April, May, June

These months were busy, but mostly not with the book. I churned through some chapters, worked hard on it and procrastinated like you wouldn’t believe on doing any actual marketing.

I posted maybe two or three times in various places that I was writing the book. I got a tiny bit of organic Google traffic. But let’s round my amount of promotion down to zero, shall we?

It didn’t help that mid-May through mid-June were eaten entirely by Diablo 3.

Still, the email list grew to 47, then 48, then 49 people in consecutive months. Early July looked likely to be similar.

In Which I Get Frustrated

I had written a fair bit – I wanted a ten-or-so-chapter book and had written nearly seven of that, including two fairly difficult ones. Progress looked good. My reviewers didn’t really review (I’m told that’s normal). I had retooled my blog and semi-accidentally flushed the old one. Goodbye, blog.angelbob.com. Nobody misses you.

I was complaining to the 30x500 group that nobody seemed interested in my sales site (have you seen it? I don’t blame them) and that I just needed to get the book done, validation or no. I was very sensibly argued out of this. But I still felt quite bitter about the whole thing. It’s easy to feel bitter when you’re procrastinating work you really don’t want to do.

I won’t say “things looked grim.” I have a day job, so I can pretty much skip the cheap “will he starve?” drama. But things looked unlikely to change.

Still, by early July I actually wrote a couple of blog posts. The first one was likely to alienate my audience (it was even worse pre-editing!) and the other two weren’t terribly interesting.

The idea was that these would magically attract my audience, despite me having no traffic. I posted one of them to Reddit and Hacker News and then basically ignored it. Reddit and HN ignored it, too.

But on July 12th I wrote a wonderfully persnickety and fiddly post on parsing URL params in Rack, which suddenly turned everything around. Thanks to Jim Gay, Reddit and RubyFlow for helping me put all the pieces into the right places…

A Purchase!

Specifically, on July 13th some guy I didn’t know tried to purchase my book. And then, when it didn’t work, Googled me and emailed me to complain. I don’t know how long it would have taken me to notice otherwise. I’d probably have mistaken the log entry for me testing the page.

I thought it was a prank at first, honestly.

After debugging the site I emailed him an abject apology and a current PDF of the whole book. I let him know that I thought things worked now. I wasn’t absolutely sure – it costs money to order an ebook from yourself and really really check!

They say that as a single random person selling a product you’re supposed to make it clear that it’s just you. Treat it as an advantage, they say. Let’s just say that I do that a lot and so far it hasn’t burned me badly. I recommend it!

The fellow in question was absolutely wonderful and, the next day, actually ordered my book. I was ecstatic and wrote an even fiddlier blog post to celebrate.

I also wrote a linkbait post on a genuine but minor Ruby language design problem and posted it to Reddit.

Reddit hated it, downvoted me mercilessly and sent me a bunch of traffic and email list subscribers. Yay?

I got another purchase on July 17th and another on the 20th. I was still checking my Stripe account manually and promised to email people their ebook “within about a day” on the payment page. Weirdly, it was purchase #12 before anybody else complained about delivery time. Why don’t you people hate me more?

But developers kept looking at my posts. I kept posting some of them to Reddit and RubyFlow. Then I wrote probably my most useful post so far, in my own opinion.

I was still working on automating everything as quickly as I could… Sure, things were working, but I worried at every hour of the day and night. Was I disappointing my hypothetical customers? I’m a dad, worrying all night isn’t out of my way.

First sales

The Flood

I had a few sales under my belt and a little traffic (see graph above). Clearly this was the beginning of “traction”. So I resolved to raise my prices. I emailed my 96 subscribers late on July 27th to let people know they had a week left before the price rose from $30 to $35. I also completely left out any link to the sales site from the newsletter. D’oh!

On July 30th, RubySource found my book somehow. Thanks, RubySource! That was worth a few sales and a lot of subscriptions. By the end of July I was at 118 subscribers.

I also finally automated sending out people’s ebook immediately when they paid me. That was kind of important ;–) I emailed 119 people about it, mostly because it was also two days before the price hike. This time I did include a link to buy the book.

Well, almost. After having written an impassioned post about how you should never put your credit card info into a page without a green lock, I forgot to type “https” in the email. Somebody emailed me back, mentioning my hypocrisy, immediately. Have I mentioned that I love writing for developers? I really do.

I thought fast and fixed it with a quick JavaScript patch before anybody else noticed. Abject apologies to my customers have served me well, but it’s nice to make one fewer!

Things Slow Down… Wait, No They Don’t

I had fun with all of this and sold hundreds of dollars of unfinished ebooks… But I was looking forward to things slowing down a bit. The book is fun but we’re having crunch time at work, my kids are having a difficult week and there’s (always) lots to do besides obsessing over Google Analytics.

Early sales

I sent my final pre-price-hike email to 152 people on Thursday night, got five sales, hiked the price on Friday morning, and breathed a sigh of relief.

Then a guy purchased for the higher price, $35. Huh. I angsted over whether to refund his $5 since he was clearly trying to get in on the sale. I assume? And then somebody else ordered. And another.

By the end I had 5 orders pre-price-hike and 5 more after. Huh?

I had emailed Peter Cooper earlier, and I discovered that he had mentioned me in Ruby Weekly. Ohhhhh…

Big sales day - price hike and Peter Cooper

I also finally started tracking more of my conversion rates rather than just eyeballing them. But I have my first early numbers — around 2% conversion from hitting Rebuilding-Rails.com to successfully buying the book, and between 15% and 50% (!) from Rebuilding Rails’ front page to hitting the “Buy It” button (the pale blue line on the graph below).

Conversion rates from front page of Rebuilding Rails to a purchase

Done for a bit?

Yesterday my sales pushed just over the $1000 mark. I’m at 223 list subscribers. I’m taking all this as clear validation of my book idea, but it’s not yet success in the same league as a few of my classmates ;–)

I’ll keep publishing blog posts as I go — Rack is really poorly documented, and Rubyfolk need better tutorials for it. But I expect to have a month or so of head-down writing to finish the rough draft of all the chapters and start polishing the rest.

This blog post is taking a fair bit of writing time, but I’ll tell you what. You guys buy lots of the book in the next six months and I promise I’ll post again with more numbers, okay? grin

(Open these graphs in a new tab for a larger version.)

Traffic to this blog over that time:

Codefol.io traffic numbers

Traffic to Rebuilding-Rails.com over that time:

Rebuilding-rails.com traffic numbers

MailChimp subscribers:

Mailchimp subscriptions by month

Your first message has a download URL.