Today’s Role Model is Sarah Withee. Sarah is a software engineering generalist for the data pipeline team at Arcadia.io. She recently relocated for the job to Pittsburgh, PA, after living in Missouri for her whole life. At her job, she works on the odds and ends of each project and is the “glue” that holds the other components together. Outside of work, she’s an international tech conference speaker, a teacher and mentor for a variety of organizations that teach people to code. In addition, she’s a robot and hardware tinkerer and conference organizer. Sarah is currently the Director of Programming for Abstractions, a technical conference that will be held in August 2019.

What’s your official title and how long have you been in this role?

What attracted you to this software engineering generalist role?

After a couple of jobs that weren’t as mentally fulfilling to me, as well as wanting a location change, I started looking for jobs across the country. A friend brought this role to my attention. The requirements originally seemed like a lot of tech I had never used. I interviewed anyway, and they liked me. They saw I had a resume of all sorts of random projects in different fields and tech stacks and figured if I could learn the tech, then I’d be great for the team. I haven’t worked on the same type of thing more than a few months and it’s been fun to jump around every so often.

Walk me through a typical day in your role. What activities do you engage in? What types of meetings do you join? When’s lunch?

My team is a “local remote” team, basically meaning we’re local to the office (in Pittsburgh), but we work 4 days a week wherever. I typically work in a co-working space that I liked the people in. My day usually starts with a standup status meeting around 10:30am, then we go about our tasks. If we’re stuck or need two brains on a task, we’ll pair program together (usually over video chat with screen sharing).

We have a meeting every two weeks to go over our work, reflect on what went well or poorly in those weeks. Then we plan out the next two weeks. For the most part though, we don’t have a lot of meetings. Lunch is usually whenever we feel like it, but I end to head out between 1 pm and 2 pm.

What skills/technologies help you succeed?

Problem solving is a HUGE must-have with the type of work I do. I’ve always loved logic and math puzzles, so software engineering has been great at that. While learning specific programming languages helps, knowing more how programming concepts work and how good systems are built helps more because I can learn languages and frameworks to suit the task at hand.

Communication, especially for remote-based teams, is a really important skill, too. We want to be quiet, but when you’re not always face-to-face with the people you work with, you have to speak up more so everyone’s up to date with what everyone else is doing.

What’s the most fun or creative part of your software engineering generalist role?

One of the difficult parts of being the generalist on the team is the ramp-up time to working on a new part of the project. It means several days of working but really having nothing to show for it while research and learning is going on.

However, after I’m up to speed and I understand what I’m working on, seeing it finally work and plug in with the rest of the project just makes me excited. And knowing that I really am being the glue that’s holding the other parts of the system together makes me feel not just creative but important.

What are the biggest challenges you face in this role?

The more obvious challenge is the actual learning. I didn’t really know much dev ops going into this role. I dove in and ended up Dockerizing one of our products, figuring out how to set up some message queues on Amazon Web Services, and writing some Terraform scripts to automatically deploy and scale some services. I learned Scala despite not knowing it when I started (turns out it is a lot like Haskell, a language I used in college). The learning curve of a lot of new things is a challenge.

The less obvious challenge is the mental task. My coworkers were very regularly completing stories/tasks daily, and I wasn’t. It felt very unproductive, even though I was working and contributing to the team. My manager was great and regularly reminded me that he was aware of my work, even though my daily status updates weren’t nearly as full as my teammates’.

What teams/individuals do you work with cross-functionally? Can you give an example of a time when you collaborated with another group/individual?

For the most part, our project is independent of other teams’ work, and so we didn’t have to work with many others. We are building a data pipeline, and that pipeline sends that data off somewhere. There was some consultation with another team to make sure they could take in the data we were sending along.

We also had a security audit at one point and one part of our software resulted in several bugs or security issues we had to fix. Ultimately, we ended up working with a consultancy group to try to fix those rather quickly so we could get back to our main work.

What’s an area where you’re trying to grow in your software engineering generalist role?

When I joined our team, most of the architecture was already designed, so it was our job to implement it. I would love to get back helping design larger systems. I had a lot more involvement on these kinds of things in the past, and haven’t at my last job and this one yet. I would love to have a larger role in that and get more experience as well.

Aside from technical skills, what personality traits/characteristics make for an ideal candidate in your role?

If you want to be a software engineer, an enjoyment of taking large tasks, breaking them into smaller ones, and building those is important. Also being able to look at a task and seeing it as a set of math or logic steps. That’s the building blocks of programming: taking something rather complicated and breaking it down into really small, simplistic instructions for a computer to do. Once you learn the core concepts of programming, and have used a language or two to do them, I think you’re suited for most programming roles.

If you want to be more of a generalist, there has to be some deep desire to always be learning and experimenting with new things. I used to think this made me look like I’m constantly bored with my job, but I learned that’s some of the key aspects of multi-potentialites (also known as polymaths). They are people with many interests and creative pursuits, and don’t have a “true calling” per se. And that’s kind of been me: I will never stop wanting to learn new things in tech. This sort of role was perfect for me, and hopefully for some readers out there too.

What skills (tech/non-tech) have you improved as a result of working in this software engineering generalist role?

Technically, I learned all sorts of things about DevOps, or learning how to automate software deployments and systems with code. I knew a tiny drop before, and now I believe I could probably automate about anything I work on by myself. I was “classically trained” in computer science, so I learned all the tried-and-true things that people have worked on for decades. But at this job, I became what I’ll call “modernly trained,” or learning about web-specific tech and for software designed to scale really well. They’re not things I learned in school but they’ve have been immensely helpful.

More personally, I’ve been learning how I work, and how to build an environment that fosters my own productivity. I learned in past jobs that sitting my butt in a chair from 9am to 5pm isn’t productive at all. I feel like I get, at most, maybe 4 hours of work from that. I work better doing some work, taking a break, doing some more.

The problem is that as a remote team member, there’s no expectation to be somewhere at a certain time. I am my own willpower here. So it’s taken some time to figure this out. During the first two months, I hadn’t yet moved to my new city. I worked remote in a different time zone than my coworkers. When I moved, things got a bit easier, but it’s still really on me to get myself going in the morning.

In your role, what metrics define success?

It’s interesting because I haven’t had a lot of “greenfield” development (as in building things from scratch) in my past, and so when you’re building something new, metrics are hard to define until more of the thing is built. One big metric was being able to take our project into production, which we’re about to do soon.

Another metric, I’d say, is being able to hit a “start” button (if you will) and watch all the pieces get deployed out automatically to the cloud, then just start working. The more pieces we could get working, the better we knew our whole system was generally working since we were still building all of them.