Four Ways to Lead Your Software Team to Success

Technology teams can’t succeed on sheer talent aloneMatteo Vistocco

This article is for anyone wanting to step up their team’s performance and cohesion. It discusses 4 key components to keep in mind when running teams. Great for Team Leads, Managers, Directors, and CTOs. Additionally great for engineers that are team members and not necessarily in a leadership position. The best culture shifts in a company start at the grassroots level.

Long story, short:

  • Invest serious time into building real trust in your team. Embrace good conflict and discussion, don’t avoid it.
  • Give your team a purpose. Measure and share the progress the team makes on themselves, the product, and the business. Ensure teams know what AND why they are building the product.
  • Autonomy breeds creative problem solving. Hire the right people and set up a support structure for success. Give up control. Don’t micro-manage.
  • Instill good habits in your team like a daily standup or a weekly retro. Muscle memory and discipline for your team sets the stage for a culture of continuous improvement.

As a Software Engineer that’s worked for different startups, I’ve experienced a lot of ways to lead a software team. Some were fly by the seat of your pants and break everything to eventual code completion. Others were debilitating with the amount of processes and procedures.

There is however a small minority of teams that have found the right balance of flexibility and process. These teams are able to provide business value to their stakeholders on a consistent basis.

Very few teams have achieved this balance.

Having seen such a wide spectrum of teams and their dynamics, I would sum up my philosophy on team management in a tech company around 4 key components.

Trust is the central foundation for great team dynamics and discussions. Giving your team a sense of purpose to the overall business goals will build an intrinsic motivation for your team to create great work. Great products are only going to come from a team that has a level of autonomy for creative problem solving. Good habits and processes can help your team move in a disciplined, concise way that’s easy to predict and ultimately moves your team faster.


1. Trust

“Great teams do not hold back with one another. They are unafraid to air their dirty laundry. They admit their mistakes, their weaknesses, and their concerns without fear of reprisal.”- Patrick Lencioni, 5 Dysfunctions of a Team

Real trust in a team can lead to healthy conflict, commitment, accountability, and selflessness. There’s a direct connection with these qualities a team has and the success of a product, or even the business at large.

Do you trust your team?

Ask yourself:

  • Can I trust that we can be vulnerable with each other?
  • Can I depend on everyone on the team to put in great work?
  • Can I trust that everyone on the team has the same passion and vision for the team (and the company as a whole) that I do?

When a team trusts one another, they can be comfortable being vulnerable in front of them. They are more willing to take risks or talk about an unpopular opinion. They feel safe contributing to an idea, even if it’s high risk. It’s exciting to see how open and honest teams are when they don’t feel judged when sharing.

As a leader, you should admit weaknesses and limitations, showing that you can be vulnerable with your team. Your team will feel more at ease with their own limitations, thus these habits will start to build the first foundation of a great team.

🚀 Pros tips to help get you started:

  • Do an offsite somewhere with your team where you can do excerises like a Personal Histories and/or Team Effectiveness. These conversations can start to break down barriers needed to build trust, deal with conflict, commit to each other and your goals as a team.
  • Peer code review for pull requests helps to build a mindset of being comfortable with vulnerability.


2. Purpose

“Greatness and nearsightedness are incompatible. Meaningful achievement depends on lifting one’s sights and pushing toward the horizon.”- Daniel Pink, Drive

Have you ever seen the engineer that just wants the specs to a feature to then be left alone? Have you ever been that person?

I’ve been that person several times in my career, and every time I burn myself because I didn’t properly understand the purpose behind my work. I was too focused on getting my unit tests to pass that I didn’t even understand the product requirements.

When I didn’t understand the product, why it we were building, and most importantly the customer, the stage was set for eventual burnout.

We get up each and every day, do our work, and go home. Because of this repetitive nature, we can easily slip into taking our purpose and customers for granted.

A team can find a deeper motivation than just $$ when they understand the value of how their work contributes to a specific business outcome.

Your team can be motivated by building x backend system, then motivated by y new customers, then motivated by disrupting z industry.

This creates an intrinsic motivation that your team will see how their work will ultimately change the market.

Ask your team these questions to see if they know “Whose Purpose is it anyway?”

  • What is my purpose at the company?
  • What is the purpose of my team?
  • What is our company’s purpose?

Metabase can be a powerful tool for your team.🚀 Pros tips to help get you started:

  • Depending on the type of product your team is working on, have them run a mile in the customer or user’s shoes. Have them experience the exact UX the user would experience.
  • Try out Reich’s Pronoun Test, does your team refer to their company as “they” or as “we”?
  • Be open and honest about how the company is doing. Metrics reporting software like Metabase allow any employee to see the company’s KPIs (Key Performance Metrics)/burn rate.


3. Autonomy

When you treat people like children, you get children’s work.- Jason FriedReWork

Now that there’s a cohesive team that trusts one another, it’s time for you to empower your team to push their creative and entrepreneurial limits.

