Summary: I've been writing and maintaining Open Source Software for over 8 years now and it has been simultaneously the catalyst for the success I've had professionally and the misery I feel on a daily basis.
Open Source Software (a.k.a, Free and Open Source Software, F/OSS) has been profoundly impactful on my life and career for the last eight years. If I had not been involved in F/OSS in college, I wouldn't:
- have been recruited by Google or Two Sigma in the middle of my Masters program,
- have been friends with a bunch of GitHub employees working on their API,
- walked into a co-working office and been offered a job a few hours later.
My involvement in F/OSS led to people assuming a far higher level of competence than they otherwise would have afforded someone with a MS of Pure Mathematics in this industry. Furthermore, the community of people I've had the privilege of getting to know and work with have become a group of amazing friends. I'm a better human due to each and every one of them.
In college, I taught myself how to program after being incredibly frustrated by an "Intro to CS" course I was required to take. It challenged me and I wanted to get better. Eventually, I picked up Python and found it to be incredibly rewarding. It was well-documented, had an incredible standard library that was easy to get started with, and was easy to make powerful tools in quickly. At some point, I made a semi-conscious decision to invest a lot of time and energy in just that one language. I toyed with others a lot, and enjoyed them, but I kept coming back to Python. I started contributing to open source Python projects around the same time and found myself learning things that seemed far more valuable and interesting than what my classmates studying Computer Science were learning.
Eventually, I became a maintainer of Requests and quickly this elevated the trust that much of the Python community had in me. Not long after that, people started inviting me to help maintain other projects as I stumbled upon them and sent pull requests to fix things that I had found. I found it easy to keep up my grades and contribute these things back to the community. More and more I took on the challenges of maintaining an increasingly more diverse set of projects. Working on these projects, keeping them stable, helping others provided me with an intense sense of accomplishment even though (if you search this blog and my Twitter history) I really don't promote my involvement in those projects heavily. I never wanted to be famous (hell, I'm pretty sure I'm not famous) and I really did want to give back for everything the community had (directly or indirectly) taught me. As a result, I unintentionally started painting myself into a corner and the colors I chose for the paint were the blue and gold of the Python logo. Perhaps even worse, I began to tie my self-image and self-worth to the idea of being a maintainer and being able to juggle all of those responsibilities.
I didn't notice it happening, but eventually the projects I was maintaining consumed a lot of my attention and "free" time. I stopped dabbling in new languages as often as I had been. My time wasn't my own any longer because I was in a very reactionary mode. I had configured GitHub to email me for every issue, pull request, and comment on a project I was working on and I found myself checking my inbox and trying to triage things at all times of the day, including in the middle of a lecture. I definitely had no clue at the time, but I was sacrificing important time and attention while hindering my career potential. Further, the constant heightened awareness of every email from GitHub began to stress me out and eventually the constant influx of bug reports, pull requests, and other feedback began to feel negative and overwhelming.
After I received my Masters, I took my first full-time job as a software developer. I was absolutely not prepared for the exhaustion I felt for the first six months as I acclimated to:
- a new city and state,
- a new routine,
- commuting roughly two hours a day,
- pairing eight hours a day, four days a week
- leading a client to provide us more and more access to the services we were helping them scale,
- starting and leading a local Python users group,
- and a bunch of other things that are probably forgotten to the sands of time.
Initially, I tried to simply push through the exhaustion and do what I had done for the prior two years. This led me to a place of resentment, frustration, bitterness, and ultimately I became one of those maintainers that everyone loves to hate (rightfully so). I started avoiding projects and then feeling guilty for avoiding them, doing bursts of work as I found the energy, and then started avoiding them again. I had far less time and energy which led me to being far less kind, understanding, and empathetic but in no way was this an excuse for this behaviour, and I knew it at the time. I recognized all of this on some level but I couldn't shake a feeling of obligation. I told myself "After all, wasn't it these projects that got me to where I am today? Don't I owe it to them?" In reality, above all else, the root of my success was the heaps of privileges that society afforded me as a cis-gendered white man born into a middle class family. I owed very little to the projects and community in reality.
Today, I feel as if I've taken my career in absolutely the wrong direction. In the last eight years, technology and our industry has changed dramatically. I did not have the experience to know that investing so heavily in Python would be one of the worst things for me. The community around the language is changing and beginning to focus more and more on problem spaces that are completely uninteresting to me. I love large challenges. Distributed systems make my brain hurt, and I like that. Thinking about how to build and operate things for the goals users need is far more interesting to me than building, training, or deploying machine learning algorithms. No one is continuing to do anything I'm interested in Python and I failed to notice that.
It feels like I've stalled out my career as a "Python engineer" rather than a "Software engineer". Even with other people helping to maintain a bunch of the projects I have been responsible for, there's still a need for my attention, energy, and time. Additionally, these days, my time is even more constrained because I'm maintaining a home, nurturing and growing personal relationships - chief among those being my marriage, and caring for others as well as preparing to care for others. It seems like I would need to spend far too much of the time that is rightly allocated elsewhere to gain the trust in anything else that would be interesting to me and beneficial to my career. I genuinely admire folks who have the constitution to outright quit projects.
Honestly, I still don't know what to do next. I'll definitely continue to try to distance myself from those projects that have tied me down for so long, but I also still struggle with those feelings of guilt and obligation. The thought of quitting a project or community feels like betrayal and makes me worry that I'm going to jeopardize my career, especially if I can never escape working in Python. Harder still is trying to focus on determining what I actually want to do with my career. I've always been (to my own detriment) someone that didn't want to be one of those career-minded individuals. I worried that focusing on titles and politics like that would jeopardize my technical skills. I realized a few months ago that focusing on one's career isn't focusing on titles but what one wants to do with their skills and what impact they want to have. I still want to impact my fellow developers in a positive way. I want to make their lives easier and safer and help them move faster with greater confidence. I just need to figure out how to actually go and find a career in this industry that will allow me to do that again.