Tropical.rb 2024

How to build a business on Rails and Open-Source

As developers, coding is our comfort zone, but turning it into a business is another challenge. I'll share my journey from a side project to a full-time business, including the difficulties, common pitfalls, and helpful "cheat codes"

Tropical.rb - The Latin America Rails Conference
https://www.tropicalrb.com/

Tropical.rb 2024

00:00:05.720 The original title of this talk was 'How to Build a Business on Rails and Open Source,' but there's no recipe for that. I'm going to tell you how I built a business on Rails and open source. My name is Adrian, and I am a self-taught engineer. That means I didn't go to computer science school. I'm product-oriented, which means that I don't like to do only development but rather a little bit of design, a little bit of marketing, and checking what others are doing.
00:00:17.000 I take all that information and incorporate it into my product to deliver the most value. You can find me as Adrien the Dev on Twitter, GitHub, and pretty much everywhere else. AO has been my main job for the past three and a half years, and I co-host a boutique conference in Bucharest, Romania.
00:00:35.719 In my free time, I also record a podcast with my friend Yaro from Super Rails. We're not very professional, but we have great guests, and sometimes we’re funny. For those of you who don't know what AO is, it's a very advanced content management system, admin panel, and internal tool builder for Ruby on Rails. It helps developers build CRUD-like applications really, really fast.
00:01:11.640 I'm going to talk a little bit about the history of AO and how it came to be because it makes sense in the grand scheme of things. Additionally, I will share a few tips and tricks on what I did right and maybe what I did wrong, pointing out things you should avoid. One question I always get is how I built AO.
00:01:43.320 For the English-speaking audience, it's pronounced 'AO,' coming from 'avocado,' but I couldn't find any domain names or usernames, so I just slashed it. So how did it all start? It's not a novel idea; I come from PHP and Laravel and, in one of my past jobs, I used something called Laravel Nova, which was an admin panel framework for Laravel.
00:02:02.280 It helped us build a new division inside the company in just a few months because I could deploy the internal tools very quickly, allowing me to focus on the more important aspects of the app and deliver value very fast. I already knew Rails and had worked with it, so I knew that Rails was super fast for building apps. I thought if we had something like Laravel Nova for Rails, it would be the greatest framework of all time.
00:02:30.360 I started digging and found a couple of alternatives like Active Admin, Rails Admin, Trestle, Administrate, and others. However, they all had their disadvantages. This is not me bashing those tools since they were built with different technologies and goals in mind, but going back to the current alternatives, they felt a little bit unpolished. Some were unmaintained, difficult to extend, and the developer experience was not great.
00:03:04.080 So, there was room for improvement. I got started, and my first commit was not aimed at building a business. I just frankly wanted to see if I could build it. I started in the spring of 2020 during the pandemic, working throughout the spring and summer. It was a side project on my weekends. By August, I had a gem file and began talking to people about it.
00:03:35.640 I would tell them, 'Look at this, it's super easy to use; just follow the docs.' I was so naive, thinking it was that simple. I was the guy who built something cool and wondered why everyone didn’t want to use it for every app. The following months shifted from telling people about the app to begging them to use it. I started wondering why many people were dismissive.
00:04:09.439 Most conversations led to comments like 'No one’s paying for this; it’s never going to work,' or 'I have Active Admin, and that’s free; why would I pay for your thing?' It was frustrating as people likened it to phpMyAdmin. This was not just another ugly admin panel; it was designed for the whole team to use productively. It had to look good, work well, support advanced use cases, and be ready for deployment from day one.
00:04:43.920 I kept pushing. I clung to every marketing opportunity I could find without being spammy. For instance, Planet Ruby had an Advent gem calendar showcasing one gem every day in December, and on day 15, it was AO's turn. Jason Chars once mentioned in a podcast that they had nothing to discuss, so I reached out to share about AO, and he gave it a shout-out.
00:05:15.360 When someone on Twitter asked who was building something cool with Ruby, I was there promoting AO. I reached out to about 10 or 15 podcast hosts, asking if I could join them to discuss AO. Very few agreed, but Jason Sweat was one of the first big Ruby podcasters to have me on, and I always thank him for that.
00:05:52.240 This is a call to action: if you’re significant in the community and see someone building something cool and passionate, just help them promote it. It goes a long way.
00:06:12.000 Some time later, dhh launched Hotwire in December 2020, introducing a cool new way to build front-end UIs for Rails. I hesitated to switch my single-page application project to Hotwire because it was something new. Not even a week later, a random person on Twitter told me they'd never use my tool since it didn't use Hotwire. This prompted me to take a leap; I decided to rewrite it incorporating Hotwire.
00:06:44.800 I took a month off from my stable job to focus on my side project. Fast forward to about three years after that conversation, this is me at a Rails World conference in Amsterdam. AO was probably one of the first medium-sized open-source projects to fully utilize Hotwire, launching only three months after it was released.
00:07:17.919 After version one came out, we secured our first paying customer within a few months. However, during the next year, I came close to abandoning the project, chasing the venture capital dream, which ultimately didn’t work out. Despite that, I began gaining traction with people using AO and requesting features, all without me doing much.
00:07:51.679 Then I realized, if people were using it and wanting it, maybe it was solving a problem, so I decided to invest more time into it. At the end of 2021, I made $4,000—enough to pay my taxes and accountant.
00:08:11.879 After building more features, I launched version two with a subscription model. The next two years, I aimed for one release every two weeks, ensuring substantial improvements with every update.
00:08:28.200 However, these years were grueling. I constantly wondered if I was on the right path or if I should get a traditional job since I could be making more money. Am I wasting time? Am I hurting my family in the process?
00:08:50.320 They say that the second most important decision in your life is choosing your co-founder, while the most important is choosing your partner in life. I thank my wife every day for believing in me. Even in the past year, while I traveled to conferences, she stayed home to take care of our baby.
00:09:20.520 I had a conversation with Mike Perham, who advised me to go out there, provide value, and use my strengths to my advantage, particularly being located in Eastern Europe with a lower cost of living, giving me a longer runway compared to competitors in the U.S.
00:09:47.680 Following that advice, I lived on a reduced income and my savings until my product took off. Sometimes, I wanted to quit, but then I would get a sale, then another, and suddenly it was my best month, followed by another best month.
00:10:15.520 Building a business is not just about watching your monthly recurring revenue. It's about recognizing patterns and growth. We gained fans and evangelists who shared how much the framework helped them and the value it provided. This feedback gave me hope.
00:10:36.360 I met Paul, who was using AO in his company. We started chatting, and I discovered he was originally from Romania, just like me. At one point, he mentioned looking for a part-time job, so I offered him a position with AO. My biggest customer was paying me $500 per month to be available on his Slack channel and GitHub repo, which allowed me to pay Paul.
00:11:06.840 Thus began the story of the first AO employee. It doesn't sound glamorous—it is a story of struggle and resilience. I did what I had to do to keep my product alive. By the end of 2022, we made $24,000, reaching ramen profitability. I was doing the work I loved, had my own product, and the freedom I desired.
00:11:35.480 We were rapidly developing features and enhancements and still do. In 2023, we launched AO 3, extending its capabilities to support more use cases. That's when Paul became a full-time employee, easing my workload, allowing me to focus on sales and marketing.
00:12:04.360 By the end of 2023, we made $64,000—enough to cover two salaries. Yet, more importantly, we were making an impact and providing value while building a business. I began touring conferences to speak and connect with my community, leading me to host my own conference in Bucharest.
00:12:28.360 The tour benefited me by understanding and connecting with my community. These are the people I see in this room tonight. I thank my wife, my community, but there’s one unsung hero I want to mention—Rails. AO wouldn't be here without Rails and its conventions.
00:12:57.320 Rails taught AO how to interact with the database, manage request lifecycles, serve assets, build API endpoints, and more through engines. So thank you, Rails, for making my job easier.
00:13:27.680 Now we’re a team of three engineers, with Gabriel being the second junior Ruby developer we hired after Paul. We have about 200 paying customers and a clear path forward, having seen people build Shopify alternatives, LMSs, security fintech solutions, and more on AO.
00:13:55.640 The market has shown that Rails is mature enough to support projects like this. I shared the history of AO and how it came to be, but I did it the hard way. Let’s engage in an exercise to see how it should ideally be done.
00:14:24.680 In preparation for this talk, I asked people what they wanted to know about my story, and most said they wanted to learn how I got started and how to transition from part-time to full-time involvement. Let's break it down step by step.
00:14:56.479 First, you have to have an idea, but instead of thinking of it that way, identify a painful problem. Your product will either serve as a painkiller or a vitamin; people pay more to ease pain but might hesitate over vitamins.
00:15:13.880 If you're unsure what to build, think of things you wish existed. You’re the expert on that problem. Go out, find potential customers, and speak to them. Your family and friends don’t count as they aim to support you and won’t provide useful feedback.
00:15:46.479 The best insight comes from those who experience the problem you’re solving. Once you have your idea, build a Minimum Viable Product (MVP)—the simplest solution to tackle that problem. This MVP may contain many manual processes to start with, but it should provide valuable feedback to determine the continuation of your product.
00:16:05.479 Start small; you don’t need fancy automation or design. If it solves the problem for users, they’ll engage with it, even if they have to click multiple times to get there. Looking back, I wish I had taken more time to understand my customers.
00:16:28.119 Next, find users. I mistakenly thought my product was so great that it would naturally attract users. But they didn’t come, and they won’t come for you either. Go out there to tell people about your solution.
00:16:58.240 This is a common mistake among developers, as we often get caught up in aesthetic features and miss the core focus: bringing attention to our product. If you’ve completed research on the problem, you should have a good idea of where potential customers might be.
00:17:28.080 Listen to your users, as they will provide invaluable feedback on what needs improvement or what should be added or removed. This approach enables you to iterate quickly on your product's development.
00:17:50.839 The best indicator that your product is working is—yes, money. Paying customers demonstrate that your business has traction. Charge as soon as you gain traction, and aim to raise prices to reflect value.
00:18:10.839 We began charging from day one and increased prices last year; we’re now experimenting further with pricing strategies. We put together a reasonable road map and strive to adhere to it. When I started AO, I envisioned where it should be in two to three years, and we’re nearly there.
00:18:40.839 However, how you get there is a different story. We often look at successful companies and try to mimic their long-term planning, but we’re not them. If your customers want feature C first, go build that instead of strictly adhering to your planned order.
00:19:09.679 Delivering value to customers is the most important focus. A great slogan from our friends at UserList is 'Better done than perfect.' When someone asks me how to get started, I tell them to run 'rails new' and deploy from day one.
00:19:30.959 Even if you end up with a blank page, write some code today and deploy it. Keep that momentum going, and soon you will create something of value that’s publicly accessible. Hiding a project away locally may lead to it never seeing the light of day.
00:19:55.599 Show up and show that you care. Whenever we get a new issue on GitHub, even if we can’t address it immediately, we acknowledge the problem and indicate that we will investigate it soon.
00:20:26.799 As developers, people prefer to work with individuals rather than faceless entities; they want to connect with you and see how you handle issues.
00:20:47.079 I learned the hard way when I left my job to go full-time on this. Instead, you can start on a side project until it can fully support you. When it does, announce it to your customers and potential customers because they want to know that what you do professionally revolves around that one project.
00:21:07.199 Branding is crucial, despite our instinct to throw on some Bootstrap and call it design. Your product doesn’t need to look like a drunken monkey designed it. Good branding matters; a decent logo and consistent colors signify that you care.
00:21:30.959 You’ll need to get into marketing as well. Although marketing can feel dirty, it's essential for your customers to learn about your product. If you don’t talk about it, who will? Aim to create a funnel to draw customers in, enabling them to discover, assess, and then purchase your solution.
00:22:04.239 At some point, you may have to invest in marketing. I find it challenging, but engaging with people online, especially supportive figures in the community, yields tremendous insights.
00:22:28.959 Attending events and conferences can cement bonds you’ve formed online. These individuals will most likely recommend or buy from you. It's easier to purchase from someone you’ve interacted with personally at a conference than some random person online.
00:22:53.199 If I hadn’t engaged with individuals like Mike Perham and Jason, I might not be here today. So, pay it forward; share your story once you find success. Speak at conferences, attend meetups, write blog posts, and help others.
00:23:25.679 Being open about your journey, including both triumphs and failures, builds trust that benefits your business in the long run. Building a business is not a 9 to 5 job; it involves hard work in many areas, such as marketing, sales, and design.
00:23:55.719 Every decision may not be rational; sometimes, you’ll need to trust your gut. Don’t compare your stage to that of more established startups. Learn what they did when they were at your level.
00:24:18.399 At times, I’ve taken critique personally. Users may express dissatisfaction on platforms like Discord or GitHub. Initially, I felt defensive and frustrated, but eventually, I learned to identify the underlying issues behind their feedback.
00:24:48.679 Pricing can be particularly challenging, especially if you want to cater to smaller clients. Some companies set a single price per user for enterprise solutions, which is a straightforward approach. Finding the right pricing model is an ongoing challenge.
00:25:11.679 Key takeaway: you have the power to create the business and product you desire, but you also hold the choice not to act. Execution is vital—delaying, doubting, or failing to ship are the biggest mistakes you can make.
00:25:42.679 Go out there and ship something valuable.