895 lines
66 KiB
JSON
895 lines
66 KiB
JSON
{
|
|
"lecture": 11,
|
|
"week": 11,
|
|
"lessons": 3,
|
|
"title": "Lecture 11: The Fit III -- The Measurement Contract, Conway's Law, and the Limits of the Theory",
|
|
"script_reference": "Script: Part IV, Sections 37--39",
|
|
"agenda": [
|
|
"The measurement contract -- step (vii)",
|
|
"Fitness functions: taxonomy and three instrument families",
|
|
"DORA and the coupling finding",
|
|
"The four-layer cascade; the C10 reference contract",
|
|
"Cost of change: Boehm vs Menzies",
|
|
"AI Lens, both axes; the project's contract",
|
|
"Conway's law and Team Topologies",
|
|
"Limits of the theory; Maxim 9",
|
|
"This week's exercise: resilience complete"
|
|
],
|
|
"recap": [
|
|
"Part IV so far: L7 -- three cases, three stages, the procedure, the $7 \\times 10$ matrix, the contract introduced $\\mid$ L8--9 -- Part III, classes C1--C9 $\\mid$ L10 -- hybrids and evolution paths (Segment, Prime Video, Shopify), Maxim 5; the eight-step procedure with ADR-007, Maxim 6 (a response measure turns an opinion into a testable hypothesis); the ten matrix rows cell by cell -- recurring resolution: \\emph{consistent core, asynchronous edges}",
|
|
"Deck 1 (A5) and deck 2 (D9, D11) already named the four DORA metrics, the scaling finding, the \\emph{within}/\\emph{of} cost asymmetry and Conway's law -- today the instrument taxonomy, the numbers and the evidence behind them",
|
|
"The measurement contract is the \\textbf{fifth framework element}; ADR-011 (shown in lecture 3) already ended with an embryonic three-line contract -- its lines correspond to rows 2, 7 and 8 of today's reference contract, the static rule tightened from ``no provider-SDK import'' to ``gateway only via the declared port''",
|
|
"Deck 6: every cell is a \\textbf{default hypothesis}, replaced by measurement once the system exists -- today: how that measurement is organised (steps (vii)--(viii))",
|
|
"Deck 6: \\emph{Conway is a decision filter, not a footnote}, and the evidence base has honest gaps -- today \\S 38 makes the organisation the third party to the fit, \\S 39 turns the gaps into six limits the theory states about itself",
|
|
"Today closes Part IV; next week opens Part V"
|
|
],
|
|
"frames": [
|
|
{
|
|
"no": 1,
|
|
"deck_section": "Title",
|
|
"title": "AISE502: AI in Software Engineering II -- Lecture 11: The Fit III -- The Measurement Contract, Conway's Law, and the Limits of the Theory",
|
|
"kind": "content",
|
|
"script_ref": "title slide; subtitle line: Script: Part IV, Sections 37--39",
|
|
"content": [
|
|
"\\FHGRTitlePage with \\subtitle{Lecture 11: The Fit III -- The Measurement Contract, Conway's Law, and the Limits of the Theory\\\\[0.4ex]{\\small Script: Part IV, Sections 37--39}}",
|
|
"author Dr. Florian Herzog; \\fullname{Fachhochschule Graub\\\"unden, Chur -- Autumn Semester 2026} unchanged from deck 6"
|
|
],
|
|
"elements": [
|
|
"title page macro as in deck 6 (line 117-127 of deck 6 for the subtitle/fullname form)"
|
|
],
|
|
"minutes": 0,
|
|
"notes": "identical preamble and colour mapping to deck 6; subtitle follows the 'Lecture N: <topic> -- <detail>' form of decks 4-6 (single colon)"
|
|
},
|
|
{
|
|
"no": 2,
|
|
"deck_section": "Agenda",
|
|
"title": "Agenda",
|
|
"kind": "agenda",
|
|
"script_ref": "deck skeleton (decks 1-6)",
|
|
"content": [
|
|
"1. \\textbf{The measurement contract} -- step (vii)",
|
|
"2. \\textbf{Fitness functions}: taxonomy and three instrument families",
|
|
"3. \\textbf{DORA} and the coupling finding",
|
|
"4. \\textbf{The four-layer cascade}; the C10 reference contract",
|
|
"5. \\textbf{Cost of change}: Boehm vs Menzies",
|
|
"6. \\textbf{AI Lens}, both axes; the project's contract",
|
|
"7. \\textbf{Conway's law} and Team Topologies",
|
|
"8. \\textbf{Limits of the theory}; Maxim 9",
|
|
"9. \\textbf{This week's exercise}: resilience complete"
|
|
],
|
|
"elements": [
|
|
"enumerate, \\small, itemsep 1pt, bold keyword per line as in deck 6"
|
|
],
|
|
"minutes": 1
|
|
},
|
|
{
|
|
"no": 3,
|
|
"deck_section": "Recap",
|
|
"title": "Recap: where we are",
|
|
"kind": "recap",
|
|
"script_ref": "deck-10 summary frame (L10 plan frame 42, bullets 3, 5 and 7: Maxim 5; Maxim 6; the ten rows -- consistent core, asynchronous edges) and its Maxim-6 keyconcept frame 15 (part4_fit.tex 569-573); deck 6 (summary, 'Four reading rules', 'Reading the catalogue as a whole', 'The evidence base and its honest gaps'); deck 1 A5 frame (lines 555-558); deck 2 D9/D11 frames (lines 323-327, 355-362); deck 3 ADR-011 frame (lines 560-580); semester plan rows 7-10",
|
|
"content": [
|
|
"Part IV so far: L7 -- three cases, three stages, the procedure, the $7 \\times 10$ matrix, the contract introduced $\\mid$ L8--9 -- Part III, classes C1--C9 $\\mid$ L10 -- hybrids and evolution paths (Segment, Prime Video, Shopify), Maxim 5; the eight-step procedure with ADR-007, Maxim 6 (a response measure turns an opinion into a testable hypothesis); the ten matrix rows cell by cell -- recurring resolution: \\emph{consistent core, asynchronous edges}",
|
|
"Deck 1 (A5) and deck 2 (D9, D11) already named the four DORA metrics, the scaling finding, the \\emph{within}/\\emph{of} cost asymmetry and Conway's law -- today the instrument taxonomy, the numbers and the evidence behind them",
|
|
"The measurement contract is the \\textbf{fifth framework element}; ADR-011 (shown in lecture 3) already ended with an embryonic three-line contract -- its lines correspond to rows 2, 7 and 8 of today's reference contract, the static rule tightened from ``no provider-SDK import'' to ``gateway only via the declared port''",
|
|
"Deck 6: every cell is a \\textbf{default hypothesis}, replaced by measurement once the system exists -- today: how that measurement is organised (steps (vii)--(viii))",
|
|
"Deck 6: \\emph{Conway is a decision filter, not a footnote}, and the evidence base has honest gaps -- today \\S 38 makes the organisation the third party to the fit, \\S 39 turns the gaps into six limits the theory states about itself",
|
|
"Today closes Part IV; next week opens Part V"
|
|
],
|
|
"elements": [
|
|
"bullets, \\footnotesize; bullet 1 typeset as three short sub-lines 'L7: ... | L8--9: ... | L10: ...' (as in decks 3 and 5); the L10 sub-line carries the three blocks of deck 10 separated by semicolons (hybrids/evolution + Maxim 5; procedure/ADR-007 + Maxim 6; the ten rows) and may run to two lines"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "one frame only; do not re-teach ADR-011 -- just name the three lines so the eight-row contract on frames 15-16 reads as its completion. The deck-1/deck-2 bullet is what lets frames 11, 18 and 23 carry recap tags. Bullet 1 now mirrors the deck-10 summary (all three blocks of deck 10, Maxims 5 and 6): Maxim 6 -- 'with a response measure and a fitness function it is a testable hypothesis' -- is the direct lead-in to \\S 37 and should be said aloud as the hand-over to frame 5 (step (vii))."
|
|
},
|
|
{
|
|
"no": 4,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "How does a decision made this year stay honest in year five?",
|
|
"kind": "case",
|
|
"script_ref": "\\S 37 opening (part4_fit.tex 654-657)",
|
|
"content": [
|
|
"\\emph{How does a decision made this year stay honest in year five?} (leading question, italic, bankblue -- above the box)",
|
|
"examplebox[Prime Video -- the trigger was a measurement]: What actually triggered the Prime Video re-architecture was \\textbf{not an architecture review but a telemetry signal}: infrastructure cost per stream, measured continuously, crossed what the team was willing to pay",
|
|
"(in the box) That measurement, not an opinion, first \\emph{forced} and then \\emph{vindicated} the redesign",
|
|
"(in the box) The cost dashboard was a \\textbf{fitness function in everything but name}: an objective, continuously evaluated check on an architectural characteristic whose breach converted a running structure from ``accepted'' into ``falsified''",
|
|
"(\\footnotesize text below the box) The empirical anchor for building such checks systematically is DORA: coupling -- this theory's leading dimension -- is a \\textbf{measurable} property; the finding itself: frame 11"
|
|
],
|
|
"elements": [
|
|
"examplebox[Prime Video -- the trigger was a measurement] holding bullets 2-4 (built from the running text of line 657 -- not a script box, see open_issues); leading question above, one \\footnotesize line below"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Students met Prime Video in deck 6 (split D10 cell) and in lecture 10 (evolution path); the new angle here is only the trigger mechanism -- keep it short. The DORA quotation is deliberately withheld until frame 11."
|
|
},
|
|
{
|
|
"no": 5,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Step (vii): the fit becomes a measurement contract",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37 opening (part4_fit.tex 659)",
|
|
"content": [
|
|
"Step (vii) of the procedure generalises the Prime Video observation into a concept -- and it is where this course differs from a classical architecture lecture",
|
|
"The chosen fit is codified as a \\textbf{measurement contract}: the set of \\emph{executable invariants} under which the architecture is allowed to keep evolving",
|
|
"\\emph{``The architecture may change freely as long as the contract stays green''}",
|
|
"What today adds to the week-7 introduction: the instrument taxonomy (37.1), the delivery layer -- DORA (37.2), the four-layer cascade and the C10 reference contract (37.3), the economics -- cost of change (37.4)"
|
|
],
|
|
"elements": [
|
|
"keypoint-style highlighted quotation of the green-contract sentence (line 659)"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "bridge frame; the last bullet is the road map for the next 17 frames. Pick up Maxim 6 from recap bullet 1 verbally: the measurement contract is the set of fitness functions that makes the decision of step (vi) a testable hypothesis -- the recap already named it, this frame gives it its name"
|
|
},
|
|
{
|
|
"no": 6,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Architectural fitness function -- the definition",
|
|
"kind": "definition",
|
|
"script_ref": "\\S 37.1 definitionbox (part4_fit.tex 663-665)",
|
|
"content": [
|
|
"definitionbox[Architectural fitness function] (condensed to the first two sentences): An architectural fitness function is ``any mechanism that provides an objective integrity assessment of some architectural characteristic''. Fitness functions turn quality attributes into \\textbf{executable, objective checks} and thereby move architecture governance from review meetings into the CI/CD pipeline",
|
|
"Classified along two primary dimensions -- \\textbf{scope} and \\textbf{cadence} (mini table below the box):",
|
|
"Scope | \\emph{atomic}: one characteristic in isolation, e.g. a dependency rule as a unit test | \\emph{holistic}: combined characteristics in interplay, e.g. security and data freshness under load",
|
|
"Cadence | \\emph{triggered}: event-based, on every build or deployment | \\emph{continual}: running permanently in operation, e.g. chaos experiments | \\emph{temporal}: time-scheduled, e.g. dependency-freshness time bombs"
|
|
],
|
|
"elements": [
|
|
"definitionbox[Architectural fitness function], first two sentences of lines 663-665, \\footnotesize",
|
|
"footnotesize 2-row mini table Scope: atomic | holistic; Cadence: triggered | continual | temporal, each cell with the script's own example (line 665); booktabs, no vertical rules"
|
|
],
|
|
"minutes": 5,
|
|
"notes": "Replaces the former scope x cadence instrument table: the script classifies scope only for three examples, so the taxonomy is shown once here with the script's examples and not re-applied to instruments it does not classify. Say verbally that the same instrument can run at two cadences -- the latency row of the C10 contract (frame 15) is triggered + continual."
|
|
},
|
|
{
|
|
"no": 7,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Instrument family 1: dependency checks as CI gates",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.1 item 1 (part4_fit.tex 670)",
|
|
"content": [
|
|
"ArchUnit (Java); analogues: NetArchTest (.NET), dependency-cruiser (JavaScript), import-linter (Python)",
|
|
"Rules formulated as \\textbf{unit tests that fail the build on violation}: ``the domain layer imports no framework''; ``no cycles between modules''; ``repositories are called only by services''",
|
|
"Spring Modulith verification does the same for module boundaries \\emph{declared} in a modular monolith",
|
|
"Classification: \\textbf{atomic, triggered}",
|
|
"For the matrix: this is what makes the MM ratings of the capability table \\textbf{enforceable rather than aspirational}",
|
|
"(recap, deck 4) without automated boundary verification, \\emph{boundary erosion} is the documented failure mode of the pattern -- ``the first fitness function most teams ever write''"
|
|
],
|
|
"elements": [
|
|
"three rules as a small grey tcolorbox in \\ttfamily (rendering of the quoted rules, line 670)"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "project item (1) of the projektbox is exactly this family -- say so, show it on frame 22. New here: the classification, the tool analogues per language, and the 'enforceable rather than aspirational' link to the MM column; boundary erosion and 'first fitness function' were taught in deck 4 (lines 505, 523)."
|
|
},
|
|
{
|
|
"no": 8,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Instrument family 2: performance and cost budgets as pipeline gates",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.1 item 2 (part4_fit.tex 671); thresholds from tab:contract (707-726)",
|
|
"content": [
|
|
"Latency thresholds, bundle sizes, or Lighthouse scores are declared in a \\textbf{budget file} and gate the pipeline (Lighthouse CI)",
|
|
"The transfer to Axis B is direct: \\textbf{token-cost budgets} and \\textbf{p95 latency budgets} per AI use case are the same mechanism with new units",
|
|
"In the C10 reference contract the units read: advisory answer p95 $< 20$\\,s end-to-end (triggered $+$ continual); token cost $\\leq$ budget, e.g. CHF~0.40/request at p95 (continual)"
|
|
],
|
|
"elements": [
|
|
"two-column layout: classical budgets (left) vs Axis-B budgets (right), same mechanism arrow between them"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "'Lighthouse CI' is the bib-entry name (google2024lighthouseci) -- keep to that, add no page numbers or further tool names"
|
|
},
|
|
{
|
|
"no": 9,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Instrument family 3: chaos experiments as continual holistic fitness functions",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.1 item 3 (part4_fit.tex 672)",
|
|
"content": [
|
|
"Netflix's \\textbf{Chaos Monkey} terminates production instances to test resilience assumptions \\emph{permanently}",
|
|
"Formalised as the \\emph{principles of chaos engineering}; cited by Ford et al. as the paradigm of a \\textbf{continual, holistic} fitness function",
|
|
"(recap, deck 2 D5) for the matrix: chaos experiments are the instrument that \\textbf{verifies the D5 cells}",
|
|
"\\emph{``A claimed blast radius is a hypothesis until an instance has actually been killed under load''}",
|
|
"In the C10 contract: kill one instance/broker under load -- SLO holds; blast radius $\\leq$ declared"
|
|
],
|
|
"elements": [
|
|
"highlighted quotation (line 672)"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Chaos experiments as the D5 response-measure instrument were taught in deck 2 (D5 frame, lines 265 and 627) -- the new content is the classification and the quotation. Bridge to this week's project work (resilience on all external calls, graceful degradation): the resilience row is the fitness function that would verify it -- mention verbally, the exercise frame carries it."
|
|
},
|
|
{
|
|
"no": 10,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "DORA metrics: the delivery layer",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.2 (part4_fit.tex 677); tab:contract row 'Delivery performance' (707-726); tab:cascade row 'Delivery' (695)",
|
|
"content": [
|
|
"The four DORA metrics measure whether the \\textbf{delivery-relevant promises} of a structure are being kept",
|
|
"Tempo: \\textbf{deployment frequency}; \\textbf{lead time for changes}",
|
|
"Stability: \\textbf{change failure rate}; \\textbf{failed-deployment recovery time}",
|
|
"The central empirical finding: elite performers lead on \\emph{all four} -- tempo and stability are \\textbf{not a trade-off}",
|
|
"In the contract: DORA four keys per deployable unit (tab:cascade: per architecture quantum); example thresholds: change failure rate $< 15\\,\\%$, restore $< 1$ day; cadence continual"
|
|
],
|
|
"elements": [
|
|
"2 x 2 mini table Tempo | Stability with the four metrics (from line 677)"
|
|
],
|
|
"minutes": 4
|
|
},
|
|
{
|
|
"no": 11,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The coupling finding -- the strongest single result in the field",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.2 (part4_fit.tex 677)",
|
|
"content": [
|
|
"(recap tag, one line at the top) deck 2, D9 and D11 already named these -- today the evidence behind them",
|
|
"\\emph{``Loosely coupled architectures and teams are the strongest predictor of continuous delivery''} -- supports coupling as the \\textbf{leading dimension of this entire theory}",
|
|
"(recap, deck 2 D9) 2017 analysis: the architecture characteristics \\textbf{testability and deployability} contributed more to continuous delivery than test and deployment automation itself",
|
|
"Follow-on finding 1: high performance is possible with \\emph{all kinds of systems -- including mainframes} -- provided systems and teams are loosely coupled; the label ``microservices'' is \\textbf{neither necessary nor sufficient}",
|
|
"Follow-on finding 2 (recap, deck 2 D11 / deck 5): as team count grows, deployments per developer per day \\textbf{rise} for high performers and \\textbf{fall} for low performers"
|
|
],
|
|
"elements": [
|
|
"the quotation set as a highlighted line; two follow-on findings as numbered items; recap tag as a \\footnotesize grey line above"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "This is the semester plan's 'Kopplungs-Befund'. Genuinely new on this frame: the verbatim quotation, the mainframe clause and the 'neither necessary nor sufficient' verdict. Connect back to deck 6 D11 row and forward to \\S 38 (frame 27) where the same finding returns as a Conway statement"
|
|
},
|
|
{
|
|
"no": 12,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Honesty requires the caveat: prediction, not proof",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.2 (part4_fit.tex 679)",
|
|
"content": [
|
|
"DORA's evidence is \\textbf{survey-based} and analysed with structural equation models -- \\emph{prediction, not experimental causal proof}",
|
|
"The theory treats it as the \\textbf{best available large-$n$ evidence}",
|
|
"To be \\emph{triangulated} against case studies and the reader's own measurements",
|
|
"Not settled law -- the caveat returns in \\S 39 as limit 4"
|
|
],
|
|
"elements": [
|
|
"hinweisbox built from the running text of line 679 (not a script box, see open_issues)"
|
|
],
|
|
"minutes": 2,
|
|
"notes": "Kept as its own short frame: the deck has exactly 40 frames, the lower bound of the 40-46 band for three lessons, so folding this frame into frame 11 would breach the band. If time must be saved, trim minutes instead -- frame 6 (5 -> 4) and frame 15 (5 -> 4) -- or fold this frame into 11 only together with splitting frame 25 (Team Topologies: four team types / three interaction modes) so the count stays at 40"
|
|
},
|
|
{
|
|
"no": 13,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The four-layer cascade: four falsification questions",
|
|
"kind": "diagram",
|
|
"script_ref": "\\S 37.3 (part4_fit.tex 683); tab:cascade header (685-703)",
|
|
"content": [
|
|
"(one sentence above the diagram) The contract has four layers, forming a \\textbf{cascade from design time to evolution}; each layer answers a different falsification question",
|
|
"(diagram) Design time -- \\emph{is the structure intact?}",
|
|
"(diagram) Delivery -- \\emph{is the structure delivering?}",
|
|
"(diagram) Operation -- \\emph{is the structure keeping its runtime promises?}",
|
|
"(diagram) Evolution -- \\emph{is the structure ageing?}",
|
|
"(one line below the diagram) instruments and example checks per layer: next frame"
|
|
],
|
|
"elements": [
|
|
"tikz: four rounded rectangles in a descending cascade (left-to-right, stepping down), each with layer name and question in italics only; arrows between them; style of the topology figures in deck 6 (bankblue fill, gray arrows)"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "Diagram carries the layer names and questions; no bullet list beside it (deck 6 topology frames: figure + one paragraph). Instruments stay on frame 14."
|
|
},
|
|
{
|
|
"no": 14,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The cascade: instruments and example checks per layer",
|
|
"kind": "table",
|
|
"script_ref": "\\S 37.3 tab:cascade (part4_fit.tex 685-703)",
|
|
"content": [
|
|
"Design time | dependency rules as CI gates; coupling and cohesion metrics; complexity gates | ``the domain layer imports no framework''; ``no cycles between modules''; ``no domain service calls the LLM gateway except via the declared port''",
|
|
"Delivery | the four DORA metrics | deployment frequency, lead time, change failure rate, failed-deployment recovery time -- \\emph{per architecture quantum}",
|
|
"Operation | SLOs and error budgets; latency and \\emph{cost} budgets as pipeline gates; chaos experiments as continual holistic fitness functions | p95 latency budget per scenario; token-cost budget per request; blast-radius drills",
|
|
"Evolution | Lehman indicators; change scatter; technical-debt inventory | complexity trend per module; share of features touching more than two modules; debt-register review"
|
|
],
|
|
"elements": [
|
|
"scriptsize 4-row table Layer | Instruments | Example checks, p{1.8cm} p{5.3cm} p{5.6cm}, booktabs, \\addlinespace between rows -- transcription of tab:cascade without citations; the parenthetical tool list of the design-time cell (ArchUnit, Spring Modulith verify, dependency-cruiser) is dropped pre-emptively -- it is on frame 7"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Long cells: keep no text above or below the table except a one-line caption"
|
|
},
|
|
{
|
|
"no": 15,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The reference contract for C10 (1/2): structure, latency, consistency",
|
|
"kind": "table",
|
|
"script_ref": "\\S 37.3 tab:contract rows 1-4 (part4_fit.tex 705-726)",
|
|
"content": [
|
|
"Intro line: tab:contract instantiates the cascade as the \\textbf{reference contract for the course-project class C10} -- the concrete table that ADR-007 points to",
|
|
"Module boundaries | ArchUnit / Spring Modulith verify: no undeclared cross-module dependency | 0 violations | triggered (every build)",
|
|
"Determinism boundary | static rule: no domain service imports the LLM gateway except via the declared port | 0 violations | triggered",
|
|
"Latency | p95 end-to-end per critical scenario | advisory answer $< 20$\\,s | triggered $+$ continual",
|
|
"Consistency | ledger/audit reconciliation job: booked vs journaled | 0 discrepancies | temporal (daily)"
|
|
],
|
|
"elements": [
|
|
"scriptsize 4-row table Concern | Fitness function | Threshold (example) | Cadence, p{2.4cm} p{5.0cm} p{3.0cm} p{2.4cm}, from tab:contract rows 1-4"
|
|
],
|
|
"minutes": 5,
|
|
"notes": "Two verbal points: (a) the latency row shows the same instrument at two cadences -- triggered in the pipeline and continual in operation; (b) the determinism-boundary row is the CI-enforced form of the exercise sheet's line 'keep the deterministic core free of LLM calls -- this is the line that is graded' -- the contract row permits LLM access via the declared port, the hint forbids LLM calls inside the core; do not present them as identical"
|
|
},
|
|
{
|
|
"no": 16,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The reference contract for C10 (2/2): delivery, resilience, AI correctness, AI cost",
|
|
"kind": "table",
|
|
"script_ref": "\\S 37.3 tab:contract rows 5-8 and eval-harness paragraph (part4_fit.tex 705-726)",
|
|
"content": [
|
|
"Delivery performance | DORA four keys per deployable unit | e.g. change failure rate $< 15\\,\\%$; restore $< 1$ day | continual",
|
|
"Resilience | chaos experiment: kill one instance/broker under load | SLO holds; blast radius $\\leq$ declared | temporal",
|
|
"AI correctness | eval-harness pass rate on golden set plus domain axioms | $\\geq 95\\,\\%$ pass; 0 ontology-violating outputs shipped | triggered (every prompt/model change)",
|
|
"AI cost | token cost per request, per feature | $\\leq$ budget (e.g. CHF~0.40/request at p95) | continual",
|
|
"Below the table: for AI components the contract gains \\textbf{one artefact of the first rank -- the eval harness}: a versioned suite of test cases, scoring logic, and statistical thresholds that runs in CI like a test suite and gates every prompt change, model update, and provider migration; Part V develops it in full"
|
|
],
|
|
"elements": [
|
|
"scriptsize 4-row table, same column widths as frame 15, from tab:contract rows 5-8; one \\footnotesize paragraph on the eval harness (line 705)"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Link verbally: ADR-011's three embryonic lines (shown in lecture 3) correspond to rows 2, 7 and 8 of this table -- the static rule has been tightened from 'no domain module imports the provider SDK' to 'gateway only via the declared port'"
|
|
},
|
|
{
|
|
"no": 17,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The cost of change -- what is flat",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.4 (part4_fit.tex 728-731)",
|
|
"content": [
|
|
"\\emph{Why does the contract matter economically?} (leading question, italic)",
|
|
"The classical answer -- \\textbf{Boehm's cost-of-change escalation}: on waterfall project data of the 1970s, fixing a problem after delivery is up to \\textbf{one hundred times} more expensive than fixing it during requirements and design",
|
|
"Honest qualification: for small, uncritical systems the factor is closer to \\textbf{2:1}",
|
|
"Modern practice has empirically \\textbf{flattened} that curve for changes \\emph{within} an architecture",
|
|
"The largest replication to date -- \\textbf{171 projects from 2006--2014} -- found \\emph{no consistent delayed-issue effect} (Menzies et al. 2017)",
|
|
"Version control, automated tests, and continuous delivery did exactly what the economic argument of Extreme Programming said they would"
|
|
],
|
|
"elements": [
|
|
"two columns: Boehm (1981/2001) -- 100:1, 2:1 | Menzies et al. (2017) -- 171 projects, no consistent delayed-issue effect"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "semester plan: 'Boehm vs. Menzies'; do not add numbers beyond 100x, 2:1, 171, 2006-2014. No cost-curve sketch: the script gives no curve data (see open_issues)"
|
|
},
|
|
{
|
|
"no": 18,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "The cost of change -- what is still steep",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37.4 (part4_fit.tex 733)",
|
|
"content": [
|
|
"The nuance the module insists on: flattened is the curve for changes \\emph{within} an architecture (deck 1, Assumption A5 -- stated then, evidenced now)",
|
|
"For changes \\emph{of} the architecture -- \\textbf{splitting a monolith}, \\textbf{changing the communication paradigm}, \\textbf{moving a data-intensive flow across expensive distributed boundaries} -- the curve remains steep",
|
|
"The evidence is the case studies themselves: Segment's consolidation and Prime Video's rewrite were, at their core, \\textbf{expensive architecture revisions}",
|
|
"This asymmetry is the \\textbf{economic justification of the whole apparatus}: justify the fit \\emph{up front} (architecture revision is the change class that still costs) and keep the architecture \\emph{evolvable under a green contract} (everything else is now cheap to change)"
|
|
],
|
|
"elements": [
|
|
"four \\footnotesize bullets, no figure; the three steep change classes set bold"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "The within/of asymmetry with Segment and Prime Video was stated in deck 1 A5 (line 558); the new material carrying this frame is the three change classes that stay steep and the up-front/evolvable argument. The life-cycle-cost sentence moves to frame 19."
|
|
},
|
|
{
|
|
"no": 19,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Key concept: the contract as a standing experiment",
|
|
"kind": "keyconcept",
|
|
"script_ref": "\\S 37.4 (part4_fit.tex 733) and keypoint (735-737)",
|
|
"content": [
|
|
"(\\footnotesize text above the keypoint) Maintenance and evolution consume roughly \\textbf{40--80\\,\\%} -- typically about \\textbf{60\\,\\%} -- of life-cycle cost, mostly for \\emph{enhancement} rather than repair (deck 1, A5 -- stated then, sourced now); the contract is how a structure \\textbf{earns the right to survive that phase}",
|
|
"(keypoint) The measurement contract converts an architecture decision into a \\textbf{standing experiment}",
|
|
"(keypoint) design-time gates verify the \\emph{structure}; DORA metrics verify the \\emph{delivery}; budgets and chaos experiments verify the \\emph{runtime promises}; Lehman indicators verify the \\emph{ageing}",
|
|
"(keypoint) The cost-of-change curve is \\textbf{flat inside a green contract} and \\textbf{steep across architecture boundaries} -- which is why \\emph{the contract, not the diagram}, is the artefact that protects the investment"
|
|
],
|
|
"elements": [
|
|
"one \\footnotesize paragraph (line 733, last sentence) above; keypoint box condensed from lines 735-737"
|
|
],
|
|
"minutes": 4
|
|
},
|
|
{
|
|
"no": 20,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "AI Lens (Axis A): fitness functions as the operating licence for agents",
|
|
"kind": "ailens",
|
|
"script_ref": "\\S 37 ailinse, Axis A paragraph (part4_fit.tex 739-741)",
|
|
"content": [
|
|
"An agentic coding tool iterating against a dense test suite and CI-enforced architecture rules is \\textbf{contained}",
|
|
"Every generated change must pass the \\emph{same} dependency rules, budgets, and evals as a human change -- the blast radius of ``almost right'' code is bounded by the contract",
|
|
"Without those gates, every agent change is \\textbf{unpriced risk}",
|
|
"The empirical record shows AI adoption \\emph{amplifying} existing delivery dysfunction rather than fixing it (DORA 2025 AI report)",
|
|
"The measurement contract is therefore the prerequisite for raising the change rate by an order of magnitude safely: \\textbf{fitness functions are the operating licence for agents}"
|
|
],
|
|
"elements": [
|
|
"ailinse[Axis A -- fitness functions as the operating licence for agents], condensed from lines 739-741"
|
|
],
|
|
"minutes": 4
|
|
},
|
|
{
|
|
"no": 21,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "AI Lens (Axis B): two new fitness-function types with old mechanics",
|
|
"kind": "ailens",
|
|
"script_ref": "\\S 37 ailinse, Axis B paragraph (part4_fit.tex 741-743)",
|
|
"content": [
|
|
"The contract absorbs AI components through \\textbf{two new fitness-function types with old mechanics}",
|
|
"\\textbf{Eval-harness pass rate}: a \\emph{triggered} gate on every prompt and model change, statistically thresholded",
|
|
"\\textbf{Token-cost budget per request}: a \\emph{continual} gate, exactly analogous to a performance budget",
|
|
"Cost per request is a runtime quality attribute with \\textbf{no counterpart in classical profiles}",
|
|
"Making it a fitness function is what turns FinOps from a \\emph{monthly surprise} into an \\textbf{architectural control loop}"
|
|
],
|
|
"elements": [
|
|
"ailinse[Axis B -- eval pass rate and token budget], condensed from lines 741-743"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Connect to deck 6 C10 profile: D9 = H in its eval reading, D10 = H cost per request -- these are the two rows now measurable"
|
|
},
|
|
{
|
|
"no": 22,
|
|
"deck_section": "The Measurement Contract",
|
|
"title": "Project link: your submission ships its contract",
|
|
"kind": "content",
|
|
"script_ref": "\\S 37 projektbox (part4_fit.tex 745-747)",
|
|
"content": [
|
|
"Your project submission must ship its \\textbf{measurement contract}, not just its architecture -- the repository must contain, \\emph{wired into CI}:",
|
|
"(1) module-boundary verification with \\textbf{zero violations} (ArchUnit or Spring Modulith verify), including the determinism-boundary rule: no domain service reaches the LLM gateway except via its declared port",
|
|
"(2) an eval harness with a versioned golden set and a \\textbf{pass rate $\\geq 95\\,\\%$} gating every prompt or model change",
|
|
"(3) a \\textbf{token-cost budget per request} enforced as a pipeline gate and reported per feature",
|
|
"(4) a p95 latency budget for the advisory scenario (\\textbf{$< 20$\\,s} end-to-end)",
|
|
"(5) the ADR (in MADR form) whose final section \\emph{is} this contract",
|
|
"At the project review you will be asked to demonstrate \\textbf{one contract violation being caught by CI} -- \\emph{a contract that has never failed is a contract that has never been tested}"
|
|
],
|
|
"elements": [
|
|
"projektbox verbatim (condensed) from lines 745-747, \\footnotesize"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "This is the submission requirement for the project review; frame 37 carries this week's tasks (resilience). Keep both -- they answer different questions"
|
|
},
|
|
{
|
|
"no": 23,
|
|
"deck_section": "Conway's Law and Team Topologies",
|
|
"title": "The third fit dimension: why do correct matrix readings still fail?",
|
|
"kind": "content",
|
|
"script_ref": "\\S 38 opening (part4_fit.tex 752-757)",
|
|
"content": [
|
|
"\\emph{Why do correct matrix readings still fail in real organisations?} (leading question, italic)",
|
|
"(recap, deck 2 D11) Conway's law in one sentence, and its consequence: every architecture decision is a team-structure decision -- named there, sourced here",
|
|
"The matrix matches patterns to application classes; D11 (team scaling) has appeared throughout as \\emph{one dimension among twelve} -- this section makes explicit why it is more than that: the organisation is a \\textbf{third party to the fit}, and ignoring it is the most common way correct matrix readings fail in practice",
|
|
"The source is older than every pattern in the matrix -- Conway, 1968 (highlighted line): \\emph{``Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure''}",
|
|
"Named ``Conway's law'' by Brooks (1975); empirically supported by mirroring studies of organisation and product structure (MacCormack et al. 2012)"
|
|
],
|
|
"elements": [
|
|
"the Conway quotation once, as a highlighted line (as on frames 9 and 11) -- no definitionbox is constructed, \\S 38 has no box except the closing keypoint"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "New content on this frame: the verbatim 1968 quotation, Brooks naming it, the MacCormack mirroring evidence, and the 'third party to the fit' framing; the law and its consequence are deck 2 recap"
|
|
},
|
|
{
|
|
"no": 24,
|
|
"deck_section": "Conway's Law and Team Topologies",
|
|
"title": "Every architecture decision is a team-structure decision",
|
|
"kind": "content",
|
|
"script_ref": "\\S 38 (part4_fit.tex 757)",
|
|
"content": [
|
|
"The consequence for this theory is direct: every architecture decision is \\emph{simultaneously} a team-structure decision, whether acknowledged or not",
|
|
"Left column -- \\textbf{a microservices topology assigned to a single five-person team} produces a \\textbf{distributed monolith}: many quanta, one communication structure, the worst cells of \\emph{two} columns at once (recap, deck 5: the distributed monolith and its lockstep-release signature)",
|
|
"Right column -- \\textbf{a modular monolith assigned to thirty independent teams} produces a \\textbf{release-coordination bottleneck} that no amount of code quality repairs"
|
|
],
|
|
"elements": [
|
|
"two-column mirror pair (style of the C1/C2 frame in deck 6): 'MS to one team' | 'MM to thirty teams'; the deck-5 recap tag as a \\footnotesize line under the left column"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Tie to deck 6 Maxim 3 (quantum count): the distributed monolith is 'the worst cells of two columns at once' (cf. Maxim 3) -- keep to the script's phrase; the failure mode is recognised from deck 5 (hinweisbox, line 305), not re-taught"
|
|
},
|
|
{
|
|
"no": 25,
|
|
"deck_section": "Conway's Law and Team Topologies",
|
|
"title": "Team Topologies: four team types, three interaction modes",
|
|
"kind": "table",
|
|
"script_ref": "\\S 38 (part4_fit.tex 759)",
|
|
"content": [
|
|
"Team Topologies (Skelton and Pais 2019) turns the law \\textbf{from a hazard into a design instrument}",
|
|
"Stream-aligned | delivering end-to-end on one value stream",
|
|
"Platform | reduce the load of stream teams",
|
|
"Enabling | build missing capabilities",
|
|
"Complicated-subsystem | encapsulate specialist knowledge -- \\emph{an ML inference subsystem is the canonical course-relevant example}",
|
|
"Three interaction modes: \\textbf{collaboration}, \\textbf{X-as-a-service}, \\textbf{facilitating}",
|
|
"Together: the vocabulary for matching team structure to pattern choice"
|
|
],
|
|
"elements": [
|
|
"footnotesize 4-row table Team type | Role (from line 759); interaction modes as one line below"
|
|
],
|
|
"minutes": 4
|
|
},
|
|
{
|
|
"no": 26,
|
|
"deck_section": "Conway's Law and Team Topologies",
|
|
"title": "Two concepts that bind directly into the matrix",
|
|
"kind": "content",
|
|
"script_ref": "\\S 38 (part4_fit.tex 759)",
|
|
"content": [
|
|
"\\textbf{1. Cognitive load as a design criterion}: team and software boundaries should be cut so that \\emph{no team's cognitive load exceeds its capacity}",
|
|
"``Team-sized software'' is an \\textbf{architectural yardstick}",
|
|
"It explains why the MS column demands stream-aligned teams with full ownership as a \\textbf{precondition, not an outcome} (recap, decks 5 and 6: 'stream-aligned $+$ platform -- a precondition')",
|
|
"\\textbf{2. The inverse Conway manoeuvre}: deliberately structure the organisation to mirror the \\emph{target} architecture",
|
|
"-- so that Conway's law works \\emph{for} the design instead of against it"
|
|
],
|
|
"elements": [
|
|
"two numbered blocks; optional small tikz: organisation box mirrored onto target-architecture box with a reversed arrow labelled 'inverse Conway manoeuvre'"
|
|
],
|
|
"minutes": 3
|
|
},
|
|
{
|
|
"no": 27,
|
|
"deck_section": "Conway's Law and Team Topologies",
|
|
"title": "The empirical anchor -- and the contested rows D11 decides",
|
|
"kind": "content",
|
|
"script_ref": "\\S 38 (part4_fit.tex 761)",
|
|
"content": [
|
|
"The DORA scaling finding, read again: loose coupling of \\emph{architectures and teams} -- measured \\textbf{jointly}, which is itself a Conway statement -- is the strongest predictor of continuous delivery",
|
|
"It is the mechanism that lets deployments per developer per day \\textbf{scale linearly with team count}",
|
|
"The matrix encodes the organisational variable in D11; the class rationales repeatedly show it \\emph{deciding contested rows} (table)",
|
|
"No twelve-dimensional profile fully captures an organisation (limit 5 in \\S 39) -- but the rule of thumb is teachable"
|
|
],
|
|
"elements": [
|
|
"footnotesize table Class | same profile | smaller organisation | larger organisation -- C1: LMAX single-threaded core | Monzo 2,800 services (different organisation sizes); C5: Shopify modular monolith | Amazon microservices (along team count, not traffic) -- from line 761; the table carries the two cases, no bullets repeat them"
|
|
],
|
|
"minutes": 3
|
|
},
|
|
{
|
|
"no": 28,
|
|
"deck_section": "Conway's Law and Team Topologies",
|
|
"title": "Key concept: the fit is three-way",
|
|
"kind": "keyconcept",
|
|
"script_ref": "\\S 38 keypoint (part4_fit.tex 763-765)",
|
|
"content": [
|
|
"The fit is three-way: \\textbf{pattern $\\leftrightarrow$ application class $\\leftrightarrow$ team structure}",
|
|
"\\textbf{Check D11 last but veto on it first}: a pattern whose team precondition is not met -- microservices without stream-aligned ownership, a monolith across too many coordinating teams -- will fail regardless of how well the other eleven dimensions match",
|
|
"If the target architecture and the organisation disagree: either apply the \\textbf{inverse Conway manoeuvre} or \\textbf{change the target}",
|
|
"\\emph{Conway's law does not negotiate}"
|
|
],
|
|
"elements": [
|
|
"tikz triangle: three nodes 'pattern C(p)', 'application class R(a)', 'team structure' with double arrows; keypoint box below condensed from lines 763-765"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "Explain 'check last, veto first': D11 is checked last in the twelve-row profile walk-through but is the first veto to apply in practice"
|
|
},
|
|
{
|
|
"no": 29,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Limit 1: ordinal scales, no arithmetic",
|
|
"kind": "content",
|
|
"script_ref": "\\S 39 opening and item 1 (part4_fit.tex 770-776)",
|
|
"content": [
|
|
"(lead-in line, italic) \\emph{A theory whose declared standard is that unfalsifiable claims have no place in architecture decisions must state how it can itself mislead.} Six limits, stated plainly -- the first:",
|
|
"The ratings support \\textbf{rankings and exclusions, never percentages}",
|
|
"Any weighted-sum reading of the matrix imports the documented defects of additive multi-criteria methods over ordinal data (grid):",
|
|
"(grid) \\textbf{rank reversal} (Belton and Gear 1983) | \\textbf{axiomatic conflict with utility theory} (Dyer 1990) | \\textbf{scale misinterpretation} (Bana e Costa and Vansnick 2008) | \\textbf{pseudo-precision} -- priorities with three decimal places from coarse verbal comparisons",
|
|
"We keep the \\emph{explication discipline} of multi-criteria decision analysis and drop its \\emph{arithmetic pretensions}",
|
|
"\\textbf{Sensitivity analysis is mandatory, not decorative}; unstable rankings are \\emph{findings} (tradeoff points), not errors"
|
|
],
|
|
"elements": [
|
|
"lead-in line from lines 772-773 (replaces the former overview frame); four defects as a 2 x 2 grid of short labelled cells (replaces the former bullet list of the four names)"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Students met 'beware pseudo-precision' in deck 3; here the literature names are new -- keep to the four names, no further explanation is in the script. The six-limit overview appears once, on the consolidation table (frame 33)."
|
|
},
|
|
{
|
|
"no": 30,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Limits 2 and 3: context-dependent cells, hybrids as the normal case",
|
|
"kind": "content",
|
|
"script_ref": "\\S 39 items 2-3 (part4_fit.tex 777-778)",
|
|
"content": [
|
|
"\\textbf{Limit 2.} Every capability cell encodes a \\emph{typical} workload",
|
|
"the serverless cost cell literally inverts with load shape (Prime Video); the layered read-scalability cell inverts with cache-friendliness (Stack Overflow)",
|
|
"skilled teams can move individual cells -- LMAX and Monzo both did",
|
|
"a rating is a \\textbf{default hypothesis} to be replaced by measurement in step (viii); \\emph{the matrix predicts the default, not the exceptional}",
|
|
"\\textbf{Limit 3.} Eight of ten class recommendations involve a core pattern plus different edge patterns",
|
|
"the matrix is defined over \\textbf{subsystems}; applying it to a whole enterprise in one stroke is a \\emph{category error the theory explicitly forbids}"
|
|
],
|
|
"elements": [
|
|
"two labelled blocks, \\footnotesize"
|
|
],
|
|
"minutes": 4
|
|
},
|
|
{
|
|
"no": 31,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Limit 4: the evidence base is heterogeneous",
|
|
"kind": "table",
|
|
"script_ref": "\\S 39 item 4 (part4_fit.tex 779)",
|
|
"content": [
|
|
"(table) Star ratings (Richards and Ford) | expert judgement | not measurements",
|
|
"(table) DORA | survey-based prediction | not causal proof",
|
|
"(table) Case studies | self-reported engineering blogs | selection and framing bias",
|
|
"(table, last line) Hexagonal and serverless | -- | no star ratings at all",
|
|
"(line below) Prime Video in particular is routinely misquoted as ``Amazon abandons microservices'' when it documents \\emph{one service} with a data-intensive streaming workload -- you met it in deck 6 (SL, the split cell)",
|
|
"(line below) Compensation: \\textbf{triangulation} -- ratings against cases against metrics -- and the \\textbf{measurement contract}, which converts every adopted claim into a testable one"
|
|
],
|
|
"elements": [
|
|
"footnotesize table Source | Nature | Weakness, three rows plus the HX/SL line; two \\footnotesize lines below -- no bullet list duplicating the table"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "Deck 6 'evidence base and its honest gaps' already listed the expert-rating and HX/SL caveats and flagged the Prime Video misquotation ('Widely reported as Amazon abandons microservices', deck 6 line 359) -- new here are only the DORA and blog-bias rows and the compensation"
|
|
},
|
|
{
|
|
"no": 32,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Limits 5 and 6: the hidden organisation, AI-era volatility",
|
|
"kind": "content",
|
|
"script_ref": "\\S 39 items 5-6 (part4_fit.tex 780-781)",
|
|
"content": [
|
|
"\\textbf{Limit 5.} Conway's law makes every architecture decision a team-structure decision",
|
|
"the same requirements profile admits \\emph{opposite} optimal patterns at different organisation sizes (LMAX vs Monzo; Shopify vs Amazon)",
|
|
"D11 partially captures this; no twelve-dimensional profile fully does (\\S 38)",
|
|
"\\textbf{Limit 6.} The D12 ratings encode the \\textbf{2025/26 state} of a field whose tools deprecate in months",
|
|
"the \\emph{method} -- Assumption A6: scenarios, tactics, trade-off analysis, ADRs, fitness functions -- is the stable part; the specific cells are \\textbf{perishable}",
|
|
"they carry, in effect, their own \\textbf{temporal fitness function}: re-verify on every model generation -- \\emph{Lehman's laws apply to theories too}"
|
|
],
|
|
"elements": [
|
|
"two labelled blocks, \\footnotesize"
|
|
],
|
|
"minutes": 4
|
|
},
|
|
{
|
|
"no": 33,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Six limits -- and what compensates each",
|
|
"kind": "table",
|
|
"script_ref": "\\S 39 items 1-6 (part4_fit.tex 776-781), compensations as stated in each item",
|
|
"content": [
|
|
"1 Ordinal scales | rankings and exclusions only | sensitivity analysis, mandatory; unstable rankings are findings",
|
|
"2 Context-dependence | cells are typical-workload defaults | measurement replaces the rating in step (viii)",
|
|
"3 Hybrids normal | 8 of 10 classes core $+$ edges | apply the matrix to subsystems, never to a whole enterprise",
|
|
"4 Heterogeneous evidence | expert stars, survey prediction, self-reported blogs | triangulation $+$ the measurement contract",
|
|
"5 Hidden organisation | same profile, opposite optima by org size | D11 captures it only partially -- check the team precondition separately (\\S 38)",
|
|
"6 AI-era volatility | D12 cells encode 2025/26 | method (A6) stable; cells re-verified on every model generation"
|
|
],
|
|
"elements": [
|
|
"scriptsize 6-row table Limit | What it means | What compensates, p{2.6cm} p{4.4cm} p{5.4cm}, booktabs"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "Consolidation frame and the only overview of the six limits; every cell is a rephrasing of the respective item -- no new claims (row 5 states what the script says, not a compensation the script does not offer)"
|
|
},
|
|
{
|
|
"no": 34,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Important note: the matrix is a hypothesis, not an authority",
|
|
"kind": "content",
|
|
"script_ref": "\\S 39 hinweisbox (part4_fit.tex 784-786)",
|
|
"content": [
|
|
"A student who cites the matrix as an \\emph{authority} rather than as a \\emph{hypothesis} has misunderstood the module",
|
|
"The matrix cannot tell you what to build; it can only \\textbf{force your criteria, weights, and assumptions into the open}, \\textbf{pre-filter the candidates}, and \\textbf{hand the contested cells to scenario-based analysis}",
|
|
"Its numbers are ordinal, its ratings are context-typical defaults, its evidence is triangulated but partly survey-based and partly self-reported -- and it \\emph{decays}: every cell is a claim awaiting your measurement",
|
|
"The canonical exercise in this scepticism: reading contradictory study designs against each other -- the METR-versus-Copilot contradiction of Part V (next week)",
|
|
"The assessment of this module tests the \\textbf{discipline}, not the memorisation of the grid"
|
|
],
|
|
"elements": [
|
|
"hinweisbox condensed from lines 784-786"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Explicit bridge to Lecture 12 (the two contradictory RCTs)"
|
|
},
|
|
{
|
|
"no": 35,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Key concept: Maxim 9",
|
|
"kind": "keyconcept",
|
|
"script_ref": "\\S 39 keypoint (part4_fit.tex 788-790)",
|
|
"content": [
|
|
"\\textbf{Maxim 9.} The matrix is the argument's \\textbf{skeleton}, ATAM is its \\textbf{court of appeal}, the ADR is its \\textbf{record}, and the fitness function is its \\textbf{parole condition}",
|
|
"The matrix is the \\emph{lecture-hall form} of a discipline whose \\emph{engineering form} is:",
|
|
"scenarios with numbers $\\cdot$ ATAM for the contested cells $\\cdot$ ADRs for the decisions $\\cdot$ fitness functions for the lifetime"
|
|
],
|
|
"elements": [
|
|
"keypoint box (Maxim 9) from lines 788-790; four-column strip skeleton | court of appeal | record | parole condition"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "Closes Part IV's theory: this frame is the one-sentence takeaway of Parts I-IV"
|
|
},
|
|
{
|
|
"no": 36,
|
|
"deck_section": "Limits of the Theory",
|
|
"title": "Discussion",
|
|
"kind": "discussion",
|
|
"script_ref": "\\S 39 thinkbox (part4_fit.tex 792-794)",
|
|
"content": [
|
|
"(setup) Limit 4 says the evidence base is heterogeneous, and limit 2 says skilled teams can move cells",
|
|
"(setup) Suppose your team measures, over a year, that its microservices system beats every prediction of the MS column for its class",
|
|
"Has the theory been \\textbf{falsified} -- or has your measurement contract done exactly what step (viii) designed it to do?",
|
|
"What would have to be true of your \\emph{next} project for the difference to matter?"
|
|
],
|
|
"elements": [
|
|
"thinkbox with the setup line and the two questions from lines 792-794 (title 'Discussion' as in decks 3 and 5)"
|
|
],
|
|
"minutes": 3,
|
|
"notes": "3 min of steered discussion: 'default hypothesis vs measured exception', then Conway (the next project may have a different team structure)"
|
|
},
|
|
{
|
|
"no": 37,
|
|
"deck_section": "Closing",
|
|
"title": "This week's exercise: resilience complete -- M4 closes",
|
|
"kind": "exercise",
|
|
"script_ref": "project_exercise.tex 424-429 (M4 taskbox), 452-463 (hintbox); semester plan row week 11",
|
|
"content": [
|
|
"(projektbox) Coaching session (1 lesson). \\textbf{Resilience patterns on all external calls}: timeout, retry, circuit breaker, fallback",
|
|
"(projektbox) \\textbf{Graceful degradation verified}",
|
|
"(projektbox) \\textbf{Milestone M4 of the exercise sheet closes (end of week 11)}: deterministic core \\emph{fully tested} against the reference vectors \\emph{and resilient}",
|
|
"(projektbox, hint) Keep the deterministic core free of LLM calls -- this is the line that is graded",
|
|
"(\\footnotesize line below the box) Looking ahead: the resilience row of the reference contract (kill one instance/broker under load -- SLO holds) is the fitness function that would verify what you build now -- it is not a graded deliverable"
|
|
],
|
|
"elements": [
|
|
"projektbox with four bullets (tasks, degradation, milestone, one hint line -- the \\small short form of decks 4-6); one \\footnotesize line below"
|
|
],
|
|
"minutes": 4,
|
|
"notes": "Speaker note: the determinism-boundary row of the reference contract (frame 15) is the CI-enforced form of the graded line -- not the same rule (the row permits LLM access via the declared port; the hint forbids LLM calls inside the core). 'M4' follows the exercise sheet students work from; the semester plan's adjustment table still labels this milestone 'M3 Resilienz + deterministischer Kern' -- flagged for correction (open_issues). The snapshot/commit/ADR hints (exercise sheet 459-463) are mentioned verbally, not printed."
|
|
},
|
|
{
|
|
"no": 38,
|
|
"deck_section": "Closing",
|
|
"title": "Summary",
|
|
"kind": "summary",
|
|
"script_ref": "\\S 37-39 (part4_fit.tex 654-794)",
|
|
"content": [
|
|
"1. \\textbf{Fitness functions}: objective integrity assessments; scope atomic/holistic, cadence triggered/continual/temporal; three families -- dependency gates, budgets, chaos experiments",
|
|
"2. \\textbf{DORA}: four keys, elite performers lead on all four; loosely coupled architectures \\emph{and teams} predict continuous delivery -- prediction, not causal proof",
|
|
"3. \\textbf{Four-layer cascade} -- four falsification questions; the C10 reference contract, eight rows with thresholds and cadences",
|
|
"4. \\textbf{Cost of change}: flat \\emph{within}, steep \\emph{across} architecture boundaries -- the contract, not the diagram, protects the investment",
|
|
"5. \\textbf{AI lens}: fitness functions are the operating licence for agents (A); eval pass rate and token budget, two new types with old mechanics (B)",
|
|
"6. \\textbf{Conway}: the fit is three-way; check D11 last but veto on it first; inverse Conway manoeuvre",
|
|
"7. \\textbf{Six limits}: ordinal, context-dependent, hybrids, heterogeneous evidence, hidden organisation, AI-era volatility -- a hypothesis, not an authority",
|
|
"8. \\textbf{Maxim 9}: skeleton, court of appeal, record, parole condition -- Part IV closes"
|
|
],
|
|
"elements": [
|
|
"enumerate, \\footnotesize, itemsep 2pt; every item capped at ~1.5 lines (deck 6 form); if still tight merge items 7 and 8"
|
|
],
|
|
"minutes": 3
|
|
},
|
|
{
|
|
"no": 39,
|
|
"deck_section": "Closing",
|
|
"title": "Next week",
|
|
"kind": "nextweek",
|
|
"script_ref": "'Next lecture' line of the assignment; semester plan row week 12; deck 6 next-week frame (lines 673-698) for the form",
|
|
"content": [
|
|
"Left column heading -- \\textbf{Lecture 12 -- Part V: two axes, one method}",
|
|
"Axis A: Copilot vs METR -- two contradictory RCTs and their resolution; the verification bottleneck",
|
|
"Axis A compact: architecture documentation as control interface, guardrails, the tool landscape and MCP, risks and accountability (\\S 41.6--41.9)",
|
|
"Axis B (I): the news-sentiment call wired the obvious way vs the right way; the three component types; the SE4AI classics",
|
|
"Axis B (I): integration patterns -- reference architecture with the LLM gateway; eval-harness foundations",
|
|
"Right column -- \\textbf{Reading}: this week: Part IV, sections 37--39; ahead: Part V, sections 40--41, 42.1--42.5",
|
|
"\\textbf{Exercise / deliverable}: coaching; AdvisorAgent $+$ 2--3 sub-agents behind the gateway (mandatory); ontology guard active on all insights"
|
|
],
|
|
"elements": [
|
|
"two columns 0.55/0.42 as in deck 6; left column four bullets \\small, bullet 2 may run to two lines; 'sections' lower-case as in decks 4-6"
|
|
],
|
|
"minutes": 1,
|
|
"notes": "Week 12, 3 lessons -- not printed on the slide (deck 6 does not print week/lesson counts). Topic bullet 2 names \\S 41.6-41.9 in full because deck 12 teaches all four subsections (its frames 15-22: control interface and AGENTS.md, guardrails, tool landscape/MCP/benchmark expiry date, risks and accountability, 14 min for 41.8-41.9 alone) and they are taught nowhere else -- do not trim this bullet to 'guardrails (compact)'. 'the SE4AI classics' (42.3) is likewise on the deck-12 agenda."
|
|
},
|
|
{
|
|
"no": 40,
|
|
"deck_section": "Closing",
|
|
"title": "Closing slide",
|
|
"kind": "content",
|
|
"script_ref": "deck skeleton",
|
|
"content": [
|
|
"\\FHGRClosingPage: Thank you! -- Dr. Florian Herzog, Fachhochschule Graub\\\"unden, Chur -- AISE502 -- AI in Software Engineering II"
|
|
],
|
|
"elements": [
|
|
"closing page macro as in deck 6"
|
|
],
|
|
"minutes": 0
|
|
}
|
|
],
|
|
"exercise_frame": {
|
|
"title": "This week's exercise: resilience complete -- M4 closes",
|
|
"content": [
|
|
"Coaching session (1 lesson). Resilience patterns on all external calls: timeout, retry, circuit breaker, fallback",
|
|
"Graceful degradation verified",
|
|
"Milestone M4 of the exercise sheet closes (end of week 11): deterministic core fully tested against the reference vectors and resilient",
|
|
"Keep the deterministic core free of LLM calls -- this is the line that is graded",
|
|
"Looking ahead (line below the box): the resilience row of the reference contract (kill one instance/broker under load -- SLO holds) is the fitness function that would verify what you build now -- it is not a graded deliverable"
|
|
]
|
|
},
|
|
"summary": [
|
|
"Fitness functions: objective integrity assessments; scope atomic/holistic, cadence triggered/continual/temporal; three families -- dependency gates, budgets, chaos experiments",
|
|
"DORA: four keys, elite performers lead on all four; loosely coupled architectures and teams predict continuous delivery -- prediction, not causal proof",
|
|
"Four-layer cascade -- four falsification questions; the C10 reference contract, eight rows with thresholds and cadences",
|
|
"Cost of change: flat within, steep across architecture boundaries -- the contract, not the diagram, protects the investment",
|
|
"AI lens: fitness functions are the operating licence for agents (A); eval pass rate and token budget, two new types with old mechanics (B)",
|
|
"Conway: the fit is three-way; check D11 last but veto on it first; inverse Conway manoeuvre",
|
|
"Six limits: ordinal, context-dependent, hybrids, heterogeneous evidence, hidden organisation, AI-era volatility -- a hypothesis, not an authority",
|
|
"Maxim 9: skeleton, court of appeal, record, parole condition -- Part IV closes"
|
|
],
|
|
"next_week": {
|
|
"lecture_line": "Lecture 12 -- Part V: two axes, one method",
|
|
"topics": [
|
|
"Axis A: Copilot vs METR -- two contradictory RCTs and their resolution; the verification bottleneck",
|
|
"Axis A compact: architecture documentation as control interface, guardrails, the tool landscape and MCP, risks and accountability (sections 41.6-41.9)",
|
|
"Axis B (I): the news-sentiment call wired the obvious way vs the right way; the three component types; the SE4AI classics",
|
|
"Axis B (I): integration patterns -- reference architecture with the LLM gateway; eval-harness foundations"
|
|
],
|
|
"reading": [
|
|
"this week: Part IV, sections 37--39",
|
|
"ahead: Part V, sections 40--41, 42.1--42.5"
|
|
],
|
|
"exercise": [
|
|
"coaching: AdvisorAgent + 2--3 sub-agents behind the gateway (mandatory)",
|
|
"ontology guard active on all insights"
|
|
]
|
|
},
|
|
"script_boxes_used": [
|
|
{
|
|
"box": "definitionbox[Architectural fitness function]",
|
|
"location": "part4_fit.tex 663-665",
|
|
"used_in_frame": "6 (first two sentences in the box; scope/cadence as a mini table with the script's examples)"
|
|
},
|
|
{
|
|
"box": "enumerate: three worked instrument families",
|
|
"location": "part4_fit.tex 669-673",
|
|
"used_in_frame": "7, 8, 9"
|
|
},
|
|
{
|
|
"box": "table tab:cascade",
|
|
"location": "part4_fit.tex 685-703",
|
|
"used_in_frame": "14 (table), 13 (diagram from header/questions)"
|
|
},
|
|
{
|
|
"box": "table tab:contract",
|
|
"location": "part4_fit.tex 707-726",
|
|
"used_in_frame": "15 (rows 1-4), 16 (rows 5-8); thresholds also quoted on 8, 9, 10"
|
|
},
|
|
{
|
|
"box": "keypoint (standing experiment)",
|
|
"location": "part4_fit.tex 735-737",
|
|
"used_in_frame": "19"
|
|
},
|
|
{
|
|
"box": "ailinse[Fitness functions as the operating licence for AI -- both axes]",
|
|
"location": "part4_fit.tex 739-743",
|
|
"used_in_frame": "20 (Axis A), 21 (Axis B)"
|
|
},
|
|
{
|
|
"box": "projektbox (submission must ship its contract)",
|
|
"location": "part4_fit.tex 745-747",
|
|
"used_in_frame": "22"
|
|
},
|
|
{
|
|
"box": "keypoint (the fit is three-way)",
|
|
"location": "part4_fit.tex 763-765",
|
|
"used_in_frame": "28"
|
|
},
|
|
{
|
|
"box": "enumerate: six limits",
|
|
"location": "part4_fit.tex 775-782",
|
|
"used_in_frame": "29, 30, 31, 32, 33"
|
|
},
|
|
{
|
|
"box": "hinweisbox (authority vs hypothesis)",
|
|
"location": "part4_fit.tex 784-786",
|
|
"used_in_frame": "34"
|
|
},
|
|
{
|
|
"box": "keypoint Maxim 9",
|
|
"location": "part4_fit.tex 788-790",
|
|
"used_in_frame": "35"
|
|
},
|
|
{
|
|
"box": "thinkbox (falsified or contract worked?)",
|
|
"location": "part4_fit.tex 792-794",
|
|
"used_in_frame": "36"
|
|
}
|
|
],
|
|
"script_boxes_dropped": [],
|
|
"open_issues": [
|
|
"Dropped after review: the constructed scope x cadence instrument table (former frame 7) -- the script classifies scope only for three examples (dependency rule atomic; security/freshness holistic; chaos holistic) and gives the cost budget the cadence 'continual' only; the taxonomy is now shown once on frame 6 with the script's own examples.",
|
|
"Inconsistency in the script to resolve before typesetting: chaos experiments are 'continual, holistic' in 37.1 (line 672) and in tab:cascade, but cadence 'temporal' in tab:contract (resilience row). Frames 9 and 16 show both as the script states them; decide whether the contract row should read 'temporal (scheduled drill)' or 'continual'.",
|
|
"Recap frame draws on the deck-10 plan (summary frame 42 and Maxim-6 frame 15), deck 1 (A5), deck 2 (D5, D9, D11) and the deck-3 ADR-011 frame in addition to deck 6 and the semester plan, so that repeats on frames 7, 9, 11, 18, 19, 23, 24, 26 and 31 can carry recap tags; the assignment permits deck-6 text only -- keep or cut those tags. Bullet 1's L10 clause must be re-checked against the typeset deck-10 summary once it exists.",
|
|
"Section 38 (Conway) has no thinkbox and no ailinse in the script, so the deck has no Discussion or AI Lens frame for Conway; if one is wanted, the script must supply it.",
|
|
"Constructed boxes, not script boxes: the Prime Video examplebox (frame 4) and the DORA-caveat hinweisbox (frame 12) are built from running text (lines 657, 679) -- verbatim rephrasings, no new facts. No definitionbox is constructed for the Conway quotation (frame 23: highlighted line only).",
|
|
"The qualitative cost-of-change sketch (former frame 19) was dropped: the script gives no curve data; frames 17-18 carry the argument in text and the two-column Boehm | Menzies layout.",
|
|
"Evolution-layer instruments (Lehman indicators, change scatter, technical-debt inventory) appear only as table entries in tab:cascade -- the assigned passages do not explain them; frames 13/14 name them without elaboration.",
|
|
"Frame 20 cites 'the empirical record shows AI adoption amplifying existing delivery dysfunction' (dora2025aireport) -- the script gives no figures; do not add any.",
|
|
"Steps (vii) and (viii) refer to the eight-step procedure of Section 36 (Lecture 10, not yet typeset as a deck); recap bullet 1 now names the procedure, ADR-007 and Maxim 6 explicitly, so frames 5/30/36 can assume the step numbering is known -- it is not re-taught here.",
|
|
"Frames 15-16 split tab:contract 4+4; if the typeset table fits comfortably, merging into one 8-row frame would free one slot -- the split is preferred so the eval-harness paragraph (line 705) has room on frame 16.",
|
|
"Timing: content frames 4-36 sum to 120 min (not 125) so that the whole deck -- agenda 1, recap 3, exercise 4, summary 3, next week 1 -- stays at 132 min inside the 135-min slot; the reviewers' trims (discussion 5->3, coupling finding 5->4, cascade table 5->4, Conway opening 4->3, empirical anchor 4->3, limit 1 with lead-in, former overview and taxonomy frames removed) are applied. Frame count is exactly 40 -- the lower bound of the 40-46 band -- so frame 12 (DORA caveat, 2 min) must stay a frame; if time runs short, trim minutes on frames 6 (5 -> 4) and 15 (5 -> 4) instead, or fold frame 12 into 11 only together with splitting frame 25 (four team types / three interaction modes) so the count stays at 40.",
|
|
"Frame 37 says 'M4 of the exercise sheet' (M4 Deterministic Core and Resilience, weeks 10-11); the semester plan's adjustment table (Semesterplan_AISE502_HS26.md line 43) still labels this milestone 'M3 Resilienz + deterministischer Kern' -- correct the semester plan.",
|
|
"Next-week topics follow the deck-12 plan, not the semester-plan week-12 row: topic bullet 2 names \\S 41.6-41.9 in full (control interface, guardrails, tool landscape and MCP, risks and accountability) because deck 12 teaches them on its frames 15-22 and they are taught nowhere else; 'the SE4AI classics' (42.3) is on the deck-12 agenda as well. The semester-plan week-12 row is the narrower document -- align it to the deck, not the slide to the row."
|
|
],
|
|
"total_frames": 40
|
|
}
|