My Journey to Open Source Software

Kai Cataldo's avatar

Kai Cataldo ā€¢ February 26, 2020

If I've learned anything in my 32 years on this earth, it's that even the best-laid plans can (and generally will) not pan out the way you might expect. Three months into this new chapter of my life and career, I've been reflecting on how I ended up here. I love my new job - and I'm so grateful to be here - but five short years ago I never would have thought I'd be where I am today.

At the age of fourteen, I fell in love with music. I decided I would become an orchestral trumpet player, and became laser focused on that goal. I took private lessons, joined local youth musical groups, and practiced for hours every day. My lessons and orchestra practice were the highlights of my week, and even though I excelled at school, I wasn't particularly invested in my academic studies.

During my college years, I found myself attending one of the most prestigious music conservatories in the world and got to travel, make art with some of my favorite musicians in the world, and perform at places like Carnegie Hall. By the end of my time there I was pretty burned out - which is fairly common, given the intensity of the training environment and how competitive the field is - and I unfortunately (or so I thought then) injured myself during my last few performances, the week I graduated. Finding myself unable to use the skills I had developed for so long, I ended up working various hourly jobs and maintaining a private teaching studio on the side.

It was during this time that I remembered how much I loved computers as a kid (particularly making art and playing games), and decided I wanted to build one myself. I did the requisite research, bought the parts with the money I was earning, and was able to build a working computer! As I started using it (mostly to play games), I remembered how much I loved making art in my younger years, and realized I could make things with the machine I built. The best part was that, now that I had overcome the hurdle of getting a computer, the only material/resource it would take to create things was time and energy (as opposed to many other creative endeavors that required additional tools and materials). As I was still working my hourly jobs in the service industry and as a temp, this felt like it lowered the barrier for entry enough for me to jump in.

I initially became interested in design and bought books, tried some online courses, and started multiple free trials for design software. As I began exploring this new world, I could feel a twinge of something akin to the excitement I had felt while pursuing my music, and I started chasing that feeling. As I (very haphazardly) tried to teach myself these new skills, I realized that I also wanted to learn how to actually make the things I was trying to design. I started looking into what this actually entailed (I honestly had no idea), and discovered the world of web development. Given its place at the intersection of design and code, I decided that front-end web development seemed like a good choice for me, and started seeking out resources. This was in 2014, when bootcamps were not quite as established an industry as they are now, and given my financial situtation, I didn't feel like they were a real possibility for me. I looked for alternatives, and instead found an evening class that taught HTML, CSS, and jQuery. After much deliberation (it was a lot cheaper than the bootcamp, but still a financial hardship), I decided that it seemed like a good way to test the waters and see if I enjoyed this exciting new thing I had stumbled upon. I took the class and ended up loving it. The class itself wasn't very in-depth, but I was so hungry for knowledge that I spent all my free time reading about web development online and asked the teacher for extra assignments. I was one of a handful of students who had a working final project, and I was so proud of what I had made (a Chrome extension that displayed a five-day weather forecast on each new tab).

I now knew I wanted to pursue this as a career, but had no idea how to actually transition into it. I was spending nearly all of my free time in front of a computer screen, learning by giving myself projects I wanted to build. Some examples of the kinds of things I made include:

I started going to meetups in my area and would introduce myself as an aspiring web developer, asking if anyone had any work for me. A few months after I had finished my class, I taught myself how to hack together a WordPress site and was able to take on freelance work, taking on small projects for startups. The biggest project I took on was redesigning and building a local startup's site from the ground up using Shopify, and I learned about CSS preprocessors and introduced them to the concept of and implemented version control for their codebase. I also ended up TAing for the class I had taken the previous summer. Having spent fourteen years playing trumpet and struggling to pay the bills, I was blown away by the fact that I was able to start paying the bills with what felt like a relatively low barrier to entry.

Almost exactly a year after I had written my very first line of code, I got my big break when I was hired by Adobe as a JavaScript Engineer to work on one of their web platforms. Going into the interview, I really didn't expect to get the job. I decided to not focus on getting hired and instead to focus on learning as much from the experience as I could, and I was looking forward to getting some feedback from seasoned developers already in the field. I felt so inadequate and had such low confidence in my abilities that I considered walking out of the interview at almost every step of the way. I was well aware of how little I knew - and was honest about that during the interview process - and felt extremely lucky that they decided to take a chance on me. My life changed drastically over the following months. I was able to start paying off my student loans and no longer had to worry about health insurance! Having had no formal training (but a lot of experience doing extended, focused work honing a craft from my music days), I decided to treat the experience like going back to school. If I encountered something I didn't know (which was basically everything at that point), I would make a note of it and spend my evening learning about it. Rinse and repeat daily, weekly, yearly for about two years.

It was during this time that I was introduced to open source software. About a month after I joined Adobe, Henry Zhu also joined the team, and we ended up sitting next to each other and worked on a lot of projects together. He and a few other teammates were helping to maintain JSCS, a code style checker, at that time. One of the more senior developers who had kindly taken me under his wing suggested I try to make a contribution to the project, and asked Henry if he could help me if I had any questions. With Henry's help, I was able to land my first PR. It was thrilling to know that code I had written was being used by so many people, and it felt so good to give back to the community that had given me so much.

I wanted to continue working on open source, so I started looking at the documentation and issues for popular projects in the JavaScript ecosystem and came across ESLint. I didn't have any experience with ESLint, since the team I was on was using a combination of JSHint and JSCS at the time, but the contribution docs were so in-depth that it made the whole process of contributing for the first time less daunting. I knew what was expected of me as a contributor as well as what I could expect from the maintainers. I also had a special place in my heart for linters because, as a self-taught developer, discovering and setting up JSHint was the first time I had ever gotten any kind of feedback on my code. After some hemming and hawing (again, very aware of how little I knew and didn't trust that I knew enough), I decided to take the plunge and made my first contribution. Even after solving the issue, I remember feeling nervous and having to psyche myself up to push that "Create a Pull Request" button. To my surprise (and delight!), the maintainers didn't call me stupid or point out how little I knew, and instead helped me land more PRs.

I spent the next two years working my day job and spending my evenings teaching myself web development concepts and contributing to ESLint (occasionally branching out to other projects like Babel, which Henry had gotten involved in since he had joined Adobe). During this time, I was invited to be a maintainer for ESLint and eventually was nominated to be on the project's Technical Steering Committee. JSCS eventually merged with ESLint, and I was able to get all of my team's codebases migrated to ESLint. Somewhere along the line, the head of engineering on our team gave Henry and me the go-ahead to include relevant open source contributions in our sprints, and we were able to spend some time on open source projects at work.

After about two years, I started feeling the repercussions of burning the candle at both ends. It started affecting my health as well as my happiness, and I eventually recognized it as burnout (a sinking realization, having gone through that with my music career years before). Realizing my current workload was unsustainable, I decided that I couldn't keep up this pace and to advocate for doing more of my open source maintainer tasks (which is really what I loved doing) during work hours.

I was lucky to be on a team that generally supported my open source efforts and to have a great manager who advocated for me within the team, but despite my best efforts to do my open source work conscientiously and to balance it with my product work, tension between the two continued to increase as my responsibilities at my day job grew. After three and a half years at Adobe, I decided it was time to move on to something new. My goal going into my first job in tech was to come out the other side feeling confident in my abilities, and I felt like I had achieved that. Now it was time to explore towards what end I actually wanted to put my newfound skills to use!

After some restorative time off, I started a job search in earnest. For my own well-being, I knew that I couldn't do both open source work and a day job (and didn't feel like I could do the open source work I loved so much as my day job), and so decided to step down from maintaining ESLint to focus on finding my next gig. Open source can't pay the bills, I disappointedly told myself. Despite having stepped down, the ESLint team generously offered to pay me (the project had set up an Open Collective at the beginning of 2019) as a part-time contractor to continue maintaining the project while I searched for other work. This was a godsend, and I gratefully accepted. As my job search continued, I could feel the pull back to the open source work I truly loved doing, and I started questioning my assumption that my open source work wouldn't be able to keep the lights on.

I reached out to family, friends, and colleagues (including Henry, who had left Adobe about a year before I did to pursue working on Babel full-time), to talk through my thoughts and to do a quick sanity check and, having nothing but support (I'm blessed to be surrounded by some seriously excellent people), decided to explore working on open source full-time. If it didn't work out, worst case scenario would be that I would have to do another job search in the near future. Best case scenario, I help maintain projects that make up the infrastructure of the web and get to truly make a difference. Either way, I could at least add to the body of knowledge around sustainable open source software and hopefully move the ball forward towards a future where maintainers don't have to choose between their well-being and doing the work they love (which, incidentally, serves as the foundation on which we build so much of the web).

Iā€™m now three months into the best job I've ever had, and so far, I'd call it a success! Iā€™m able to spend dedicated time maintaining and contributing to both ESLint and Babel, and in the flexibility I'm now afforded, I've been able to develop routines that make me exponentially happier and more productive than I have been in the past. You can read more specifics about what I'm currently working on in my previous post.

I am so looking forward to 2020. We have a lot of exciting and important work to do for both ESLint and Babel, and I hope you all will join us on this journey!

šŸ‘‹ Thanks for checking out my post!

If you're interested in seeing more of this kind of content, please consider sponsoring my work on GitHub!