ЁЯПл The SchoolтА║ЁЯПЕ Engineering LeadershipтА║ЁЯМ▒ рдзрдбрд╛ 12 тАФ рд▓реЛрдХрд╛рдВрдЪреА рд╡рд╛рдв рдЖрдгрд┐ рдЯрд┐рдХрд╛рдКрдкрдгрд╛ тАФ рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг рдЪрд┐рддреНрд░
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯМ▒ рдзрдбрд╛ 12 тАФ рд▓реЛрдХрд╛рдВрдЪреА рд╡рд╛рдв рдЖрдгрд┐ рдЯрд┐рдХрд╛рдКрдкрдгрд╛ тАФ рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг рдЪрд┐рддреНрд░

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 12 ┬╖ рдорд╛рдЧрдЪрд╛: lesson-11-writing


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбрд╛ 11, рдЖрдгрд┐ рджреАрд░реНрдШрдХрд╛рд▓реАрди рдЦреЗрд│. Career ladders, sponsorship (рджрд┐рд╕рдгрд╛рд▒реНрдпрд╛ рд╕рдВрдзреА рдХреЛрдгрд╛рд▓рд╛ рдорд┐рд│рддрд╛рдд), psychological safety, рдЖрдгрд┐ on-call рд╡ рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╡реЗрд│реЗрдирдВрддрд░рдЪрд╛ рднрд╛рд░ рдпрд╛рдВрд╕рд╛рд░рдЦреЗ burnout рдЪреЗ рдЗрд╢рд╛рд░реЗ тАФ рдЖрдгрд┐ рдордЧ рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕ рдПрдХрд╛ рдкрд╛рдирд╛рд╡рд░. growth() lead/demo.py рдордзреНрдпреЗ; oncall() рдЖрдгрд┐ sponsorship() lead/models.py рдордзреНрдпреЗ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рд╢рд╛рд▓реЗрдп рд╡рд░реНрд╖рд╛рдЪрд╛ рд╢реЗрд╡рдЯ рдЖрд╣реЗ. рдХрддрд░рд┐рдирд╛ рджреЛрди рдпрд╛рджреНрдпрд╛рдВрдХрдбреЗ рдорд╛рдЧреЗ рд╡рд│реВрди рдкрд╛рд╣рддреЗ. ЁЯУЛ

рдкрд╣рд┐рд▓реА рдпрд╛рджреА: рдпрд╛ рд╡рд░реНрд╖реА рд░реЛрдорд╛рдВрдЪрдХ рд╕рдВрдзреА рдХреЛрдгрд╛рд▓рд╛ рдорд┐рд│рд╛рд▓реНрдпрд╛? рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХреЗрд╕рдореЛрд░ рд╕рд╛рджрд░реАрдХрд░рдг. рдкрд░реАрдХреНрд╖рд╛ рдЖрдард╡рдбреНрдпрд╛рдЪреЗ рдиреЗрддреГрддреНрд╡. рдореБрд▓рд╛рдЦрдд panel рд╡рд░ рдмрд╕рдгреЗ. рджреАрдкрд┐рдХрд╛рд▓рд╛ рдкрд╛рдЪ рдорд┐рд│рд╛рд▓реНрдпрд╛. рдРрд╢реНрд╡рд░реНрдпрд╛рд▓рд╛ рдПрдХ. рдореАрд░рд╛ рдЖрдгрд┐ рд▓реАрд▓рд╛рд▓рд╛ рдПрдХрд╣реА рдирд╛рд╣реА.

рдХрддрд░рд┐рдирд╛рдиреЗ рд╣реЗ рдард░рд╡рд▓реЗ рдирд╡реНрд╣рддреЗ. рджреАрдкрд┐рдХрд╛ рдмрд░реАрдЪрд╢реА рдХрддрд░рд┐рдирд╛рд╕рд╛рд░рдЦреА рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдХрддрд░рд┐рдирд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдЖрдзреА рддреАрдЪ рдЖрдард╡рд▓реА. ЁЯЩИ рдкрдг рд╕рдВрдзреАрдВрдордзреВрдирдЪ рд▓реЛрдХ рд╡рд╛рдврддрд╛рдд тАФ рдЖрдгрд┐ рддреНрдпрд╛рдВрддреВрдирдЪ рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрд┐рдХреЗрд▓рд╛ рдХрд│рддреЗ рдХреА рдЖрдгрдЦреА рдЬрдмрд╛рдмрджрд╛рд░реАрд╕рд╛рдареА рдХреЛрдг рддрдпрд╛рд░ рдЖрд╣реЗ.