Instead of ad-hoc decision making on the technology stack and architecture as a Tech Leader, ask your team. Let them come up with a consensus on software design decisions (within a reasonable amount of time)

More heads are better than one, right?

You’ll start to see more elegant solutions to technical and business problems.

Granted you’ve hired the right people, your team will take this new control and responsibility seriously. They’ll have the best interests of the product and the business during those discussions.

While many struggle to keep a team motivated, using autonomy as a strategy will actually make it pretty straight forward.

When charging ahead with letting go of control with your team, ask yourself these questions:

  • Am I giving my team direction and intent, and room to solve problems in their own way?
  • Is my team excited about how creative problem solving helps the business?
  • Am I involving my team in goal-setting for our team and company KPIs?

By giving enough room for creative problem solving without saying exactly how to solve it, you will motivate people with more than a paycheck.

Photo by rawpixel on UnsplashIf you place realistic goals in front of your team, the tools to do it, and a sense of purpose for why they should, they will impress you every time.🚀 Pros tips to help get you started:

  • The next time there’s an issue that needs resolved, instead of telling your team what needs to happen, have them come up with a solution.
  • Gather your team and conduct an “Autonomy Audit”
  • Allow your team to work on other projects for a specified time consistently each week/Sprint/month. Whatever is comfortable for your team. More often than not they’ll be working on something that benefits the business.


4. Good Habits

“Although discipline demands control and asceticism, it actually results in more freedom. When you have the discipline to get up early, you are rewarded with more freedom.”- Jocko Willink, Extreme Ownership

With the pace of technology in today’s world, it’s tough to see what’s around the next corner. Figuring out the next move in the product or the business can become overwhelming and stressful.

Many teams differ process and structure in their work flow in the attempt to stay flexible with the changing market.

What they often don’t realize is how ambiguity and lack of process will actually hurt a team’s ability to deliver code. It doesn’t give a team more freedom, it bogs the team down with no systematic way to work.

The flexibility teams want to achieve will ultimately improve through disciplined procedures.

A disciplined software team will create processes, and adhere to those processes. This allows them to provide business value in a sustained and predictable way. When teams become predictable, it provides a great atmosphere for experimenting with innovative ideas and features.

A software team that has good habits will also be very disciplined.

This discipline will free up time to automate those systems as much as possible to ensure they keep up with team/company growth.

body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}

It's baffling how many teams lack the habit of capturing knowledge. Just learned something? Document the solution or automate it away.

 — @housecor

function notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}body[data-twttr-rendered="true"] {background-color: transparent;}.twitter-tweet {margin: auto !important;}

Examples: Code review checklist Machine configuration Definition of done Release process All should be documented or automated.

 — @housecor

function notifyResize(height) {height = height ? height : document.documentElement.offsetHeight; var resized = false; if (window.donkey && donkey.resize) {donkey.resize(height); resized = true;}if (parent && parent._resizeIframe) {var obj = {iframe: window.frameElement, height: height}; parent._resizeIframe(obj); resized = true;}if (window.location && window.location.hash === "#amp=1" && window.parent && window.parent.postMessage) {window.parent.postMessage({sentinel: "amp", type: "embed-size", height: height}, "*");}if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.resize) {window.webkit.messageHandlers.resize.postMessage(height); resized = true;}return resized;}twttr.events.bind('rendered', function (event) {notifyResize();}); twttr.events.bind('resize', function (event) {notifyResize();});if (parent && parent._resizeIframe) {var maxWidth = parseInt(window.frameElement.getAttribute("width")); if ( 500 < maxWidth) {window.frameElement.setAttribute("width", "500");}}🚀 Pros tips to help get you started:

  • Start your own morning routines and build great habits. Use this framework to help get you started. Once you experience the power and freedom you get from routines, discuss with your team what good habits they would like as part of normal routines.
  • Discuss with your team what ‘Done’ means in regards to a full product, feature, update, or bug. Come up with a consensus, document and/or automate the procedure.
  • Create a Pull Request Template with your team that everyone agrees to. Have the team hold each other accountable to it.

Long story, short:

  • Invest serious time into building real trust in your team. Embrace good conflict and discussion, don’t avoid it.
  • Give your team a purpose. Measure and share the progress the team makes on themselves, the product, and the business. Ensure teams know what AND why they are building the product.
  • Autonomy breeds creative problem solving. Hire the right people and set up a support structure for success. Give up control. Don’t micro-manage.
  • Instill good habits in your team like a daily standup or a weekly retro. Muscle memory and discipline for your team sets the stage for a culture of continuous improvement.

📖 Looking for more inspiration on running a great software team?

Four Ways to Lead Your Software Team to Success 💪 was originally published in Hacker Noon on Medium, where people are continuing the conversation by highlighting and responding to this story.

Publication date: 
07/11/2018 - 21:48
Author: