Lessons and Regrets from My $25000 Launch
ICYMI, I launched my first book yesterday! So now for what has become tradition - passing on lessons and regrets from new maker to aspiring makers!
As with basically everything I do, I am not an expert at this, I literally just did my first launch. So caveat reador! 😅
Aug 2020: Note from 1 month later: Followup post published - 5 Q&A’s https://dev.to/swyx/5-q-a-s-on-writing-and-selling-my-first-book-18d1
Sep 2020: Now given as a talk at JS.LA after I crossed $50k!
May 2021: Updated with tips on sustaining long tail infoproduct sales after $120k
Before writing this I asked what you wanted to know. Here are your answers:
- Sales: $12k presales, $13k on launch day. ~600 units total, across all tiers, for an ASP of $42 (I priced 3 tiers: $39, $79, $199 at launch). Given that I sold ~200 units for $19, the higher tiers definitely helped move up the ASP, at the cost of promising future work from me. Separate post on that coming.
- Email List: I didnt have a separate email list, and I didn’t really push hard for my list before this. I just sent to my pre existing blog reader mailing list of about 800.
- Hours spent: holy shit i didn’t count haha. I almost don’t wanna know. I probably worked on this 8-12 hours a day, almost daily, from April 11 to Jun 1. Let’s call that 500 hours. Then from Jun 1 to Jul 1 I took about 2-3 weeks off and spent more time on my AWS job. so call that about 100 hours for a total of 600 hours or a $42 hourly rate. This hourly rate is, of course, inaccurate bc it will rise from here on out. (Decoupling input from output is the point of Productizing Yourself, something I discuss in the book)
- Word Count: 101,475 words, 584,875 characters. (automatically counted, so just call it 100k words)
- External Links: 1419 external links to blogposts and talks and other resources in the book. I put the best of literally everything i’ve ever read or seen related to careers in here, it is meant for you to go down a rabbit hole.
- Getting Help with the Landing Page: I can’t take credit for this one - Mahmoud volunteered the entire design!
- Doing the Audiobook: Yes I am narrating. I pretty much just followed the top few Google results for “how to audiobook” - use Audacity (and basic filters to fix quality), and record each chapter separately (so you have the option to stitch them together in future). I opted not to use any intro/outro music, nor use different voices for quoting. People like authors reading their own books. If you are selling via Amazon, you may want to keep 1:1 to your book to support WhisperSync. However, I took advantage of the audio medium to offer extra commentary, and do verbal descriptions of diagrams which are probably pretty entertaining if I go back and listen to them again.
- Staying motivated and keeping yourself accountable: Work in public. hehe, what else would you expect me to say?? I do think the emotional journey is something I need to share - I did have high highs and low lows - I explain more below. But mostly it was highs. As for the lows - ”if you are going through hell - keep going.”
- Balancing the launch with the new job: Explained below.
- Podia vs Gumroad: oof. tough. It’s not clean cut - both have redeeming qualities. Gumroad has better customer acceptance, UX, payment options, discovery marketplace, and dashboard. Podia has better emailing, take rate, affiliate/coupon system, membership/webinar support, and a no-code frontend with good custom domain support (i had trouble with Gumroad’s). I would still recommend Gumroad for people with smaller projects, but if you’re looking to make >$40k you may wish to try Podia. Both are Good Enough that you can’t go wrong picking either.
- Distribution channels: HN is best for dev audience, but be prepared for harsh scrutiny from people who dont care who you are and have zero incentive to be nice to you and are suspicious of every person who speaks up in your defense. #5 on HN for 3 hours gets you about 20k hits. Twitter is second for traffic, but better for endorsements. I got about 2k hits. Product Hunt (PH) is third, maybe 200. I have 3k followers on Dev.to, but didnt get many hits, and I dont think my long form nonbeginner content is very popular on this platform. Reddit nonexistent (for me - for something like The Good Parts of AWS it is perfect for the AWS subreddit).
- Emotional journey of the whole process: described below. Basically - April good, May goodish, early June sucked, late June was great!
- Getting Reviews: I had prior relationships with most of my reviewers, but Scott Hanselman was almost cold (we had interacted once before, over some Twitter drama). There were others who I considered acquaintances but still felt like a HUGE ask to get them to review - I’d say half came through, the other half just ignored or just said no. I wrote personalized requests for every single person I asked - the colder, the more elaborate. This involved referencing their earlier podcasts and talks so that I could highlight how my book reflects things they already believe in. I didn’t publish every review I got on my site, mostly bc I realized it wouldn’t add anything to do too many. I’d love to thank them and acknowledge them in some way though, or have a dynamic way of displaying them based on the audience. (#retargeting #adtech #privacybegone?)
Assorted small things that didnt fit in my narrative below but that i followed:
- remember og:image and metadata for site
- Friends don’t let friends leave service workers on for launch day! cachebusting is a pain!
- But still run lighthouse anyway for easy perf/a11y wins. I enjoyed implementing the lazyload script, highly recommend it.
- give affiliate codes to friends
- setup Teams product - let people buy in bulk, takes minutes but generates a few hundred extra in revenue
- dry run the site - buy my own book
- set up attribution analytics - where the traffic comes from, and what affiliate codes are being used
I have more tips on my Launch Cheatsheet.
- Do NOT change domain providers/DNS settings 48 hours before launch. Have that all sorted WELL before
- Do NOT say thanks to friends who comment on HN posts in support of you or your work. it looks coordinated/premeditated even when it is not. HN is paranoid - but it makes sense - this isn’t Linkedin or PH. Play by their rules on their turf.
- I should have set up extra tracking for clickthrough rates and frontend failure rates. It’s not too late for me to implement Frontend Observability - but i had no time to futz around with this before my launch
- Get professional design for the book and for the site. Don’t DIY. Randall Kanna uses Design Pickle and her books look gorgeous. I had to have Mahmoud volunteer to help me ship a total redesign during launch day for it to get somewhere acceptable, and I definitely lost sales because my original site looked shitty and unprofessional.
- Hiring help: don’t be hands off. You need to be very clear what you want and to check in constantly. I was too hands off, and I didn’t scope the project I hired for well. Fiverr sucked for me - both people I hired delivered extremely late - 1 not at all, the other was disappointing and unusable. But others have had success.
- Audiobook - CHECK YOUR POPS. I had hours of work ruined because I spoke right into the mic instead of aside the mic. I don’t like pop filters - I don’t think they do enough - I just speak sideways to the mic.
Now for the long form narrative.
Grab a drink, this is a long one!
Beyond being an Egghead.io Instructor I had never previously made money on any side project ever.
I started writing on Apr 11 after seeing this tweet from Daniel Vassallo:
- Twitter link
- DEV embed:
I didn’t know exactly what to write but I had a few ideas, so I let my audience choose:
Despite the polls saying I should write the React+TS book, the replies and DMs I got told me to do the nontechnical book. I figured replies and DMs were a better indicator of interest than poll taps 🤷♂️. Also I felt it’d be more challenging and interesting. (I wasn’t wrong on that one…)
I spent the first day not writing - I decided I wanted to presell the book, so I stressed out over picking a name, picture, and writing marketing copy. By the end of the first day I had my marketing page up on Gumroad and announced the book on DEV and Twitter (DEV embed
(yes, thats a different, and worse, title. I would spend about 4-5 hours researching titles alone on that first day before settling on “Cracking the Coding Career”)
When setting goals I estimated it like such: If I took 2 weeks to complete it and I valued my time at $200k/yr, I would need about $7.7k to break even. This made sense because I had just left Netlify and was expecting to join AWS at the end of April (I get more than that, but I felt $200k was a good annualized rate). So I set my goal at $8k for the project.
I set the price at the top end of the range for ebooks, $39, but set the presale at half off, $19. As Daniel likes to say:
I know everyone likes to say “charge more”, but I’d rather leave some money on the table than risk having a lot of people think that they overpaid.
This rang true to what I wanted to do. I want to play long term games - If my first launch has happy customers, it will make my second launch more successful, and so on. I don’t need to maximize money short term - just charging something is “Good Enough”.
The first day brought in about $2k on Gumroad, and on the second day I got another $1k from a friend buying in bulk to support my work (thanks Zell!!!). Together with a few stragglers, I sold an empty PDF for about $4k in my first week. Half of my goal!
That’s the wrong way to look at it. That $4k wasn’t mine - it was in my Paypal account, sure, but I hadn’t earned it yet. In accounting terms the $4k cash would be classed as an asset, but I would also have an equal size liability - the promise to deliver the project to all these people!
I started writing the book, and along the way kept adding topics I thought I wanted to talk about. I had a lot of fun - for example, I planned to release sample chapters like How To Market Yourself (it has been edited and updated since for the final book version), which was an early hit (netting me three podcast interviews off the bat).
However I realized that I was spending too much time editing articles released for free and not enough time writing paid articles. My Tech Strategy chapter release was a flop.
Eventually I ran out of time on the 2 weeks - on Apr 24 this is the Table of Contents I ended up with:
I had run into the classic developer problem - scope creep. I started wanting to do a 2 week project, and ended with 50 chapters’ worth of ideas! Reminds me of this tweet:
“About 2.5 years ago, I estimated that my book on software estimation would be finished within 6 months. It is still nowhere near finished.” - Neil Killick
Yeah. I definitely do not want this thing hanging around my neck for 2.5 years (i have seen it happen to other authors I was helping).
So Daniel advised me to drastically cut scope or release in parts. I did neither as I really did not feel comfortable charging for what I had made yet. So I asked for a 3 week extension. It also turned out that my AWS job would be delayed due to covid and visa issues, so it wasn’t like I had anything better to do anyway. I ended up promising a new ship date of June 1st. Having delayed once already, I was less confident in myself, so I only announced this to presale buyers.
I did, however ship v0.1.0 of the book, so that at least early buyers wouldn’t feel like I had taken their money and ran off:
Yes, I had only 60 pages written in 2 weeks. And a lot more I wanted to cover. The first version was shipped using LeanPub - my goal was to support EPUB+PDF+MOBI with autogenerated Table of Contents out of the box, and LeanPub appeared to do that best with tight git integration. I tried some professional writing tools like Scrivener and Ulysses, but none of them supported that feature set (Ulysess ALMOST had it, but no Table of Contents! wtf! if you @ them they will tell you its on the roadmap, which they have been saying for 7 years. (Remind me never to mislead users with technically-true replies like this.)
btw - i did a poll later and my instincts proved right - my audience is split 1/3 for each of the 3 big formats!
I celebrated my birthday by writing all day and all night. Pro tip: don’t take on a massive book writing challenge just before your birthday! lol
Within the extra 3 weeks I had all chapters planned and maybe about 60% written.
I fell into a good rhythm with the writing process - brainstorm during the day, especially while on my now-daily quarantine run/walks, note it down on my phone, and then at night I would turn it into long form prose. More on my writing process here as well as my Reverse 9-5 schedule. I also found LeanPub unreliable, and dumped it for Softcover, a nice Rails project which Michael Hartl uses to make the Rails Tutorial. Good enough for him, good enough for me. I had to learn basic LaTeX though - Overleaf and the TeX Stack Exchange were good for this. I did have a backup - Dr Axel Rauschmayer recommended Pandoc and Alex DeBrie recommended Asciidoc, they would have been my very next stops if Softcover had not worked out.
Normal (unemployed) life for me went on while I did this. It was important for me that I keep up my other community responsibilities - I wrote unrelated pieces like Cloud Distros, the Third Age of JS and My Life as a Con Man, just to keep my readers warm instead of disappearing completely. I also continued giving conference talks on Svelte and React - 6 events in April, 5 events in May. Yes, continued uncertainty about coronavirus and my job was stressful. I honestly wasn’t even sure if my job would stick around for me, though I was secure enough that I knew I could probably find another job if I needed to. But I also was staring down the face of possibly having to become Very Serious about becoming a Full Time Author/Educator.
Things picked up closer to the end of May. I decided I wanted to try out things I had always heard of but never had the chance to try. If I treated the presales like a Kickstarter, that meant that I suddenly had a $4k budget to spend on marketing and book quality! so:
- I spent about $800 hiring people off Fiverr and my personal network to produce derivative works that I could sell as upgrades. None really worked out in the end.
- I spent about $2k getting the book professionally edited from Wordy.com, which Daniel used. They mostly corrected punctuation and casing, which I didn’t feel added much value. They also charge by word, which was bad because I intentionally went for long form instead of concise. I eventually calculated that it would cost between 10-15k to get the whole book edited. I ended up just pointing them at only the top 5 essays, and fortunately Nat Sharpe and Joe Previte stepped in to help out with remaining edits, which was great because they actually cared about the subject matter. Greg Las also volunteered a few hours with me to fix my horrible typesetting.
- I spent about $800 on an annual Podia subscription as it seemed the better all-in-one platform with more stuff I could use in future like memberships and webinars.
With my target launch 2 weeks away, I started a daily vlog to document my countdown to launch. I figured working in public would help build interest and anticipation. I was feeling confident about my launch, so I also announced that I would donate 25% of book sales to FreeCodeCamp. I didn’t set any end date, but internally I hoped to match my donation of $10k last year which would imply at least $40k in sales. I started studying other launches and (of course) put them into a cheatsheet and figured this number was reasonable.
In case you are keeping score - my target sales went from $8k to $40k!
With 1 week to go and the book 99% done, I started asking friends for reviews and testimonials. Their honest and direct feedback strongly helped make the book better, in particular Jeff Escalante, Robin Wieruch, Samantha Bretous, and a few more mentioned in the acknowledgements. A few reviewers even went as far as a public tweet, but this one probably took the cake:
“I’m reading through @swyx’s @Coding_Career and I’m genuinely impressed. It’s very dense but reads very lightly. Lots of useful context for someone coming into the industry.” - Dan Abramov
George Floyd’s murder happened on May 25. It took a while to trickle into my sphere, but by May 31 it was abundantly clear that launching on June 1st would be extremely tone-deaf and damaging. So with admittedly some reluctance, I called off the launch with 1 day to go, killing all the momentum I had been building up.
I originally delayed things to June 8, but quickly pushed it further to July 1st. This was probably my lowest point, where I was even questioning the value of working on something like a tech career advice book when so much more serious issues were going on in the world. Gayle McDowell, author of Cracking the Coding Interview, got in touch and said that my title was too close to hers and that infringed her trademark, so I didn’t even have a book name left.
In other news, I finally started at AWS though! Book stuff took a back seat as I started work and onboarding, and continued giving more talks in a personal capacity. I also continued updating my more-or-less weekly mailing list with updates, to keep things warm despite not having anything to launch.
Every time I sent anything I’d get a wave of unsubscribes, which hurt slightly but I knew it was the right thing to do. People on my list were there because they liked my blog, and I never really put much effort into the basic stuff everyone says to do, like offer a lead magnet, so I only had about 800 subscribers despite having about 1k unique visitors/day since blogging every day in January.
This period was a weird one - I was technically done with the book, but of course couldn’t resist continuing to edit and adding more content. I did take about 2-3 weeks mostly off.
Since I had spent all of April and May just writing, I hadn’t really figured out the finer details of shipping. So I figured that I could spend June doing non-book stuff. Joel Hooks is always going on about Ryan Delk’s pricing formula (3 tiers: 1x, 2.2x, 5x) so I figured I should make extra stuff for people who wanted to pay me more. I wasn’t happy with the Podia storefront, so I setup a standalone page with Svelte and Begin and announced an audiobook version. For the middle tier I figured that I could sell community access (where I could put my moderating skills to work) and for the highest tier I could offer behind the scenes stuff and live workshops.
Ryan is silent on how to price for team/bulk purchases. I borrowed from Philip Kiely but kept it to teams of 5 incase team sizes got out of control - I mostly went for 2.5x the single unit price, minus a few bucks, just to make it very clear it was good value if you were even thinking about doing a teams thing over a single unit thing. Again, not caring about whether I am maximizing short term money helped a lot here, I basically spent no time agonizing over this.
Closer to the launch, things picked up again. I decided on a new name - The Coding Career Handbook, but bought a future proof domain - LearninPublic.org, where the book lives now and I have the option to expand into a bigger series and community.
I wasted time working on my custom site design (with my shitty but barely passable design skills) and worked on recording the Audiobook. In retrospect the site design was a total waste of time and I should have paid a real designer money to help me out with this. I nearly went too far cloning the Refactoring UI design, but fortunately I checked in with Adam Wathan and he said that wasn’t cool to do (I had NO idea that was a no-no - open source software doesnt translate to openly copyable design).
This being the third intended launch date and having had time to sort out finer details, I felt a little bit better about this one. This is the rough plan I followed.
I had been promising my mailing list to have the best, most significant discount. The day before the launch, I set up a 50% coupon and sent it out together with all my launch details, pretty much as Adam spelled out in his talk. This not only lets you get in some early sales (deeply discounted to reward your loyal readers ofc) but it gives your fans a way to support you by telling them to look out for your posts on the various social sites. I also upgraded all 200+ presale buyers to the middle, community tier, giving them $99 of value for the original $19 that they put down. The principle I follow here is to just Spark Joy in everyone who believed in me early on, so that they will help me spread via Word of Mouth and/or be a future customer because they trust me to take care of them no matter what.
Closer to the launch I had a nightmare freakout. I had domain issues with Begin and Google Domains and decided to swap over to AWS Route 53 with less than 24 hours to go before launch - putting some risk that I might not have a functioning site for people to visit. Fortunately it passed in a few hours when it turned out that I had done almost everything correctly. However I did end up having to ship without having my naked domain setup - which I got a few comments about but couldn’t do anything about. It resolved itself after 1 day.
The morning of the launch, this was the sequence I followed:
- midnight-ish PST - post on Product Hunt
- 8amish EST - HN: https://news.ycombinator.com/item?id=23700486
- 9amish EST - Twitter: https://twitter.com/swyx/status/1278305371610771456?s=20
- 9amish EST - Dev.to: https://dev.to/swyx/launching-the-coding-career-handbook-3f43
- I also tried Reddit but correctly anticipated that they would hate it. i also updated Indie Hackers but it isnt a significant launch platform.
I also livestreamed the entire 2 hour EST launch process: - this would have been a MUCH bigger part of my launch plan if my original 14 day countdown momentum hadn’t been broken, but I didn’t feel too confident about this one so I also did not promote it as much. The original idea was that my launching would be like a TV show with a “finale” being a “launch party” where people could ask me anything - in reality I found the daily vlogging to be hard enough to ship as it was on top of the actual work I had to do. I think, with a longer timeline than 2-3 months, or a separate video production team, this would be a viable strategy, but it wasn’t realistic for a solo maker. Lesson learned.
Twitter was home turf, so I knew I’d be fine there. Still, crafting the announcement tweet was tricky. I had of course studied everyone’s tweets, but stayed closest to Alex DeBrie’s because it felt most like me. I got 144k impressions and 2.5k clickthroughs, with retweets from mentors and now friends like Sarah Drasner, Chris Coyier, Kent C Dodds, Axel Rauschmayer, Sacha Grief (whom I interviewed WAY back when I was just starting out in 2017, Jem Young and even my former bootcamp teacher Cassio Zen!! 😬
Honestly the amount of support from friends I admire and have interacted with pretty much 99% via Twitter truly overwhelmed me. You are never poor if you have friends like these. Friends are a form of true wealth. I could lose my job tomorrow, my bank account could be wiped out, I could be marooned halfway around the world from my normal location. My friends would help sort me out somehow. I genuinely sleep better at night with this knowledge - a security I never had during my stressful finance days.
HN was a wild card. I’d seen plenty of launches fail on HN. Mine fortunately went straight to the front page for a good 4 hours, and peaked at #5. Then dang killed it:
I thought it was from too many flags from people who didn’t like that I was light on experience. It turned out that it was because I had neglected to offer free chapters without an email signup. This violates the rules of Show HN. I had known that this was a good idea to do, but I was busy doing other stuff and I hadn’t expected that this was a disqualifying thing or I wouldve prioritized it. I raced to fix it and put out 4 free chapters, and dang restored it, but by then the damage was done:
To give you an idea of why this is important - per my privacy conserving handrolled shitty analytics, I got 10x the traffic from HN that I did from Twitter.
HN also attracts a lot of critics who don’t know who you are, don’t care about your book and have zero incentive to be nice to you. When you sell a product for money, you are playing in a different league. You get far fewer supportive comments, and your product must stand on its own and communicate value without context. No matter what, you’re going to get haters. It’s fine to ignore them - your critics are probably never going to be your customers - but if you have a thick skin and offer some good responses, you stand to win them over:
This is where I normally would post some chart porn, like Emma did in her own recap post.. Unfortunately Podia has zero charting available, compared to gumroad. I have all the raw data to construct the charts though, and may revisit this post in future to update for you. Anyway, here are my Podia numbers after about a day of sales:
Together with my $8k non-Podia sales, that makes for a $25k+ launch. Still under my $40-80k target, but this is still day 1.
I’m not done. I see this as a LONG running thing. I want to publish a new version every year. I’m looking for and speaking with potential coauthors for future versions. I have been approached to make this in a fuller produced course. And of course more sales will come with word of mouth. In my view, if my launch day is my biggest day, I am doing this wrong.
I’m not even done with launch week. I have been invited for more podcasts, but am focused on making existing customers happy. I screwed up the audio for the second half of my audiobook recording, and need to rerecord it. I also need to deliver the live workshops I have promised. And I also need to get back to work at AWS :)
But not before I ship One More Thing: