At the end of this month, I’m going to be leaving Stanford University, where I’ve been a student and then staff for almost ten years now. In this post, I’d like to reflect on the latter of those two, my first job as a Research Software Engineer in the Stanford Research Computing Center.
How did I get here?
For those that don’t know the history, I graduated from the Biomedical Informatics PhD program in 2016, and knew that my passion was building things. There was work that I wanted to do in research software engineering, but I was certain of not wanting go down a traditional academic path. It turned out to be hugely in my favor to constantly break things on our research cluster, because in my last year I found myself invited to a lunch by the head of Research Computing. I was terrified - was I in trouble? It turns out that she just wanted to listen, because clearly my common tendency to try something that wasn’t supported meant that something was missing. The lunch turned into brainstorming, emails, and eventually an idea to work on reproducibile practices at Stanford. We decided to make a position where I would focus on tools to support scientific workflows and reproducibility. At the time I would have called this an academic software developer [ref]. We were able to find funding by way of joining forces with labs, and at least have an agreement on soft money for a two year contract. After graduation, at first I struggled with deciding my next step, but ultimately accepted the position, knowing it was in my heart to do the work (and in fact I had already been working on some of the related projects well before that). The public title was “Research Software Engineer,” but since Stanford did not have an official job role with this name, under the hood it was called an “Information Systems Specialist.” Actually the original description for the job used the term “Research Reproducibility Engineer” since it was Research Software Engineering centered around software for reproducible research like container technologies, workflow managers, and general lab software.
What did I do?
The core of work that I set out to do was to work on the Singularity container technology, including not just the software itself, but also documentation, and community work. Nobody told me that I might work on this - I just knew it was right. I’m not sure this is well recorded, but I was a driving force behind setting up and supporting the original Singularity community - I pushed for and wrote the original Singularity paper first draft, gave several talks in 2017, and advocated for and implemented the first interactions with Docker, and the inspect and help commands. I had strong vision for not just the software, but for tooling around it, and shared this vision. I was truly obsessed with containers, because they felt magical, and the community, because I felt valued. You know, so much of life, and finding fulfillment, is finding a niche where you add value, and thus find meaning. These niches don’t last forever, but they don’t really need to, because change (even for us routine-based dinosaurs) can be a good thing. If you are interested in this story, I recently created a containers story interactive talk to share the experience (and test annotating the video with text content). I think this was my first real deep dive into being a part of an open source community that I cared about, and it was amazing. As Singularity became better supported by a paid team, I drifted away and focused on providing open source container tools like Python clients, container orchestration, continuous integration, and a registry. I also created and have maintained over the duration of my time at Stanford Singularity Hub, eventually supporting over 6,000 users, and several smaller projects that I started in graduate school. I worked on everything from web interfaces to tools and standards in several labs, and eventually established RSE Services out of Research Computing, a podcast Research Software Engineer Stories, and several initiatives at Stanford to promote the role of Research Software Engineer. My almost 600 GitHub repositories should probably tell you that I love programming, and I love my role because it doesn’t actually feel like work.
Who am I thankful for?
I am immensely grateful to the groups and labs that have funded me over the years, including (but not limited to!) the Langlotz Lab in the School of Medicine, the Encode Project DCC at Stanford under the Cherry Lab, the Endy Lab, and all of the smaller projects that have brought in income since the establishment of RSE Services. Despite it being many years, I am also grateful to my graduate school lab, Poldracklab, that accepted me and provided an environment to flourish, and my post-college lab (my first job) Hariri Lab that empowered me to discover my passions. In recent years, my favorite work by far has come from open source communities, including (also not limited to!) snakemake, the Open Containers Initiative, the Singularity community, schema.org, the experimental psychology community via The Experiment Factory, Apache Airflow, the US Research Software Engineer Association, Ask.Cyberinfrastructure, Minio, collaborations with Google, and so many more. As an engineer I’ve learned not just new frameworks or languages, but also how to better work with people. I’ve gone from times of sadness, feeling disconnected from communities that I cared about, to realizing that it’s my responsibility to reach out and connect, and create a routine that is meaningful, fun, and impactful.
How have I changed?
You might be surprised to know that I have an introverted phenotype. This does not mean that I cannot give talks, or be very expressive in meetings and similar, but rather that being around people is draining. I mention this, because I think there is a strong perception that we must be of a particular phenotype to be successful. To some degree, your phenotype can have influence, but only because if you never speak up, you will never advocate for yourself, or have your ideas known. Early on in graduate school when I watched a fellow student stand up with confidence and explain an algorithm on a white board, I knew that I wanted to do that too. If I felt terrible and anxious inside, I would hide it, and (exactly as they say) fake it until I made it. So I started to push myself to give talks when I would dread the experience leading up to it. I spoke up more in community channels and meetings. I gave remote talks where I knew that I wouldn’t be able to see the faces of my audience, or in some cases, even see or hear them at all. I did this all having chronic health issues that made me want to hide, which I’ll probably deal with for the rest of my life. There really is no logic to “Let’s wait to do this until I am more ready,” or “Let’s put a hold on moving forward until I’m better.” This idealistic future moment is unlikely to come, and it’s better to pursue what you want right now. With this mindset, we can zoom ahead three years to when I started a podcast knowing full well that it would regularly have me talking for many hours with people that I perhaps didn’t know so well. If you’re an introvert, you know that many of these scenarios are anxiety producing, or at worst, nightmares.
But what has happened over the last 4-5 years is quite spectacular. Although I am still drained by all things social, and have to practice self compassion when I’ve pushed myself too far, the challenge eventually became easier. I’m not afraid to speak my mind, say when I don’t understand something, or that I just don’t know. Some have told me that I do too much, or that I’m pushy. I’ve been told everything from that I post too much in slack, to being yelled at in text, to receiving messages from previous colleagues that I need to stop working on something because their startup is working on something similar, and they have a family to feed. The work environment is not always friendly or safe, and that doesn’t seem to be changing soon. But what I can control is how I react to, or feel about these comments. I also can try to have empathy for the other party that most likely is reacting to their own insecurity. But I’m not a robot - these kind of interactions can lead to hurt feelings, and I needed a strategy for dealing with that. For all the times that I am told that I am doing too much, I suspect a different person might just be called assertive or having vision, and that’s how I choose to see it. I’ve tried to take some advice that a pin in one of my parent’s dressers used to say - “Don’t let the turkeys get you down.” I’ve changed and grown because I have tolerance for these things, and I am no longer ashamed about being different.
What Leadership Means to Me
I bring up this change because it’s hugely influenced how I think about leadership. You might have noticed that I tend to avoid roles that are explicitly intended to be leaders. This includes managers, and any kind of “official” leadership roles in the organizations that I care about. The reason is because I think communities need leaders that come from the ground up. Instead of a top down approach, or someone telling you how it should be, I want community members to see a fellow community member that inspires them. I don’t want to be an authority figure, I want to be on the same level as my colleagues, and work together on ideas and projects. This is what leadership means to me – setting an example for the kind of excitement, initiative, and collaboration that I want to see in my communities. I don’t have metrics for this sort of thing, but I hope that over the years I have inspired someone. I hope that I have helped someone, either on software or thinking about themself. Even if I’ve just helped a small number of people, I believe this is impactful and important.
Research Software Engineering Services
This idea of leadership leads me to some of the last bits of work I’ve been doing at Stanford. At the end of 2019, I started chiseling head first into creating initiative for Research Software Engineering at Stanford. I created the first RSE Services, gave several talks, started the Stanford Software Survey, and even submit the first official proposal for an RSE role to HR. I also tried to find and reach out others at Stanford that might be in this role, inviting them to the US-RSE community and slack, and started planning an “RSE Day” that was cancelled because of COVID. What I learned over the year in 2020 is that creating such a service is a business model that, as I had designed it, did not work. While there are a few labs that could afford hiring an RSE, for the most part, larger labs tended to already have some internal support for software (either in research associates, postdocs, or even small groups of software engineers hired just within the lab), and smaller labs could never afford the rates mandated by the service description. As a result, the majority of projects that came in were from the School of Medicine, where I suspect they have much better funding. I also realized that providing a service was fundamentally different than being part of a collaboration or an open source team. It would never feel again like working alongside my comrades, but rather it was a formal arrangement to perform a service. I realized very quickly that success would mean taking on more of a managerial role, and really going out into the Stanford community to assemble labs together to hire some part of time for an RSE, and really working hard on that.
If you don’t know, I’m a fully remote employee, so this new role would be challenging at best. But the real issue is that it’s not what I want to do. Although I’ve enjoyed the more people-focused work I’ve done in 2020 (and having a small subset of it adds a nice balance to programming all day) in my heart I was sad, because I was not growing as an engineer. As I had conversation after conversation about recovering my funding, and as I continually had to dig around the bushes to do so, I finally looked around me and realized that although I was comfortable, and although I was surviving from year to year, I was not growing in the way I wanted to. I was not surrounded by people much smarter than me on some kind of RSE team, and my learning was entirely dependent on finding open source communities and people. I realized this back in 2018, and had been working harder to find my own challenge. But now having a full understanding of the path before me, I was devastated. It’s always been in my heart to grow as a software engineer, and becoming more and more like a manager is decidedly not that. Even if I were able to take a few more years to establish a group and possibly recruit talent, it would be sacrificing more years of potential learning and personal growth. When I think about it like this, it feels very selfish. But the core of the issue is that people should be matched to the job duties that they care most about, because in these roles they can add the most value. I was no longer adding value to Stanford, and that coincided with not feeling fulfillment in my work. Being more personally fulfilled is a two pronged approach where the first is about the value you add, and the second is about how the work makes you feel. The thing that gives me that state of flow isn’t preparing talks, slides, or documents or having meetings, but debugging or programming. So when opportunities arose at the end of 2020, I realized that it was time for change.
A New Opportunity
I had been approached about collaborating on a new project at another institution, and I originally turned down an offer to interview because I wasn’t considering leaving Stanford. I am like a barnacle that is very happy on it’s chosen rock, and might only move under extreme conditions. So I asked to do it as a contract through my group instead. I wouldn’t consider something else at the time because, given that it was 2020, I felt that change was dangerous. If I had a job, I should keep it, because many people didn’t. But I was also terrified for the same reason. I knew that funding would be harder in 2021. Did I want to wait and find out what would happen to me? I also started to question the degree to which I was really adding value to Stanford. It was so hard to just get funding for projects, and then they would be finished up in usually under a year. So as weeks passed by, I would lie awake at night and wonder. This particular role would have a lot of attributes of an academic one, but would also have so much more. I imagined what it might be like to have a team, a job ladder, and have my primary role be working on research software, or research around software. The latter is something that I care deeply about, played around with in graduate school, but it wasn’t “research worthy.” I’ve always been drawn to generalist tools and development that supports the research ecosystem, as opposed to any particular domain of science. I had to know, because in fact it could be a much better fit. I decided to interview, and once I met all the different people and teams, I knew it was what my heart wanted. The people I talked to were impressive in their knowledge and ideas, and for the first time in many years I was scared of not being good enough. However, I believe this is a wonderful spot to be in. Complacency in anything in life is dangerous. If I’m not surrounded by new challenges and people much more accomplished than myself, I will never grow. In my current role at Stanford I was largely alone, and in front of me was this amazing opportunity to not be. It was an opportunity that came with job security, endless projects, and potential for growth. I was scared, because I’ve become very comfortable at Stanford. But I was becoming complacent. I accepted the role, and gave my notice at the start of the month.
What will change?
I want to stress that leaving Stanford does not mean stepping away from the communities that I care about. If anything, finding “my people” in the US Research Software Engineer Association has given me more confidence that I can change roles and still keep this identity and the work that I care about. I will also continue to maintain the majority of the projects that I’ve started over the years, even if it’s in free time on weekends. I say majority because we are still figuring out next steps for Singularity Hub, and projects that are directly tied to Stanford that I cannot take with me. I will continue to lead the RSE Stories Podcast, albeit with a possible change in frequency or scheduling to accommodate my new role. I’m hoping that this year we can find more community support to make it more sustainable in the long term. On a high level, putting myself in the right path for personal growth does not indicate a change in values, and this is something important to say.
How do I hope to inspire?
Now that I’m older, I’ve realized that having impact isn’t just about creating the new next thing. New next things come and go, and it’s people that are remembered. I’ve realized that I might not be the best programmer (and these days I’m fairly certain I know nothing at all), but I can have an impact in softer ways – by advocating for the people and ideas that I care about, and bringing a level of fun into work. And maybe just by way of existing, because there are fewer like myself in roles that I’ve had, I can also make a difference. I don’t like to identify as different, but I really am a non-traditional person in technology. From the stroke of luck when I was admitted to a PhD program that I had absolutely the wrong resume for (I largely majored in World of Warcraft in college) to deciding that I wanted to be a software engineer with again the wrong background, I’ve never fit the template that I’ve thought some committee is looking for. I’ve never taken myself too seriously. And maybe it all was just dumb luck, but regardless, maybe my path has shown that you don’t always have to be the best on paper to find a path that you love. Success smells a lot like hard work. And you don’t have to start programming at an early age. When I started my first job in my early 20s, I went from “What’s Python?” to “This is what I want to do for the rest of my life” in only two years. Do I wish that I had had expose to programming earlier in my life? Of course. But does not having this experience mean that you are hopeless and shouldn’t pursue a career that you would thrive in? Of course not. You don’t have to fit a mold, do things at the right time, or even have a complete vision for how to get completely to a goal to get there. This wisdom has gotten me through a lot of years of life, and a lot of challenge, and while I’m sure there are many ways to do it, this is what has worked for me.
A Special Thank you
Finally, I want to express my deepest of gratitude to my manager, Ruth, who has believed in me and supported me from the beginning, and truly cared about me as a human being. I wouldn’t have my first role, and the huge opportunity to create change at Stanford and in so many open source communities without her support. I can’t imagine that I’ll ever have another manager that has cared so much about me, and I will truly treasure these last 5 years.
I start my new role on February 1st. I’m terrified, yes, but I suppose I’ll just do what I always do – roar furociously and jump in with my tiny dinosaur arms and feet.