When Brandon Duff joined Mavenlink as a software engineer right after college, he was new to pair programming. He explains how pairing and Mavenlink’s emphasis on learning gives him the opportunity to tackle new technologies side by side with experienced colleagues — and even do some teaching of his own.


Tell us a bit about your role at Mavenlink.

I work on a team with a few other engineers and a product manager to develop improvements to our platform. Depending on the day, I might be working on existing code to make Mavenlink a better experience for our customers, or I might be helping build an entirely new element of the platform.

Can you describe your background prior to this job, and what brought you here?

I studied philosophy and computer science at Utah State University, and I was lucky to find Mavenlink right before graduation. During the interview process, a few things appealed to me: I liked the technology they were using and their development philosophy, and that I’d be part of a new office here in Salt Lake City. Plus, the company is growing quickly, and I knew there’d be a lot of opportunities to grow with them.

I’d done a couple of internships in college, and I’d seen firsthand what happens when you don’t have technical discipline or good management. Spending your time worrying about things breaking and putting out fires makes it hard to focus on more interesting work.

At Mavenlink, it’s the opposite. This team is focused on test-driven development and quality code, and it was clear to me that they put a lot of emphasis on teaching. The Engineering team also uses extreme programming, which I’d read about but hadn’t seen implemented. It was obvious they were building complex software in a deliberate way, and I knew I wanted to be a part of that.

I know I’m learning more, and more quickly, than I would elsewhere because we’re constantly adapting the technology to solve interesting new problems.

How does learning happen at Mavenlink?

I know I’m learning more, and more quickly, than I would elsewhere because we’re constantly adapting the technology to solve interesting new problems. For example — our JavaScript frontend has completely shifted from Backbone.Marionette to React since I joined the company. As we work through changes like that, our programming knowledge necessarily deepens. And because we pair program, we’re constantly picking up new ideas from each other. As I pair with more experienced people, I learn the reasons for using different techniques and technologies there, rather than just having someone dictate which one to use.

Eventually, engineers at Mavenlink work full stack, so we’re also picking up patterns across different parts of our app. We’re asking questions about our overall design, testing approaches, and then looking for ways to apply them not just in JavaScript but through language-agnostic methods. Hypothetically, we could be integrating a new programming language next week. If we can find ways to reduce duplicated code and write more robust systems, we can avoid starting from scratch every time.

Maybe the biggest thing is, I’m writing better code. That might sound obvious, but because our code is so well-tested, you can really do your best work without worrying about breaking anything. You know you’re backed by solid engineers who aren’t going to let a bunch of bugs slip through.

Can you tell us about how coaching works at Mavenlink?

Sure. Everyone on the Engineering team is assigned a coach, usually someone with experience in an area where we want to grow. My current coach is a principal engineer here in SLC. We meet once a week to talk through technical questions and discuss my growth goals and how I can improve my skills. I cannot overstate how helpful that time is; it helps me set my goal for the day, the week, and the month, and it reminds me that the people around me care about my growth.

Separate from formal coaching, we also have clubs where we can learn from our teammates. When I first came here, I joined a book club on extreme programming. The company gave us the books, and the time and food for our meetings. It impressed me that they are willing to make space for us to learn.

“I cannot overstate how helpful time with my coach is; it helps me set my goals and it reminds me that the people around me care about my growth.”

Let’s talk about pair programming. What was your initial impression, and has that changed?

I wasn’t sure about it at first, but it’s turned out to be such a great learning opportunity. I’m working side by side with people who are often senior to me and have much deeper programming experience. Especially as we onboard new technology, pairing allows us to get up to speed much more quickly. You don’t have to spend time Googling how to do little things, because someone who can explain it is right there next to you.

Pairing also makes the workday easier. It can be stressful to hold a lot of complex ideas in your head alone, but a partner will likely remember anything you forget, and vice versa. We can also figure out more quickly whether to keep going with a new idea, because we get instant feedback. If I’ve read about a new pattern or technique, and I see an opportunity to place it in the code, I have someone who can walk through it with me and point out any holes.

Do you always pair with more experienced people?

Not necessarily. Sometimes I’m the more experienced one, it just depends on the project. We rotate pairs frequently within the team, and even across teams when it makes sense. Today I paired with someone from another team because he’s working in an area where I have some expertise. I always appreciate the opportunity to pair with someone I can teach; it helps solidify my own knowledge and prevents complacency. When you’re showing your techniques to someone else, you’re constantly reviewing and refining them.

But you can learn from people who have less experience than you, too. Since I haven’t been at Mavenlink long, I’m usually paired with more senior colleagues, but I can still contribute. I was assigned to a team recently that had been working on a project in React for about a month. Because I was new to the project and React, I had fresh eyes and was able to see blind spots others might have missed.

Does pairing present any challenges?

It’s generally a focused, intense activity, so it can be draining, especially if you’re used to programming alone. At first, there might also be a tendency to get defensive about your own code, or to worry you’re being judged by your partner. But as you pair more, you learn to let that go. It’s really about conversation and collaboration; two people working together towards a goal is more important than any single person’s ego.

I’ve also heard programmers talk about impostor syndrome — feeling that you’re in over your head and you’ll be exposed for your lack of knowledge when your work is out there for someone else to see. But I’ve found that pairing actually helps you get over that, because you see that we all have things to learn and to teach.

“Mavenlink engineers don’t fit your stereotypical programmer mold — they’re more social and outgoing, and they’ve studied literature, biology, and everything in between.”

Has anything surprised you about working at Mavenlink?

I knew there were a lot of talented people here, but I was surprised by the sheer breadth of their experience and backgrounds. Mavenlink engineers don’t fit your stereotypical programmer mold — they’re more social and outgoing, and they’ve studied literature, biology, and everything in between. That’s different from what I experienced in school. I’m working every day with all sorts of people, who all have something to teach me.

Is there a project you’re currently working on that you’re particularly excited about?

For the past month, I’ve been working on a function that lets users upload a proof, such as a logo design, and assign the reviews and approvals they need for sign-off. It’s my first big project using React, and there are a lot of interesting problems to solve as we incorporate new technology into our existing architecture. There are also complex challenges, like what should happen next when one person approves a proof but someone else rejects it. We’re using principles from domain-driven design that we haven’t applied before to other areas of our code base, and that’s exciting. I love working on a team that gives us leeway in how we implement solutions and isn’t afraid to embrace change.


Interested in joining the team?

Check out Mavenlink engineering roles in S.F. and Salt Lake City, or reach out to JB Steadman (SVP Engineering) at jbsteadman@mavenlink.com.

Mavenlink Product Development

Musings from the Engineering and Product Design team at Mavenlink

Mavenlink Product Development

Written by

We’re the team building Mavenlink — Product, Design, Engineering, QA, DevOps and Technical Writing

Mavenlink Product Development

Musings from the Engineering and Product Design team at Mavenlink

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade