GitHub Projects in 2026, Part 5: Sprint Planning with Iterations and Sub-Issues

October 28, 2026
GitHub Projects in 2026, Part 5: Sprint Planning with Iterations and Sub-Issues

This is Part 5 of 6 in the GitHub Projects in 2026 series.
← Previous: Part 4: Taming a Messy Backlog with Issue Types · Next: Part 6: Tracking the Sprint with a Task Board, Hours and Progress →

Shameless plug: Already running your team in GitHub Projects? Honest Cheetah adds AI-assisted backlog refinement and sprint planning, test management, and "when will it be done?" forecasting right inside GitHub, using the data you already have. It measures the system, not the people.

▶ Watch this video on YouTube (opens in a new tab)

Last time, we took a pile of thirty-three items and turned it into an actual backlog, with an issue type on everything. Now it's time to plan the next chunk of it.

We know what we're going to work on, roughly. So which features go into the next sprint, and what are the actual tasks that get them done? In GitHub Projects, that means iterations and sub-issues. That's what this post is about.

TL;DR

  • Iterations live in the iteration field in the project's settings. GitHub creates three two-week iterations for you when you create the project, and adding the next one is one click.
  • The Current iteration view is just a board with an iteration:@current filter on it.
  • Sprint planning answers two questions. What are we going to do? That's features. How are we going to do it? That's tasks.
  • Story points go in the Estimate field, and the column header totals them for the sprint. If you don't use story points, leave the estimate on your features empty.
  • Tasks are sub-issues. The parent card gets a progress bar.
  • A sub-issue doesn't inherit the parent's iteration. Set it, or the task is invisible on the sprint board.

Iterations and the Current Iteration View

Here's our backlog, and everything's got an issue type now: features, bugs, and a couple of tasks. I'm going to guess that a lot of you work in iterations. Maybe you call them sprints. That's the two-week window (or three, or four) where you decide what you're going to work on, plan it out, and then go execute on it.

Across the top of the project, there's a tab called Current iteration. Click it and you get a board. And up in the filter bar, there's the thing that makes it work: iteration:@current.

The Current iteration board with the filter iteration:@current and zero items in Todo, In progress and Done *The Current iteration view. It's a board with iteration:@current in the filter bar, and right now there's nothing in it.*

@current means "whatever iteration today's date falls in." Right now there's nothing in it. Zero items. So let's go see where that actually comes from.

Set Up the Iteration Field

To set up your iterations, or to see how they're already set up, go to the project's three-dot menu and choose Settings. Iteration is one of the fields on the project, so click Iteration in the Fields list.

The Iteration field settings page showing three two-week iterations: Iteration (current, Oct 15 to Oct 28), Iteration 2, Iteration 3 *Settings → Fields → Iteration. GitHub already created three iterations when the project was created.*

When I created this project on October 15th, it created three iterations for me and picked an iteration length of two weeks. So the current iteration is October 15th through the 28th. (Today, when I recorded this, happened to be October 22nd.)

If you want another one, click Add iteration. It's smart enough to pick another two-week iteration starting right after the last one. Click Save.

The Iteration field settings with a fourth iteration added, Nov 26 to Dec 9 *Add iteration picks up right where the last one ended.*

Click More options and you can see what it's thinking: it knows it's a two-week iteration, you could change that to days if you want, and it shows you when your next iteration would start.

The More options panel showing Starts on Dec 10 and Duration 2 weeks *More options: the iteration length and the next start date.*

I didn't change anything there. Back to the project.

Pick the Sprint Features

Back on the backlog, the Iteration column is empty. Nothing's been assigned to an iteration yet.

The first thing I'm going to do is change the filter to type:Feature. When you're doing iteration planning or sprint planning, you're generally picking features. The tasks come later.

The backlog filtered to type:Feature, showing 16 features with an empty Iteration column *Filter the backlog to features before you start picking.*

Let's say we're going to do the top handful of items on this backlog. Typically, when you're doing this, the team has one last discussion about priorities, and it's pretty common to need to switch a few things around. Let's say Accept PayPal payments needs to be the top priority, so I drag it up to the top. And for whatever reason, Support Apple Pay and Google Pay at checkout is lower priority now, so I move that one down. Now the list reflects the agreed-upon priority order: PayPal, then the new logo, then the gift card.

Now go over to the Iteration column on the top row and click the cell. You get the list of iterations, and the one that matches today's date has a little badge on it that says Current.

The Iteration dropdown on the Accept PayPal payments row with Iteration marked Current, plus Iteration 2, 3 and 4 *The iteration picker. The one with the Current badge is the one we're working on.*

That's the one I want, so I pick it.

Rename the First Iteration

One slightly strange thing: the first iteration GitHub creates for you is just called "Iteration," rather than "Iteration 1." Isn't that just kind of wacky? So let's fix that. Back to Settings, Iteration field, click on the name, change it to Iteration 1, and save.

The Iteration field settings with the first iteration's name box selected for editing *Rename the first one to Iteration 1 so it matches the others.*

Back on the backlog, the cell now says Iteration 1. Great.

Put the Next Two In With the Fill Handle

Let's assume we want the next two features in Iteration 1 as well. Same trick as Part 4: grab the little fill handle in the corner of the cell and drag it down two rows. That triggers a bulk update, and now all three features are in Iteration 1.

The backlog with the Iteration cell filled down to three rows and a 'Bulk update completed' toast *Fill handle, drag down, bulk update. Three features in the sprint.*

Flip over to Current iteration and there they are: three features in Todo.

The Current iteration board showing three feature cards in Todo: Accept PayPal payments, Finalize new logo and color assets, Redeem a gift card for an in-store purchase *The sprint has three features in it.*

There's no estimate on them and no detail, but if we open one up, the Projects box on the right shows Iteration 1 and an empty Estimate.

Story Points on Features

A quick word about estimates before we go any further.

Slide: Story Points. 1, 2, 3, 5, 8, 13, 21. Velocity: points delivered per sprint. Remember that 13 from Part 3?

If you're estimating with story points, you're probably picking from the Fibonacci sequence: 1, 2, 3, 5, 8, 13, 21. And I'll bet a lot of you use story points for estimation and velocity for tracking how much got delivered. By the way, that 13 I typed into the Estimate field back in Part 3? That was a story point.

But I have to be honest with you about where I've ended up on all this.

Slide: Where I've Ended Up. I've fallen out of love with story points. Using story points? Party on. Not using them? Leave the feature estimate empty.

I've kind of fallen out of love with story points. These days I pretty much only do throughput and Monte Carlo forecasting, and that's a whole video on its own. (There's also a whole series on flow metrics if you want to go deeper.)

So if you're using story points, party on. It works just fine in GitHub Projects, and you'll see it in a second. And if you're not using story points, just leave the estimate on your features empty. Nothing bad happens.

Ok. That's enough philosophy. Back to the demo.

Putting Points on the Features

I'm probably not going to use Size. But if I'm doing story points, I'd pick a Fibonacci number, like 13, and put it in Estimate on the PayPal feature.

The Accept PayPal payments issue panel with the Projects box showing Status Todo, Estimate, and Iteration 1 (Current) *The Estimate field in the issue panel's Projects box. Story points go here.*

Then Finalize the new logo gets an 8, and Redeem a gift card gets a 5.

Now, I don't necessarily love story point estimation, but it's an extremely common way to estimate your work. So if that's what your team uses, this is where the points go. And notice the column header on the board behind the panel: as you change the estimate values, the Estimate total on the Todo column updates. With all three done, it says 26.

The Current iteration board with the issue panel open and the Todo column header reading Estimate: 26 *The column header adds up the estimates for you. 13 + 8 + 5 = 26.*

So that's three features in the sprint, with estimates on them. And that's really only half of sprint planning.

Features Versus Tasks

If you're working in Scrum or something agile-ish, sprint planning is really about answering two questions.

Slide: Two Questions in Sprint Planning. What? Features. How? Tasks. In the sprint: track the tasks, not the feature.

What are we going to do? That's your product backlog items, your user stories, your features, whatever you call those requirements. We just did that part. Three features are in Iteration 1.

How are we going to do it? This is the one you'd answer in some kind of planning meeting with the team, and it's generally represented by tasks. So what we want to do now is create tasks for each of those requirements.

Here's why that matters. When I'm executing inside of a sprint, I generally don't think about the status of the requirement. I'm thinking about the status of the tasks. The requirement is done when its tasks are done.

In GitHub Projects, the tasks under a feature are called sub-issues. So let's go make some.

Create Sub-Issues

Back on the board, open up Accept PayPal payments. Under the acceptance criteria, there's a button that says Create sub-issue.

The Accept PayPal payments issue panel with the Create sub-issue button and its dropdown: Create sub-issue, Add existing issue, Draft with Copilot *Create sub-issue, add an existing issue, or draft with Copilot. We're doing it by hand.*

Pull the dropdown and you can create a sub-issue, add an existing issue, or draft with Copilot. I'm going to ignore the Copilot stuff and just create it manually.

That opens the Create new sub-issue dialog. Give it a title. The first thing we need to do is Set up PayPal sandbox and API credentials. You can give it a description if you want, but a lot of times a title is enough.

Down along the bottom there's a row of things: assignee, label, issue type, priority, project (it already picked up projects-2026), and milestone. The one I care about is issue type, and I'm picking Task.

The Create new sub-issue dialog with the title filled in, Issue type set to Task, Project set to projects-2026, and the 'Create more sub-issues' checkbox *The sub-issue dialog. Set the issue type to Task and check 'Create more sub-issues' before you click Create.*

Now, I could click Create right now. But I want to create several, so I check Create more sub-issues first. That preserves these settings (the type, the project) when I go to create the next one, and the dialog stays open.

Then I typed in the rest:

  1. Set up PayPal sandbox and API credentials
  2. Add the PayPal button to web checkout
  3. Return to order confirmation after PayPal approval
  4. Handle cancelled and failed PayPal payments
  5. Send back-office refunds back to PayPal
  6. Test checkout and refunds end to end in the sandbox

Six tasks in all. Close the dialog, and now you can see all six sub-issues listed right there on the parent, all tagged as tasks. They all got created in the repo we associated with this project back in Part 3.

The Accept PayPal payments issue panel showing Sub-issues 0 of 6, each tagged Task *Six sub-issues on the parent. 0 of 6 done.*

Click into one of them and you can see it from the other direction: the Parent badge up top says Accept PayPal payments, the parent is listed under Relationships, there's a Development section where you could create a branch for it, and the issue type is Task.

The Set up PayPal sandbox and API credentials task panel showing the Parent badge, Type: Task, and the parent issue under Relationships *From the task you can see the parent. From the parent you can see the tasks.*

Tasks Need the Iteration Too

Close that and look at the board. The PayPal card now has a progress bar on it: 0 / 6. None of the tasks are done yet, which is fair.

The Current iteration board with the Accept PayPal payments card showing a 0/6 progress bar *The parent card gets a progress bar. But where are the tasks?*

But notice something else: those task issues aren't showing up on the board at all. Let's go look into this.

Open the parent, click into the first task, and look at the Projects box on the right. Iteration is not set. That's why it isn't on the current iteration board. The sub-issue did not inherit the iteration from its parent.

The task panel's Projects box showing Status Todo, Estimate empty, and Iteration 'Choose an iteration' *The task has no iteration, so the iteration:@current filter hides it.*

I set it right there (Iteration 1) and closed the panel, and now the board shows four items: three features and one task. But I don't want to do that five more times, so back to the backlog, where I want to bulk-set that field.

On the backlog, expand Accept PayPal payments and it nests all six tasks underneath. Only the first one is in Iteration 1. Click that cell, grab the fill handle, and drag it down over the other five.

The backlog with Accept PayPal payments expanded, six tasks nested under it, and the Iteration cell being filled down *Expand the feature, then fill the iteration down to its tasks.*

Back on Current iteration, the bulk update completes and now everything's there: the three features and the six PayPal tasks.

The Current iteration board with nine items in Todo: three features and the six PayPal tasks, Estimate 26 *Nine items in the sprint: three features and six tasks.*

I'll say this one more time because it's going to bite you: a sub-issue doesn't inherit the parent's iteration. Set it, or the task is invisible on the sprint board. (We'll hit it again in Part 6, and I've got a wish for GitHub about it.)

Recap

So that's sprint planning in GitHub Projects.

  • We set up the iteration field: where the sprints live, how long they are, and how to add the next one.
  • We filtered the backlog to features, had the last-minute priority conversation with drag and drop, and put the top three into the current iteration (with the fill handle for the bulk set).
  • We put story points on the features in the Estimate field and watched the column header total them up.
  • We broke the first feature into six tasks using sub-issues.
  • And we made sure those tasks landed in the iteration, too.

Next time, we turn this into a board the team can actually run the sprint from, put hours on the tasks, and watch the progress roll up to the feature.

Shameless Plug

A lot of what you just watched me do by hand, Honest Cheetah helps you streamline: entering and managing requirements, AI-assisted backlog refinement, and AI-assisted iteration planning. It's also got the tools to answer the important questions like "when will it be done?", plus AI-assisted project coaching, QA testing tools, and the ability to import your work items and test cases from Azure DevOps. Give it a try and let me know what you think.

-Ben

-- Looking for help adopting GitHub Projects for your team or your company? Need an assist getting going with GitHub Actions for automated builds and releases? Want to move your stuff over to GitHub from another service? We can help. Drop us a line at info@benday.com.


GitHub Projects in 2026: The Full Series

Related: