You are here

You are here

How to build the software team culture you'd want to work in

public://pictures/katewardin.jpeg
Kate Wardin Senior Engineering Manager, Target Corp.
 

Organizations face an uphill battle as they try to recruit top technical talent. It's in short supply—and the problem is only getting worse. According to the US Bureau of Labor Statistics, the shortage of software engineers in the United States will exceed 1.2 million by 2026. The unfortunate reality is that there simply are not enough qualified candidates to meet the increasing demand, whether you're looking for software engineers, software development engineer in test or some other development role.

 

To attract them, you need to build the kind of engineering culture that you yourself would want to work for.

 

Software engineers are in a great position: They can be picky when choosing where to work. And people aren't as motivated by things that they previously found compelling—glamorous office spaces, free food, and even hefty sign-on compensation packages are not enough anymore.

Instead, candidates increasingly ask me to tell them about the culture of our teams—why do people enjoy working at my organization? Who will they get to work with, to learn from, to teach?

We are at a pivotal moment when it comes to recruiting and retaining technical talent. The pandemic has emphasized the need for organizations to adapt to their employees' needs, not the other way around. That means making our teams a great place to work.

Here are six characteristics that will make your software engineering teams stand out.

1. Identify and remove blockers that prevent the team from being productive

Blockers—whether they involve developers sitting idle waiting for their deployment approval to reach the top of the queue or the extra 15 minutes it takes to dig through libraries of technical documentation to find the right spec—can be painful and lead to very unhappy and unproductive teams.

A couple of weeks ago, I was chatting with a friend who had been consulting for a large financial organization. He was working on a six-month contract and had to waiting for a server to be provisioned so that he could deploy his code. He ended up waiting for this server for the entire length of his six-month contract because the organization had a gated infrastructure procurement process that left many engineers idle as they waited for their place in the queue. He felt unproductive, discouraged, and often blocked by sometimes unnecessary governance. Needless to say, a contract extension was offered, but he did not accept it and chose to look elsewhere.

My friend's experience is the sort that you need to care about. With his years of experience, he prioritized a positive developer experience over an easy—and well-paid—contract extension, even if it meant he had a few unpaid weeks in between gigs.

If you want to attract top talent, spend time and energy to expose painful processes that cause friction for software engineers. This can be as easy as asking your fellow team members, "Which processes are painful?" and, "What would make life easier?" Then prioritize the time and budget to fix those.

2. Empower others

Decisions should be made at the level where the best information is available. Far too often, the people on the front lines are not involved in decision making, which can lead to very costly issues later.

Is your organization considering a new CI/CD pipeline tool? Seek input from the team members directly. They will be the ones using it on a day-to-day basis and should therefore be able to weigh in on a wish list of features.

As a manager, you need to amplify the voices of your engineers, seek to understand and expose costly pain points, and spread knowledge across your teams and up and down your corporate ladders.

3. Share the credit, take the blame

Developers often get lost in large enterprise initiatives. It is not in their nature to brag about their accomplishments or to eloquently explain how they tie into the organization's vision. It's your job to coach your team on this.

In one team I worked on a few years back, one of our standing weekly team meeting agenda items was for each person to share kudos for another team member. When I first introduced the idea, I thought the team would scoff at the idea of sharing "mushy gushy" praise for one another. I was surprised and delighted when a lead engineer kicked off the session by sharing praise for a junior-level engineer who had taught her about a new testing framework that week.

The entire group followed suit, each sharing kudos for a fellow team member. We went around the table three times that first meeting because the team was so excited to share their appreciation for one another.

As for taking the blame, I am proud of the "no blame" processes that my current organization practices. During a production issue, there is an all-hands-on-deck mentality to fix the issue (no finger pointing). After an issue is resolved, conversations focus on how we can improve: What tools, alerting, or monitors can we introduce? (Again, no finger pointing.)

Create a culture where engineers advocate for one another, share praise for their peers' accomplishments, and remain loyal to one another as they recover from issues.

4. Never devalue people in the process of delivering a solution

If I have learned one thing as a manager at a large organization, it is that when it comes to humans, abstraction is bad. You can't assess talent or value with numbers; it just doesn't work.

I once worked on a team that was laser-focused on improving only quantitative metrics, which ended up leading to burnout and (ironically) missed deadlines. We spent too much time and energy talking about our velocity scores and why our productivity seemed slightly lower from one week to another when we should have been focusing on addressing feedback from conversations with our users and improving the product.

You need to also acknowledge that developers are human first and software engineers second. Your team members are going to bring their whole human selves to work, even if they try not to. Instead of draining their energy by forcing them to find ways to fit in or to hide essential elements of who they are as humans, encourage them to spend their energy building awesome technology.

Fortunately, I have worked only on teams where I felt as if I could safely offer my ideas and opinions freely and without judgment. But I have heard horror stories of friends who felt they had to be activists at work—constantly advocating for their right to speak and share their ideas. As a leader, you need to build and foster inclusive, psychologically safe environments for every person on your team.

5. Be vulnerable

Yes, you read that right. Vulnerability is the ability to own your mistakes and not try to cover them up. This means articulating your own stories of struggle, and encouraging others to do the same.

The same team I previously mentioned also had a weekly ritual where each person would share one thing they struggled with—or learned—that week. We called it "Weekly TIL" (Today I Learned). One team member shared that he was troubleshooting code for four hours that ended up just being a small typo. Another demoed a cool new technique she found to expose a codebase's test coverage without a ton of manual configuration steps.

One of my favorite leaders constantly calls himself an idiot in meetings; while I highly discourage anyone from downplaying their brilliance, the fact that a senior executive wasn't afraid to admit that he struggles with something as simple as downloading a PDF is refreshing and sets a wonderful tone for the team to follow.

6. Establish trust

Trust is an essential element of productive and happy teams. Trust increases commitment to team goals, improves communication, and also just creates more fun and camaraderie as teams work through everyday challenges.

Trust is not handed out, but is built from a collection of moments over time. There are two kinds of trust that you need to achieve: affective and cognitive.

Affective trust is "trust from the heart"—that sense of rapport and empathy based on feelings generated by interactions. Building affective trust can be as simple as encouraging people to share stories about their life outside of work. These types of conversations are incredibly humanizing and help build a strong foundation and camaraderie for teams to weather tough challenges together.

Cognitive trust is "trust from the head"—it's your confidence in one another. Do you trust others on your team on the evidence of their competence, skills, and reliability? You can build cognitive trust by being transparent and acknowledging areas in which you are not an expert, or where you tend to mess up.

Start small, be relentless

These six elements might at first seem very radical and daunting to try to introduce to your organization, but organizational cultures are generally very malleable, and you don’t need to hold a formal management title to influence the culture of your team. If you can find a way to introduce even one small change in a process that is bothering you, chances are you're not just improving your own experience, but that of everyone else too.

As a change agent, you need to be relentless in your pursuit. Create partners, bring others along for the ride, and be able to clearly articulate your intentions. Share your passion for improving your team's culture and, as my experience shows, others will follow.

Finally, don't let your open positions sit vacant for months. As a technologist, you know time is of the essence as your team works to rapidly advance your business and software to keep up with the pace of change. Invest in your team's culture just as you would any business asset, and it will yield dividends when it comes to selling your team to future candidates.

Don’t miss Kate's presentation during the DevOps Institute's one-day micro-conference, "Agile Test Management for the Enterprise," on April 22, 2021. The conference, which features three speakers, is part of the DevOps Institute's ongoing SKILup days event series.

Keep learning

Read more articles about: DevOpsDevOps Culture