{
"$type": "site.standard.document",
"canonicalUrl": "https://build.ms/2022/9/6/reflections-on-an-open-source-project/",
"description": "Personal reflections on building Boutique and Bodega open source projects, covering the ups and downs of creating something valuable for the Swift community.",
"path": "/2022/9/6/reflections-on-an-open-source-project/",
"publishedAt": "2022-09-06T12:00:00.000Z",
"site": "at://did:plc:b6eke66r3vbmnegg73qgprl6/site.standard.publication/3mmypfmg4sx2d",
"tags": [
"Engineering",
"iOS",
"Open Source",
"Swift"
],
"textContent": "I've been working on Boutique and Bodega for much of the last three months, officially celebrating the launch of Boutique and Bodega v2 today. If you’d like to learn more about what's new you can read about it in this tweet storm, or read a quick rundown below [^1]. But this post isn't about Boutique and Bodega, it's about the process of building Boutique and Bodega.\n\nIf you'd asked me in April if I'd spend three months this year working on an open source project, I would have said no way. I left my job at Twitter to be an indie developer building apps that represent my vision of personal productivity, but life is funny sometimes. Life teaches the same lesson over and over again — you can't predict what'll be important to you at any point in time. I built something to answer my own question, \"what does a good SwiftUI architecture would look like?” for my own apps, and that's what came to be Boutique. But Boutique has blossomed into much more than just a new architecture, it's become a whole new way to build persistence layers, SwiftUI apps, and for me its created a community of people who find my work valuable. Boutique has quickly become a key part of my present and future app development plans, while remaining simple and approachable through many iterations. I've already integrated Boutique into more than half a dozen of my own apps, notably without many issues or much work, and every day I hear from people about how they're using it as well.\n\nI can't say it's all been ups though, there have been plenty of downs as well. I’m writing this post not with the intention of convincing you to build an open source project, nor am I trying to dissuade you from participating in open source. I'm aiming to provide a balanced perspective because I would like nothing more than to see you build something that's important to you, to leave your dent in the universe. If that dent takes the shape of open source project then it would be an honor to have provided a head start based on what I've learned, knowing better what to expect than I did.\n\n<!--preview-snippet-->\n\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">"Running a successful open source project is just Good Will Hunting in reverse, where you start out as a respected genius and end up being a janitor who gets into fights."<br><br>Quote attributed to <a href=\"https://twitter.com/cra?ref_src=twsrc%5Etfw\">@cra</a>, and I don't think I've ever seen anything more true posted.</p>— Jens Axboe (@axboe) <a href=\"https://twitter.com/axboe/status/1558140503266365444?ref_src=twsrc%5Etfw\">August 12, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\n#1. When you open source something you plan to support, double your estimates.\n\nAs Big Daddy Kane would say, open source ain't easy. The rapper was ahead of his time, and while it's hard to believe, he was actually talking about me and my project planning-related difficulties. \n\nWhen I started building Boutique it was a library just for me, something meant to provide a solution in the nascent and ambiguous space of SwiftUI app architecture. As I started to show Boutique to people in a private beta I was greeted with great ideas and improvements. I was able to implement their suggestions rather quickly, but nothing could prepare me for the amount of work that it takes to make something that works for the myriad of use cases that a general-purpose data storage library needs to support.\n\nBoutique's public launch was greeted with a lot of praise, and even more ideas. Boutique is intentionally not prescriptive, but it does have a rigid and powerful API. It's meant to be an architectural piece of the puzzle, not something you interact with all the time, but that wasn't always clear to many people who checked it out. People are used to solutions matching their previous mental models, and so they would find clever ways to misuse an API I thought couldn't be misused.\n\nBoutique’s goal is to be the only persistence library your app needs, something I emphasized heavily in every piece of documentation. Everything you need should be provided out the box, but I still saw people adding additional metadata to UserDefaults or their current database rather than building a model to represent additional information and storing it in Boutique. They weren’t wrong but I definitely wouldn’t say they were right, and I came to realize that a part of this confusion emerged from people leaning on old patterns and intuitions. I knew I had to fix that.\n\nI believe that when someone doesn't understand something you’re trying to teach them it means you haven't yet brought them to where they need to be. I resolved to make the v2 API even clearer, sanding down rough edges and making it easier to compose functions, that way you would have less to learn and less to misuse. On top of that I wanted to provide a lot of documentation so people could develop a good mental model, have a lot of help getting started, and even developed step by step tutorials for common problems.\n\nThe quality of v2 is much higher, the library is more thought out, but this all took a lot of time and a lot of energy. What had started off as a six week project ballooned into three months of my life. We'll discuss why working on Boutique became emotionally overwhelming in Lesson 3, but it's worth noting that open source adds layers of stress. When you're trying to make something that has wide reach you have to account for answering support requests, writing documentation you don't personally need but will lower support volume, building features you won't use, and more. It will help you become a better developer as we discuss in Lesson 4, but it will absolutely require a lot more time than your intuition tells you it will.\n\nI still have some open questions that I don't have answers for, but they're worth considering if you want to start your own open source project.\n\nProject Planning\n\n- When starting a project without a defined endpoint how do you make good estimates?\n- Given the often amorphous nature of an open source project how do you measure progress?\n\nEnergy\n\n- Knowing your energy and focus are finite resources, how do you choose what to work on?\n- What's an ideal pace for you, how can you sustain your energy levels, and how do disconnect and recharge?\n\nFocus\n\n- How can you delegate tasks you don't want to do, the ones that may lead you to become a bottleneck?\n- How do you get people’s help so you can delegate those tasks?\n- How do you lean into your strengths to stay satisfied to avoid burn out?\n\n#2. Nail the marketing, and keep pushing\n\n<blockquote class=\"twitter-tweet\" data-dnt=\"true\"><p lang=\"en\" dir=\"ltr\">I’ve been hinting at this for weeks, but the day’s finally arrived. Today I’m announcing not one, but five things. Model View Controller Store, Boutique, Bodega, a blog post, and a demo app that help you learn about all of these. Let’s thread this up! 🧵</p>— ✨ Joe Fabisevich ✨ (@mergesort) <a href=\"https://twitter.com/mergesort/status/1539644834394374145?ref_src=twsrc%5Etfw\">June 22, 2022</a></blockquote> <script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>\n\nI launched Boutique, Bodega, and a blog post explaining the idea of a Model View Controller Store architecture together with a tweet storm that went semi-viral. I'd expected to get in front of a few hundred people, but thanks to utility of my projects, the quality of my writing, and creating a compelling thread that showed people the value of my work, a lot of what I had created had resonated with the iOS development community. With the help of friends and community members who'd watched me working tirelessly for weeks the project ended up reaching beyond my orbit, showing up in popular community newsletters, YouTube videos, and the GitHub team even reached out to me to setup a Twitter Space interview to discuss my open source work. (Scheduled for later this week).\n\nMany things are launched on the internet never to be seen again, but I was committed to pushing Boutique forward knowing that this idea had the potential to change the way people build iOS and Mac apps. Over the coming weeks I leveraged my moderately sized Twitter following to keep people up to date with how v2 development was going. I would tweet about what developing an open source project looks like in real time, the good and the bad. I shared novel use cases for Boutique, people's positive testimonials about using the library, and even leveraged the opportunity to show people cool Swift features that I'd been working with that could help them in their day to day work. This is very aligned with my vision for building my business with a silly name (Red Panda Club). I want to build apps, sell products I genuinely believe will help people be better versions of themselves, and teach people along the way to show them how they too can build amazing things. This is a core belief of mine and a style of content marketing that suits and fulfills me, it's the reason I'm writing posts like this on build.ms.\n\nI can say that the launch was incredibly positive, and I only have one regret. I created my GitHub Sponsors account about a week after the project went live, and that delay taught me that timing is everything. Boutique created a lot of value for people as evidenced by all of the people now using it in their apps, but I only managed to generate $17/month in recurring donations for all the work I’d done. While making money wasn’t my intention (and I honestly never expected random people on the internet to give me money), I wonder if I had pitched my GitHub Sponsors account at launch could I have ridden the wave of virality to build another revenue stream?\n\n#3. Open source can be quite lonely\n\nWorking on Boutique felt very isolating, even with friends, family, and community members following along. I spent almost all of my waking hours",
"title": "Reflections On An Open Source Project"
}