1. Shrnutí

Čas se neměří, odvozuje se. Nikdo neloguje hodiny. Nikdo nevyplňuje timesheets.

Člověk deklaruje kapacitu na období. Systém identifikuje work items, na nichž se prokazatelně podílel. Kapacita se ex post rozpadá poměrově mezi relevantní items podle Job Size a míry contribution.

Výsledkem je výkaz, který je vedlejším produktem dodávky, ne separátní administrativní aktivitou.

Model poskytuje dva komplementární pohledy na stejná data:

  • Per-person pohled: jak se kapacita člověka rozloží mezi jeho items → výkazy, timesheets
  • Per-item pohled: jak se práce na itemu rozloží mezi lidi → nákladová alokace, audit per deliverable

2. Terminologie

PojemDefiniceKonfigurace
IteraceDelivery cyklus. Stories se plánují, dodávají a uzavírají.1t (AI-native) / 2t (klasicky)
Planning IntervalPlánovací cyklus. Features se plánují, koordinují a vyhodnocují.5t (4+1 IP) / 10t (8+2 IP)
IP IteraceInnovation & Planning iterace na konci PI.Poslední iterace v PI
Job Size (JS)Relativní odhad velikosti work itemu. Upravená Fibonacci.1, 2, 3, 5, 8, 13, 20
WSJFPrioritizační skóre: (BV + TC + RR) / JSPer úroveň nezávisle
CWContribution Weight — míra zapojení osoby na itemu. Nezávisle per osoba.0.15–1.0
Evidence ScoreSurový součet signálů aktivity z GitHub. Detekční vrstva.Automaticky
RSRelevance Signal — normalizovaný signál odvozený z Evidence Score.Automaticky
Derived HoursOdvozené hodiny, výstup modelu.Po Iteration Close
Evidence Score je detekční vrstva → Relevance Signal je matematický vstup → Contribution Weight je podíl → Derived Hours jsou výstup.

3. Architektura modelu

3.1 Tři oddělené vrstvy

VrstvaÚčelKde žije
Operational MetadataŽivá delivery dataGitHub Issues + Projects
Capacity RegistryKapacita lidi, role, FTEYAML / JSON v repo
Evidence & ReportingFrozen snapshoty, výkazy, podpisy/snapshots, /reports, /signed

3.2 Source of truth

GitHub JE source of truth pro: issue hierarchy, ownership, status, Job Size, WSJF inputs, review trail, delivery audit trail.

GitHub NENÍ source of truth pro: hodinovou kapacitu, FTE, derived hours, podpisové stavy. Tyto žijí v evidence vrstvě.

4. Hierarchie work items

Initiative (celý projekt, business case) └── Epic (strategický cíl, 6-9 měsíců) └── Feature (musí se vejít do Planning Intervalu) └── Story (dodáváno v Iteraci) └── Task (technická práce, volitelné)
Initiative
Epic
Feature
Story
Task

Každá úroveň má vlastní nezávislý Job Size a WSJF. Feature WSJF se nepočítá ze Stories pod ní.

ÚroveňJS maxGitHub mapping
Epic20Issue Type: Epic
Feature13Issue Type: Feature
Story (2/10)8Issue Type: Story
Story (1/5)5Issue Type: Story
TaskIssue Type: Task

Nad limitem se item rozpadá. Granularity guardrails vynucují rozumnou granularitu.

WSJF: (BV + TC + RR) / JS BV = Business Value, TC = Time Criticality, RR = Risk Reduction Počítá se per úroveň nezávisle.
BV — Business Value
TC — Time Criticality
RR — Risk Reduction
JS — Job Size

5. Model: Evidence-Driven Proportional Allocation

5.0 Iteration Planning Protocol

Než EDPA odvodí hodiny (ex-post), tým musí naplánovat iteraci (ex-ante). Plánování vyžaduje potvrzenou kapacitu jako vstup.

  1. Potvrdit kapacitu — Každý člen týmu potvrdí dostupnost. Jde o závazek, ne odhad. Externí spolupracovníci vyjednávají alokaci explicitně. Výsledek: availability: confirmed v capacity.yaml.
  2. Vypočítat Planning CapacityPlanning_Capacity = Σ Capacity[P, I] × planning_factor. planning_factor je vlastnost týmu (konfigurováno per tým v capacity.yaml pod teams:). Výchozí: 0.8.
  3. Vybrat práci — Vytáhni stories z prioritizovaného backlogu (WSJF pořadí) dokud Σ JobSize nedosáhne historické velocity × planning_factor. Neplánuj na 100%.
  4. Buffer — Zbylých ~20% absorbuje support, maintenance, incidenty a neplánovanou práci. Pokud buffer položky generují evidenci, EDPA je alokuje normálně.
  5. Edge case — Pokud žádná neplánovaná práce nenastane, veškerá kapacita jde na plánované položky. Garance Σ = Capacity platí vždy.
