From good to great - A capability framework for building exceptional product engineering teams

By: Juan Pablo Buritica
Source:https://buriti.ca/from-good-to-great-a-capability-framework-for-building-exceptional-product-engineering-teams-a8ca4e9e8f47)

While some tech CEOs may be tempted to abandon tried-and-true management methods, it's increasingly clear that effective management is crucial for building engineering teams that ship impactful products. Clear responsibilities, roles, and structure are fundamental for achieving scale. So while eliminating layers of middle management may seem cool in this “FOMO Layoff Era,” a structured approach is essential for unlocking teams' full potential.

Over the past decade, the tech industry has significantly shifted how we approach building software products. While programming may be an individual activity, shipping software professionally is a social undertaking that requires effective collaboration. Thanks to the increasing public discourse around engineering management, we're moving away from secretive internal structures and outdated practices passed down via oral tradition, like measuring lines of code 🙄.

Before you stop reading because you’re not leading a product engineering team, think again. If someone uses the software you ship, inside or outside your company, you have users, so 🥳 congratulations 🥳, you’re leading a product engineering team whether you want it or not. Let’s move along.

Like an engineering ladder, but for teams

Camille's post on Engineering Ladders, which was groundbreaking when first published a few years ago, opened up new possibilities for me and many others in the industry.

What if we considered teams the fundamental units for software delivery, and built a similar framework?

With this post, I'm excited to share an experiment that builds on the concept of levels/competencies and incorporates them into a framework that considers teams, rather than individuals, as the fundamental unit of effectiveness in software engineering.

Team effectiveness doesn't rest solely on managers. Yes, the PM/EM partnership is ultimately responsible for team performance, but everyone on the team contributes to the results. To help my current engineering organization evolve, we drafted a framework that outlines what a capable team looks like so that individual team members can understand how they contribute to effectiveness teams. Ultimately, you need a sprinkling of glue work to turn a collection of individuals into a cohesive team.

This framework provides clear guidelines for team members to work together and collaborate effectively, especially at a distance. This collection of expected capabilities encourages teams to take collective ownership of their outcomes and serve our customers' needs in the most impactful way possible. Additionally, this structure allows teams to focus on delivering results and achieving success.

For instance, rather than prescribing a specific method for reporting progress, we clarify who needs to be informed and provide examples of a need for more communication. The team can decide who communicates with the relevant parties: the engineering manager, tech lead, product manager, or an individual engineer. An effective team will achieve the expected communication outcomes of broadcasting status. If I had to go digging in a task tracker to understand the status of a team, they are not meeting the communication expectations.

Just like the rollout of a traditional engineering ladder, the successful deployment of a capability framework requires a few steps:

An effective product engineering team can …

Capabilities broadly describe the skills and responsibilities we expect from our teams and help us establish clear expectations and outcomes. However, we recognize that it can be challenging to capture all of these expectations without creating a lengthy and confusing operational manual.

Using a format emphasizing clarity, we can represent each capability in a simple, concise statement that clearly illustrates the expected outcomes. Without further ado, we introduce the 17 selected capabilities for our teams.

An effective product engineering team can …

… navigate ambiguity:

The ability of an effective engineering team to handle uncertainty and unclear situations confidently and clearly. This capability enables teams to take proactive steps and find solutions to challenges instead of waiting for explicit directions. It involves finding valuable work, asking straightforward questions, seeking alignment, and obtaining the necessary information and guidance.

Not capable:

We’re not making any progress because nobody has told us what to work on.

Capable:

Last week, we emailed the CXO to clarify how we could contribute to their quarterly goals. Attached is our draft proposal, any objections or feedback?

… set goals:

By establishing measurable, achievable goals aligned with the overall strategy, teams can focus on what truly matters. Effective goal-setting also requires understanding how engineering work translates into business outcomes. With clear goals, teams can prioritize work, track progress, and communicate effectively with stakeholders.

Not capable:

We’re just working on this feature because it seems cool, but we’re not sure how it fits in with the bigger picture.

Capable:

Our goal is to increase user engagement by 20% by the end of Q3. To achieve this, we’ll focus on improving the onboarding flow and optimizing page load times.

… ask for help:

By having a culture that encourages asking for help, teams can avoid becoming stuck or experiencing delays due to a lack of expertise or resources. Asking for help goes beyond a simple request; it also requires concreteness in the kind of help that would be helpful.

Not capable:

We’re blocked since last week on getting a certificate.

Capable:

If we want to hit our target date, we will need [ABC]’s help by end of next week to issue a new certificate for the API or shift our milestone. They’re waiting for budget approval, is this something you can expedite?

… broadcast state:

Broadcasting state involves proactively communicating the status of a project, process, or team. It is an essential capability for engineering teams because it helps reduce surprises, improves transparency and alignment, and helps build trust with stakeholders.

Not capable:

We have been off track for two weeks.

Capable:

We have a weekly status update email where we broadcast the current state of the project, including any risks, issues, or changes. Additionally, we have set up automated notifications that alert stakeholders when we’ve reached certain milestones or when there’s a significant change in our progress.

… negotiate dependencies:

Effective product engineering teams understand that their work often depends on others, and negotiating dependencies is a crucial capability.

Not capable:

We missed our target because Team X said we weren’t on their roadmap.

Capable:

We’ve aligned with Team X, and have agreed to collaborate on shifting some priorities and pairing on dependency Y to deliver on Z.

