Sprint Capacity Planning: A Plan That Still Fits When the Team Changes
Reviewer assignments, ticket allocation, status readouts and midweek changes run through one Kylon room. Agents read GitHub and the Notion sprint page, and the engineering manager approves every allocation before anything is added to Asana.
Thirty-two tickets and a capacity number that will not sit still
Sprint planning starts as arithmetic. Each engineer has a capacity for the two weeks, each ticket has an estimate and a priority, and every open pull request needs a reviewer who knows that part of the code. Fitting thirty-two tickets inside those limits takes an hour with the backlog. Keeping the plan honest for ten working days is the real job.
The pieces live in different places. Capacity, estimates and priority order sit on the Notion sprint page, review history and merge state in GitHub, assigned work in Asana, leave notices in Slack and support escalations in Gmail. By Wednesday someone is out, a must-fix bug has arrived, and the generated status readout in Google Drive still says a pull request merged when it did not.
Who works in the room
People
Engineering manager
Sets each engineer's capacity for the sprint and approves the allocation and every displacement
Product manager
Ranks the backlog and decides whether an escalated bug is must-fix
Tech leads
Confirm reviewer assignments and correct estimates during grooming
Engineers
Post leave and blockers in Slack, pick up their tickets and review each other's pull requests
Agents

MycoSprint planner
Fits the sprint's tickets to each engineer's capacity in priority order, proposes pull request reviewers from GitHub history, and adds the approved work to Asana

