チームのスプリントキャパシティ計算:集中係数とポイント
スプリント計画を始める前に、各メンバーの稼働可能時間を現実的なコミットメントへ変換できます。各自の時間を入力し、共通の集中係数を適用すると、チームが実際に使えるキャパシティを時間またはストーリーポイントで算出します。総稼働時間と開発に集中できる時間を分けるため、会議、サポート、調整などの避けられない業務も計画に反映できます。メンバー別の内訳は、チームでの確認や計画表、予測、記録への転記にも役立ちます。
無料で実行
標準勤務時間ではなく実際の稼働時間を入力します
信頼できる予測には、そのスプリントで各メンバーが本当に使える時間が必要です。休暇、祝日、研修、予定済みの用事、オンコール後の休息、別プロジェクトへの割り当てを差し引いてから入力してください。これにより、チームで確認して修正できる透明な基準が得られます。計算では全員が同じ勤務形態であるとは仮定しないため、短時間勤務者、兼任の専門家、フルタイム担当者を同じ計画に含められます。名前は内訳の識別子になるため重複できません。文脈を残す必要がある場合は、稼働可能時間をゼロとして登録することもできます。合計値は、集中係数を適用する前のチームの時間予算です。
集中係数で実際の業務環境を表します
集中係数は、稼働可能時間のうち計画した成果物に使えると見込む割合です。70 パーセントなら、その割合をスプリント作業に充て、残りには会議、レビュー、共同作業、問い合わせ対応、中断などを見込みます。同じ係数を全員に適用し、元の時間と集中可能時間の両方を表示します。可能であれば複数の代表的なスプリント実績から係数を決め、環境が変化した際に見直してください。結成直後のチーム、リリース期間、サポート当番の多い期間では異なる値が適切です。入力できる範囲はゼロから百までです。範囲外の値は自動補正せずエラーにするため、入力ミスによる過大なコミットメントを防げます。
時間またはストーリーポイントを選びます
時間を基準に計画する場合は、出力単位に時間を選択してください。総稼働可能時間に集中係数を掛けた値がキャパシティになります。ストーリーポイントは、集中可能時間と一点の関係をチーム内で安定して運用している場合だけお使いください。このモードでは集中可能時間を一点当たりの時間で割ります。この換算は各チーム固有の計画上の約束であり、普遍的な生産性指標ではありません。別チームとの比較には利用しないでください。内訳には各メンバーの時間と寄与が表示され、チーム合計が計画の主要値になります。小数は保持し、結果は再現可能な方法で小数点以下四桁に丸めます。
活用例
スプリント計画の準備
休暇などを反映した予定から、バックログ選択前に確認できるキャパシティを算出します。
体制変更の試算
兼任者、新メンバー、サポート当番による稼働時間の変化を比較します。
計画条件の記録
稼働時間、集中係数、換算率、個人別寄与をスプリントのコミットメントと共に残します。
よくある質問
集中係数とは何ですか?
通常業務や中断を考慮した後、計画した成果物に使えると見込む稼働時間の割合です。
100 パーセントを超えてもよいですか?
いいえ。0 から 100 までのみ有効で、範囲外は入力エラーになります。
ストーリーポイントはどのように計算しますか?
集中可能なチーム時間を、指定した一点当たり時間で割ります。既定値は六時間です。
チーム間でポイントを比較できますか?
いいえ。この換算はチーム固有であり、生産性を共通尺度にするものではありません。
稼働可能時間から何を除外しますか?
休暇、祝日、研修、他業務への割り当てなど、スプリント中に使えない時間を除いてください。
API 計算の料金はいくらですか?
API リクエスト一回につき $0.002 です。このページ上でも直接計算できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/biz/team-capacity-planning \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"team_members":[{"name":"Avery","available_hours":60},{"name":"Morgan","available_hours":48},{"name":"Riley","available_hours":72}],"focus_factor":70}'const res = await fetch("https://api.kit.forhosting.com/biz/team-capacity-planning", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"team_members": [
{
"name": "Avery",
"available_hours": 60
},
{
"name": "Morgan",
"available_hours": 48
},
{
"name": "Riley",
"available_hours": 72
}
],
"focus_factor": 70
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/team-capacity-planning",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"team_members": [
{
"name": "Avery",
"available_hours": 60
},
{
"name": "Morgan",
"available_hours": 48
},
{
"name": "Riley",
"available_hours": 72
}
],
"focus_factor": 70
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/team-capacity-planning", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"team_members":[{"name":"Avery","available_hours":60},{"name":"Morgan","available_hours":48},{"name":"Riley","available_hours":72}],"focus_factor":70}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"team_members":[{"name":"Avery","available_hours":60},{"name":"Morgan","available_hours":48},{"name":"Riley","available_hours":72}],"focus_factor":70}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/team-capacity-planning", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"team_members": [
{
"name": "Avery",
"available_hours": 60
},
{
"name": "Morgan",
"available_hours": 48
},
{
"name": "Riley",
"available_hours": 72
}
],
"focus_factor": 70
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.team_capacity_planning",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |