Maker Blog Series
My Open-Source Journey From Graduation to Maintainership
Aug 30, 2022By Marcelo Trylesinski
This could be you! Click here to submit an abstract for our Maker Blog Series.
It was the beginning of 2020, and I had just arrived in France after earning my undergraduate degree in computer science from the University of São Paulo. I had been hired as the first developer on a new team at reciTAL—the first and only developer on the team, it turned out, because COVID-19 quickly forced France into quarantine and hiring stopped. In spite of the global pandemic and its impact on personal and professional life, I refocused and worked hard in my new role.
Zeroing in on FastAPI
At the end of my first month, my manager turned to me and asked, "Can you choose between Django and Flask for our next project?"
So I did my research; I looked into both options and prepared a list of pros and cons. I took the task quite seriously because I wanted to make the best possible decision.
During my research I stumbled upon FastAPI, which had ~12k GitHub stars at the time (now it has over 48k). FastAPI offered to solve a significant pain point I had experienced during the first month of work: data validation. With FastAPI, we could code the logic of our application without worrying about the shape of the data the client was sending to us—previously, we had to validate the data on the body of our endpoint functions.
I worked my FastAPI research into the Django/Flask pros and cons list and presented it to my manager. Newer frameworks are often met with skepticism, and FastAPI was quite new compared to the other options. But I ultimately convinced my manager to try it.
Baby Steps: Engaging with GitHub Issues
As I had chosen the framework and none of my coworkers were familiar with it, I wanted to learn more and support my team by easing the learning curve. I put pressure on myself to become adept at using the framework. This led me to start reading and then, once I was comfortable, engaging with the FastAPI GitHub issues.
My approach for engaging with an issue was pretty simple:
Read the issue.
Read references to better understand the issue.
Research the issue more thoroughly than the reporter did, and try harder at debugging.
Address the issue.
Step 2 was particularly important; in the beginning I didn't know much, but I knew understanding the problem and context surrounding a given issue would benefit me a lot and help me learn.
I followed the above process for some time, until it became routine. Every day, the first thing I did after waking up was open the GitHub issues and check the notifications. I read all of the FastAPI notifications, without exception—even if I didn't understand the first sentence.
I’d then periodically check the notifications throughout the workday, and afterwards I spent my evenings continuing to explore the FastAPI ecosystem. I was quarantining, after all.
At the end of 2020 I connected with FastAPI creator Sebastián Ramírez, and suggested creating a discord server. He liked the idea, so I set that up and gave him ownership. This gave me another channel through which to help people—which was great, because I love helping people.
Gaining More Momentum
As I gained knowledge and confidence, I was able to generate my first code contributions. They were humble, but I was happy. Contributing to FastAPI was not enough for me, though. I wanted to contribute to other projects, too.
I started looking around to figure out where else I could apply what I had learned. I developed an interest in Uvicorn, an Asynchronous Server Gateway Interface (ASGI) server on which FastAPI can run.
I promptly created an issue around adding type annotations to the project, which was well received by an active Uvicorn maintainer named Benoit. I came up with a plan for adding type annotations to each file per pull request. I spent some months executing this plan, then discovered a number of minor bugs, at which point I started to understand more about the code source. It was a cycle; the more I helped out, the more I was able to understand, and the more I was able to understand, the more I could help out.
It was March 2021. After working on many pull requests, I set a goal for myself without telling anyone: to become a Uvicorn maintainer by the end of the year. Just two weeks later, Benoit sent me the invitation I’d been hoping for. I was so happy! I had dedicated a lot of time to the project, learned a lot, and helped a lot of other users, and I was recognized for it.
Growing Into Maintainership
Like I had done with the FastAPI GitHub issues and other projects, I waded into maintainership slowly and deliberately. As I reviewed pull requests, I took the power (and responsibility) of the approval button seriously, often asking others for second opinions.
Months passed, and I became more comfortable. But once again I felt a sense of wanting more.
In August 2021, I started to help with Starlette, the framework upon which FastAPI is based (FastAPI is a subclass of Starlette). Starlette comes from the same organization as Uvicorn, so I already had maintainer rights there.
Of course, having maintainer rights doesn't mean you automatically feel comfortable serving that role. As I ramped up my work with Starlette, I leaned on Jaime Hewland (the most active maintainer at the time) and Tom Christie (the creator of Uvicorn and Starlette) for reviews and support.
Time passed, and I filled it with helping FastAPI users on GitHub, Gitter, and Discord; maintaining Uvicorn; and helping with Starlette. By the end of 2021, Jaime and Tom (the creator of the Encode organization) were becoming less active with Starlette, so I stepped in and became more active with the project.
In the beginning of 2022, I adopted some positive lifestyle habits like going to bed by 10PM, going to the gym every day, eating healthfully, and not overworking myself. I was able to fit these habits into my life and continue contributing to open source.
Life is about priorities, and open source and my health are my top priorities right now. Here we are in August 2022, and I've never been happier.
When it comes to my open-source journey, not having the knowledge was never an issue; I learned when I needed to learn, and I continue to learn new things every day. What I think has made the biggest difference in achieving a sense of fulfillment was defining my priorities and keeping consistent with a healthy routine.
I encourage anyone who hopes to become an open-source maintainer to prioritize maintaining positive lifestyle habits, too. It just might help you find greater success and satisfaction when it comes to your professional or recreational goals. I also suggest using chat platforms like Discord and Gitter to connect with the many smart people in the open-source community.
Thanks for reading about my open-source path!
About the Author
Marcelo Trylesinski is a Brazilian software engineer and FastAPI expert, currently maintaining Starlette and Uvicorn.
About the Maker Blog Series
Anaconda is amplifying the voices of some of its most active and cherished community members in a monthly blog series. If you’re a Maker who has been looking for a chance to tell your story, elaborate on a favorite project, educate your peers, and build your personal brand, consider submitting an abstract. For more details and to access a wealth of educational data science resources and discussion threads, visit Anaconda Nucleus.