Nadia Odunayo

Getting to One Million Users as a One-Woman Dev
Nadia Odunayo • October 06, 2022 • Los Angeles, CA

Nadia joined us at The Rails SaaS Conference in Los Angeles, California to share the details of her journey building and bootstrapping The StoryGraph, from the early beta buzz on Twitter to bringing on a co-founder and going viral with the mobile apps she built with Ruby on Rails tooling.

If you'd like to join us at our next event, follow http://twitter.com/railssaas and sign up for our mailing list at https://www.getrevue.co/profile/railssaas .

Thank you to our corporate sponsors who made the event and the production of this video possible:

EVENT SPONSOR
ClickFunnels (https://clickfunnels.com)

PRODUCTION SPONSORS
Buzzsprout (https://www.buzzsprout.com)
Geocodio (https://www.geocod.io)

POST-PRODUCTION SPONSORS
Render (https://render.com)
PlanetScale (https://planetscale.com)
Evil Martians (https://evilmartians.com)
Entri (https://www.entri.com)

0:00 — Introduction
4:33 — Growing buzz on Twitter
9:31 — Buckling under the load; “how did I get here?”
14:01 — “Keep the Tech Simple" and "Keep Talking to Customers"
22:59 — Hiring help, adding a co-founder, and re-engineering
27:14 — “Keep Costs Low” and choosing a revenue model
35:03 — Going viral with mobile apps
39:28 — Migrating away from Heroku
42:37 — Today; the takeaways

The Rails SaaS Conference 2022

00:00:35.920 hello it's an honor to be opening up the first ever rail SAS conference thank you
00:00:41.200 for having me do this Andrew the 1st of January 2020 was a
00:00:46.760 good day I was really happy after working on my startup the
00:00:52.079 sty graph every day for one years straight mostly alone we had recently reached the coveted Milestone of
00:01:00.719 100 user signups then the story graph was a book
00:01:06.680 Discovery tool that helped you to choose which book to read next one of the main parts of the website was one large list
00:01:13.600 of a couple thousand books you could filter it down by mood Pace fiction non-fiction genre book size
00:01:21.119 and more the earliest users had been friends of mine and people that I'd called DM from the books community on
00:01:27.880 Instagram called bookstagram those that saw the promise and potential
00:01:33.079 of what I was working on would politely ask me if they could tell a friend or two about it I'd say sure and every
00:01:40.399 other day or so one or two new accounts would be created knowing that Book Lovers saw the
00:01:46.399 new year as a chance to set new reading goals I decided to make an event out of the start of 2020 classing January first
00:01:54.439 as the relaunch of our beta which had already been public for a few months at that point the this gave my Keen earlier
00:02:01.240 supporters and followers a little bit more of a push to tell their reading buddies about story graph meaning that
00:02:06.920 we had a tiny bit of extra buzz and we ended the day on 160 user signups and
00:02:12.800 100 new unique visitors each spending an average of 6.5 minutes on the
00:02:18.680 website I was really happy throughout 2019 I've been heads down trying to build something that was
00:02:25.720 worthy of sending to people when they asked for book recommendations online or if an alternative to Goodreads the
00:02:31.920 world's largest book tracking app existed while I didn't set out to build
00:02:37.120 a Goodreads alternative directly I knew that what I was building had the potential to be a better fit for some we
00:02:43.720 did after all offer a way to import all of your data from Goodreads into the
00:02:48.840 story graph I had so far to go heading into 2020 though and off the back of
00:02:55.440 this new Milestone I felt energized to keep going I'd always been afraid to mention what I
00:03:02.159 was working on publicly back then especially when people wanted to know what book Discovery apps were out
00:03:08.360 there I'd be continually sent articles like this one but I made the decision
00:03:13.959 not to engage with the authors or the commenters the product just felt so bare
00:03:19.319 so basic and not very pretty and while by May 2020 I was no
00:03:25.879 longer a solo founder I had spent most of the product's lifetime working on learn I was still the product Soul
00:03:31.879 developer and I felt rather vulnerable but having kept my finger on
00:03:37.280 the pulse of social media book communities for the last year and seeing more and more people each day threatened
00:03:43.720 to start building something new if nobody else did and with the momentum of the 100 user Milestone pushing me on I
00:03:50.879 felt it was time to start spreading the word and so on May 27th I did just that
00:03:57.680 starting by replying or dming nearly every one of the hundred or so people who had replied positively to Tatiana's
00:04:05.200 tweet most didn't reply but a handful did some didn't like it or did what I
00:04:10.840 feared they would do compare it side by side with good reads and that wasn't a contest story graph was going to win not
00:04:18.079 yet anyway but some people understood the project they saw the potential they got
00:04:24.560 excited and quizzed me about what I was up to and most importantly told one or two two of their reading buddies about
00:04:32.400 it the 11th of June 2020 was a really good day I remember I was
00:04:38.960 ecstatic just two weeks after I started talking about story graph more and encouraging people who' been following
00:04:45.199 along from the beginning to do the same our user numbers had more than doubled and we reached 1,000 users 1,000 signups
00:04:55.800 the way I threw a celebration on Instagram stories we had strobe liting party music Flames the whole
00:05:04.080 Stang one week later it's the 16th of June 20120 I just had a productive
00:05:09.880 morning coding and I decided to take a quick putter break and I noticed that I
00:05:15.199 have more notifications than usual turns out my friend Emma Barnes
00:05:20.560 who ran Publishing Company consonant books and had a few th000 followers had recently tweeted this everyone in
00:05:27.960 publishing should stumble upon the story gra now the best bit of innovation to hit the industry in years don't stand
00:05:34.360 for crappy software from massive Tech Giants how lovely of her we had a little bit of extra
00:05:40.840 activity but not too much and I left Twitter shortly after but then I went back to see if the Tweet had even more
00:05:47.160 attention because activity had started to pick up some more the first indicator
00:05:52.639 that something was up was the number of unread emails in my inbox you see every time somebody kicked
00:05:59.479 off offer good Read's import a story graph they got an email letting them know that their import had begun and I
00:06:05.440 was CCD into this email normally I'd see Max four of these at any given time but now I just
00:06:12.880 received eight turns out Sam missingham had quote tweeted Emma's tweet with this Sam is an
00:06:20.800 incredibly well-connected woman in publishing and had 44,000 followers as you can see this tweet was even more
00:06:27.720 popular than the original eventually I left Twitter again just to monitor all of the Imports and see that
00:06:33.800 they were going through okay but then the number of unread emails which had been coming in at a quick but steady
00:06:40.720 Pace started to accelerate what was going on back to Twitter it
00:06:47.120 was okay now Sam's tweet had been quote tweeted book Twitter can we please
00:06:52.680 collectively start using this instead of Goodreads I've been using it for 5 minutes and it's already so much better plus it was founded by a black woman and
00:06:59.240 it's not run by Amazon now this user only had about 200 followers but the Tweet was really
00:07:05.680 resonating as it touched on a few key points first it appealed to already
00:07:11.240 thriving Community book Twitter and it called out the main app in this space that people were
00:07:16.800 Desperately Seeking an alternative for at this point the murder of George
00:07:22.080 Floyd had occurred only a few weeks before and while the black community was still grieving the energy around the
00:07:27.960 Resurgence of the black lives matter movement was at that moment focused around uplifting black creators so
00:07:34.280 calling out my identity as a black woman would have fed into that and finally the mention of Amazon we're in the midst of
00:07:41.599 the pandemic Not only was anti- Amazon sentiment heightened during this time the publishing industry was already sick
00:07:48.319 of them having a monopoly across various suedes of it so yeah this tweet was
00:07:53.759 doing well and we went from having tens to hundreds to thousands of people signing up and now we had a problem
00:08:01.520 remember this email that everybody received well look at that first sentence your goodread import is
00:08:07.960 underway this was only really true for a small handful of imports at any given
00:08:13.039 time now thousands of people had just been told a big fat lie the Imports were
00:08:19.039 not in fact underway and the tweets started to roll in
00:08:34.719 at the rate these Imports were running these people wouldn't have theirs for months and all of a sudden everything
00:08:40.640 was very overwhelming I didn't sleep that night I couldn't between juggling
00:08:46.560 responding to people on Twitter dealing with Goodreads Imports that were failing and trying to figure out how to rewrite
00:08:52.760 the app so that the Imports would be done in days and not months there was no time to rest or relax and then it's June
00:09:01.560 17th 2020 and we're still trying to figure out how to get on top of the thousands
00:09:06.720 of people waiting for their Goodreads import when please get story graph I've had it
00:09:12.120 for one day and I'm still losing my mind over how good it is this was another Super popular
00:09:18.279 tweet probably because it was accompanied with a four- slide presentation titled why you should use
00:09:26.000 sto they also later added this fifth slide so our user numbers were growing by
00:09:32.440 hundreds to a thousand every hour and by the end of the day our sidekick que
00:09:37.640 looks like this not only did nobody have their Goodreads import done nobody had any of
00:09:45.360 our wonderful personalized book recommendations which were also generated by a background job the
00:09:51.440 website was at a standstill and the tweets kept rolling in where's my Goodreads import story
00:09:58.320 graph where are my recommendations story graph I was overwhelmed I was stressed I
00:10:06.000 couldn't handle this I didn't know what to do how did this happen just last week I
00:10:13.200 was so delighted at having reached th000 user Milestone and now we were approaching 10,000 and I didn't want it
00:10:20.360 I didn't want it at all I never even wanted a b2c business it's not what
00:10:25.800 you're supposed to do why did I think that I could build an indie bootstrap b2c business as a solo
00:10:33.160 Dev it felt like this was the end I remember leaving my desk and going
00:10:39.160 to sit in my bathroom I sat in the dark on top of the closed toilet seat and I held back tears
00:10:46.240 I wouldn't allow myself to say out loud I can't do this but I was real close how
00:10:52.040 did I end up here let's go back let's go back to
00:10:57.360 before I had been very AC mic growing up and ended up securing a place at the University of Oxford studying philosophy
00:11:04.160 politics and economics I was heading down the investment banking track something that
00:11:09.240 had been encouraged by my parents we didn't grow up with money and Investment Banking fit into their plans for me
00:11:15.440 having a financially secure future but after becoming disillusioned with that path I ended up turning down
00:11:22.000 my graduate banking job and after winning a competition for a free place I ended up learning how to code at the
00:11:28.200 makers Academy soft Ware boot camp in London originally I went there just to build up some rough coding skills in
00:11:34.800 order to be able to communicate with any developers I ended up working with I definitely had a stereotype of a
00:11:40.839 developer in my head and Not only was that not me it wasn't for me but I
00:11:46.240 quickly realized the value of being able to code and so I put my head down and got stuck in after graduating I secured
00:11:53.959 a job at pivotal labs and I spent a year and a half there mainly working on their platform as a service service Cloud
00:11:59.800 Foundry before leaving with a colleague Theo chushan to start a company called Ignition Works a hybrid consultancy and
00:12:06.839 product company around this time I started to get interested in the fire movement
00:12:12.560 Financial Independence retire early I saw it as a way to make sure that I'd always be financially free to invest in
00:12:19.120 myself and any entrepreneurial Ventures that I may embark on I figured out how much I was spending each month in order
00:12:25.800 to live a comfortable lifestyle and funneled the rest away into index funds
00:12:30.839 I took those principles to ignition work where Theo and I only paid ourselves what we needed to break even as
00:12:36.360 individuals saving up the rest to later invest in any product Ventures ultimately that partnership and
00:12:43.040 our product goals didn't pan out how I'd hoped so I made the tough decision to leave without a clear Next Step since I
00:12:49.120 eared half of the company I took half of the money that we've been saving up leaving me with 5 years of
00:12:55.560 Runway I wasn't sure what to do next when my friends were on your bar got in touch so I spent a year working with her
00:13:02.160 on code newbie a community of people learning to code the goal was to transition it into a product company but
00:13:09.399 that also didn't work out and so I found myself at my desk alone on the 3D of
00:13:15.279 January 2019 I had four years of Runway left that would see me through until the end
00:13:21.600 of 2020 and I'm not sure what to do I don't have any big ideas that are grabbing me so I think why don't I spend
00:13:28.160 some time on my two two main side projects that I've been rulling over for years but never have time to work on one
00:13:34.800 was run rout an app that autogenerated running routs for you the second was
00:13:40.000 read lists an app that enabled you to create and share custom reading lists and track your progress through them on
00:13:46.120 a pretty dashboard the plan was to spend January working on both of them and see if
00:13:51.720 either of them went anywhere I decided to take a look at read lists first I was
00:13:56.920 much more excited about books than running but what to build it in and now we get
00:14:02.199 to the first of three pillars to my process that have served me well especially a key decision points and I
00:14:08.600 think they are Universal to any SAS business especially BR J ones spoiler alert I think the title slide probably
00:14:15.920 gave it away but despite where we left me in the dark bathroom holding back tears story graph is still around today
00:14:23.600 we're profitable and serving millions of users and millions of requests and the biggest question people have have is how
00:14:30.120 did you do it so in putting together this talk I wanted to come up with the most helpful and actionable
00:14:36.800 answer reflecting back I could categorize everything that happened into things that were in my control and
00:14:43.920 things that weren't the things that aren't in your control when running a business are often the things that will
00:14:49.680 either lead to your highest highs or your lowest lows think your viral tweets that take you to a new level of
00:14:55.399 popularity or the entrance of a new competitor that eats into your Market market share these things aren't in your
00:15:01.959 control there's luck involved and luck isn't always good you can have bad luck
00:15:07.839 too but the things that are in your control ultimately how you approach building your company and your product
00:15:14.560 are the things that will determine how you respond to the good luck and the bad they'll determine how resilient you are
00:15:21.000 to setbacks and how much you can capitalize on opportunity so while there are so many factors the three key
00:15:27.839 pillars to my approach to build story graph have set us up to be resilient and take advantage of turns of good luck the
00:15:34.480 first keep the tech simple what do I mean by simple I mean stick to what you
00:15:40.639 know and aim to use as little of what you know as possible to get the job done lean into the most stable mature boring
00:15:48.720 platforms and tools so for me deciding what to build my read lless side project in the answer was obvious rails it was
00:15:57.759 what I'd studied at boot camp it was what I knew I could get moving fast after all this was a small side project
00:16:04.519 with rails I'd have a working demo in no time and if we head back or should I say JUMP forwards to me sitting in my dark
00:16:10.880 bathroom for one moment part of what gave me the strength to pick myself up and get back out there was knowing that
00:16:17.720 all of the issues I was currently facing had to be solved problems companies had scaled with rails before because they
00:16:24.079 had been forced to and I also knew that there was a large experienced friendly community of people out there that I
00:16:30.360 could seek help from so back to 3rd of January 2019 I kept the Tex simple went
00:16:36.880 for the boring answer not worrying about any growth or scaling pain points I didn't have yet and I got going fast and
00:16:44.279 I had so much fun it was the most happy and fulfilled that I'd ever felt while ping on anything and it made me wonder
00:16:51.160 if this is what people were talking about when they spoke about founder product fit I'd always been a keen
00:16:56.680 reader and I found the prospect of work on something that other readers would find valuable so exciting I realized
00:17:03.880 during that first week in January that books is where I wanted to be and if I wanted to build something successful in
00:17:10.039 the space I needed to call upon what would become the second pillar keep
00:17:15.360 talking to customers we all know there's nothing worse than building something that nobody wants we also all know that
00:17:22.559 we should talk to customers but do we all know how to do it properly what does
00:17:29.039 to customers properly look like it means going in with a key research question with a hypothesis it means going in with
00:17:36.600 an open mind with no set answers in mind and no leading questions planned that
00:17:41.799 means going in with a script the emphasis is on Discovery not confirmation bias so it was a bad idea
00:17:49.799 that for the first round of customer interviews I did I included a demo of the app that I've been working on for
00:17:55.640 the last couple of weeks and I said what do you think would did you use this my learnings from Rob Fitzpatrick's
00:18:02.760 the mum test revealed pretty quickly that people weren't too Keen when they said oh yeah that does seem cool yeah
00:18:10.120 yeah I'd use it for sure they were just being nice so I knew what I had to do
00:18:16.120 keep talking to customers but this time without a demo without questions that
00:18:21.320 enable people to just be polite and tell you what you'd like to hear without the questions that make people cutle onto
00:18:27.400 your idea or even susp ECT that you have an idea instead I asked more open-ended
00:18:32.720 questions I learned more about my interview's reading habits and pain points with any current tools that they
00:18:38.120 had I'd watched each batch of five or so interviews back I summarized each onto
00:18:43.480 sticky notes and I grouped them into themes on a virtual whiteboard the learnings from each round helped me to
00:18:49.360 figure out the hypothesis for the next round and I kept talking to customers repeating the cycle until something
00:18:55.840 useful to build became clear I was prepared to walk away if nothing did but 3 months of talking to customers
00:19:03.720 later something useful to build did become clear I had enough information to start building an alpha product from my
00:19:11.600 customer research the main paino in the book space was having one place for consistently high quality
00:19:18.080 recommendations and so the alpha was purely a personal recommendation service it was very important that I kept the
00:19:24.679 tech simple especially at such an early stage of the product's life just just one round of customer interviews could
00:19:30.840 completely change what I was building so knowing that I'd only be on boarding small handfuls of people onto the app at
00:19:37.520 any given time I tried to keep as much of the behind the scenes work as manual as possible when the alpha users filled
00:19:44.760 out a form in order to get a personalized recommendation all that happened was that I got an email went
00:19:50.440 off and did a bunch of research before adding a new recommendation into the system via the back end then I sent the
00:19:56.400 user an email letting them know their recommendation was ready the rails app itself Hardly did anything but the users
00:20:03.280 didn't know that and while running this Alpha I kept talking to customers I had
00:20:08.480 two rounds of onboarding people were onboarded in groups of five they used the app for a week and then I invited
00:20:14.159 them to do a customer interview I didn't ask them whether they were enjoying the alpha or not doing that would have led
00:20:20.679 me back into the Trap of I really like it honestly I I definitely pay you $5 a
00:20:25.720 month to use it once it's ready instead I asked them questions about how they were using it why had they filled out
00:20:32.440 the form for a recommendation twice in quick succession why hadn't they logged on how was their reading going otherwise
00:20:40.320 I used my learnings from the interviews to build a handful of extra features and I did this for a couple of months until
00:20:46.799 June 2nd 2019 because I was continually talking to customers I knew when the alpha had
00:20:52.880 exhausted its purpose when the technical limitations of such a basic product started to Clash with the needs of my
00:20:59.480 small handful of users and it was time to move on I resolved to spend the next few months building a more fully fleshed
00:21:05.880 out beta product the spec for which was easy to draw up because I had such a clear understanding of my users means
00:21:12.600 and pain points from my research I was worried about losing momentum with all the people I'd been
00:21:17.840 talking to so I started a Weekly Newsletter the maining list started with 100 or so people that I'd interviewed or
00:21:24.400 spoken to about my project up until that time and I built head down for a couple of months until July 30th 2019 I started
00:21:33.760 what I called the concierge beta Cony urg because a lot of the product was still manual why spend time building a
00:21:40.840 good weeds importer if it wasn't clear that anybody would want to import their good weeds data into my app for now
00:21:47.120 manually onboarding people would be wiser I sent out a signup form to my newsletter wisely asking how many books
00:21:54.559 the prospective beter user had in their Goodreads Library I knew just by looking at the responses that some of these
00:22:00.559 people would never be able to join my Beta until I had an automated import still I spent hours and hours manually
00:22:07.440 adding people's books to the app around this time I was in Puna India teting DEC and Ruby comp but I spent most of the
00:22:14.400 trip in my hotel room manually onboarding people to the Beta app and then I did the same thing that I did
00:22:19.919 with the alpha onboard people in small batches let them use the app for a week invite them to a customer interview I
00:22:27.080 kept doing this until September 2nd 2019 even though it was still very basic
00:22:33.039 I realized that the product was developed enough such that anybody could get value from it in particular from the
00:22:38.440 long filterable list of books on the homepage and so despite being incredibly nervous to do so I made the beta public
00:22:47.039 I shared the link and encouraged my newsletter subscribers to do the same and the feedback started rolling in most
00:22:53.880 of it positive some critical and a lot of it helpful in figuring out where to go next
00:22:59.400 it got to a point where I had so many manual requests for books to be added to the site that I had to hire a woman who
00:23:04.559 I met from the books community on Instagram Abby to help me parttime while I had a small group of
00:23:10.559 paying beta testers at this point I was essentially paying her out of pocket feeling comfortable doing so given I was
00:23:16.799 only in the first year of a possible five of my Runway fast forward a couple months
00:23:21.840 after that and W Freo someone's husband got in touch heing me pop up on Twitter
00:23:27.400 and from a recent tweet of found a link to the archive page of my newsletter he sat down and read every
00:23:33.279 single issue of the 21 I'd published up until that point from the beginning until the most recent not only did he
00:23:40.200 enjoy the story I was telling as a reader himself who'd been studying machine learning on the side he saw an
00:23:45.799 exciting opportunity to help me out he started helping me here and there in a spare time but fell in love with this
00:23:52.480 new side project and working with me of course and could so keenly see its potential he wanted to help accelerate
00:23:59.400 us on our upwards or beit slow goinging trajectory but knew that would only be possible if he could dedicate more time
00:24:05.559 to it he felt that his only option was to quit his senior well-paid job in
00:24:10.799 Enterprise level product support to join me full-time I almost discouraged him at
00:24:15.960 first it felt like a lot of pressure Rob who himself was striving towards Financial Independence was going to give
00:24:22.159 up his stable job and six figure salary to come and work for at least initially nothing but I also went with what my gut
00:24:29.640 was telling me that this could prove to be a magical partnership Rob quickly brought machine
00:24:34.919 learning capabilities to the app soaking up a lot of the manual work that Abby and I had been doing and from then on we
00:24:41.399 were just heads down repeating the cycle of keeping the text simple to build the next thing and continuing to talk to
00:24:48.200 customers to get their feedback then we build the next thing as simply as we could talk to customers again and we did
00:24:54.240 this for 9 months until we get back to where we left off in the intro
00:24:59.760 okay it's competition time so far you've seen two of the three pillars keep the
00:25:06.600 text simple and keep talking to customers what is the third one going to
00:25:12.840 be one person who guesses correctly is going to get a prize at the end of this talk just kidding there's no
00:25:20.600 prize but just in case I didn't I now definitely have the attention of everyone in the room
00:25:26.159 right okay so we're back to June 7 17 back into my dark bathroom ultimately
00:25:32.520 giving up wasn't an option I had to pull myself together and get on with it having kept the tech simple and
00:25:37.799 straightforward sticking with tools and a community that I was very familiar with I knew that I must be dealing with
00:25:43.600 solved problems I wouldn't be the first to build a rails app that supported thousands of users and as you now know I
00:25:50.600 did have Rob and he was an amazing encouraging supportive business partner but when I emerged from that
00:25:57.000 bathroom I didn't know that I was about to embark on 2 weeks of what I now call the dark days first we had to
00:26:03.720 rearchitecturing
00:26:10.559 recommendations for one person didn't take several minutes then we had to work through a
00:26:16.000 whole range of growth skaing issues that neither of us had dealt with before database iops
00:26:21.960 anybody we hardly slept but we had each other and we kept up the positivity and optimism as best as we could
00:26:29.159 and after chipping away at all of the resource bottl Nets mainly through a combination of rewriting code and
00:26:35.159 throwing money at the problem as they say by doing things like upgrading our Heroku dinos and
00:26:40.679 database we were back in business it took 2 weeks but we made it and from
00:26:46.080 that point we continued to grow by at least hundreds of users each day all via Word of Mouth whenever we weren't sure
00:26:52.679 what to do we kept talking to customers and because of the growth of our Instagram and Twitter audiences after
00:26:58.720 the popular tweets we had new avenues open to us like polls we take the learnings from that to
00:27:05.320 improve on the beta keeping the tech as simple as possible being ruthless with not solving for pain points we or our
00:27:12.399 users didn't yet have we continued to
00:27:17.640 grow and as we did our cost kept on Rising what were we spending money on we
00:27:23.520 had a standard SAS company subscriptions think cloud Fair send grid mailchip
00:27:29.000 naturally paying Abby was a big expense but our biggest cost was Heroku good old
00:27:36.159 Heroku we wanted to stay independent and we still hadn't figured out product Market fit and so we come to the third
00:27:42.240 pillar keep costs low this is not a set it and forget it until you need to
00:27:47.760 upgrade kind of thing this was is a continued exercise for Rob and I
00:27:53.120 especially Rob who really takes the lead on this front at least once a month we review the list of tools we were paying
00:27:59.360 for experimented with the lowest tiers of various Heroku add-ons and switched to open source Alternatives where
00:28:05.640 possible all without sacrificing the quality of the product it helped that we had a wide variety of skills between us
00:28:12.519 we did as much as we could instead of hiring people and we put in the time to level up where we needed to it also
00:28:18.799 helped that we were both financially secure Rob had been following the principles of fire long before I had
00:28:24.080 been so was well ahead in his financial Independence Journey we both had years of Runway and so we didn't need to worry
00:28:30.200 about paying ourselves just yet while we've been doing the best we could there's only so far you can go
00:28:36.440 with keeping costs low especially when you're getting hundreds of new signups every day at some point you can't get
00:28:43.000 costs any lower without sacrificing the quality of your product at some point even discussing how much further you can
00:28:49.399 get the costs down gets ridiculous at some point you have to make money in
00:28:54.880 order to become a sustainable business back in Jan January of 2019 when I
00:28:59.960 realized that I wanted to make this side project a full-time business I dreamt up business models that involved making
00:29:05.840 money from Publishers without compromising the privacy and data of our users after all good reads didn't charge
00:29:12.679 its users anything so surely me doing so was out of the question on top of that
00:29:18.679 most conventional Indie bootstrap wisdom said that you had to go for building a B2B business I'd already fallen into the
00:29:25.519 Trap of building a consumer product by having the business model while I Publishers though I'd at least improve
00:29:31.720 on the making money path however after discussing my ideas with a friend and Mentor tamas Sal his response was the
00:29:39.600 best businesses are where you can make money directly from your customers with no middle entity involved given that I
00:29:46.039 wanted story graph to fall within the category of the best businesses I had to find a way that I could provide enough
00:29:52.159 value to our users such that they'd want to pay us so back in 2020 with Rising
00:29:58.080 costs and no income we started to think about how we could move towards a premium model this was our chance to
00:30:04.640 combine all three pillars keep cost slow we couldn't build something we weren't
00:30:10.159 going to need there was no way we were going to use up resources building a paid plan until we had proper validation
00:30:17.559 in the form of pre-orders keep the tech simple what was the quickest way that we could get to
00:30:23.559 pre-orders a single web page on the app with a pre-order button powered by the
00:30:28.600 simplest quickest stripe checkout integration no concept of subscriptions only one currency USD CU Americans
00:30:36.039 formed 60% of our user base and a user marked as an early bird in the back end after purchase we figure out the rest
00:30:43.880 later keep talking to customers because we've been regularly conducting user interviews and Reading and Responding to
00:30:50.760 all feedbacks sent our way via email and our social media channels although we didn't quite have product Market fit yet
00:30:57.320 we knew what our most popular features were and made up some potential enhancements to those and so the first
00:31:03.880 version of the page went live on October 5th 2020 when creating a story graph account
00:31:09.840 users had an option to check a box labeled keep me informed of exciting product updates and thousands of people
00:31:16.159 had opted into this so we put together a newsletter for this group of people and waited to see what would
00:31:22.320 happen eventually the orders started to come in it was very exciting but also a
00:31:27.399 little bit nervous wracking and keeping in with the vein of talking to customers I manually emailed a random selection of
00:31:34.279 the people who pre-ordered to figure out what had made them do so and I used their responses to iterate on the page
00:31:40.240 in order to improve conversion which had started out at a healthy 5% and good e-commerce rates are typically 2 and 1
00:31:46.679 half to 3% there was a clear pattern coming out of this research I didn't
00:31:52.360 really pay attention to what features were on offer I just really want to support an independent alternative to
00:31:57.480 good read I'd always been wary of Leaning into this worrying that we couldn't build a
00:32:02.840 proper business this way as if it seemed like we were a charity surviving off of support instead of people needing to pay
00:32:09.240 us in exchange for Value I do now see that there is inherent value in existing
00:32:14.279 as an indie alternative to a popular product but that was the moment when we decided to fully Embrace that piece of
00:32:21.000 learning from our research after all users May subscribe for that reason but
00:32:26.279 the goal would be to make the product so good that they were renewed because of product Market fit we took hundreds of
00:32:33.159 pre-orders in the first few weeks of the page being live we got the conversion up to 6.6% and for us that was more than
00:32:40.919 enough validation to build out the platform oh this whole time we were still in beta so while taking pre-orders
00:32:49.080 we were focusing on getting the product to an official launch including a whole app redesign we planned this launch for
00:32:55.960 the 1st of January 2021 one again taking opportunity of the New Year energy and
00:33:01.600 enthusiasm amongst Avid readers really because of the way that we've been iteratively building the product coming
00:33:08.519 out of beta just meant switching over the domain name and I was worried that the day would ultimately be
00:33:14.880 anti-climatic especially for our most active of users but we still pressed on making an event out of it I did posts on
00:33:22.240 Instagram and Twitter asking people to comment if they wanted to be part of the buzz on launch day and when January 1st
00:33:29.200 came I personally DMD the dozens of people who had replied encouraged them to share the news on their
00:33:36.240 platforms making an event of it was a success because on January 1st 2021 we
00:33:41.760 surpassed 100,000 users on that day we turned off our $30 early bird pricing
00:33:47.880 for plus we had to check that people would actually pay $50 and also give all
00:33:53.080 the current early birds a little bit of a benefit for having been quick with their pre-orders so then it was time to
00:33:59.159 focus on building out the plus plan that over 1,000 people had pre-ordered some as Christmas gifts we did warn
00:34:06.720 them and plus did eventually launch on 28th of February or 1st of March
00:34:11.919 depending on where you live you see I had started to feel bad that we' taken tens of thousands of pounds of
00:34:17.879 pre-orders but all we could tell people was that plus was coming early 2021 that could technically mean up to
00:34:24.800 April or even May right so I I decided to back myself and Rob and declare that
00:34:30.440 plus would launch in February and well in the last week of February after a handful of orits plus
00:34:38.320 launched and while it wasn't quite February for me in the UK any longer it was February in the US where the vast
00:34:45.720 majority of our customers lived and so that's all that matters in the end we had 1,400
00:34:51.679 pre-orders making just under $50,000 of course that money didn't really feel like ours until until the
00:34:58.000 plus plan had gone live so now we get to the 4th of May because we were always talking to
00:35:04.760 customers and because we had tens of thousands of followers on social media we were always aware of our latest
00:35:10.800 biggest pain point at the beginning of may we could ignore our current one no longer it was starting to impact the
00:35:17.760 number of signups our lack of mobile app we had a progressive web app but no
00:35:24.480 matter how much we while mainly Rob tried to convince people it wasn't
00:35:29.839 downloaded from the app or Play Store so as far as people were concerned it was nothing more than a website bookmark so
00:35:36.440 what could we do we had to stick to the pillars of our process keep cost low we
00:35:41.960 couldn't afford an iOS or Android developer so the job was going to fall to me keep the tech simple what was the
00:35:49.520 simplest way that me a web developer with minimal Swift and zero Poland experience was going to build a mobile
00:35:56.640 app in a timely manner manner well one advantage of me leaning into the mature
00:36:01.880 large rails ecosystem meant that other people in the community had likely often run into this very problem and so tools
00:36:08.760 would have been developed to solve it enter hot wire and turbo tools changing
00:36:14.040 the way HTML is written and allowing developers to reduce Reliance on JavaScript without sacrificing any of
00:36:20.400 the performance associated with traditional single page acts and with the accompanying mobile adapters they
00:36:27.000 gave us a path towards developing semi-native apps in a reasonable amount of time with all of the dev being kept
00:36:33.079 in house so I started up two new Reapers and I got coding for about 6 weeks
00:36:39.040 mixing Ruby with Swift and cotlin I remember feeling rather concerned that due to our small team size including me
00:36:46.400 being the only web and now app developer I was working on nothing else for such a
00:36:51.560 long time I was worried that we'd lose the momentum that we've been building on top of ever since our spikes of June
00:36:59.160 2020 turns out that being publicly consistent and transparent for so long
00:37:04.400 meant that we built up a lot of trust amongst our user base if we weren't as active as we typically were on social
00:37:10.319 media the Assumption was they must be hard at work on the next awesome future
00:37:15.920 and eventually 6 weeks after the mobile app repos were created we submitted them to the stores and got them
00:37:23.280 approved as I said opting for boring mature stable tools means that you've
00:37:28.520 likely got a large experienced community of people on hand some of whom are real gems I'm talking about amazing people
00:37:35.960 like Joe melotti who patiently answers DMS from strangers who are at a bit of a dead end in such a friendly and detailed
00:37:43.079 way thank you so very much Joe you are awesome having the apps out and shouting
00:37:49.640 about their launch definitely gave us an extra push in signups leading us to hitting the quarter of a million
00:37:55.240 Milestone on July 8th 2021 20 days later I'm fast asleep and my
00:38:01.560 phone rings it's Rob there are thousands of people on the app right now and it keeps crashing uhoh
00:38:09.800 out of bed I get turns out we'd gone viral on Tik to Jill's baby someone who
00:38:15.960 we had never heard of before had made a 44 second video with her face super imposed on the app highlighting what
00:38:22.920 made it so great perhaps most memorable was the video's opening line
00:38:28.520 all the hot girls are switching from good reads to story graph and here's
00:38:34.119 why this was another allnighter we never had this many concurrent users before
00:38:39.480 1.6 th000 and something was breaking somewhere we tried so many things until
00:38:45.280 I realized that some code from the launch redesign was running every single time the homepage was loaded Not only
00:38:53.200 was the query that was being run incredibly inefficient it was result was not being used anywhere on the page yeah
00:39:02.160 anyway so this was eventually fixed and the video grew to 1.7 million plays and
00:39:07.960 over 300,000 shares at the end of it all we were greeted with a nice surprise on
00:39:13.599 the US App Store book charts we grew by 40,000 users that day
00:39:20.000 and we kept growing until September 23rd 2021 the day before my birthday where we
00:39:26.240 hit half a million sign as we headed towards the end of 2021 we
00:39:31.280 started to see an influx of people that same January 1st excitement rearing its head and as our user base grows our
00:39:39.119 costs are Rising by the thousands how come
00:39:44.160 Heroku Heroku costs were killing us we weren't profitable yet and as our user
00:39:49.440 base continued to grow our Heroku cost grew in lck Step continually upgrading
00:39:54.599 and looking ahead at the next tier or two up W and I became concerned that our heroic costs would always outpace our
00:40:01.760 earnings from our plus subscribers we would never be profitable we'd never build a sustainable Independent Business
00:40:08.319 this way but you got to keep cost low but how do you get rid of Heroku costs Heroku is
00:40:15.599 the standard easy you don't need to hire a devops person platform but we had to
00:40:20.680 do something Rob has 15 years of operational experience from his prior
00:40:25.720 career and after months of discussion about this and what various worlds looked like for story graph we decided
00:40:32.680 to take advantage of that and move towards having him manage our infrastructure he started painstakingly
00:40:39.160 detailed Research into our options and well January 22nd 2022 marked the great
00:40:47.079 migration of foku to Cloud 66 I was so nervous to do this
00:40:54.400 especially as our only web developer with hardly any infrastructure management experience leaving the safe
00:41:00.040 space of Heroku was scary Rob was amazing at addressing all of my concerns
00:41:05.599 we spent weeks putting together a step-by-step document for the actual migration the morning of the migration
00:41:11.960 was 6 hours of non-stop work babysitting the process until it was all done apart
00:41:17.960 from a couple of small hiccups relating to having a working maintenance mode and a database backup command that initially
00:41:24.040 timed out everything went smoothly when it was over Rob and I sat back in
00:41:29.800 our seats feeling immensely proud of ourselves we'd done it we'd actually
00:41:34.960 moved off of Heroku with an app that served hundreds of thousands of users and had tens of millions of database
00:41:41.560 rones in the process we'd cut our server cost by 80% Rob who often ran our support ticket
00:41:48.880 desk on the weekends decided to check in and make sure everything was okay account missing where has my account
00:41:56.160 gone deleted account oh my gosh our hearts sunk how
00:42:04.400 could this happen I took deep breaths and tried to stay as calm as possible this couldn't be
00:42:11.280 happening turns out the migration had logged every single one of our 760,000
00:42:17.160 users out of the app and while when you haven't had to log into something for in some cases years and you have multiple
00:42:23.960 email addresses or maybe originally you had a typo your email address you will likely struggle to log back in we
00:42:31.160 eventually managed to match up every single confused customer back to their account for
00:42:36.800 you and we continue to grow until on June 26th of this year we hit 1 million
00:42:52.200 users thank you where are we today we have 1.2 million in registered accounts
00:42:59.160 we focus on monthly active users since the average person reads a book a month and so 25 to 33% of the registered
00:43:06.280 accounts are active at any given time we have 3 million unique monthly
00:43:12.440 visitors and 36 billion page views a month each month we serve 110 million
00:43:19.119 requests all from that same repo that I started back in June of 2019 we're profitable
00:43:27.240 in March of this year our early birds had to take out an official subscription if they wanted to continue using the
00:43:32.720 plus features and 62% of them did I remember feeling very pleased with
00:43:38.920 myself because of the little Easter egg that I put into the renewal code all of the early birds were sent I knew it was
00:43:45.680 obscure but I hoped that at least one person would catch it the closest I got
00:43:50.839 was this from a developer friend remarking on how long the code was and spotting the egg emoji but then saying
00:43:57.800 nothing more on the matter we have
00:44:05.160 53,000 plus subscribers in total including those that have taken out subscriptions since the plan officially
00:44:11.200 launched on February 28th of last year only 3% of our registered users
00:44:17.319 have given our 30-day free trial AG go and we're looking into ways to increase that proportion we don't take payment
00:44:23.880 details for the trial so there's no chance of users ACD entally subscribing because they forgot to cancel given that
00:44:30.800 we're incredibly pleased with our 18% conversion rate from trial to paying user we know that every single
00:44:36.920 subscriber has made a conscious choice to pay us and that's a fantastic position to beat in as an indie
00:44:42.680 bootstrap business our monthly churn rate is just under 2% with a good rate typically
00:44:48.599 falling between 3 and 8% and our monthly costs are now consistently lower than our monthly
00:44:54.599 recurring revenue from plus and we we've done all of this with a three-person
00:45:00.440 team two of us full-time and a onew woman
00:45:06.800 Dev how have we done this and how can you set yourself up with the best chance of doing it too keep the tech simple by
00:45:14.760 sticking with what you know aiming to use as little of what you know and leaning into the mature stable boring
00:45:21.839 Technologies you set yourself up to be able to move and change direction fast
00:45:27.040 you avoid building things you aren't going to need and you can rely on a wealth of knowledge already out there on
00:45:32.480 the internet and tap into a large experienced and hopefully friendly Community for all of these reasons
00:45:39.559 having rails being part of your toolkit is such a wonderful advantageous thing and remember if you're itching for a
00:45:46.160 tech problem something more exciting to sink your teeth into while you build out your product any growth or success that
00:45:52.960 you have necessitates that you'll have to get creative at some point keep talking to customers ultimately
00:46:00.160 this is the most key you can keep the tech simple all you like but if you're building something that nobody wants
00:46:06.440 you're going nowhere so invest in learning how to talk to customers properly there's no one right way to do
00:46:13.079 it but there are definitely wrong ways read the books and blog posts out there and figure out a range of styles that
00:46:19.920 work for you and your team critically assess how well you're doing each time and iterate on your own research
00:46:26.480 techniques there's a reason some people's jobs are solely focused on customer research it's
00:46:32.200 a skill in and of itself and you can't take shortcuts with it and keep costs
00:46:38.040 low this isn't just starting off with the cheapest plans that you can find and only upgrading when absolutely necessary
00:46:45.040 this is having regular review points do you really need this tool do we really need to be on this tier have any
00:46:52.520 alternatives come out since we last looked can we do this inh housee and this is always within reason don't
00:46:59.160 sacrifice the quality and security of your product don't sacrifice your user experience and don't take on too much
00:47:06.319 in-house such that you're distracted from building pre-product Market fit you
00:47:11.359 have to do everything you can to keep cost low it's essential to stay independent and bootstrap but and there
00:47:18.319 are a lot of new Innovative funding options available now seeking investment from a point of profitability with your
00:47:25.119 costs under control is a super powerful position to be in ultimately as you can tell from my story there is luck
00:47:32.000 involved there's good timing think of those early tweets you can do all of these things and still not find success
00:47:39.559 but by consistently following the three pillars and having faith in the process you're setting yourself up to have more
00:47:46.319 chances to try and fail and fail again and again and eventually succeed you're
00:47:52.960 setting yourself up to be resilient to the bad luck and you're setting yourself up to capitalize on opportunities when
00:47:59.280 Good Fortune comes your way I hope that as you go on to build your businesses if you ever find yourself having your own
00:48:05.599 dark bathroom moment you'll think back to this tour you'll think of the three pillars and have faith that you're on
00:48:11.440 the right track you'll be able to get out of that dark bathroom and get back to work thank you so much for
Explore all talks recorded at The Rails SaaS Conference 2022
+4