рджреБрд╕рд░реА рдпрд╛рджреА: gradebook рдмрд┐рдШрдбрд▓реЗ рддреЗрд╡реНрд╣рд╛ рд░рд╛рддреНрд░реА рдлреЛрди рдХреЛрдгрд╛рд▓рд╛ рдЖрд▓реЗ? рдлрдХреНрдд рддрд┐рдШреА рдЖрд│реАрдкрд╛рд│реАрдиреЗ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдРрд╢реНрд╡рд░реНрдпрд╛рд▓рд╛ рд░рд╛рддреНрд░реА рдЙрд╢рд┐рд░рд╛рдЪреЗ 9 рдлреЛрди рдЖрд▓реЗ, рдЖрдгрд┐ рддрд┐рдЪреЗ рджреЛрди рдЖрдард╡рдбреЗ рдЦрд░реЛрдЦрд░рдЪ рдЦреВрдк рд╡рд╛рдИрдЯ рдЧреЗрд▓реЗ. ЁЯМЩ рдХрддрд░рд┐рдирд╛рдЪреНрдпрд╛ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдирд╡реНрд╣рддреЗ, рдХрд╛рд░рдг рдРрд╢реНрд╡рд░реНрдпрд╛рдиреЗ рдХрдзреАрдЪ рддрдХреНрд░рд╛рд░ рдХреЗрд▓реА рдирд╛рд╣реА.

рдореНрд╣рдгреВрди рдХрддрд░рд┐рдирд╛ рджреЛрди рдЧреЛрд╖реНрдЯреА рдмрджрд▓рддреЗ. рдкреБрдврдЪреНрдпрд╛ рд╕рдВрдзреА рддреА рдЬреНрдпрд╛рдВрдирд╛ рдПрдХрд╣реА рдорд┐рд│рд╛рд▓реА рдирд╛рд╣реА рддреНрдпрд╛рдВрдирд╛ рджреЗрддреЗ. рдЖрдгрд┐ рддреА рд░рд╛рддреНрд░реАрдЪреА рдпрд╛рджреА рдореЛрдареА рдХрд░рддреЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╡рд╛рдЬрдгрд╛рд░реЗ alarms рджреБрд░реБрд╕реНрдд рдХрд░рддреЗ тАФ рдореНрд╣рдгрдЬреЗ рд╕рдХрд╛рд│рдкрд░реНрдпрдВрдд рдерд╛рдВрдмреВ рд╢рдХрдгрд╛рд▒реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╕рд╛рдареА рдХреЛрдгрд╛рд▓рд╛рд╣реА рдЙрдард╛рд╡реЗ рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА.

рд╡рд┐рднрд╛рдЧ рддреНрдпрд╛рддрд▓реНрдпрд╛ рд▓реЛрдХрд╛рдВрдЗрддрдХрд╛рдЪ рдЪрд╛рдВрдЧрд▓рд╛ рдЕрд╕рддреЛ тАФ рдпрд╛ рд╡рд░реНрд╖реАрд╣реА рдЖрдгрд┐ рдкреБрдврдЪреНрдпрд╛ рд╡рд░реНрд╖реАрд╣реА.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    o3["ЁЯМЩ on-call, rotation of 3, 13 weeks<br/>Katrina 7 ┬╖ Dipika 3 ┬╖ Aishwarya 9<br/>after-hours pages"] --> sig["тЪая╕П heavy weeks land on<br/>Katrina and Aishwarya"]
    o3 -->|"rotation of 5"| o5["Katrina 5 ┬╖ Dipika 3 ┬╖ Aishwarya 6<br/>Meera 1 ┬╖ Leela 4"]
    o3 -->|"tune the two noisiest alerts"| t["after-hours 19 тЖТ 5 in total"]
    sp["ЁЯМЯ visible opportunities, 6 months<br/>Dipika 5 ┬╖ Aishwarya 1 ┬╖ Meera 0 ┬╖ Leela 0"] --> fix["sponsor on purpose"]

ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/engineering-leadership/lesson-diagrams.html#l12

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

рдХрд╛рд░рдг рдЯреАрдордЪреЗ рдирд┐рдХрд╛рд▓ рдЕрд╢рд╛ рд▓реЛрдХрд╛рдВрдХрдбреВрди рдпреЗрддрд╛рдд рдЬреЗ рдЯрд┐рдХрддрд╛рдд, рд╡рд╛рдврддрд╛рдд рдЖрдгрд┐ рдЬреНрдпрд╛рдВрдЪреНрдпрд╛рдд рдКрд░реНрдЬрд╛ рдЙрд░рд▓реЗрд▓реА рдЕрд╕рддреЗ. рд╡рд╛рдвреАрдЪреНрдпрд╛ рд╕рдВрдзреА рд╕рд╣рд╕рд╛ lead рд▓рд╛ рдЖрдзреА рдЖрдард╡рдгрд╛рд▒реНрдпрд╛ рд╡реНрдпрдХреНрддреАрдХрдбреЗ рдЬрд╛рддрд╛рдд; on-call рдЪрд╛ рддреНрд░рд╛рд╕ рд╕рд╣рд╕рд╛ рд╕рд░реНрд╡рд╛рдд рдХрдореА рддрдХреНрд░рд╛рд░ рдХрд░рдгрд╛рд▒реНрдпрд╛ рд╡реНрдпрдХреНрддреАрд╡рд░ рдкрдбрддреЛ. рдХреЛрдгреА рд╕реЛрдбреВрди рдЬрд╛рдИрдкрд░реНрдпрдВрдд рдпрд╛рдВрдкреИрдХреА рдХрд╛рд╣реАрдЪ delivery metrics рдордзреНрдпреЗ рджрд┐рд╕рдд рдирд╛рд╣реА. рджреЛрдиреНрд╣реАрдВрдЪреА рдиреЛрдВрдж рдареЗрд╡рдгрд╛рд░реА lead рддреЗ рд▓рд╣рд╛рди рдЕрд╕рддрд╛рдирд╛рдЪ рджреБрд░реБрд╕реНрдд рдХрд░реВ рд╢рдХрддреЗ.

ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)

lead/models.py рдордзреАрд▓ oncall(rotation, pages) pages рдЪреЗ рдЖрдард╡рдбреЗ ((total pages, after-hours pages) рдЪреА рдпрд╛рджреА) rotation рдордзреАрд▓ рд▓реЛрдХрд╛рдВрдирд╛ round-robin рдкрджреНрдзрддреАрдиреЗ рд╡рд╛рдЯрддреЗ, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддреАрд╕рд╛рдареА рдкрд░рдд рджреЗрддреЗ: on-call рдЖрдард╡рдбреЗ, рдПрдХреВрдг pages, after-hours pages, рдЖрдгрд┐ 2 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд after-hours pages рдЕрд╕рд▓реЗрд▓реЗ рдЖрдард╡рдбреЗ. sponsorship(log, team) рдкреНрд░рддрд┐ рд╡реНрдпрдХреНрддреА рджрд┐рд╕рдгрд╛рд▒реНрдпрд╛ рд╕рдВрдзреА рдореЛрдЬрддреЗ. lead/demo.py рдордзреАрд▓ growth() 3 рдЬрдгрд╛рдВрдЪреНрдпрд╛ rotation рдЪреА 5 рдЬрдгрд╛рдВрдЪреНрдпрд╛ rotation рд╢реА рддреБрд▓рдирд╛ рдХрд░рддреЗ рдЖрдгрд┐ рд╕рд╣рд╛ рдорд╣рд┐рдиреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдзреА рдореЛрдЬрддреЗ. рд╣реЗ рдЖрдХрдбреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рд╕рд╛рдзрди, рд▓реЛрдХрд╛рдВрд╕рд╛рдареАрдЪреЗ рд╕реВрддреНрд░ рдирд╡реНрд╣реЗ: рдПрдЦрд╛рджреА рд╡реНрдпрдХреНрддреА рдХрдореА pages рдордзреНрдпреЗрд╣реА рдердХрд▓реЗрд▓реА рдЕрд╕реВ рд╢рдХрддреЗ, рдЖрдгрд┐ рдЬрд╛рд╕реНрдд pages рдордзреНрдпреЗрд╣реА рдареАрдХ рдЕрд╕реВ рд╢рдХрддреЗ. рд╡рд┐рдЪрд╛рд░рд╛.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 lead/demo.py growth
python3 - <<'EOF'
import sys; sys.path.insert(0, "lead"); from models import oncall
pages = [(5, 1), (3, 0), (9, 4), (4, 1), (2, 0), (7, 3), (3, 1), (6, 2), (4, 0), (8, 4), (3, 1), (5, 2), (2, 0)]
fixed = [(t, max(0, a - 2)) for t, a in pages]    # the two noisiest after-hours alerts tuned away
for label, pg in (("as it is", pages), ("after alert tuning", fixed)):
    o = oncall(["Katrina", "Dipika", "Aishwarya"], pg)
    print(f"{label:<19} " + " ┬╖ ".join(f"{p} {ah} after-hours, {heavy} heavy wk" for p, (_, _, ah, heavy) in o.items()))
print("total pages in 13 weeks:", sum(t for t, _ in pages), "┬╖ after hours:", sum(a for _, a in pages))
EOF
python3 lead/demo.py
python3 lead/test_lead.py

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

growth рд╣реЗ рдЫрд╛рдкрддреЗ:

тФАтФА on-call, 13 weeks, rotation of 3: Katrina 5 wk / 7 after-hours pages ┬╖ Dipika 4 wk / 3 after-hours pages ┬╖ Aishwarya 4 wk / 9 after-hours pages
тФАтФА on-call, 13 weeks, rotation of 5: Katrina 3 wk / 5 after-hours pages ┬╖ Dipika 3 wk / 3 after-hours pages ┬╖ Aishwarya 3 wk / 6 after-hours pages ┬╖ Meera 2 wk / 1 after-hours pages ┬╖ Leela 2 wk / 4 after-hours pages
   weeks with more than 2 after-hours pages land on: ['Katrina', 'Aishwarya'] тАФ a burnout signal to act on, not a badge
тФАтФА visible opportunities in 6 months: Dipika 5 ┬╖ Aishwarya 1 ┬╖ Meera 0 ┬╖ Leela 0 тАФ sponsorship follows familiarity unless you track it

рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:

as it is            Katrina 7 after-hours, 1 heavy wk ┬╖ Dipika 3 after-hours, 0 heavy wk ┬╖ Aishwarya 9 after-hours, 2 heavy wk
after alert tuning  Katrina 2 after-hours, 0 heavy wk ┬╖ Dipika 0 after-hours, 0 heavy wk ┬╖ Aishwarya 3 after-hours, 0 heavy wk
total pages in 13 weeks: 61 ┬╖ after hours: 19

рдкреВрд░реНрдг demo тЬЕ done тАФ the department runs рдиреЗ рд╕рдВрдкрддреЛ, рдЖрдгрд┐ tests 12/12 passed рдиреЗ.

ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ

рддрд┐рдШреА рдЕрд╕рддрд╛рдирд╛ рдкреНрд░рддреНрдпреЗрдХрдЬрдг 13 рдкреИрдХреА 4тАУ5 рдЖрдард╡рдбреЗ on call рд╣реЛрддреА, рдЖрдгрд┐ rotation рдЪреНрдпрд╛ рдирд╢рд┐рдмрд╛рдиреЗ рдРрд╢реНрд╡рд░реНрдпрд╛рд▓рд╛ 9 after-hours pages рдорд┐рд│рд╛рд▓реЗ рддрд░ рджреАрдкрд┐рдХрд╛рд▓рд╛ 3 тАФ рд╣реЗ рдХреЛрдгреАрдЪ рдирд┐рд╡рдбрд▓реЗ рдирд╡реНрд╣рддреЗ. 5 рдЬрдгрд╛рдВрдЪреНрдпрд╛ rotation рдиреЗ рдкреНрд░рддреНрдпреЗрдХреАрдЪреЗ рдЖрдард╡рдбреЗ 2тАУ3 рд╡рд░ рдЖрдгрд▓реЗ. рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╡рд╛рдЬрдгрд╛рд░реЗ рджреЛрди after-hours alerts tune рдХреЗрд▓реНрдпрд╛рдиреЗ рдХреЛрдгрддреНрдпрд╛рд╣реА rota рдмрджрд▓рд╛рдкреЗрдХреНрд╖рд╛ рдЭреЛрдкреЗрд▓рд╛ рдЬрд╛рд╕реНрдд рдлрд╛рдпрджрд╛ рдЭрд╛рд▓рд╛: after-hours pages 19 рд╡рд░реВрди 5 рд╡рд░ рдЖрд▓реЗ, рдЖрдгрд┐ рдХреЛрдгрддрд╛рд╣реА рдЖрдард╡рдбрд╛ "heavy" рд░рд╛рд╣рд┐рд▓рд╛ рдирд╛рд╣реА. рдЖрдгрд┐ рд╕рд╣рд╛ рдорд╣рд┐рдиреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдзреА 5, 1, 0, 0 рдЕрд╢рд╛ рдЧреЗрд▓реНрдпрд╛ тАФ рд╣рд╛ рдирдореБрдирд╛ рдлрдХреНрдд рдХреЛрдгреАрддрд░реА рддреЛ рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реНрдпрд╛рдореБрд│реЗ рджрд┐рд╕рд▓рд╛.

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд

Sponsorship log рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдзреАрд╕рд╛рдареА рдПрдХ рдУрд│, рджрд░ рддрд┐рдорд╛рд╣реАрд▓рд╛ review рдХреЗрд▓реЗрд▓реА:

| Month | Opportunity                         | Given to | Who else could have? |
|-------|-------------------------------------|----------|----------------------|
| Mar   | present at the leads meeting        | Dipika   | Meera                |
| Apr   | lead the exam-week release          | Dipika   | Aishwarya            |
| May   | demo to the head teacher            | Aishwarya| Leela                |

рджрд░ рдорд╣рд┐рдиреНрдпрд╛рд▓рд╛, рддреБрдордЪреНрдпрд╛ paging tool рдЪреНрдпрд╛ export рдордзреВрди рдПрдХ on-call health рддрдкрд╛рд╕рдгреА:

per person: weeks on call ┬╖ pages ┬╖ after-hours pages ┬╖ weeks with > 2 after-hours pages
per alert:  how often it fired ┬╖ how often someone acted on it   тЖР delete or tune the rest

рджрд░ рддрд┐рдорд╛рд╣реАрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ 1:1 рдордзреНрдпреЗ, ladder рд╕реЛрдмрдд, рджреЛрди рдкреНрд░рд╢реНрди: "рддреБрд▓рд╛ рдЖрдгрдЦреА рдХрд╛рдп рдЬрд╛рд╕реНрдд рдХрд░рд╛рдпрд▓рд╛ рдЖрд╡рдбреЗрд▓?" рдЖрдгрд┐ "рд╕рдзреНрдпрд╛ рддреБрдЭрд╛ рдХрд╛рдорд╛рдЪрд╛ рднрд╛рд░ рдЯрд┐рдХрдгреНрдпрд╛рдЬреЛрдЧрд╛ рдЖрд╣реЗ рдХрд╛?" On-call рдЖрдгрд┐ alert quality рдЪреНрдпрд╛ operations рдмрд╛рдЬреВрд╕рд╛рдареА SRE school рдЖрдгрд┐ Observability school рдкрд╛рд╣рд╛.

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рджрд┐рд╕рдгрд╛рд▒реНрдпрд╛ рд╕рдВрдзреА рдХреЛрдгрд╛рд▓рд╛ рдорд┐рд│рддрд╛рдд рдЖрдгрд┐ рд░рд╛рддреНрд░реА рдХреЛрдгрд╛рд▓рд╛ рдЙрдард╛рд╡реЗ рд▓рд╛рдЧрддреЗ рдпрд╛рдЪреА рдиреЛрдВрдж рдареЗрд╡рд╛, рдХрд╛рд░рдг рджреБрд╕рд░реЗ рдХреЛрдгреАрдЪ рдареЗрд╡рдгрд╛рд░ рдирд╛рд╣реА. рджреЛрдиреНрд╣реА рдПрдХрд╛ рддрд┐рдорд╛рд╣реАрдд рджреБрд░реБрд╕реНрдд рдХрд░рддрд╛ рдпреЗрддрд╛рдд тАФ рдЖрдгрд┐ рдХреЛрдгреА рд░рд╛рдЬреАрдирд╛рдорд╛ рджреЗрдИрдкрд░реНрдпрдВрдд рджреЛрдиреНрд╣реА рдЕрджреГрд╢реНрдп рдЕрд╕рддрд╛рдд.

ЁЯОУ рд╡рд┐рднрд╛рдЧ рдЪрд╛рд▓рддреЛ

рдХрд╛рд╣реА maker time рдЬрдкрд╛, рдХрд╛рд░рдг рдЖрддрд╛ рдХрд╛рдо рдореНрд╣рдгрдЬреЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рднрд╛рдЧ тЖТ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддреАрд▓рд╛ рдирд┐рдпрдорд┐рдд рднреЗрдЯрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдХреГрддреА рдХрд░рддрд╛ рдпреЗрдИрд▓ рдЕрд╕рд╛ feedback рджреНрдпрд╛ (SBI) тЖТ рдкрд░рд┐рдгрд╛рдорд╛рдЪреА рдЬрдмрд╛рдмрджрд╛рд░реА delegate рдХрд░рд╛ рдЖрдгрд┐ bus factor рд╡рд╛рдврд╡рд╛ тЖТ rubric рдЖрдгрд┐ рд╕реНрд╡рддрдВрддреНрд░ рдЧреБрдгрд╛рдВрдиреА hiring рдХрд░рд╛ тЖТ рдЦрд▒реНрдпрд╛ throughput рд╡рд░реВрди ranges рдордзреНрдпреЗ forecast рдХрд░рд╛ тЖТ cost of delay рдиреБрд╕рд╛рд░ рдХрд╛рдорд╛рдЪрд╛ рдХреНрд░рдо рд▓рд╛рд╡рд╛, рдЧреГрд╣реАрддрдХреЗ рдЙрдШрдбрдкрдгреЗ рдорд╛рдВрдбреВрди тЖТ technical debt рдЪреА рдХрд┐рдВрдордд рдард░рд╡рд╛ рдЖрдгрд┐ рдХрд╛рд╣реА debt рдЬрд╛рдгреАрд╡рдкреВрд░реНрд╡рдХ рд╡рд╛рд╣рд╛ тЖТ рд▓реЛрдХрд╛рдВрдЪреЗ рдирд╡реНрд╣реЗ рддрд░ delivery system рдЪреЗ рдореЛрдЬрдорд╛рдк рдХрд░рд╛, рдЖрдгрд┐ Goodhart рдкрд╛рд╕реВрди рд╕рд╛рд╡рдз рд░рд╛рд╣рд╛ тЖТ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╡реНрдпрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ system рд╕рд╛рдареА рдЯреАрдореНрд╕рдЪреА рд░рдЪрдирд╛ рдХрд░рд╛ тЖТ рдЖрдзреА mitigate рдХрд░рд╛, рдЖрдгрд┐ рджрд░рд╡рд╛рдЬрд╛ рдкрд╛рд╣реВрди рдард░рд╡рд╛ тЖТ рд▓рд┐рд╣реВрди рдареЗрд╡рд╛ тЖТ рдЖрдгрд┐ рд▓реЛрдХрд╛рдВрдирд╛ рд╡рд╛рдврдд рдЖрдгрд┐ рд╡рд┐рд╢реНрд░рд╛рдВрдд рдареЗрд╡рд╛. рддреБрдореНрд╣реА рдлрдХреНрдд engineering leadership рд╢рд┐рдХрд▓рд╛ рдирд╛рд╣реАрдд тАФ рддреБрдореНрд╣реА "рдорд▓рд╛ рд╡рд╛рдЯрддреЗ" рд▓рд╛ рдЕрд╢рд╛ рдЧреЛрд╖реНрдЯреАрдд рдмрджрд▓рд╛рдпрд▓рд╛ рд╢рд┐рдХрд▓рд╛рдд рдЬреА рдЯреАрдо рдкрд╛рд╣реВ рд╢рдХрддреЗ, рдЬрд┐рдЪреНрдпрд╛рд╡рд░ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░реВ рд╢рдХрддреЗ рдЖрдгрд┐ рдЬреА рд╕реБрдзрд╛рд░реВ рд╢рдХрддреЗ. ЁЯПЕЁЯОУ

тПня╕П рдкреБрдвреЗ

рдЗрддрд░ schools. SRE school incidents рдЖрдгрд┐ on-call рд╕рдЦреЛрд▓ рд╢рд┐рдХрд╡рддреЗ; CI/CD school four keys рдорд╛рдЧрдЪреНрдпрд╛ pipelines рдмрдирд╡рддреЗ; System Design school рд╣реА рдЯреАрдордЪреНрдпрд╛ рд╕реАрдорд╛рдВрдЪреА architecture рдмрд╛рдЬреВ рдЖрд╣реЗ; School portal рд╡рд░ рдмрд╛рдХреА рд╕рдЧрд│реЗ рдЖрд╣реЗ.

git checkout main
python3 lead/demo.py     # one last run, for fun

ЁЯМ▒ Lesson 12 тАФ Growing people and sustainability тАФ and the whole picture

ЁЯУН You are here: Lesson 12 of 12 ┬╖ Previous: lesson-11-writing


ЁЯУж What's in this branch

Lesson 11, plus the long game. Career ladders, sponsorship (who gets the visible opportunities), psychological safety, and burnout signals such as on-call and after-hours load тАФ and then the whole course on one page. growth() in lead/demo.py; oncall() and sponsorship() in lead/models.py.

ЁЯзТ Explain like I'm 5

It is the end of the school year. Katrina looks back at two lists. ЁЯУЛ

The first list: who got the exciting chances this year? Presenting to the head teacher. Leading exam week. Being on the interview panel. Dipika got five. Aishwarya got one. Meera and Leela got none.

Katrina did not plan that. Dipika is a lot like Katrina, so Katrina thought of her first, every time. ЁЯЩИ But chances are how people grow тАФ and how the head teacher learns who is ready for more.

The second list: who was phoned at night when the gradebook broke? With only three people taking turns, Aishwarya got 9 late-night calls, and two of her weeks were really bad ones. ЁЯМЩ Katrina had not noticed, because Aishwarya never complained.

So Katrina changes two things. She gives the next chances to the people who had none. And she makes the night-time list longer and fixes the noisiest alarms тАФ so nobody is woken for something that could wait until morning.

A department is only as good as the people in it тАФ next year as well as this one.

ЁЯЧ║я╕П Diagram

flowchart LR
    o3["ЁЯМЩ on-call, rotation of 3, 13 weeks<br/>Katrina 7 ┬╖ Dipika 3 ┬╖ Aishwarya 9<br/>after-hours pages"] --> sig["тЪая╕П heavy weeks land on<br/>Katrina and Aishwarya"]
    o3 -->|"rotation of 5"| o5["Katrina 5 ┬╖ Dipika 3 ┬╖ Aishwarya 6<br/>Meera 1 ┬╖ Leela 4"]
    o3 -->|"tune the two noisiest alerts"| t["after-hours 19 тЖТ 5 in total"]
    sp["ЁЯМЯ visible opportunities, 6 months<br/>Dipika 5 ┬╖ Aishwarya 1 ┬╖ Meera 0 ┬╖ Leela 0"] --> fix["sponsor on purpose"]

ЁЯЧ║я╕П Drawn version + a lab: https://school-edh.pages.dev/engineering-leadership/lesson-diagrams.html#l12

тЭУ What

ЁЯдФ Why

Because a team's results come from people who stay, grow and have energy left. Growth opportunities tend to go to whoever the lead thinks of first; on-call pain tends to land on whoever complains least. Neither shows up in delivery metrics until someone leaves. A lead who tracks both can fix them while they are still small.

ЁЯФз How (in this repo)

oncall(rotation, pages) in lead/models.py assigns the weeks of pages (a list of (total pages, after-hours pages)) round-robin to the people in rotation, and returns per person: weeks on call, total pages, after-hours pages, and weeks with more than 2 after-hours pages. sponsorship(log, team) counts visible opportunities per person. growth() in lead/demo.py compares a rotation of 3 with a rotation of 5 and counts six months of opportunities. These numbers are a thinking tool, not a formula for people: a person can be exhausted with few pages, and fine with many. Ask.

ЁЯзк Try it

python3 lead/demo.py growth
python3 - <<'EOF'
import sys; sys.path.insert(0, "lead"); from models import oncall
pages = [(5, 1), (3, 0), (9, 4), (4, 1), (2, 0), (7, 3), (3, 1), (6, 2), (4, 0), (8, 4), (3, 1), (5, 2), (2, 0)]
fixed = [(t, max(0, a - 2)) for t, a in pages]    # the two noisiest after-hours alerts tuned away
for label, pg in (("as it is", pages), ("after alert tuning", fixed)):
    o = oncall(["Katrina", "Dipika", "Aishwarya"], pg)
    print(f"{label:<19} " + " ┬╖ ".join(f"{p} {ah} after-hours, {heavy} heavy wk" for p, (_, _, ah, heavy) in o.items()))
print("total pages in 13 weeks:", sum(t for t, _ in pages), "┬╖ after hours:", sum(a for _, a in pages))
EOF
python3 lead/demo.py
python3 lead/test_lead.py

