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

Juan Pablo Buriticá
Juan’s And Zeroes
12 min readMar 2, 2023

--

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:

  • Defining team capabilities: This involves identifying the critical skills and competencies essential for effective collaboration and performance within a team.
  • Assessing team effectiveness: Once the team's capabilities are defined, it's essential to have a system to determine how well the team performs based on those capabilities. Teams can assess themselves with the support of management and executive leadership.
  • Identifying areas for improvement: Based on the assessment, the team can determine where they need to improve, whether in specific competencies or their overall approach to collaboration and effectiveness.
  • Providing a path for growth and development: Finally, the capability framework offers a path for growth and development that enables the team to continue improving and evolving. Effective teams should be more impactful over time without having to grow significantly in size or work longer hours.

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.
… set goals.
… ask for help.
… broadcast state.
… negotiate dependencies.
… escalate appropriately
… manage team capacity.
… onboard team members.
… understand its users.
… understand its levers.
… tell the team’s story.
… define operating agreements.
… adopt an operational cadence.
… anticipate problems.
… respond to incidents.
… improve its processes.
… tackle increasing complexity.

… 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.

  • Take proactive steps to identify valuable work instead of waiting for explicit direction.
  • Identify the appropriate individuals and teams to seek guidance and input from.
  • Communicate effectively with stakeholders, asking clear and concise questions to align on expectations.
  • Continuously seek feedback and opportunities for course correction to ensure alignment with goals and expectations.

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.

  • Clearly define and articulate objectives that support the overall strategy of the organization.
  • Create realistic and attainable goals with clear metrics for measuring success.
  • Effectively communicate technical approaches and solutions in terms of their potential impact on business outcomes.

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.

  • Proactively identify and communicate when they need assistance from other teams or individuals.
  • Surface needs early to avoid last-minute requests or dependencies.
  • Offer alternative solutions and collaborate on finding the best path forward.

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.

  • tl;dr surprises == bad.
  • Establish clear and consistent channels for communicating status updates.
  • Proactively communicate any risks or deviations from the plan and potential solutions.
  • Ensure that updates or changes don’t catch other teams or leadership off guard.

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.

  • Proactively track and align dependencies across teams.
  • Communicate changes and priority shifts.
  • Facilitate contributions across codebases as needed to reduce coupling.

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.

  • Start by communicating directly with cross-functional peers to identify the source of the conflict or issue.
  • Document the conflict, including possible resolutions and existing discussions, to ensure all parties understand the situation.
  • Escalate through established channels, leaning on leadership to tie-break and take responsibility for outcomes when necessary.

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.

  • To staff appropriately and understand the distribution of work across different areas, such as maintenance, support, and feature building.
  • Balance the workload to prevent overworking while maintaining a consistent pace to deliver on planned work.
  • Consistently deliver on 80% or more of planned work by properly managing capacity and adjusting plans as necessary.

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.

  • Develop a comprehensive onboarding plan to ensure new team members can become productive quickly and contribute to the team's goals.
  • Establish self-service resources, such as documentation, knowledge bases, and communication channels, to provide new hires with the support they need to succeed.
  • Recognize and reward team members who continuously improve onboarding processes, and encourage sharing best practices and feedback to enhance the experience for future team members.

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.

  • Develop a collective understanding of users' needs through research and observation.
  • Prioritize features and improvements based on the perceived and demonstrated friction experienced by users.
  • Establish and maintain feedback channels to continuously improve the product based on user feedback.

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.

  • Connect technical decisions with the company's strategic goals and objectives.
  • Invest time and resources into the most impactful projects.
  • Translate technical debt into its potential business impact to ensure prioritization of its resolution.

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.

  • Constantly sharing the narrative that contextualizes the team's work in the bigger picture and organizational goals internally and externally.
  • Develop a shared language and metrics to communicate team progress and success, ensuring alignment and transparency.
  • Continuously build the team's reputation and brand through consistent and persistent communication.

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.

  • Collaboratively define and agree on ways of working that serve team members.
  • Regularly evaluate and iterate on established agreements as the team evolves.
  • Adopt sensible organizational defaults to facilitate a predictable cadence.

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.

  • Establish a regular cadence for team meetings, planning, and reviews.
  • Use tools and processes that enable observability of team and project progress.
  • Create a predictable working environment that fosters focus and minimizes disruptions.

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.

  • Proactively monitor and use tools to observe and react to potential problems.
  • Instrument and measure perceived friction to validate effort investments and prioritize improvements.
  • Plan and document releases effectively, including contingency plans.
  • Stay aware of critical organizational events and potential impacts on the team's work.

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.

  • Establish and document on-call and paging procedures.
  • Maintain precise and up-to-date run-books to reduce ambiguity and anxiety during incidents.
  • Confidently escalate and page as necessary.
  • Clearly and promptly communicate response status.

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.

  • Regularly review processes and workflows to identify inefficiencies.
  • Involve the entire team in identifying and implementing process improvements.
  • Experiment with new tools and technologies to reduce manual labor and increase productivity.
  • Document and share best practices to enable knowledge sharing and consistency.
  • Continuously measure and track the impact of process changes to ensure they are effective.

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.

  • Consistently reduce the risk of increasingly more significant projects.
  • Take ownership of the product roadmap and drive strategic initiatives.
  • Expand the team's ability to operate and execute on multiple fronts simultaneously.

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.

--

--

💻 sw eng “leader” |🤘hardcore “punk” | 🥟 empanada “fan” | 🔪 retired “line cook” | 📷 amateur “photographer”