I came out of school with a BA in music, tripped and fell, and landed in the tech world. The folks at Spring took a chance on me as an extremely junior developer and offered me a job. I’ve been here now for a little more than two months, and I couldn’t be happier. Going into my first day at Spring (which also happened to be my first day as a software engineer, full stop), I was understandably pretty nervous. But I was also excited for what lay ahead, and Spring has done a fabulous job of easing me into my new life here. Here are some reflections on that first month (posted, er, somewhat belatedly), to give you an idea of what it’s like to be a new junior engineer at Spring.
(I promise, working at Spring does NOT actually involve deadly virus-plagues!)
My first week at Spring was also my first week as a professional software engineer, and it was, as you might expect, a rollercoaster. When I got to my desk that first day, I found a shiny new Macbook, an ergonomic keyboard and mouse, and a pile of Spring swag (t-shirts, sweatshirts, tote bag, etc.). There was an all-hands meeting that morning, and so the entire team gathered in the kitchen to check in, and I got to introduce myself to everyone. (Of course, I also had to answer the obligatory icebreaker question, which I won’t reveal in case you join Spring one day and have to answer it for yourself, but rest assured, it gave everyone something to remember me by!) Thinking back on it now, that first day was a blur of new people, computer set-up nonsense, and free snacks (snacks which continue to be an integral part of my Spring experience).
Anyone who’s set up a dev environment recently knows it takes about 20 times longer than you think it should, no matter how good the onboarding guide is (and Spring’s is pretty comprehensive). My first two days were spent installing software, transferring over dotfiles, and getting our app to build on my machine. As far as I can tell, though, that’s pretty much par for the course; I daresay the whole process was much less painful than it could have been because of Spring’s excellent internal wiki and because the rest of the engineering team was so happy to help. With their support, I had everything up and running by midday on Wednesday, and could actually start looking through the code.
I entered the codebase gradually, starting on the back-end and working on a smallish and fairly contained bug. Still, even a simple bugfix has a lot of moving parts: I had to understand how the database, the various parts of our backend, and the iOS code all fit together. Sadly, Go doesn’t have a debugger, so my usual Python-oriented strategy—sticking break points around the code and stepping through until I know what’s going on—was useless here. The next best thing was to scatter approximately a million print statements throughout the code, and, of course, to talk to my teammates. From giving me an impromptu high-level whiteboard overview of our system (thanks Vadim!) to answering my finicky detail questions on Slack, everyone on the engineering team seemed happy to help me out.
My brain was working overtime that first week as it processed new people, a new system, a new programming language, and a new way of doing things. But the good thing about starting from the bottom of the learning curve is that you’re learning so much all the time. What’s more, my new coworkers were super friendly and welcoming; they all went out of their way to say hi, and socializing was a welcome break from mile-a-minute code learning. As if I needed more proof that Spring knows how to have fun, my third day on the job was the anniversary of Spring’s incorporation, and everyone left work early for BBQ and shuffleboard in Brooklyn. Although a lot was thrown at me that first week, I was meeting cool new people and learning cool new things, and by the time Friday rolled around I was exhausted, but also really excited about my new job.
My second week was truncated because I was out sick, but I kept up my momentum from week one by fixing small bugs, poking around more the code base, and asking lots of questions—and by the end of the week, I could see definite improvements! I pushed some code and submitted some more for review, and felt myself settling in to Go. Before starting at Spring, I had only ever worked in Python, so this job has been both my first time using Go and my first time learning a new language1. I had already worked through most of the Tour of Go, but sitting down to read and write real code did wonders for my comprehension. Even though I was (and still am) scratching my head at times, by the end of the second week I could wrap my head around the syntax. I didn’t really know Go, but I could fake it pretty well.
(The other exciting thing this week was that I was no longer the newest engineer at Spring. Alan Wang, another Recurse Center2 alum, came on board as a software engineer. Seeing the environment setup process give someone else grief was strangely comforting!)
During my third week, things started to move a little faster and get a little easier. My projects were still small in scope, but less self-contained, and I could get my hands dirty in sections of the codebase with more moving parts.
I also found myself expanding my mental model of the app, filling in some of the blanks in the whiteboard diagram that Vadim drew for me my first week. Granted, there were still a lot of blanks left, but I was getting a better sense of how things fit together. I was still asking loads of questions, but I also had more resources in my toolbox to answer them for myself before pinging someone on my team. I was also starting to feel the groove of Spring office life, and trying to build good habits for myself, such as: drinking lots of water; using Time Out to give myself regular breaks; going outside on days when lunch was delivered to the office, significantly reducing the need to leave the building; and running up and down the stairs a few times to get my blood pumping. (Because if your blood isn’t pumping, you can’t code very effectively. Or do much at all, really. Try to avoid this.)
Week Four and Beyond
My fourth week at Spring had me writing my first test, embarking on my first actual project, and generally feeling like I sort of knew what was going on. Since then, I’ve been working on an integration with a new ecommerce API, and while I can still get help when I need it, I’ve gotten to take ownership of this project from the beginning. And that’s pretty excellent! I’m also finding that I know enough raw basics of Go to start picking up some stylistic things and code conventions.
Some Final Summary-Type Thoughts
During my first month at Spring, I felt in over my head and bewildered most of the time—but that’s okay, especially considering this is my first job as an engineer. Learning a lot of new things—code, tools, procedures, the names of other humans—is always going to be a bit overwhelming, but any company worth their salt (of which Spring is certainly one) will go out of their way to ease you into your new engineering life. In fact, I daresay that any new engineer who doesn’t feel a little overwhelmed first is probably being unreasonably coddled, or else no trying very hard.
To me, the two most useful things in my onboarding process were: a) the gradual ramping up of assignments; and b) Spring’s culture of question-asking and teammates who are excited to help. My tasks gradually increased in complexity and scope, allowing me to get familiar with the codebase incrementally and not overwhelm myself trying to jam it all into my brain at once. It was especially helpful to have a designated point person that I could go to even if my questions seemed embarrassingly trivial. Solid onboarding documentation, especially for dev environment setup, was also key! (Though not even the most comprehensive wiki pages can eliminate the pain of setting up a dev environment—they only make it slightly more tolerable.)
I’m still getting the hang of life at Spring, and very much still in the midst of my onboarding process. I certainly don’t know the whole system, and I’m sure I’ll be asking questions in a month or two (or five). But I’m okay with that. Spring has brought me on gently enough that I can really put to use what I do know, and I feel comfortable going to my team with questions about things I don’t yet understand. Thanks to Spring, my first engineering job has been pretty great so far, and I can’t wait to see how it develops!
Go is the first language I’ve learned since I got serious about programming (which I did by way of Python). I don’t really count picking up Python as “learning a language,” since I was learning how to code in general. Now, though, I know how to code, and I need to fit my pre-existing knowledge into Go’s framework, which requires an entirely different set of mental acrobatics.↩
Formerly Hacker School↩