Sprint velocity heatmaps for squad planning
Compare story points by squad and sprint while leaving an open sprint visibly unfinished.
- Rows
- Squad
- Columns
- Sprint
- Value
- Story points → height
The pattern
What the data tells you
Follow each squad across sprints. The missing Data value stays visibly unfinished instead of reading as zero points.
A brick-style 3D matrix gives each squad a row and each sprint a column. Height makes the spread between squads legible; an unknown value can represent a sprint that has not closed yet.
Velocity is a comparison problem. The grid keeps squads and sprint boundaries aligned, while the isometric blocks provide enough visual weight to spot a sustained change without adding a separate chart legend.
Build it in React
From data to heatmap
Prepare your data
A squad-by-sprint matrix of completed points, with missing values for sprints that are still in progress.
Make the component yours
Start with this example. Adjust the labels, colours, and tooltips to fit your product.
import { Heatmap3D } from "@thilakbhat/heatmap-ui";
import "@thilakbhat/heatmap-ui/styles.css";
const points = [
[21, 24, 18, 30, 27],
[12, 15, 20, 17, 22],
[30, 26, 18, 14, null], // sprint still open: unknown, not zero
];
export function SprintVelocity() {
return (
<Heatmap3D
rows={3}
columns={5}
values={points}
blockStyle="lego"
maxHeight={60}
interactive
ariaLabel="Story points by squad and sprint"
/>
);
}A few more details
Common questions
Sprint velocity heatmaps, explained.
What is a sprint velocity heatmap?
A sprint velocity heatmap compares completed story points by squad and sprint, helping engineering leaders see consistency, spread, and sustained changes in delivery capacity.
How do I represent an open sprint in a velocity matrix?
Use an unknown or missing value for a sprint that has not closed. Do not fill it with zero, because an unfinished sprint is not the same as a completed sprint with no points.
Why use a 3D view for engineering velocity?
Height makes differences between squads and sprint periods easier to scan, while the aligned grid keeps the comparison grounded in the original planning dimensions.
Can I visualize story points in a React heatmap?
Yes. Pass a squad-by-sprint matrix to Heatmap3D, use a block style such as lego, and add an accessible label plus an explicit unknown state for incomplete planning periods.