ЁЯУИ рдзрдбрд╛ 08 тАФ Delivery metrics: DORA four keys, flow, рдЖрдгрд┐ Goodhart's law
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 08 ┬╖ рдорд╛рдЧрдЪрд╛: lesson-07-technical-debt ┬╖ рдкреБрдврдЪрд╛: lesson-09-team-topologies
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 07, рдЖрдгрд┐ delivery system рдЪреЗ рдореЛрдЬрдорд╛рдк. DORA four keys тАФ deployment
frequency, lead time for changes, change failure rate, рдЖрдгрд┐ failed-deployment recovery time тАФ
рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд reliability; cycle time рдЖрдгрд┐ flow efficiency рд╕рд╛рд░рдЦреЗ flow metrics; рдЖрдгрд┐
Goodhart's law, рдореНрд╣рдгрдЬреЗ рдпрд╛рдВрдкреИрдХреА рдХреЛрдгрддреЗрд╣реА рдорд╛рдк target рдмрдирд▓реЗ рдХреА рддреНрдпрд╛рдЪреЗ рдХрд╛рдп рд╣реЛрддреЗ.
metrics() lead/demo.py рдордзреНрдпреЗ; dora() рдЖрдгрд┐ flow()
lead/models.py рдордзреНрдпреЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХреЗрд▓рд╛ рдЬрд╛рдгреВрди рдШреНрдпрд╛рдпрдЪреЗ рдЖрд╣реЗ рдХреА рдЧрдгрд┐рдд рд╡рд┐рднрд╛рдЧ рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рдо рдХрд░рддреЛ рдЖрд╣реЗ рдХрд╛. рдореНрд╣рдгреВрди рддреА рдХрд╛рд╣реА рдЧреЛрд╖реНрдЯреА рдореЛрдЬрддреЗ: рдирд╡реЗ рдзрдбреЗ рдХрд┐рддреА рд╡реЗрд│рд╛ рддрдпрд╛рд░ рд╣реЛрддрд╛рдд, рддреНрдпрд╛рдВрдирд╛ рдХрд┐рддреА рд╡реЗрд│ рд▓рд╛рдЧрддреЛ, рдЖрдгрд┐ рдХрд┐рддреА рд╡реЗрд│рд╛ рдПрдЦрд╛рджрд╛ рдзрдбрд╛ рдЪреБрдХрддреЛ. ЁЯУК
рдЙрдкрдпреЛрдЧреА! рдЬреЛрдкрд░реНрдпрдВрдд рддреА рдЕрд╕реЗ рдореНрд╣рдгрдд рдирд╛рд╣реА: "рдЖрдЬрдкрд╛рд╕реВрди 10 рдкреИрдХреА 1 рдкреЗрдХреНрд╖рд╛ рдХрдореА рдзрдбреЗ рдЪреБрдХрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд."
рдордЧ рдХрд╛рд╣реАрддрд░реА рд╡рд┐рдЪрд┐рддреНрд░ рдШрдбрддреЗ. рд╡рд┐рднрд╛рдЧ рд╕реБрдзрд╛рд░рдд рдирд╛рд╣реА. рдкрдг рдЖрдХрдбрд╛ рд╕реБрдзрд╛рд░рддреЛ. рдПрдЦрд╛рджрд╛ рдзрдбрд╛ рдЪреБрдХрд▓рд╛ рдХреА рд▓реЛрдХ рддреНрдпрд╛рд▓рд╛ "рдирд┐рдпреЛрдЬрд┐рдд рдмрджрд▓" рдореНрд╣рдгреВ рд▓рд╛рдЧрддрд╛рдд. ЁЯЩИ рдЖрдХрдбрд╛ 17% рд╡рд░реВрди 6% рд╡рд░ рдпреЗрддреЛ. рд╡рд┐рджреНрдпрд╛рд░реНрдереНрдпрд╛рдВрдирд╛ рдкреВрд░реНрд╡реАрдЗрддрдХреЗрдЪ рд╡рд╛рдИрдЯ рдзрдбреЗ рдорд┐рд│рд╛рд▓реЗ.
рдордЧ рддреА рдореНрд╣рдгрддреЗ: "рдЖрдгрдЦреА рдзрдбреЗ рд╣рд╡реЗрдд!" рдЖрдгрд┐ рд╡рд┐рднрд╛рдЧ рдкреНрд░рддреНрдпреЗрдХ рдЫреЛрдЯреНрдпрд╛ worksheet рд▓рд╛ "рдзрдбрд╛" рдореНрд╣рдгреВрди рдореЛрдЬреВ рд▓рд╛рдЧрддреЛ. рдЖрдХрдбрд╛ рджреБрдкреНрдкрдЯ рд╣реЛрддреЛ. рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдХрд╛рд╣реАрдЪ рдирд╡реАрди рд╢рд┐рдХрдд рдирд╛рд╣реАрдд. ЁЯУДЁЯУДЁЯУД
рдХрддрд░рд┐рдирд╛ рд╕рдордЬрд╛рд╡рддреЗ: "рдПрдЦрд╛рджрд╛ рдЖрдХрдбрд╛ target рдмрдирд▓рд╛ рдХреА рд▓реЛрдХ рдореЛрдЬрд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдРрд╡рдЬреА рдЖрдХрдбреНрдпрд╛рд╡рд░рдЪ рдХрд╛рдо рдХрд░реВ рд▓рд╛рдЧрддрд╛рдд." рдореНрд╣рдгреВрди рддреА рдЖрдХрдбреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рд╡рд┐рднрд╛рдЧ рдХрд╕рд╛ рдХрд╛рдо рдХрд░рддреЛ рдпрд╛рдмрджреНрджрд▓ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд░рддреЗ тАФ рд╢рд┐рдХреНрд╖рд┐рдХрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХрдзреАрдЪ рдирд╛рд╣реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
l["ЁЯУж 18 deploys in 4 weeks"] --> k["four keys<br/>4.5/week ┬╖ lead 18 h<br/>CFR 16.7% ┬╖ recovery 45 min"]
l --> a["reliability<br/>availability 99.52%"]
k -->|"target: CFR under 10%"| g1["2 failures relabelled<br/>CFR 5.6% ┬╖ availability still 99.52%"]
k -->|"target: deploy more"| g2["18 no-op deploys<br/>9.0/week ┬╖ users see nothing new"]
f["ЁЯМК flow: cycle times 5тАУ12 days<br/>flow efficiency 40%"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/engineering-leadership/lesson-diagrams.html#l08
тЭУ рдХрд╛рдп
- DORA тАФ DevOps Research and Assessment рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ surveys рдЪрд╛ рд╕рд╛рд░рд╛рдВрд╢ Accelerate (Forsgren, Humble рдЖрдгрд┐ Kim, 2018) рдЖрдгрд┐ рджрд░рд╡рд░реНрд╖реАрдЪреНрдпрд╛ State of DevOps reports рдордзреНрдпреЗ рдЖрд╣реЗ. рдпрд╛ рд╕рдВрд╢реЛрдзрдирд╛рдд рджрд┐рд╕рд▓реЗ рдХреА рддреНрдпрд╛рдЪреА рдЪрд╛рд░ delivery рдорд╛рдкреЗ рд╕рдВрд╕реНрдереЗрдЪреНрдпрд╛ рдХрд╛рдордЧрд┐рд░реАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд, рдЖрдгрд┐ рдЪрд╛рдВрдЧрд▓реА рдХрд╛рдордЧрд┐рд░реА рдХрд░рдгрд╛рд▒реНрдпрд╛ рд╕рдВрд╕реНрдерд╛ рд╡реЗрдЧ рдЖрдгрд┐ рд╕реНрдерд┐рд░рддрд╛ рджреЛрдиреНрд╣реАрдВрдд рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЕрд╕рддрд╛рдд тАФ рддреНрдпрд╛рдВрдЪреНрдпрд╛ data рдордзреНрдпреЗ рдпрд╛ рджреЛрдШрд╛рдВрдд рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рджрд┐рд╕рд▓реА рдирд╛рд╣реА. рд╣реЗ correlation рд╡рд░рдЪреЗ survey-рдЖрдзрд╛рд░рд┐рдд рд╕рдВрд╢реЛрдзрди рдЖрд╣реЗ; рдПрдХ рдЖрдХрдбрд╛ рд╣рд▓рд╡рд▓реНрдпрд╛рдиреЗ рдирд┐рдХрд╛рд▓ рдорд┐рд│рддреАрд▓рдЪ рдЕрд╕реЗ рддреЗ рд╡рдЪрди рджреЗрдд рдирд╛рд╣реА.
- The four keys тАФ deployment frequency (production рдордзреНрдпреЗ рдХрд┐рддреА рд╡реЗрд│рд╛ release рдХрд░рддрд╛) ┬╖ lead time for changes (commit рдкрд╛рд╕реВрди production рдордзреНрдпреЗ рдЪрд╛рд▓реВ рд╣реЛрдИрдкрд░реНрдпрдВрдд) ┬╖ change failure rate (fix рд▓рд╛рдЧрдгрд╛рд░реА failure рдирд┐рд░реНрдорд╛рдг рдХрд░рдгрд╛рд▒реНрдпрд╛ deployments рдЪрд╛ рд╡рд╛рдЯрд╛) ┬╖ failed deployment recovery time (рдЕрд╢рд╛ failure рдордзреВрди рд╕рд╛рд╡рд░рд╛рдпрд▓рд╛ рдХрд┐рддреА рд╡реЗрд│ рд▓рд╛рдЧрддреЛ; рдЖрдзреАрдЪреНрдпрд╛ reports рдордзреНрдпреЗ рдпрд╛рд▓рд╛ time to restore service рдореНрд╣рдгрдд). рдкрд╣рд┐рд▓реА рджреЛрди throughput рдЖрд╣реЗрдд; рд╢реЗрд╡рдЯрдЪреА рджреЛрди stability.
- Reliability тАФ DORA рдиреЗ 2021 рдордзреНрдпреЗ рдкрд╛рдЪрд╡реЗ рдорд╛рдк рдореНрд╣рдгреВрди рдЬреЛрдбрд▓реЗ: service рддрд┐рдЪреА рд╕реНрд╡рддрдГрдЪреА reliability targets рдкреВрд░реНрдг рдХрд░рддреЗ рдХрд╛? рд╣рд╛ lab user-impact minutes рд╡рд░реВрди availability рд╡рд╛рдкрд░рддреЛ.
- Flow metrics тАФ рдЯреАрдордордзреВрди рдХрд╛рдо рдХрд╕реЗ рдкреБрдвреЗ рд╕рд░рдХрддреЗ: WIP (work in progress), cycle time (рдПрдХрд╛ рдХрд╛рдорд╛рдЪреА рд╕реБрд░реБрд╡рд╛рдд рддреЗ рд╢реЗрд╡рдЯ), throughput (рдзрдбрд╛ 05), рдЖрдгрд┐ flow efficiency (active time ├╖ elapsed time тАФ рдЙрд░рд▓реЗрд▓рд╛ рд╡реЗрд│ рдореНрд╣рдгрдЬреЗ рд╡рд╛рдЯ рдкрд╛рд╣рдгреЗ). Mik Kersten рдЪреЗ Flow Framework рдЖрдгрд┐ Kanban рдкрджреНрдзрдд рджреЛрдиреНрд╣реА рдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддрд╛рдд.
- Goodhart's law тАФ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░рдЬреНрдЮ Charles Goodhart рдпрд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг (1975); рдкреНрд░рдЪрд▓рд┐рдд рд╢рдмреНрджрд░рдЪрдирд╛ рдорд╛рдирд╡рд╡рдВрд╢рд╢рд╛рд╕реНрддреНрд░рдЬреНрдЮ Marilyn Strathern рдпрд╛рдВрдЪреА рдЖрд╣реЗ: "When a measure becomes a target, it ceases to be a good measure." (рдПрдЦрд╛рджреЗ рдорд╛рдк target рдмрдирд▓реЗ рдХреА рддреЗ рдЪрд╛рдВрдЧрд▓реЗ рдорд╛рдк рд░рд╛рд╣рдд рдирд╛рд╣реА.)
- SPACE тАФ 2021 рдЪрд╛ рдПрдХ framework (Forsgren рдЖрдгрд┐ рд╕рд╣рдХрд╛рд░реА), рдЬреЛ рд╕рд╛рдВрдЧрддреЛ рдХреА developer productivity рд▓рд╛ рдЕрдиреЗрдХ рдмрд╛рдЬреВ рдЖрд╣реЗрдд (satisfaction, performance, activity, communication, efficiency) рдЖрдгрд┐ рдХреЛрдгрддрд╛рд╣реА рдПрдХрдЪ рдЖрдХрдбрд╛ рддреА рдкреВрд░реНрдг рдкрдХрдбреВ рд╢рдХрдд рдирд╛рд╣реА.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдЯреАрдордЪреНрдпрд╛ рдХрд╛рдорд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрддрд▓реЗ рдмрджрд▓ рдорджрдд рдХрд░рдд рдЖрд╣реЗрдд рдХрд╛ рд╣реЗ lead рд▓рд╛ рдХрд│рд╛рдпрд▓рд╛ рд╣рд╡реЗ, рдЖрдгрд┐ рднрд╛рд╡рдирд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдирд╕рддрд╛рдд. Four keys рд╡реНрдпрдХреНрддреАрдВрдЪреЗ рдирд╡реНрд╣реЗ рддрд░ delivery system рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд тАФ рдмрджрд▓ users рдкрд░реНрдпрдВрдд рдХрд┐рддреА рд╡реЗрдЧрд╛рдиреЗ рдЖрдгрд┐ рдХрд┐рддреА рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рдкреЛрд╣реЛрдЪрддрд╛рдд. рдЖрдгрд┐ рдХрд╛рд░рдг рдЙрдкрдпреЛрдЧреА metric рдмрд┐рдШрдбрд╡рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рдЬрд▓рдж рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рд▓рд╛ target рдмрдирд╡реВрди рд▓реЛрдХрд╛рдВрд╢реА рдЬреЛрдбрдгреЗ: рдЯреАрдо рдХрд╕рд╛рд╣реА рдХрд░реВрди рдЖрдХрдбрд╛ рд╕реБрдзрд╛рд░реЗрд▓.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
lead/models.py рдордзреАрд▓ dora(log, weeks) deploys
(lead time hours, failed?, minutes of user impact) рдпрд╛ рд░реВрдкрд╛рдд рдШреЗрддреЗ рдЖрдгрд┐ рдкрд░рдд рджреЗрддреЗ: рдЖрдард╡рдбреНрдпрд╛рдЪреА frequency, median
lead time, change failure rate, failed deploys рдЪрд╛ median recovery time, рдЖрдгрд┐ availability
(1 тИТ impact minutes ├╖ 28 рджрд┐рд╡рд╕рд╛рдВрддрд▓реА minutes). Impact minutes deploy рд▓рд╛ рдХреЛрдгрддреЗрд╣реА рд▓реЗрдмрд▓
рд▓рд╛рд╡рд▓реЗ рддрд░реА рдореЛрдЬрд▓реА рдЬрд╛рддрд╛рдд тАФ рдЖрдгрд┐ рдпрд╛рдЪ рдорд╛рд░реНрдЧрд╛рдиреЗ demo relabelling рдЙрдШрдбреЗ рдкрд╛рдбрддреЛ. flow(items)
(start day, end day, active days) рдШреЗрддреЗ рдЖрдгрд┐ cycle times рд╡ flow efficiency рдкрд░рдд рджреЗрддреЗ.
lead/demo.py рдордзреАрд▓ metrics() рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ log рдЖрдгрд┐ рджреЛрди рдлрд╕рд╡рд▓реЗрд▓реЗ logs рдЪрд╛рд▓рд╡рддреЗ.
рд╣реЗ рдЖрдХрдбреЗ рдПрдХрд╛ system рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд: рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд╛рдзрди, рд▓реЛрдХрд╛рдВрд╕рд╛рдареАрдЪреЗ рд╕реВрддреНрд░ рдирд╡реНрд╣реЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 lead/demo.py metrics
python3 - <<'EOF'
import sys; sys.path.insert(0, "lead"); from models import dora, flow
leads = [20, 6, 30, 52, 8, 4, 26, 72, 10, 14, 5, 28, 48, 9, 22, 3, 16, 40]
fails = {3: 45, 7: 120, 12: 30}
for hidden in (0, 1, 2, 3):
relabel = list(fails)[:hidden]
log = [(l, i in fails and i not in relabel, fails.get(i, 0)) for i, l in enumerate(leads)]
d = dora(log, 4)
print(f"relabel {hidden} of 3 failures тЖТ CFR {d['cfr']:>5.1%} ┬╖ availability {d['availability']:.2%}")
cyc, eff = flow([(0, 5, 2), (1, 9, 3), (2, 4, 2), (3, 15, 4), (5, 8, 2), (6, 16, 3)])
cyc2, eff2 = flow([(0, 3, 2), (1, 5, 3), (2, 4, 2), (3, 8, 4), (5, 7, 2), (6, 10, 3)])
print(f"board A: cycle {cyc} days ┬╖ flow efficiency {eff:.0%}")
print(f"board B: cycle {cyc2} days ┬╖ flow efficiency {eff2:.0%}")
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
metrics рд╣реЗ рдЫрд╛рдкрддреЗ:
deployment frequency 4.5/week ┬╖ lead time for changes (median) 18 h ┬╖ change failure rate 16.7% ┬╖ failed-deploy recovery (median) 45 min ┬╖ availability 99.52%
тФАтФА target 'change failure rate under 10%' тЖТ two failures relabelled 'planned hotfix' тЖТ CFR 5.6% ┬╖ availability still 99.52%
тФАтФА target 'deploy more' тЖТ 18 config-only no-op deploys added тЖТ frequency 9.0/week ┬╖ median lead time 1.8 h ┬╖ users see nothing new
Goodhart's law, in Marilyn Strathern's words: when a measure becomes a target, it ceases to be a good measure
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
relabel 0 of 3 failures тЖТ CFR 16.7% ┬╖ availability 99.52%
relabel 1 of 3 failures тЖТ CFR 11.1% ┬╖ availability 99.52%
relabel 2 of 3 failures тЖТ CFR 5.6% ┬╖ availability 99.52%
relabel 3 of 3 failures тЖТ CFR 0.0% ┬╖ availability 99.52%
board A: cycle [5, 8, 2, 12, 3, 10] days ┬╖ flow efficiency 40%
board B: cycle [3, 4, 2, 5, 2, 4] days ┬╖ flow efficiency 80%
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
Failures рдЪреЗ рд▓реЗрдмрд▓ рдмрджрд▓рд▓реНрдпрд╛рдиреЗ change failure rate 16.7% рд╡рд░реВрди 0.0% рдЭрд╛рд▓рд╛, рдкрдг availability 99.52% рд╡рд░рдЪ рд░рд╛рд╣рд┐рд▓реА тАФ users рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдирд┐рдЯ рдЬрд╛рдгрд╡рд▓реЗ. Log рдордзреНрдпреЗ no-op deploys рднрд░рд▓реНрдпрд╛рдиреЗ deployment frequency рджреБрдкреНрдкрдЯ рдЭрд╛рд▓реА (рдЖрдард╡рдбреНрдпрд╛рд▓рд╛ 4.5 тЖТ 9.0) рдЖрдгрд┐ median lead time 1.8 hours рд╡рд░ рдЖрд▓рд╛, рдкрдг users рд╕рд╛рдареА рдХрд╛рд╣реАрдЪ рдирд╡реАрди рдирд╡реНрд╣рддреЗ. рдореНрд╣рдгреВрдирдЪ рдПрдХрдореЗрдХрд╛рдВрд╡рд┐рд░реБрджреНрдз рдУрдврдгрд╛рд▒реНрдпрд╛ рдорд╛рдкрд╛рдВрдЪреА рдЬреЛрдбреА (рд╡реЗрдЧ рдЖрдгрд┐ рд╕реНрдерд┐рд░рддрд╛), рдЖрдгрд┐ users рдирд╛ рдЬрд╛рдгрд╡рдгрд╛рд░рд╛ рдПрдХ рдкрд░рд┐рдгрд╛рдо, рдпрд╛рдВрдирд╛ рдлрд╕рд╡рдгреЗ рдПрдХрд╛ рдЖрдХрдбреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдХрдареАрдг рдЕрд╕рддреЗ. Flow boards рдЖрдгрдЦреА рдПрдХ рдмрд╛рдЬреВ рджрд╛рдЦрд╡рддрд╛рдд: board A рд╡рд░ рдХрд╛рдорд╛рдВрдиреА рддреНрдпрд╛рдВрдЪрд╛ 60% рд╡реЗрд│ рд╡рд╛рдЯ рдкрд╛рд╣рдгреНрдпрд╛рдд рдШрд╛рд▓рд╡рд▓рд╛.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рдпрд╛ рдЖрдХрдбреНрдпрд╛рдВрдиреА рд╡реНрдпрдХреНрддреАрдВрдЪреА рдХрд┐рдВрд╡рд╛ рдЯреАрдореНрд╕рдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреЗ тАФ рддреЗ systems рдЪреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд, рдЖрдгрд┐ рдЯреАрдореНрд╕ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЕрд╕рддрд╛рдд
- рдПрдХрд╛ metric рд╡рд░ рддреНрдпрд╛рдЪреНрдпрд╛ рдЬреЛрдбреАрджрд╛рд░рд╛рд╢рд┐рд╡рд╛рдп target рдареЗрд╡рдгреЗ (рд╕реНрдерд┐рд░рддреЗрд╢рд┐рд╡рд╛рдп рд╡реЗрдЧ)
- user рд▓рд╛ рджрд┐рд╕рдгрд╛рд▒реНрдпрд╛ рдмрджрд▓рд╛рдВрдРрд╡рдЬреА pipeline runs рдореЛрдЬреВрди deployment frequency рдореЛрдЬрдгреЗ
- рдХреЛрдгреАрдЪ рдЪрд░реНрдЪрд╛ рди рдХрд░рдгрд╛рд░рд╛ dashboard тАФ metrics рддреЗрд╡реНрд╣рд╛рдЪ рдорджрдд рдХрд░рддрд╛рдд рдЬреЗрд╡реНрд╣рд╛ рддреЗ рд╕рдВрд╡рд╛рдж рд╕реБрд░реВ рдХрд░рддрд╛рдд
- рдПрдЦрд╛рджреНрдпрд╛ report рд╕рд╛рдареА рд╡рд░реНрд╖рд╛рддреВрди рдПрдХрджрд╛ рд╣рд╛рддрд╛рдиреЗ рдЖрдХрдбреЗ рдЧреЛрд│рд╛ рдХрд░рдгреЗ
- DORA рдЪреНрдпрд╛ correlations рдирд╛ рд╣рдореА рд╕рдордЬрдгреЗ: рдЖрдХрдбрд╛ рд╕реБрдзрд╛рд░рдгреЗ рдореНрд╣рдгрдЬреЗ system рд╕реБрдзрд╛рд░рдгреЗ рдирд╡реНрд╣реЗ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
Four keys рдкреИрдХреА рдмрд╣реБрддреЗрдХ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдзреАрдЪ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ data рдордзреВрди рдХрд╛рдврддрд╛ рдпреЗрддрд╛рдд: pipeline рдордзреВрди deploy events, git рдордзреВрди commit times, incident tracker рдордзреВрди incidents. рдЦрд▒реНрдпрд╛ repository рд╡рд░, PR рдЙрдШрдбрд▓реНрдпрд╛рдкрд╛рд╕реВрди merge рдкрд░реНрдпрдВрддрдЪрд╛ lead time рд╣рд╛ рдкрд╣рд┐рд▓рд╛ рдвреЛрдмрд│ рддреБрдХрдбрд╛ рдЖрд╣реЗ (рдкреВрд░реНрдг lead time production рдкрд░реНрдпрдВрдд рдЪрд╛рд▓рддреЛ):
gh pr list --state merged --limit 100 --json number,createdAt,mergedAt \
--jq '.[] | "\(.number) \(.createdAt) \(.mergedAt)"'
Deploys рдЖрдгрд┐ failures рдирд╛ рдореВрд│ рдард┐рдХрд╛рдгреАрдЪ tag рдХрд░рд╛, рдореНрд╣рдгрдЬреЗ рдЖрдХрдбреЗ рдХреЛрдгрд╛рдЪреНрдпрд╛ рд▓реЗрдмрд▓рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реАрдд:
# a deploy event your pipeline writes on every production release
deploy:
service: gradebook
sha: 3f9c2e1
commit_time: 2026-09-14T09:12:00Z
deployed_at: 2026-09-14T15:40:00Z
caused_incident: INC-231 # linked by the incident process, not self-reported
Four keys рдЪрд╛ рдЖрдврд╛рд╡рд╛ рдЯреАрдо рдореНрд╣рдгреВрди, рджрд░ рдорд╣рд┐рдиреНрдпрд╛рд▓рд╛, рдПрдХрд╛рдЪ рдкреНрд░рд╢реНрдирд╛рдиреЗ рдШреНрдпрд╛: "рдЖрдкрд▓реНрдпрд╛ system рдордзрд▓реА рдХреЛрдгрддреА рдЧреЛрд╖реНрдЯ рд╣рд╛ рдЖрдХрдбрд╛ рдЕрд╕рд╛ рдмрдирд╡рддреЗ рдЖрд╣реЗ?" рд▓рд╣рд╛рди, рд╡рд╛рд░рдВрд╡рд╛рд░ deploys рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░рдгрд╛рд▒реНрдпрд╛ pipelines рд╕рд╛рдареА CI/CD school рдкрд╛рд╣рд╛, рдЖрдгрд┐ users рдирд╛ рдХрд╛рдп рдЬрд╛рдгрд╡рддреЗ рд╣реЗ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА Observability school рдкрд╛рд╣рд╛.
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: delivery system рдореЛрдЬрд╛, рдПрдХрдореЗрдХрд╛рдВрдирд╛ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдареЗрд╡рдгрд╛рд▒реНрдпрд╛ рдЬреЛрдбреНрдпрд╛рдВрдордзреНрдпреЗ, рдЖрдгрд┐ рдЖрдХрдбреНрдпрд╛рдВрд╡рд░ рдЯреАрдорд╕реЛрдмрдд рдЪрд░реНрдЪрд╛ рдХрд░рд╛. рдЬреНрдпрд╛ рдХреНрд╖рдгреА рдПрдЦрд╛рджрд╛ metric рдХреЛрдгрд╛рдЪреНрдпрд╛ performance review рдордзреНрдпреЗ рдпреЗрддреЛ, рддреНрдпрд╛ рдХреНрд╖рдгреА рддреНрдпрд╛рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдареЗрд╡рдгреЗ рдерд╛рдВрдмрд╡рд╛.
тПня╕П рдкреБрдвреЗ
рднрд╛рдЧ 2 рдкреВрд░реНрдг рдЭрд╛рд▓рд╛: forecasting, prioritisation, debt рдЖрдгрд┐ metrics. рднрд╛рдЧ 3 рдЯреАрдореНрд╕рдЪреНрдпрд╛ рд░рдЪрдиреЗрдмрджреНрджрд▓ рдЖрд╣реЗ тАФ рдЖрдгрд┐ рддреБрдордЪреНрдпрд╛ рд╕рдВрд╕реНрдереЗрдЪрд╛ рдЖрдХрд╛рд░ рд╢реЗрд╡рдЯреА рддреБрдордЪреНрдпрд╛ software рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдд рдХрд╛ рдЙрддрд░рддреЛ.
git checkout lesson-09-team-topologies