тЬЕ Verify тАФ what you should see

growth prints:

тФАтФА on-call, 13 weeks, rotation of 3: Katrina 5 wk / 7 after-hours pages ┬╖ Dipika 4 wk / 3 after-hours pages ┬╖ Aishwarya 4 wk / 9 after-hours pages
тФАтФА on-call, 13 weeks, rotation of 5: Katrina 3 wk / 5 after-hours pages ┬╖ Dipika 3 wk / 3 after-hours pages ┬╖ Aishwarya 3 wk / 6 after-hours pages ┬╖ Meera 2 wk / 1 after-hours pages ┬╖ Leela 2 wk / 4 after-hours pages
   weeks with more than 2 after-hours pages land on: ['Katrina', 'Aishwarya'] тАФ a burnout signal to act on, not a badge
тФАтФА visible opportunities in 6 months: Dipika 5 ┬╖ Aishwarya 1 ┬╖ Meera 0 ┬╖ Leela 0 тАФ sponsorship follows familiarity unless you track it

Your snippet prints:

as it is            Katrina 7 after-hours, 1 heavy wk ┬╖ Dipika 3 after-hours, 0 heavy wk ┬╖ Aishwarya 9 after-hours, 2 heavy wk
after alert tuning  Katrina 2 after-hours, 0 heavy wk ┬╖ Dipika 0 after-hours, 0 heavy wk ┬╖ Aishwarya 3 after-hours, 0 heavy wk
total pages in 13 weeks: 61 ┬╖ after hours: 19

The full demo ends with тЬЕ done тАФ the department runs, and the tests with 12/12 passed.

ЁЯПБ What you just proved

With three people, each was on call 4тАУ5 weeks of 13, and the luck of the rotation gave Aishwarya 9 after-hours pages against Dipika's 3 тАФ nobody chose that. A rotation of 5 cut everyone to 2тАУ3 weeks. Tuning the two noisiest after-hours alerts did more for sleep than any rota change: after-hours pages fell from 19 to 5, and no week stayed "heavy". And six months of opportunities went 5, 1, 0, 0 тАФ a pattern only visible because someone wrote it down.

тЪая╕П Common mistakes

ЁЯПн In production

A sponsorship log is one line per opportunity, reviewed every quarter:

| Month | Opportunity                         | Given to | Who else could have? |
|-------|-------------------------------------|----------|----------------------|
| Mar   | present at the leads meeting        | Dipika   | Meera                |
| Apr   | lead the exam-week release          | Dipika   | Aishwarya            |
| May   | demo to the head teacher            | Aishwarya| Leela                |

An on-call health check, from your paging tool's export, every month:

per person: weeks on call ┬╖ pages ┬╖ after-hours pages ┬╖ weeks with > 2 after-hours pages
per alert:  how often it fired ┬╖ how often someone acted on it   тЖР delete or tune the rest

Two questions for every 1:1 each quarter, alongside the ladder: "What would you like to be doing more of?" and "Is your workload sustainable right now?" For the operational side of on-call and alert quality, see the SRE school and the Observability school.

ЁЯПн Why this matters in production: track who gets the visible chances and who gets woken at night, because nobody else will. Both are fixable in a quarter тАФ and both are invisible until someone resigns.

ЁЯОУ The department runs

Protect some maker time, because the job is now the department тЖТ meet each person regularly and give feedback they can act on (SBI) тЖТ delegate the outcome and raise the bus factor тЖТ hire with a rubric and independent scores тЖТ forecast in ranges from real throughput тЖТ order the work by cost of delay, with assumptions in the open тЖТ price technical debt and carry some on purpose тЖТ measure the delivery system, not the people, and beware Goodhart тЖТ shape teams for the system you want тЖТ mitigate first, and decide by the door тЖТ write it down тЖТ and keep people growing and rested. You didn't just learn engineering leadership тАФ you learned to turn "I think" into something a team can see, question and improve. ЁЯПЕЁЯОУ

тПня╕П Next

The other schools. The SRE school covers incidents and on-call in depth; the CI/CD school builds the pipelines behind the four keys; the System Design school is the architecture side of team boundaries; the School portal has the rest.

git checkout main
python3 lead/demo.py     # one last run, for fun
тЖР PreviouswritingFinished! Take the quiz тЖТcheck what stuck

This page is the lesson's README from the lesson-12-growth branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.