Web Development
Keynote: Getting to Two Million Users as a One Woman Dev Team

Summarized using AI

Keynote: Getting to Two Million Users as a One Woman Dev Team

Nadia Odunayo • May 07, 2024 • Detroit, MI

In her keynote speech at RailsConf 2024, Nadia Odunayo, the founder and CEO of The StoryGraph, shares her entrepreneurial journey from concept to achieving two million users as a solo developer. The narrative highlights the growth and development of The StoryGraph—a book discovery platform that offers personalized recommendations as an independent alternative to Goodreads.

Key Points Discussed:
- Early Beginnings: Nadia reflects on starting The StoryGraph in January 2019, initially focusing on a personal reading list tool before evolving into a full-fledged platform.
- Adapting to Challenges: The impact of the COVID-19 pandemic led to a surge in users, but also overwhelming challenges, particularly around the import process from Goodreads, as signups increased rapidly.
- Foundational Pillars: The success of The StoryGraph hinged on three pillars:
- Keeping the technology simple to facilitate rapid development.
- Engaging constantly with customers to gather feedback, which shaped product iterations.
- Maintaining low operational costs, especially during rapid growth, to ensure sustainability.
- Growth Milestones: Nadia details key moments such as doubling user signups to 1,000 in June 2020 and reaching 100,000 users by January 2021. She credits viral marketing through social media, particularly a tweet by a notable figure in publishing, for significant user engagement.
- Scaling Operations: Nadia discusses the migration from Heroku to an in-house infrastructure to manage costs effectively, resulting in an 80% reduction in operational costs.
- Community Engagement: The StoryGraph focuses on building trust and rapport with its user base, which is crucial for retaining subscribers and ensuring their needs are met.

Concluding Insights:
Nadia emphasizes that resilience in facing both good and bad luck is crucial for entrepreneurs. The guiding principles of simplicity, customer engagement, and cost management have been vital to The StoryGraph's profitability and scalability. She encourages other developers to learn from her experiences and foster their own entrepreneurial journeys.

Keynote: Getting to Two Million Users as a One Woman Dev Team
Nadia Odunayo • May 07, 2024 • Detroit, MI

RailsConf 2024

00:00:10.400 It is my absolute pleasure to introduce this next talk. About nine years ago, I was invited to go for a drink with my friend JB, who was opening the London office of Pivotal Labs.
00:00:17.480 While in the bar chatting with various people, JB mentioned that he had invited some people along from a boot camp. I met this young woman who impressed me tremendously.
00:00:24.000 In chatting with her, I thought, 'Wow, she is incredibly smart. I really want to work with her.' So, I approached JB and asked, 'Who's that? I really want to work with her.'
00:00:32.800 He responded, 'I've already hired her.' I thought to myself, 'You’ve got to be kidding, JB.' As you will probably find out, I'm likely never going to get to work with Nadia since there is no way she would hire me.
00:00:39.120 Ladies and gentlemen, it gives me great pleasure to introduce the founder and CEO of The StoryGraph, Nadia Odunayo.
00:01:30.560 As Andy mentioned, we had met in London before, but it wasn’t until RailsConf 2015 that we really had time to bond. Okay, so we’re in May 2024 now, but let’s take a trip back to January 1st, 2020. What a fantastic day that was!
00:01:53.960 After working on my startup, The StoryGraph, every day for a whole year, mostly alone, I was thrilled. We had recently reached the coveted milestone of 100 user signups.
00:02:10.640 At that time, The StoryGraph was a book discovery tool designed to help you choose your next read. One of the main features was a huge list of thousands of books that users could filter by mood, pace, fiction/non-fiction, genre, book size, and more.
00:02:18.680 The earliest users were friends of mine and people I had contacted via the book corner of Instagram, which is known as Bookstagram. Those who recognized the potential of my project were excited and often asked if they could share it with their friends.
00:02:40.080 I happily agreed, and with the new year approaching, I decided to turn January 1st into an event to mark the relaunch of our beta, which had already been public for a few months. This provided my keen early supporters a little extra motivation to share The StoryGraph with their reading buddies, which generated a slight buzz.
00:03:05.480 By the end of the day, we had 160 user signups and 100 new unique visitors, each spending an average of six and a half minutes on the website. I was overjoyed! Throughout 2019, I had concentrated hard on building something worthy to share with people who sought book recommendations online or wanted an alternative to Goodreads, the world's largest book tracking app.
00:03:40.680 Although my goal was not to directly compete with Goodreads, I recognized that I was creating something that could be a better fit for many readers. However, I realized I still had a long way to go. As I entered 2020, energized by our new milestone, the last thing I expected was a global pandemic.
00:04:05.400 As devastating as that was, living alone during lockdown granted me many hours of focused development time. Interestingly, reading rates surged during this period.
00:04:25.240 While I delighted in new signups, I felt apprehensive about discussing my project publicly, particularly when people asked about book discovery apps. I often received articles on the topic, but I chose not to engage with the authors or comments, as my product felt basic and lacking in design capabilities.
00:04:51.960 I simply didn’t feel ready. Even by May 2020, although I was no longer a solo founder, I had spent most of the product's lifetime working alone, and I still felt vulnerable as the sole developer.
00:05:11.800 Having remained engaged with social media book communities over the past year, I began to notice many readers discussing starting new projects if nobody else did. Motivated by the 100 user milestone, I decided it was time to spread the word.
00:05:30.440 On May 27th, I started that effort by replying to or DMing nearly everyone who had positively commented on Tatiana’s tweet. Most didn’t respond, but a handful did. Some compared us to Goodreads, which was not a fair contest given our limited features.
00:06:05.560 However, some users excitedly grasped the project and the potential of The StoryGraph, leading them to inform their reading buddies.
00:06:36.720 June 11th, 2020 was a day of celebration. Just two weeks after I began promoting The StoryGraph, our user numbers more than doubled, reaching 1,000 signups. I threw a huge celebration on Instagram stories complete with strobe lighting, party music, and all the festivities.
00:06:53.639 On June 16th, 2020, after a productive coding morning, I took a break and noticed an unusually high number of Twitter notifications. My friend Emma Barnes, who runs Consonant Books and had a few thousand followers, had recently tweeted, 'Everyone in publishing should stumble upon The StoryGraph now, the best bit of innovation to hit the industry in years.' That was so generous of her.
00:07:19.160 The tweet generated a spike in activity, so I checked back later only to find my inbox flooded with unread emails. Whenever someone initiated a Goodreads import to The StoryGraph, they were notified via email. In the past, I would normally see a maximum of four imports at once, but now I received eight!
00:07:48.759 It turned out that Sam Missingham had quote tweeted Emma’s tweet, which significantly amplified our visibility due to her influence in publishing.
00:08:07.000 As the tweet gained traction, we saw a surge in activity. With Sam’s additional quote tweet stating, 'Book Twitter, let’s start using this instead of Goodreads,' we witnessed an overwhelming response.
00:08:23.159 This was only a few weeks after George Floyd’s murder, and amidst the grieving, many were focused on uplifting Black creators. Furthermore, people were dissatisfied with Amazon’s dominance over the industry.
00:08:42.320 This tweet quickly caught fire, and we transitioned from tens of new signups to hundreds and thousands. However, this newfound success came with complications. Each time someone kicked off a Goodreads import, they received an email stating, 'Your Goodreads import is underway.' This was only true for five users at a time.
00:09:02.079 People were misled, and as signups surpassed expectations, complaints began to surface about the slow import process.
00:09:19.640 Suddenly, everything became overwhelming; I couldn’t sleep that night as I managed the influx of messages on Twitter while simultaneously addressing the failing Goodreads imports.
00:09:36.480 By June 17th, 2020, we were desperately trying to keep up with the thousands awaiting their imports. Despite the chaos, I found users praising The StoryGraph, highlighting its features and user experience.
00:09:49.520 Our user count exploded with thousands signing up, yet I couldn’t shake the fear of failing to deliver on the promise of a quality experience. The echo of my initial joy at crossing the 1,000 user mark faded as our numbers soared to nearly 10,000.
00:10:06.880 I retreated to the bathroom, feeling overwhelmed, sitting in the dark, and holding back tears. I wanted to scream out, 'I can’t do this,' but I resisted. How had I come to this point?
00:10:25.679 Let’s rewind and revisit how this all began. I had pursued a very academic upbringing, securing a place at Oxford, where I studied Philosophy, Politics, and Economics. Following my parents' aspirations for financial security, I was heading towards investment banking.
00:10:42.280 However, after becoming disillusioned with that path, I turned down a graduate banking job and won a free spot to learn coding at Makers Academy in London.
00:11:01.400 Initially, I intended to acquire basic coding skills to collaborate with any developers I might work with in the future. I had preconceived notions of what a developer was, and while that wasn’t me, I soon realized the value of coding and dived deep into the subject.
00:11:19.560 After graduating, I secured a position at Pivotal Labs, where I worked primarily on their platform as a service, Cloud Foundry, for a year and a half. Then, I co-founded a hybrid consultancy and product company called Ignition Words.
00:11:37.760 Around this time, I also grew interested in the FIRE movement—financial independence, retire early. I wanted to ensure I remained financially secure enough to invest in myself and my entrepreneurial ventures, so I managed my monthly expenses and funneled the rest into index funds.
00:11:57.360 Fortunately, I did not have extravagant tastes, allowing me to live comfortably while building Ignition Words. Eventually, when things didn’t pan out as expected with my partnership, I made the difficult choice to leave the company.
00:12:12.480 Since I owned half the business, I withdrew half of our savings, which left me with five years of runway. Unsure of my next steps, I decided to dedicate the upcoming year to exploring my two main side projects.
00:12:29.280 One was an app called Run Rout that autogenerated running routines, and the other was Read List, designed for creating and sharing custom reading lists. I decided to start with Read List, as my passion for books was stronger.
00:12:49.760 Thus, The StoryGraph was born out of Read Lists. The approach I took in making this decision influenced the early success of The StoryGraph. I want to provide some context for our journey.
00:13:07.920 When considering my experience, I can categorize everything that transpired into what was within my control and what wasn’t. Often, the things outside of your control can lead to your highest highs or lowest lows.
00:13:28.480 For instance, luck is involved whether that means a viral tweet catapulting you to success or facing new competitors that threaten your market share. While I can’t control luck, I do recognize that I was fortunate to have parents who instilled grit, determination, and ambition within me.
00:13:45.560 Moreover, I had inspiring educators who reinforced these values. Though I could not control these circumstances, I could control how I approached building my company and product.
00:14:01.760 This mindset has significantly influenced how I respond to both good and bad luck. Resilience in the face of setbacks allowed me to capitalize on opportunities when they arose.
00:14:20.720 Throughout my journey in building The StoryGraph, I found three key pillars that laid the foundation: keep the tech simple, keep talking to customers, and keep costs low.
00:14:36.760 Returning to January 3, 2019, while determining what to build, I realized the first pillar is to keep the tech simple. By simple, I mean to stick to what you know and use as little as possible to achieve your goals.
00:14:55.520 For me, that meant utilizing stable and mature platforms and tools. Since I had a background with Ruby on Rails, it was an obvious choice to build on that platform.
00:15:13.600 The opinionated nature of Rails meant I could move quickly without overthinking setup details. Moreover, using stable, mature technologies often provides access to a friendly community, which I greatly appreciated while working with Rails.
00:15:36.840 After years of attending conferences and meeting like-minded Ruby enthusiasts, I felt supported. This network provided the reassurance I needed in the moments of uncertainty.
00:15:51.600 As I navigated through my dark bathroom moment, I recalled that countless other companies had successfully scaled using Rails, which strengthened my resolve.
00:16:07.480 Thus, I focused on keeping the tech simple, allowing for both speed and ease while building. I dove into the project, relishing the sense of fulfillment I found while coding.
00:16:26.240 It was the happiest I had ever felt while coding, prompting me to realize that I was finally where I wanted to be—with books—and that was thrilling.
00:16:45.040 As I worked, I recognized the importance of the second pillar: keep talking to customers. It's imperative to engage with your audience.
00:17:05.840 While we’re all aware of the need to speak with customers, the execution is key. When conducting customer research, it is crucial to enter discussions with a clear question and an open mind.
00:17:21.360 I learned quickly how vital it is to avoid leading questions and biases. Early on, I mistakenly included a demo of the app during customer interviews, which resulted in confirmations rather than honest feedback.
00:17:38.160 This naivety was corrected after reading Rob Fitzpatrick's "The Mom Test," which highlighted the importance of allowing customers to express their genuine thoughts.
00:17:56.960 I shifted my approach to asking more open-ended questions focused on identifying user habits and frustrations, recording these insights on sticky notes.
00:18:14.640 Over three months, I gathered enough valuable information to build a useful alpha product. I realized that what readers needed most was a centralized place for high-quality recommendations.
00:18:35.040 Thus, the alpha launch focused solely on personal recommendations. I aimed to keep the tech straightforward, particularly at this early stage.
00:18:51.760 I onboarded a small number of users manually, sending personalized recommendations via email. Although the app was quite basic, the users were unaware of the manual labor behind it.
00:19:09.760 I continued conducting customer interviews and tailoring the product, collecting insights to enhance the service. As I gathered more feedback, I could outline a clearer vision for the beta.
00:19:26.560 By June 2nd, 2019, I determined it was time to create a fully fleshed-out beta product, confident in my understanding of users' needs. I was concerned about losing momentum with my community.
00:19:43.760 To maintain engagement, I began a weekly newsletter for around 100 individuals I had spoken to or interviewed about my project. I focused on building the beta and, by July 30th, 2019, I introduced what I called a concierge beta.
00:20:01.880 This approach allowed me to onboard users manually during the early stages. I sent out sign-up forms asking prospective beta testers about their Goodreads libraries.
00:20:19.440 While I was onboarding individuals, I remained vigilant about ensuring that each of them was genuinely interested in the platform. I continued conducting interviews and collecting feedback.
00:20:39.040 In September 2019, my beta had garnered enough traction to go public. While I felt apprehensive, I shared the link and encouraged newsletter subscribers to spread the word.
00:20:57.840 Feedback poured in, ranging from positive to constructive critiques, helping me in shaping the next iterations of the product. At this point, I experienced so many requests for book additions that I hired Abby, whom I met through the book community on Instagram.
00:21:19.440 Although I initially paid her part-time out of pocket, I felt comfortable doing so since I was still in my first year out of my runway. Fast forwarding a couple of months later, Rob, who I had mentioned earlier, reached out to me.
00:21:39.240 After reading a previous tweet, he discovered my newsletter and read all 21 editions published at that point. He was a reader himself who had been studying machine learning on the side.
00:21:58.640 Seeing the potential of The StoryGraph, he wanted to join me as a full-time partner. Although I contemplated if this decision placed a burden on him, ultimately I followed my gut, believing it was a worthwhile partnership.
00:22:20.920 Rob brought machine learning capabilities to our app and absorbed a lot of the manual tasks Abby and I had been handling. We quickly got to work, focusing on keeping the tech simple and user-centered while engaging with our customers.
00:22:41.360 For nine months, we operated on this cycle of building, gathering feedback, and iterating. This approach set us up nicely for what came next.
00:23:01.520 I wanted to do something fun for this conference, so I have a competition for you all. You've just learned two of the three pillars—keep the tech simple and keep talking to customers.
00:23:18.440 Who can guess what the third pillar is? One person who guesses correctly will win a prize. Just kidding! No prize! But hopefully, I've got your attention.
00:23:37.360 Now, returning to my moment of defeat in the bathroom, I realized that giving up wasn’t an option. I had to recombine and get after it, armed with insights on keeping the tech straightforward.
00:23:55.680 Rob and I were determined to handle the challenges that our growth trajectory and technical infrastructure brought us. We faced plenty of uncertainties, but staying positive and focused propelled us forward.
00:24:12.880 After working diligently through resource bottlenecks, we found ways to elevate performance by revising our code, upgrading our Heroku dynos, and enhancing our database configurations.
00:24:30.080 The work paid off, and after two intense weeks, we were ready to grow. Our user count began rising steadily, fueling active engagement and new opportunities.
00:24:47.640 With our Instagram and Twitter audiences growing, we leveraged social media polls and feedback mechanisms to refine the beta product. Continuing to talk to our customers helped us maintain a pulse on user preferences.
00:25:05.040 As we expanded, our operational expenses climbed. Our spending included various SAS subscriptions, and managing Abby’s costs became a significant expense. However, our most considerable financial burden was Heroku.
00:25:23.440 We were determined to remain independent, but it became clear that product-market fit eluded us. We realized it was essential to keep costs as low as possible.
00:25:42.040 This wasn’t a one-time exercise; it required monthly scrutinization of our financial posture. Rob spearheaded this initiative, and we routinely evaluated our tool subscriptions and alternative platforms.
00:26:00.920 We opted for open-source tools where feasible and steered clear of unnecessary expenses. Luckily, we were both financially sound, allowing us to tread thoughtfully on this path.
00:26:20.000 Long before I had reached this juncture, Rob had been dutifully practicing financial independence, thus allowing us to undertake these risks without immediate financial pressure.
00:26:39.520 As we expanded, however, it became apparent that maintaining low costs would reach its limits because of our rapid user growth. Eventually, we would need to monetize the venture to stay viable.
00:26:57.680 In January 2019, I outlined business models that relied on publishers, but I became concerned it might compromise user privacy. GoodReads didn’t charge its users, and I blindly followed a path that contradicted indie principles.
00:27:15.920 However, after discussing models with my friend and mentor, Tamas Sala, he encouraged me to focus on subsisting solely on direct revenue from our users.
00:27:32.560 Thus, I pivoted my strategy to provide enough value to encourage users to pay for our offerings. With rising costs and no income, we decided to focus on developing a premium model.
00:27:49.640 We aligned our three pillars: keeping costs low, keeping the tech simple, and talking to customers. The simplest path to implementation was creating a single webpage with a pre-order option and integrating Stripe for payments.
00:28:07.680 We ensured a straightforward approach with one currency (USD), which represented 60% of our user base. Additionally, we aimed to identify early bird users in our backend post-purchase.
00:28:25.680 We continued to converse with our user base and sought feedback while iterating on the pre-order page. Within weeks, we witnessed orders starting to come in, generating excitement.
00:28:44.640 As we gathered insights from our users, we further fine-tuned the pre-order page, boasting an impressive initial conversion rate.
00:29:04.400 We learned that, for many early adopters, their motivation stemmed from supporting an independent alternative to Goodreads rather than focusing on the specific features.
00:29:22.760 I had hesitated to lean this direction but recognized the intrinsic value of being an indie alternative. We decided to fully embrace this learning and vowed to enhance our product offerings.
00:29:41.440 Upon launch, many users indicated they were motivated by the desire to support us, paving the way for ample validation to build the platform. All this occurred while we were still operating in beta!
00:29:58.600 With the product evolving towards an official launch on January 1st, 2021, we could harness the New Year spirit that typically inspires reading resolutions.
00:30:17.680 Our incremental changes over time facilitated an effortless transition from beta to launch. Convinced this day would be anticlimactic for our most active users, I ensured we celebrated nonetheless.
00:30:37.920 On January 1st, 2021, we surpassed 100,000 users, and soon after, we discontinued our early bird pricing for the plus plan. This provided early subscribers a benefit since they’d supported us from inception.
00:30:55.920 Next, we turned our focus towards further developing the plus plan, for which over a thousand users had already pre-ordered. Although some orders came as Christmas gifts, we had warned them of the launch timeline.
00:31:12.520 By February, we prepared to officially launch the plus subscription, a pivotal moment for The StoryGraph. We garnered 1,400 pre-orders worth just under $50,000.
00:31:27.760 These funds offered immense potential, but we remained committed and focused on delivering a great user experience as the launch approached.
00:31:42.120 By May 4th, our survey of users further confirmed our biggest pain point—lack of a mobile app. Although we already had a progressive web app, many users encountered challenges downloading it.
00:31:57.440 Recognizing the urgency of the situation, I took the reins to build a mobile app since we didn’t have the budget for additional developers. My web development background helped shape this next step.
00:32:11.960 Utilizing available tools and frameworks, I commenced development on both Android and iOS apps. Optimistically, I hoped six weeks of focused work would yield a functional mobile application.
00:32:29.520 Throughout this endeavor, I worried we might lose momentum, but our transparency with users had built substantial trust. They recognized our commitment and understood we were busy with exciting improvements.
00:32:47.520 When the apps were finally submitted and approved, we experienced a surge in engagement, leading to 250,000 milestone on July 8th, 2021. Thanks to the cost optimization efforts we had undertaken, we managed to save significant money during this expansion.
00:33:04.840 However, just twenty days after this achievement, I was jolted awake by Rob’s alert that our servers were crashing due to an influx of users—we had gone viral!
00:33:20.640 A TikTok video went viral, highlighting the benefits of The StoryGraph. The unexpected attention led to 1.6K concurrent users straining our systems.
00:33:39.920 I scrambled to fix inefficiencies in our app architecture to handle the enormous user load. We witnessed a massive growth surge that day, and it became clear our user base was growing at an accelerated pace.
00:33:57.040 By the end of September 23, 2021, we reached half a million signups, only to see user pressures intensify in the following days.
00:34:15.120 As our user base grew, so did our operating costs. Our expenses were rising exponentially alongside our user count, and Heroku costs created a significant burden.
00:34:34.520 Rob and I grew concerned our expenses would always outweigh the earnings a plus subscription could provide. We struggled with the realization we couldn't maintain a sustainable business under these circumstances.
00:34:54.920 For indie bootstrapped businesses like ours, it was paramount to keep costs low. We had to contemplate alternatives to Heroku that could ease our financial burden.
00:35:15.520 Rob's extensive operational experience provided valuable perspective. After careful planning and dialogue, we decided to move our infrastructure management in-house to reduce dependence on Heroku.
00:35:33.680 January 22, 2022, marked the Great Migration off Heroku as we transitioned to Cloud 66. This was a daunting task as I had minimal infrastructure management experience.
00:35:52.880 Rob outlined a step-by-step plan for the migration, and although I felt anxious during the process, it went smoothly. After completing the migration, we reduced server costs by 80%, cutting expenses from $10,000 to $4,000 monthly.
00:36:11.960 If we had not migrated, our expenses would have potentially reached $155,000 that month! Reassuringly, our new infrastructure could handle five times our usual capacity.
00:36:29.920 However, the migration logged out all users, causing confusion among our 760,000 accounts. Working through this challenge, we managed to reconnect every user to their respective accounts.
00:36:46.560 Our user base continued to grow, and on June 26, 2022, we celebrated our millionth user sign-up.
00:37:05.680 As of today, we have 2.6 million registered accounts. We focus on monthly active users, as generally, 25% of registered accounts are active at any time.
00:37:25.040 Monthly, we support 7 million unique visitors generating 70 million page views, allowing users to browse, discover relevant books, or engage with reading challenges via The StoryGraph.
00:37:44.960 Currently, we serve approximately 11 million requests daily, totaling around 330 million requests monthly—all from the same codebase I began developing in June 2019.
00:38:03.680 In March 2022, our early birds were required to subscribe officially to maintain access to the plus features, leading to 62% of them choosing to continue as paying subscribers.
00:38:22.000 Currently, we have 12.3 thousand plus subscribers, reflecting consistent growth within our community. However, only 3% of registered users have utilized the 30-day free trial.
00:38:40.640 We aim to improve this rate, ensuring users won’t accidentally subscribe due to omitted cancellation.
00:38:58.800 Our conversion rate from trial to paid users hovers around 21%, presenting an encouraging position for our indie bootstrapped business.
00:39:17.760 As we move forward, our monthly churn rate fluctuates between 2% to 3%, with healthy retail standards ranging from 3% to 8%.
00:39:36.200 Today, we can confidently declare that The StoryGraph is profitable. Our monthly expenses, which include salaries for Rob and me, are consistently lower than our monthly recurring revenue from subscriptions.
00:39:56.240 There's substantial luck intertwined with my entrepreneurial journey, particularly analysis of strong market timing.
00:40:14.560 Despite encountering setbacks, I remained focused on developing my grit and tenacity. By adhering to our three guiding principles—keep the tech simple, keep talking to customers, and keep costs low—I set myself up for success.
00:40:34.000 Ultimately, the aim is to foster resilience during challenges while seizing opportunities when they present themselves. As you embark on your own paths in product and business development, remember those dark bathroom moments.
00:40:55.400 The guidance of following these pillars will pave the way for you in your development and entrepreneurial ventures.
00:41:17.760 As I conclude, I want to thank everyone for their attention, and I'm excited to connect with many of you during this conference. Also, tomorrow, I will be at the hack day looking for opportunities to pair on my open-source project and help folks with CFPs!
00:41:37.680 If you'd like to discuss your product ideas or startups, please connect with me through this link to book a call. I'm keen to chat with anyone interested. Thank you so much for listening!
Explore all talks recorded at RailsConf 2024
+33