The Most Common Causes of Poor Performance in a Software Product Organization

The most common complaints in software product companies are typically some form of the below:

  • “We’re spending all of this money and I don’t know what I’m getting”
  • “Our team consistently misses deadlines and there’s always some excuse as to why”
  • “Every time we release something new, something else breaks”

When these issues occur, the response from the rest of the business is typically to do one or more of the following:

  • Increase the number of meetings to try and figure out what’s wrong
  • Layer on more process and checkpoints
  • Require more and more detailed specifications
  • Replace the engineering leader

Poor performance is incredibly frustrating for any leader, regardless of where it occurs. What makes software unique is that, often times, the rest of the business doesn’t really understand the product development process or what happens in engineering, creating a “black box” effect that erodes trust.

While there can be many reasons for poor performance, when I’ve dug in they nearly all boil down to some combination of these conditions:

  • Unclear or poorly communicated vision and strategy
  • Constantly changing priorities
  • Too much work in progress
  • A culture of blame-shifting rather than problem solving

How can you address each of these in your company? Let’s dive in.

Unclear or Poorly Communicated Vision and Strategy

It is easy to assume that because you clearly understand where the company’s going and how you’re going to get there that everyone in the organization does as well. However, unless you’re constantly communicating and reinforcing these critical topics, your team will drift and begin to make their own assumptions about their area of responsibility. Here are a few basic steps you can take:

  • Start every company meeting by recapping your vision and strategy. “This is where we’re going, and here’s how we’re getting there.”
  • Clearly define who your customer is communicate this regularly. “We serve companies with more than 2,000 employees who use Salesforce as a CRM
  • Clearly communicate the company objectives for the month/quarter/year and ensure that all work is in service of at least one of the objectives.

You should be able to ask any team member about the company vision and strategy and get a reasonably close answer.

Constantly Changing Priorities

When a company is changing priorities regularly, it creates whiplash and churn up and down the organization. Features are started and stopped, both old and new commitments are never completed, context-switching costs accelerate and morale degrades. To combat this behavior:

  • Have a clear process for determining what the priorities are. A framework such as RICE is a great starting point.
  • Establish who has a voice in determining priorities. While you want to give the entire company a voice in the process, not all votes are equal. Keep this group small at first! Representatives from sales, customer service, product, engineering and the CEO are a great starting point.
  • Establish a planning window that the organization is willing to live with. It might be as short as 90 days until you get into a rhythm.
  • In the face of relentless pressure to do otherwise, STICK TO YOUR COMMITMENTS!
  • Have a clearly defined process for exception handling. E.g. “We will consider changes only for the following opportunities…”
  • Ask both “Should we do this?” and “When should we do this?”

The CEO is often the worst offender and has the hardest time committing to changing behavior. Know thyself!

Too Much Work In Progress

The first cousin of Constantly Changing Priorities is Too Much Work in Progress. For both individuals and teams, having too many things in flight means important work never gets finished, and as or more importantly the time to complete the work grows exponentially. Here’s a chart, courtesy of Impact of Agile, that shows the impact of WIP:

If your team is struggling to hit deadlines, this symptom in particular should be a focus. Eliminate distractions and reduce WIP to the smallest number possible to give the team a chance to get some wins under their belt.

Culture of Blame-Shifting instead of Problem-Solving

There are always multiple reasons for why something isn’t working. Complex systems require constant attention and tuning, and building software is a very complex system. If you allow teams to shift blame and not take ownership of the outcome, you are condemning the project to failure. Instead of making the team the enemy, make the problem the enemy and drive the organization to solving the problem.

A common area where this surfaces is that engineering builds something that is not what the product team was expecting. When cornered, engineers might say “I didn’t have the information I needed from product, so I made the best decision I could with what I knew”, to which someone in product says “I met with you and told you exactly what was needed,” and so it goes.

In this simple example, the enemy is lack of clarity and misaligned expectations. Work to eliminate the enemy, and don’t allow teams to blame each other.

If you’re suffering from poor performance, start with the four areas we’ve discussed in this article, and remember that when in doubt, increasing clarity and transparency will help to cover a multitude of sins.

A special thanks to my good friend Jim Grundner for digging into these topics with me and letting me learn from his experience!