Open Source Developer Apprenticeship - 9 months in

2022/01/23

I’ve been meaning to blog for ages but have been so wrapped up in project things and getting nerd-sniped. Here’s a bit about the last six months.

Open-ended role

I’m doing a better job of adapting to the environment of total freedom within the role. My team has quarterly initiatives to complete, but otherwise, my job is just to “be an open-source maintainer” and do whatever that entails, with colleagues occasionally asking me to get involved with specific pieces of work. At first, this was deeply disorienting (and certainly I’m not the only one who feels this) - I want to be good at this and to be good at it, I need something to measure myself again, and super-explicit expectations and concrete standards for everything are crucial in this, right? Actually…no. Like everyone else, I have areas in which I’m stronger and weaker, and this environment allows me to play to my strengths, work on my weaknesses when it’s a good time to do so, and figure out where I fit in the wider team. If something isn’t getting done which falls within my remit, I’ll either figure it out myself or hear about it, and it’ll get sorted. If I’m doing something catastrophically wrong, I’m sure someone will let me know and help me work out how to fix it. Beyond that, I need to take ownership of asking for feedback, which is weirdly daunting - even from colleagues that I get on really well with - but learning to bite the bullet and do it is important.

On a practical level, I’ve found that keeping a spreadsheet of things I’m working on and things I intend to work on soon, with checklists of things I need to check each day, has been an effective and straightforward way of organising my time and priorities on a daily/weekly basis. And when I find the time, I plan on making something - perhaps a Shiny dashboard, Slack bot, or API - to help me keep track of answers to questions like “have any PRs been approved but not merged?”, “are there any new R PRs which haven’t yet been reviewed?” and “are there any new GitHub Issues without replies?”

Learning and documentation

It’s been a delight to find out that learning new things and producing documentation can be deeply intertwined processes, and I’ve noticed a three-stage process that seems to work for me.

  1. Ingestion. This is where I write a ton of scruffy biro notes, draw diagrams, and sometimes even transcribe chunks of lectures verbatim when the topic is particularly far from my current knowledge. These usually get blu-tacked to my office wall to use as reference materials.
  2. Consolidation. I take my notes from the ingestion stage, chuck away the irrelevant bits and condense them down to a smaller reference doc. This could be another piece of A4 stuck on the wall or a Google Doc. This is when I start to get excited that things are making a lot more sense.
  3. Documentation. At some point, I realise that the thing I’ve learned is useful to someone else, and now I have to write it up properly. This is a weird bit of the process as I can’t tell you how long something is going to take or how I know when it’s done - it just kind of happens. I can’t say I love this bit once I’m three rounds of edits and reshuffling in, but once it’s done and I have some content, it’s pretty satisfying.

C++

When I first started, I felt like I wanted to learn everything, and very earnestly started picking up books on C++ and proclaiming I was going to learn the language. Since then, I’ve dabbled a bit but not taken it much further, and more recently, I’ve decided to change the scope of those ambitions. If programming in R and Python are like building things out of Lego bricks, C++ is more akin to becoming a polymer scientist and learning how to build the bricks. Worthwhile and interesting, sure, but not something I can get excited about in the same way. All that said, however, I’m still looking at learning “enough C++ to be useful in an R context”; I guess the equivalent of knowing enough about manufacturing to build my own custom bricks from time to time.

The SO non-incident

There was something that happened around month 5, which was really important at the time, and I’ve wanted to write about it. I’d replied to my second Arrow question on Stack Overflow - a little intimidating at the time, interacting in a different domain with different social norms compared to internally at Voltron Data or within the Apache Arrow project. Anyway, my (accurate and correct!) answer got deleted, and upon first glance, it looked like it had happened unfairly (which historically has disproportionately happened to people who aren’t your stereotypical dev). Some of my colleagues took this really seriously and were trying to see what they could do about it. Later, it transpired that this was not the case; I’d accidentally transgressed some rule relating to linking to an external source without pasting the relevant bit of content into my answer, and I submitted a new answer, which was not deleted. But, my colleagues’ initial reaction to what basically appeared to be discriminatory behaviour was…everything. I feel grateful to work with such excellent humans, and this whole incident made me realise it’s time to replace my mindset of “some people will treat you like this and best avoid those places/interactions if you don’t want to deal with that BS” with a new attitude of “you absolutely belong here, and people have got your back”.

Being an open-source maintainer

Working for Voltron Data and being a maintainer on Apache Arrow is one of the coolest jobs I’ve had in my life, if I’m honest, and I still have moments where I go “huh, I’m paid to work on open-source? Wow!” Don’t get me wrong, there are boring bits where I can spend more hours than I’d like tracking down an elusive bug than only shows up on a certain CI job or resolving some horrible merge conflicts after a rebase. But, these are balanced with things like working with new contributors on their first PR, writing documentation that turns implicit knowledge into explicit writing that can be shared, learning so so many new things, and submitting PRs for things that I personally care about on the project. My highlight reel so far includes:

(Note that around July 2021, Ursa Computing (i.e. where I originally started my apprenticeship) became part of a new company, Voltron Data, but for the sake of simplicity here, I refer to where I work as Voltron Data, even when talking about things that happened prior to July 2021.)