Proč 80%? Plánování na 100% vynucuje jeden ze tří failure modes: nedodané stories, přetížení, nebo scope creep. Heuristika 80% je konzistentní se SAFe load factor, Scrum velocity-based planning a Kanban WIP limits. Různé týmy si mohou zvolit různé faktory podle svého support loadu a zralosti.

5.1 Vstupy

VstupZdrojPříklad
Capacity[P, I]Potvrzeno při Iteration Planning40h
RelevantItems[P, I]Automaticky z GitHub evidence6 items přes 3 úrovně
JobSize[item]Custom field na issueFibonacci 1–20
CW[P, item]Z evidence / manuální override0.15–1.0
RS[P, item]Normalizováno z Evidence Score0.25–1.0

5.2 Evidence detection

GitHub signalEvidence ScoreTypický CW
Assignee na issue+41.0 (owner)
Explicitní /contribute příkaz+3explicit
PR author referencující item+20.6 (key)
Commit author s ref v message+10.25 (reviewer)
PR reviewer+10.25 (reviewer)
Issue / PR comment+0.50.15 (consulted)
  • Threshold: Evidence Score ≥ 1.0
  • Heuristika: nejsilnější signál → výchozí CW
  • Override: /contribute @osoba weight:0.6
  • Commit count se nepřevádí na čas

5.3 Výpočet — dvě varianty

Auditní varianta (Full): Score[P, item] = JobSize[item] × CW[P, item] × RS[P, item] DerivedHours[P, item] = (Score[P, item] / ΣScores[P, I]) × Capacity[P, I]
Provozní varianta (Simple): Score[P, item] = JobSize[item] × CW[P, item] DerivedHours[P, item] = (Score[P, item] / ΣScores[P, I]) × Capacity[P, I]
Doporučení: začít provozní variantou. Evidence Score a RS zachovat ve snapshotu pro auditní obhajobu.

5.4 Matematická garance

Σ DerivedHours[P, item] = Capacity[P, I] Součet odvozených hodin je přesně kapacita osoby na Iteraci. Platí pro obě varianty. Vždy. Bez výjimky.

6. Dual-view CW: dvě otázky, jeden dataset

CW = 0.25 pro reviewera může znamenat dvě věci. Jsou to dvě různé otázky — model řeší obě ze stejných dat:

Per-person normalizace

Otázka: Jak se kapacita člověka P rozloží mezi jeho items?

DerivedHours[P, item] = (Score[P, item] / Σ Score[P, *]) × Capacity[P, I] Garance: Σ DerivedHours[P, *] = Capacity

Výstup: výkaz per osoba pro OP TAK

Per-item normalizace

Otázka: Jak se práce na itemu X rozloží mezi lidi?

ItemShare[P, item] = DerivedHours[P, item] / Σ DerivedHours[*, item] Garance: Σ podilu na itemu = 100 %

Výstup: nákladová karta per deliverable

PohledOtázkaVýstupGarance
Per-personKolik hodin P strávil na čem?Výkaz, OP TAKΣ = kapacita
Per-itemKolik lidí a hodin stál item X?Nákladová alokaceΣ podilu = 100%

7. Konfigurace kadence

Varianta A: Klasická (2/10)
CyklusDélka1.0 FTE0.50.25
Iterace2 týdny80h40h20h
PI10 týdnů400h200h100h
Varianta B: AI-Native (1/5)
CyklusDélka1.0 FTE0.50.25
Iterace1 týden40h20h10h
PI5 týdnů200h100h50h
Doporučení: začít na A. Po prvním PI vyhodnotit přechod na B na základě velocity a lead time dat.

8. Učící smyčka

Velocity tracking
Story_Velocity = Σ JS uzavřených Stories / iterace Feature_Velocity = Σ JS uzavřených Features / PI Accuracy = Actual / Planned × 100 %
Kalibrace
  • CW: Po 2–3 iteracích vyhodnotit heuristiku. PM podhodnocen? Arch nadhodnocen?
  • Job Size: Referenční Story “3” ≠ Feature “3”. Per úroveň nezávisle.
  • AI: Vykazuješ čas na dodání, ne minuty kódu. AI → velocity, ne výkaz.