… escalate appropriately:

In any engineering project, issues and conflicts can arise that require escalation to higher levels of authority or leadership. Knowing how to navigate this process is critical to ensure that projects stay on track and resolve problems effectively.

Not capable:

We’ll miss our target because Team X said we weren’t on their roadmap.

Capable:

The purpose of this meeting is to get leadership to adjust priorities across team X,Y,Z so we can unblock our paths or shift our timelines. Here are some options, and what we’ve discussed so far.

… manage its capacity:

Managing capacity is crucial for engineering teams because it ensures they can consistently deliver high-quality work while avoiding burnout and other negative consequences of overwork.

Not capable:

We’re going to need to double the team size to achieve our pre-committed goals.

Capable:

We targeted 70% of our capacity to deliver on our feature roadmap which was completed as expected. Our maintenance is on track and we are meeting our SLAs.

… onboard team members:

Onboarding new team members allows them to integrate into the team quickly, understand the company culture and values, and become productive members who can make valuable contributions. In addition, effective onboarding programs enable new team members to become familiar with the team's processes, tools, and systems, establish connections with colleagues, and set expectations for their work.

Not capable:

Yeah, it also took me three weeks to learn how to change x file.

Capable:

I’ll be your onboarding buddy, this chat channel is safe for all questions and your 90 day plan can be found here.

… understand its users:

Understanding users is crucial for product engineering teams as it helps to ensure that their work aligns with the needs and expectations of their customers, leading to better products and improved user satisfaction.

Not capable:

Our competitors did X, so we did it too.

Capable:

We added feature X after observing our user’s frequent friction in the funnel.

… understand its levers:

Understanding its levers helps a product engineering team to connect its day-to-day work with the organization's overall business goals, prioritize work that has the most impact, and effectively communicate the business outcomes of its technical approach.

Not capable:

We need to rewrite the frontend app.

Capable:

By reducing the loading time from 7 to under 2 seconds, we will facilitate our growth marketing campaign and improve our cost of acquisition.

… tell its story:

Telling a compelling story is a powerful way to create alignment and motivation in a product engineering team. Team members can gain a sense of purpose and pride by articulating their mission and how their work contributes to the organization's overall success. Sharing this story with other teams and stakeholders can also build trust and support for the team's goals and initiatives.

Not capable:

We work on this because we were told to.

Capable:

Our charter is ABC, our plans are XYZ, they connect to our corporate strategy because 123.

… define working agreements:

Defining agreements is vital for teams to establish clear expectations and ways of working that serve team members, facilitate a predictable cadence, and minimize conflicts.

Not capable:

Mgr: Everyone has to be on chat 100% of the time.

Capable:

How should we balance availability with deep focus?

… adopt an operational cadence:

Adopting an operational cadence helps teams establish predictable and sustainable work rhythms, leading to better productivity and improved outcomes.

Not capable:

All our meetings are ad hoc as needed.

Capable:

Key forums are X,Y,Z and only urgent messages come via pager.

… anticipate problems:

Teams need to anticipate problems because it allows them to be proactive rather than reactive. Anticipating potential issues before they arise enables teams to identify and mitigate risks, minimize the negative impact on project timelines and budgets, and ensure the successful delivery of products or services.

Not capable:

We learned we were down because user X tweeted.

Capable:

Monitor X triggered, so we managed to increase capacity in time.

… respond to incidents:

Teams need to have the capability to respond to incidents to minimize the impact on their users and organization. Reacting quickly and effectively requires a well-defined incident response plan, clear communication channels, and the ability to diagnose and resolve issues under pressure.

Not capable:

How do I tell someone our site is having issues?

Capable:

Thanks for paging me; I will be the incident commander; let’s summon X,Y, Z. A will be running comms. We’ll inform on 30 min intervals. Run books to surface can be accessed here.

… improve its processes:

Improving its processes helps a team work more efficiently, reduce errors, and adapt to changes in the work environment.

Not capable:

To do X you must follow X 10 steps.

Capable:

We’ve adjusted our form to collect X, summarize and distribute.

… tackle increasing complexity:

Increasing complexity is crucial for teams to tackle more extensive, impactful problems. It involves navigating and understanding complex systems, breaking down problems into manageable parts, and continuously learning and adapting to new challenges. This capability enables teams to develop innovative solutions that can significantly impact the organization's success.

Capable:

Now that we have tackled X, we will be enhancing Y and contributing to Z. We would also like to experiment with ABC.

Wrapping up

As a product engineering executive, I’ve come to realize how important it is to have a clear set of capabilities that enable our teams to deliver great products. Having a shared understanding of what it takes to be successful helps us prioritize our work and make informed decisions.

While capabilities may be specific to your organization, they can serve as a useful framework for driving organizational effectiveness in the same way engineering ladders serve individuals when properly deployed. For both of these tools, it’s important to consider technical skills and core skills such as communication, collaboration, and problem-solving.

If you can try a similar approach with your organization, please share your experience so we can continue learning in the open. By reflecting on our capabilities and identifying areas for improvement, we can continue to grow and deliver better products.

Finally, let’s remember that teams are the fundamental unit for software delivery. By focusing on our capabilities and working together, we can ship impactful products.

🖤 Thanks, Camille, Coda, Sarah, Marco, Silvia, Daniel, Allison, David, Rafa & Ranbir for the candid feedback and encouragement on earlier drafts of this post.