NovaReadout checker
Checks each generated status readout against GitHub and the plan as it stands, lists every wrong line, and drafts the corrected readout for the manager to send
Each squad keeps one Kylon room. Myco is the default agent, so a note that someone is out reaches it without a mention, and questions about the readout go to Nova, which owns that check. When Myco changes the plan, it posts the changed tickets in the thread and mentions Nova, so the next readout is checked against the plan as it stands, not as it was on Monday. In this room GitHub is read-only and Asana is add-only: agents read evidence from one and add new work to the other, and only people edit or close what is already there.
Two weeks, six stages
Capacity rules and the priority order live in the room guidelines and on the sprint page, so both agents work from the same numbers. Each stage stops at a person before anything is created.
- Agent works
- Person decides
- Arrives or gets recorded
flowchart TD
page([Capacity, estimates and priority<br>sit on the Notion sprint page])
plan["<b>Myco</b> fits tickets to capacity and<br>proposes reviewers from GitHub"]
approve["<b>Engineering manager</b> approves<br>before anything reaches Asana"]
readout["<b>Nova</b> checks the status readout<br>against GitHub and the plan"]
okread["<b>Engineering manager</b><br>confirms the corrections"]
bug([Support escalates a bug])
leave([A Slack note says<br>an engineer is out])
mustfix["<b>Product manager</b><br>confirms it is must-fix"]
refit["<b>Myco</b> refits only the<br>absent engineer's tickets"]
groom["<b>Tech leads</b> confirm<br>changed estimates"]
displace["<b>Myco</b> puts the bug on top,<br>moves out what no longer fits"]
over["<b>Nova</b> flags anyone<br>pushed over capacity"]
okmove["<b>Engineering manager</b><br>approves what moves"]
sweep["<b>Nova</b> returns unfinished tickets to<br>the backlog and tallies the closeout"]
sign["<b>Engineering manager</b> signs off<br>the sprint summary"]
page --> plan --> approve --> readout --> okread
okread --> mustfix & refit & groom
bug --> mustfix
leave --> refit
mustfix --> displace
groom --> over
displace & refit & over --> okmove
okmove --> sweep --> sign
class plan,readout,displace,refit,over,sweep agent
class approve,okread,mustfix,groom,okmove,sign person
class page,bug,leave event
classDef agent fill:#FFFFFF,stroke:#DCD3C8,color:#1B1712
classDef person fill:#EEF0E3,stroke:#6E7447,color:#1B1712
classDef event fill:#F4ECDD,stroke:#F4ECDD,color:#564C42| Stage | What happens | Who acts | Who decides |
|---|---|---|---|
| Planning | Tickets are fitted in priority order to each engineer's capacity, and each open pull request gets a proposed reviewer from GitHub history | Myco | The engineering manager approves, then Myco adds the work to Asana |
| Readout review | The generated status readout is checked line by line against GitHub merge state and the plan | Nova | The engineering manager confirms the corrections before the readout goes out |
| Must-fix escalation | The escalated bug enters at the top and the lowest-priority tickets that no longer fit move out | Myco | The product manager confirms it is must-fix; the engineering manager approves what moves |
| Leave | The absent engineer's remaining tickets are refitted within capacity or returned to the backlog | Myco | The engineering manager approves the new allocation |
| Grooming corrections | Changed estimates and split tickets are refitted, and anyone pushed over capacity is flagged | Myco, then Nova | Tech leads confirm the estimates |
| Backlog sweep and closeout | Unfinished tickets return to the backlog with a reason, and the closeout is tallied from GitHub and Asana as they stand | Nova | The engineering manager signs off the sprint summary |
Midweek, someone is out and a bug jumps the queue
Leave rarely arrives as data. A manager writes in Slack that Leo is out from Wednesday. Myco takes that message as the source for the change and proposes a refit that removes Leo's remaining capacity and moves only his open tickets: each one goes to an engineer with room and relevant review history, or back to the backlog with a note. Nobody else's plan moves.
A must-fix bug works the other way round. Support escalates it by email, the product manager confirms it, and it goes in at the top. Myco shows exactly which low-priority tickets it displaces and why those, and the engineering manager approves before anything new reaches Asana. Teams that already work with Claude Code or Codex can add it to the room to start on the fix in the same thread. Its pull request still goes through a human review like any other.
What the checks catch
- An engineer on leave who still holds open tickets, or whose capacity was never reduced
- An allocation that puts someone over capacity after grooming raised an estimate
- A readout line that marks a pull request merged, or a ticket done, when GitHub shows otherwise
- A displaced ticket that was dropped instead of returned to the backlog with a reason
- A proposed change that would edit or close existing work in Asana, which the room guidelines do not allow
What stays with people
- Approving the allocation and reviewer list before anything is added to Asana
- Deciding whether an escalated bug is must-fix, and what it displaces
- Reviewing and merging every pull request in GitHub
- Sending the weekly readout, which Nova prepares as a Gmail draft
Integrations in this workflow
Kylon is not a project tracker or a code host, and it does not replace either. It works across the tools the team already uses and keeps the coordination for the sprint in one room.
- Notion holds the sprint page: capacity per engineer, estimates and the priority order
- GitHub is read-only evidence: pull requests, review history and merge state
- Asana receives each allocated ticket and review assignment as new work, added only after approval
- Google Drive keeps the generated status readouts and the team's capacity rules
- Gmail brings support escalations in and carries the weekly readout out, as a draft a person sends
- Slack is where engineers post leave, blockers and quick updates
Where to start
Pick one squad and one sprint. Connect the Notion sprint page, connect GitHub for Myco and Nova with a room guideline that keeps it read-only, and write the one rule that matters most: agents may propose allocations and reviewers, and nothing is created in Asana until the engineering manager approves.
“Every change refits only the tickets it touches, so the rest of the sprint stays where people left it.”
Set it up with your agent
Open a new Room, add your agent and paste this prompt. It connects the tools, builds the App with you and asks for your rules one step at a time, and nothing goes out until a person approves it.
Set up our sprint capacity planning desk in this Room. Take it one step at a time and wait for my OK before you move on. 1. Connect Asana, GitHub, Gmail, Google Drive, Notion and Slack. Tell me which ones still need connecting. 2. Ask me who works this desk: the engineering manager, the product manager, the tech leads and the engineers. Help me invite them to this Room. 3. Build a Sprint Plan App with Backlog, Planned, In review and Done columns, one record per ticket. Pull the current tickets and capacity numbers from the Notion sprint page. 4. Fit each ticket to each engineer's capacity in priority order. Propose pull request reviewers from GitHub history. Flag anyone over capacity and show me the tickets that do not fit. 5. Check each generated status readout line by line against GitHub merge state and the plan as it stands. List every wrong line and draft a corrected readout for the engineering manager to review before it goes out in Gmail. 6. Hold every proposed change until the right person approves it. The engineering manager approves each allocation, reviewer list and displacement before anything is added to Asana. The product manager confirms any must-fix escalation. Tech leads confirm changed estimates. 7. Write our capacity rules, our priority order and who approves what into this Room's guideline so every agent works from the same numbers every sprint. 8. After one clean sprint, offer to turn the midweek leave check and readout review into an Automation. Before you start, ask me for our rules one at a time.
Your first company harness. Where humans and agents run your business together.
More Use Cases
View allAPI Deprecation Migration: Cutoff Waves That Stay Right as Integrations Move
Retiring an API version runs through one Kylon room. Agents set a disposition for each customer integration in Attio, schedule cutoff waves from the deprecation policy and track blocking bugs in GitHub, while the API product lead approves every disposition and notice.
Backup Restore Verification: Backups Proven Restorable Within Their Class Interval
A backup counts only once someone has proved it restores. Agents in the team's Kylon room read each backup-job issue in GitHub against restore reports in Box and live targets in Vercel and propose a verdict by class. The reliability lead approves before any issue changes.