9. Implementace v GitHub

9.1 Custom fields

FieldTypHodnoty
Issue TypeIssue typeInitiative, Epic, Feature, Story, Task, Bug
Job SizeNumberFibonacci 1–20
BV / TC / RRNumberFibonacci 1–20
WSJF ScoreNumberAuto (Action)
Planning IntervalIteration5 nebo 10 týdnů
IterationIteration1 nebo 2 týdny
TeamSingle selectTýmové hodnoty
Primary OwnerAssigneeAccountable owner
Co nedržet jako GitHub field: Capacity, Derived Hours, FTE, podpisový stav → patří do evidence vrstvy.

9.2 GitHub Actions

#ActionTriggerFunkce
1WSJF CalculatorField changeAuto-výpočet WSJF
2Contributor DetectorPR merge / reviewDetekce kontributorů + evidence
3Iteration CloseManuální dispatchSnapshot + výkazy (MD/JSON/XLSX) + per-item
4PI CloseManuální dispatchAgregace iterací
5Velocity TrackerIter/PI closeVelocity JSON + dashboard

9.3 Branch naming & DoR

feature/S-200-omop-parser bugfix/S-215-upload-validation feature/F-102-anon-engine

CI check blokuje PR bez reference na issue (S-XXX, F-XXX, E-XXX). DoR: Issue Type, Parent, Job Size, BV+TC+RR, Owner.

10. Výkazy a audit

10.1 Pipeline

/snapshots/ iteration-PI-2026-1.3.json ← frozen snapshot /reports/ iteration-PI-2026-1.3/ vykaz-urbanek.md ← čitelný výkaz vykaz-urbanek.json ← strojová data summary.xlsx ← souhrnný Excel item-costs.xlsx ← per-item pohled /signed/ PI-2026-1.3-urbanek.pdf ← BankID podepsaný

10.2 Freeze rule

Po Iteration Close: snapshot je frozen. Evidence se nepřepisuje in-place. Každá oprava je nová revize. Zásadní pro auditní obhajobu.

10.3 Auditni princip

Průkaznost stojí na 5 pilírich:

  1. GitHub delivery evidence
  2. Capacity registry (YAML)
  3. Frozen snapshot (reprodukovatelný vstup)
  4. Reprodukovatelný výpočet (Score = JS × CW × RS)
  5. Podepsaný výstup (BankID, zákon 21/2020 Sb.)

11. Předpoklady a rizika

Předpoklady
  • Všechny items se uzavírají (nedodané se přesouvají)
  • Kapacita potvrzena při Iteration Planning
  • Branch naming dodržen (CI check)
  • Job Size konzistentní per úroveň
  • CW se kalibruje po prvních iteracích
Rizika
RizikoMitigace
Auditor neuznáMetodika + snapshoty + BankID
CW neodpovidaOverride + kalibrace
Commit bez S-/F-/E-XXXCI check blokuje PR
PM/Arch bez commituComments + /contribute
0 items pro osobuProcesní eskalace

12. Srovnání s alternativami

Fixed Split v1

Předem definované koše (např. 60% Dev, 20% Arch, 20% QA). Hodiny se rozdělují fixně podle role, nezávisle na skutečném příspěvku. Jednoduché, ale nepřesné.

EDPA v1.0.0

Evidence-Driven Proportional Allocation. Hodiny se odvozují automaticky z GitHub delivery evidence (commity, PR, reviews). Matematická garance: Σ = Capacity.

Ruční timesheets

Každý člen týmu ručně vyplňuje hodiny. Subjektivní, administrativně náročné, nemá per-item pohled, neauditovatelné bez doplňkové evidence.

VlastnostFixed Split v1EDPA v1.0.0Ruční timesheets
Fixované košeAnoNeNe
Prázdné úrovněProblémNeexistujíN/A
Per-person pohledAnoAno (primární)Ano
Per-item pohledNeAno (dual-view)Ne
Cross-funkčníOmezenáPlnáPlná
AutomatizaceStředníVysokáŽádná
Mat. garanceSložitějšíNativněNe

13. Implementační plán

FázeČasObsah
Den 16hGitHub org, Projects setup, custom fields
Tyden 13 dnyActions 1–2 (WSJF + Contributor Detector)
Tyden 22 dnyActions 3–5 (Iteration Close + PI Close + Velocity)
Iterace 11–2tPilotní provoz, první výkazy, kalibrace CW
Retro PI 11 denKadence, CW accuracy, velocity, dual-view validace