Jonny Bryant
Thumbtack Engineering
6 min readFeb 15, 2024

Throughout my years leading project-oriented teams, a common challenge I’ve grappled with is providing clear expectations around what can be accomplished by when and delivering accordingly. Oh, and doing it in a way that doesn’t neglect critical operational work or technical debt, and still allows us to handle unforeseen priorities as they come up. No biggie.

Unfortunately, I don’t have a crystal ball (although it sure would be nice). I’ve tried various approaches to provide maximum predictability, but in my experience the necessary time commitment isn’t worth the tradeoff vs. more time spent actually building. And honestly, you often end up wrong anyway. Not to mention, you can inadvertently fall into a waterfall approach and lose much of your agility in the process.

So how do you strike the right balance? For us, it’s with a simple capacity planning framework, clear guidance for approaching the unexpected, and keeping an open mind.

In this blog post, I’ll be sharing some insight into what my team and I have developed and found to be helpful at Thumbtack. It’s scientific enough without being overly time-consuming, balances reliable estimates with productive dev time, and provides clarity to everyone involved. Many of its aspects will feel familiar, and that’s by design — lots of techniques out there already work, it’s just about finding the right ones and combining them in a way that works for your situation.

How much work can your team handle?

Having a practical understanding of how much work your team can (and should) handle is critical in setting your team up for success and developing realistic agreements and expectations with your stakeholders. It’s also a very useful point of reference to utilize when dialing in performance, removing and managing distractions, and evaluating how to adjust to new or changing priorities.

To do this you have to plan ahead, so start by estimating your team’s capacity for the entire period. The goal is not to achieve perfect precision — that would take way too much time away from much more valuable work. The focus should be on giving your team and stakeholders a low effort, transparent, and reliable framework to anchor on, and a directionally accurate starting point to fine tune going forward. This will allow you to increment your way toward higher precision over time without sacrificing team velocity or flexibility in the meantime.

To begin, you’ll want to estimate any foreseeable “Unavailable Time” during the period and subtract it from the total potential working hours. This will determine the total capacity your team has for planning. For example:

Now that you have an estimate of your team’s capacity for the period, you’ll want to reserve a percentage of that time for infrastructure and critical unplanned work. At Thumbtack, we try to use 20% and 10% respectively as a starting point, adjusting from there based on outside dependencies and the team’s operational demands. The remaining capacity is your team’s actual availability for project work in that period. For example:

Now, let’s assume you have 5 engineers. If you’re following the example, that amounts to 1,030 hours of total project availability for the Quarter. After you size all the potential work for your team, this number will help inform how much you can commit to for the period. Every team is different, of course, so this example may not be ideal for everyone. Again, use this as a starting point and make adjustments that best reflect reality for your team.

Sprint capacity planning

You can apply the same method to estimate your team’s capacity for an upcoming Sprint to inform what can be committed to and assigned out. For example:

  • Assume the Sprint is two weeks (80 hours per person)
  • Subtract any foreseen Unavailable Time during that period. For this example, we’ll assume the following:
    - 1 company holiday (8 hours per person)
    - No PTO
    - 5 hours/week spent in meetings (10 hours per person)
    - Unavailable Time for the Sprint: 18 hours per person
    - Capacity for the Sprint: 62 hours per person
  • Reserve 10% for operational tasks and smaller unplanned work, and 20% for infra work:
    - Capacity reserved for unplanned work: 6 hours (~10% of 62)
    - Capacity reserved for infra work: 12 hours (~20% of 62)
    - Availability (unreserved Capacity): 44 hours (~70% of 62)

Assuming 5 engineers on the team, that amounts to 220 hours of total project availability for the Sprint. If you have any engineers On Call during the period, adjust your Sprint capacity accordingly. As always, monitor the effectiveness of this over time and iterate as needed.

How much work SHOULD your team handle?

You may observe that loading people up to their greatest capacity is causing other issues, such as lesser quality, longer timelines, or burnout. If you notice this happening, rather than adjusting capacity estimates, think about adjusting your approach to sizing, breaking down, and assigning work. For example:

You may discover your team taking on fewer items after these adjustments, and that’s ok. Think of it as calibrating your team’s workload rather than decreasing their workload — they’re ultimately spending the same amount of time working, they’re just spending it more effectively and sustainably.

Removing and managing distractions

Increase your likelihood of accurate estimates and team productivity by removing and managing distractions effectively. For example, you could:

  • Define, socialize, and standardize a process for all incoming questions and requests of your team to flow through, and then optimize how they’re handled from there (e.g. feed the request into your Sprint process, table it until the next company planning cycle, or handle it yourself). Only pull a team member away from their planned work if it’s absolutely necessary.
  • If it does become necessary to pull a team member away from their work to handle something, create a secondary process to minimize the impact and iterate over time (e.g. funnel to whomever is On Call since their capacity isn’t included in any project availability estimates).

How do you dial this in over time?

It’s really hard to improve what you don’t track in some way. Make sure all of the tasks your team works on, planned and unplanned, are captured in the same place (e.g. Jira) and in a consistent way. This will ensure you have the information you need to identify opportunities and adjust your team’s capacity estimates over time accordingly (e.g. you may need to increase your capacity allocation for operational tasks and smaller unplanned work from 10% to 15%).

Adjusting priorities for larger unplanned work

It’s impossible to anticipate 100% of the work that will arise over a coming period and include it in your plans, and it’s foolish and time consuming to attempt to do so. Hence, the earlier recommendation to reserve ~10% capacity to absorb smaller critical items without jeopardizing larger commitments. But how should you handle larger unplanned work when it comes up? The following process guide is a great method for analyzing the situation, deciding what to do with it, and moving forward productively:

Conclusion

Planning and managing capacity is hard. It looks slightly different for everyone, and will never be a perfect science. However, understanding and optimizing your team’s capacity is a critical component to developing realistic plans, aligned stakeholders, and productive and accountable teams. It may feel daunting at first, but you can accomplish all of this in a way that’s low effort and doesn’t sacrifice velocity or flexibility by implementing a model like the one I’ve shared here and improving it over time.

Interested in staying connected with Thumbtack? Follow us on LinkedIn or check out our latest openings at thumbtack.com/careers.