<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software-Engineering on matt2ology Tech Journal and Blog</title><link>https://matt2ology.github.io/tags/software-engineering/</link><description>Recent content in Software-Engineering on matt2ology Tech Journal and Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 20 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://matt2ology.github.io/tags/software-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>UnityCoin - Clean Code - Uncle Bob / Lesson 6 - Agile</title><link>https://matt2ology.github.io/literature/unitycoin-clean-code-uncle-bob-lesson-6-agile/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate><guid>https://matt2ology.github.io/literature/unitycoin-clean-code-uncle-bob-lesson-6-agile/</guid><description>&lt;h2 id="literature-note-unitycoin---clean-code---uncle-bob--lesson-6---agile-solutions-for-balancing-deadlines-and-software-quality"&gt;&lt;a href="#literature-note-unitycoin---clean-code---uncle-bob--lesson-6---agile-solutions-for-balancing-deadlines-and-software-quality" class="header-anchor"&gt;&lt;/a&gt;Literature note: UnityCoin - Clean Code - Uncle Bob / Lesson 6 - Agile Solutions for Balancing Deadlines and Software Quality
&lt;/h2&gt;&lt;p&gt;Source highlights: 


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/"&gt;Clean Code - Uncle Bob / Lesson 6 (Highlights)&lt;/a&gt;
&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;Summary:&lt;/strong&gt; Agile isn&amp;rsquo;t about speed&amp;hellip; It&amp;rsquo;s about visibility. Agile replaces hope with data so teams can manage reality instead of wishful thinking; to clarify, Agile is a feedback system for managing uncertainty - not a process for going faster.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="key-ideas"&gt;&lt;a href="#key-ideas" class="header-anchor"&gt;&lt;/a&gt;Key Ideas
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Agile&amp;rsquo;s purpose: &lt;strong&gt;get the bad news fast&lt;/strong&gt;, not to move faster. Shorter iterations - higher visibility resolution.&lt;/li&gt;
&lt;li&gt;Every project balances the Iron Cross: good, fast, cheap, done - you can’t have all four.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Velocity charts&lt;/strong&gt; and &lt;strong&gt;burn-down charts&lt;/strong&gt; are the backbone of real Agile - no data, no management.&lt;/li&gt;
&lt;li&gt;Quality drives speed: “You go fast by going well.”&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t let a tool or process get in the way of getting impactful work done.&lt;/li&gt;
&lt;li&gt;Large-scale Agile requires &lt;strong&gt;many small Agile teams&lt;/strong&gt; working in parallel - not a single &amp;ldquo;Agile in the large&amp;rdquo; process.&lt;/li&gt;
&lt;li&gt;Strong communication prevents waste, misalignment, and rework.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="chapters"&gt;&lt;a href="#chapters" class="header-anchor"&gt;&lt;/a&gt;Chapters
&lt;/h2&gt;&lt;h3 id="how-do-you-manage-a-software-project"&gt;&lt;a href="#how-do-you-manage-a-software-project" class="header-anchor"&gt;&lt;/a&gt;How do you manage a software project?
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#how-do-you-manage-a-software-project"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Software project management is notoriously hard - often done &amp;ldquo;badly&amp;rdquo; or through &amp;ldquo;hope and prayer&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Mismanagement leads to wrong products, low quality, missed deadlines, and burnout.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Iron Cross&lt;/strong&gt; defines constraints: &lt;em&gt;good&lt;/em&gt;, &lt;em&gt;fast&lt;/em&gt;, &lt;em&gt;cheap&lt;/em&gt;, &lt;em&gt;done&lt;/em&gt; - you can&amp;rsquo;t have all four.&lt;/li&gt;
&lt;li&gt;Effective managers &lt;strong&gt;adjust the knobs&lt;/strong&gt; (quality, cost, schedule, scope) using &lt;strong&gt;frequent feedback&lt;/strong&gt; and short iteration cycles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agile&lt;/strong&gt; exists to improve feedback and communication, reducing guesswork.
&lt;ul&gt;
&lt;li&gt;The goal isn’t to hit a fixed plan - it&amp;rsquo;s to steer toward the best achievable outcome.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="finding-the-optimum-solution--data"&gt;&lt;a href="#finding-the-optimum-solution--data" class="header-anchor"&gt;&lt;/a&gt;Finding the optimum solution / Data
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#finding-the-optimum-solution---data"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data drives success&lt;/strong&gt;; without it, management is blind.&lt;/li&gt;
&lt;li&gt;Use metrics to manage toward the best achievable outcome across quality, cost, speed, and scope.&lt;/li&gt;
&lt;li&gt;Two key tools:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Velocity Chart:&lt;/strong&gt; shows how much work is completed per week/iteration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Burn-down Chart:&lt;/strong&gt; shows how much work remains to reach the next major milestone.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;These visuals allow teams and managers to predict progress transparently.&lt;/li&gt;
&lt;li&gt;Requirements should &lt;strong&gt;never freeze&lt;/strong&gt; - Agile welcomes change as understanding improves.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Estimates ≠ promises&lt;/strong&gt;; treat them as evolving signals.&lt;/li&gt;
&lt;li&gt;The goal of Agile: &lt;strong&gt;produce reliable data early&lt;/strong&gt; so the team can &lt;em&gt;manage reality&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="what-is-the-first-thing-know-about-project--the-management-paradox"&gt;&lt;a href="#what-is-the-first-thing-know-about-project--the-management-paradox" class="header-anchor"&gt;&lt;/a&gt;What is the first thing know about project / The Management Paradox
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#what-is-the-first-thing-know-about-project---the-management-paradox"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;first thing known&lt;/strong&gt; in any project is &lt;em&gt;the date&lt;/em&gt;, often fixed by business needs; however, &lt;strong&gt;requirements are fluid&lt;/strong&gt; - customers refine what they want through iteration.&lt;/li&gt;
&lt;li&gt;Agile solves this by allowing requirements to evolve while maintaining time-boxed delivery.&lt;/li&gt;
&lt;li&gt;Teams continuously replan priorities, focusing on &lt;em&gt;core features first&lt;/em&gt; and pushing less-critical items to future iterations.
&lt;ul&gt;
&lt;li&gt;If every feature is “critical,” none of them are - &lt;strong&gt;prioritize what matters&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Frequent show-and-tell sessions keep customer expectations aligned with progress.
&lt;ul&gt;
&lt;li&gt;Customers rarely know what they truly want until they see a working product.&lt;/li&gt;
&lt;li&gt;Agile embraces this uncertainty by iterating quickly and showing progress often.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-waterfall-model"&gt;&lt;a href="#the-waterfall-model" class="header-anchor"&gt;&lt;/a&gt;The Waterfall Model
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#the-waterfall-model"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Traditional Waterfall assumes phases (analysis, design, implementation) are sequential and &amp;ldquo;done&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;In reality, &lt;strong&gt;analysis and design are continuous&lt;/strong&gt;, not binary.&lt;/li&gt;
&lt;li&gt;Software differs from physical engineering - it&amp;rsquo;s adaptable and should evolve.&lt;/li&gt;
&lt;li&gt;Freezing requirements too early forces teams to &amp;ldquo;hack in&amp;rdquo; changes later, creating instability and technical debt.&lt;/li&gt;
&lt;li&gt;Waterfall often fails because it resists feedback and delays learning until it&amp;rsquo;s too late.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="iterative-development--calculate-day"&gt;&lt;a href="#iterative-development--calculate-day" class="header-anchor"&gt;&lt;/a&gt;Iterative Development / Calculate Day
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#iterative-development---calculate-day"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Runaway process inflation&amp;rdquo;&lt;/strong&gt; happens when teams respond to failure by adding &lt;em&gt;more process&lt;/em&gt; instead of &lt;em&gt;more feedback&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Iterative development starts with &lt;strong&gt;Iteration 0&lt;/strong&gt; - capture lightweight requirements and draft user stories, leaving details to emerge over time.
&lt;ul&gt;
&lt;li&gt;Gather rough requirements and create simple user stories - refine later.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Each iteration provides &lt;strong&gt;real data&lt;/strong&gt; about progress, risks, and estimates.&lt;/li&gt;
&lt;li&gt;The focus shifts from predicting the future to learning as early as possible.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-control-knobs-of-project-mgt"&gt;&lt;a href="#the-control-knobs-of-project-mgt" class="header-anchor"&gt;&lt;/a&gt;The Control Knobs of project mgt
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#the-control-knobs-of-project-mgt"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The four adjustable controls:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Schedule&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Staff&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quality&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Adding people&lt;/strong&gt; rarely helps - it initially slows progress (Brooks&amp;rsquo;s Law).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lowering quality&lt;/strong&gt; for speed causes rework and collapse - &amp;ldquo;You go fast by going well&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope negotiation&lt;/strong&gt; is the manager&amp;rsquo;s most powerful lever; trim deliverables to hit the date.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scope&lt;/strong&gt; is the most flexible lever; negotiate what must ship now vs. later.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Developers hold the &lt;strong&gt;data&lt;/strong&gt;, stakeholders hold the &lt;strong&gt;authority&lt;/strong&gt; - in rational organizations, &lt;em&gt;data should win&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="short-cycles--agile-software-development-practices--extreme-programming"&gt;&lt;a href="#short-cycles--agile-software-development-practices--extreme-programming" class="header-anchor"&gt;&lt;/a&gt;Short Cycles / Agile Software Development Practices / Extreme Programming
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#short-cycles---agile-software-development-practices---extreme-programming"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Agile development, particularly &lt;strong&gt;Extreme Programming (XP)&lt;/strong&gt;, emphasizes &lt;strong&gt;short cycles&lt;/strong&gt; to uncover problems (“bad news”) as early as possible. The goal of Agile isn’t speed, but &lt;strong&gt;early feedback and adaptability&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can’t fix &lt;strong&gt;scope, date, quality, and cost&lt;/strong&gt; all at once (“the Iron Cross”). The best way to manage uncertainty is to work iteratively, learning and adjusting each cycle; that is, short cycles expose tradeoffs early.&lt;/li&gt;
&lt;li&gt;Agile&amp;rsquo;s purpose: &lt;strong&gt;get the bad news fast&lt;/strong&gt;, not to move faster.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scrum without engineering discipline&lt;/strong&gt; (testing, refactoring, clean code) leads to &lt;em&gt;Flaccid Scrum&lt;/em&gt; - progress slows and quality decays: a process framework without the technical rigor needed for success.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Extreme Programming (XP)&lt;/strong&gt; (testing, refactoring, clean design) keep Scrum sustainable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XP structure of practices&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Outer (Green) Ring - Business-facing (Scrum-level)&lt;/strong&gt;: focus on &lt;strong&gt;what&lt;/strong&gt; is being built and &lt;strong&gt;why&lt;/strong&gt;, ensuring that the software actually delivers value to the customer or stakeholder.
&lt;ul&gt;
&lt;li&gt;Whole Team: Business and technical people work together.&lt;/li&gt;
&lt;li&gt;Acceptance Tests: Define done-ness in terms the customer understands.&lt;/li&gt;
&lt;li&gt;Small Releases: Deliver value and get customer feedback early.&lt;/li&gt;
&lt;li&gt;Planning Game: Balance business priorities with technical estimates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Middle (Blue) Ring: Team behavior&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Continuous Integration&lt;/strong&gt;: Team members frequently integrate and test their code together, ensuring shared ownership and rapid feedback.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Metaphor&lt;/strong&gt;: The team uses a shared &amp;ldquo;story&amp;rdquo; or metaphor to describe the system’s architecture, helping everyone (technical or not) share a common understanding.
&lt;ul&gt;
&lt;li&gt;Creates a &lt;strong&gt;common language&lt;/strong&gt; across technical and non-technical people.&lt;/li&gt;
&lt;li&gt;Helps guide design decisions - new features should “fit the metaphor”.&lt;/li&gt;
&lt;li&gt;Makes the system easier to discuss and reason about.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sustainable Pace&lt;/strong&gt;: The team avoids burnout by maintaining a steady, reasonable work rhythm - no &amp;ldquo;death marches&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collective Ownership&lt;/strong&gt;: Any developer can improve or modify any part of the code; responsibility is shared, not siloed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inner (Red) Ring: Engineering (developer-specific)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Test-Driven Development&lt;/li&gt;
&lt;li&gt;Pair Programming&lt;/li&gt;
&lt;li&gt;Simple Design&lt;/li&gt;
&lt;li&gt;Refactoring&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business-facing == practices that expose progress, risk, and value to the business side&lt;/strong&gt; (product owners, stakeholders, customers).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Engineering-facing == practices that ensure technical excellence and delivery capability.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Agile works best for &lt;strong&gt;small, disciplined teams&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Large-scale Agile requires &lt;strong&gt;many small Agile teams&lt;/strong&gt; working in parallel - not a single &amp;ldquo;Agile in the large&amp;rdquo; process.&lt;/li&gt;
&lt;li&gt;Avoid process theater - when tools (e.g., Jira) become more important than outcomes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Relative estimation&lt;/strong&gt; (story points) enables better forecasting and ROI-based prioritization.&lt;/li&gt;
&lt;li&gt;Projects finish not when everything&amp;rsquo;s done, but when &lt;strong&gt;nothing valuable remains&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iterations never fail&lt;/strong&gt; - even zero progress yields data for better management.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Velocity stability&lt;/strong&gt; is the goal - steady, predictable output signals health.
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stable velocity&lt;/strong&gt; signals health; erratic or declining trends indicate tech debt or pressure.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="questions-and-answers"&gt;&lt;a href="#questions-and-answers" class="header-anchor"&gt;&lt;/a&gt;Questions and Answers
&lt;/h3&gt;&lt;p&gt;


 &lt;a href="https://matt2ology.github.io/highlights/articles/hl-unitycoin-clean-code-uncle-bob-lesson-6-agile/#questions-and-answers"&gt;(See highlights and initial reflections)&lt;/a&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing extensive documentation often fails - &lt;em&gt;&amp;ldquo;nobody reads it&amp;rdquo;&lt;/em&gt;. Favor visibility and communication instead.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mentorship&lt;/strong&gt; is a senior engineer&amp;rsquo;s responsibility; pairing with juniors accelerates growth for both.
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;“The best way to learn something is to teach it”&lt;/em&gt; .&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business analysts&lt;/strong&gt; play a crucial role - they must translate between technical and business domains.
&lt;ul&gt;
&lt;li&gt;Effective analysts empathize with both the &lt;strong&gt;customer&amp;rsquo;s needs&lt;/strong&gt; and the &lt;strong&gt;developer&amp;rsquo;s challenges&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Understand and communicate both customer intent and developer constraints.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spikes&lt;/strong&gt; (research tasks) are valid stories - used to explore unknowns and improve estimation accuracy.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>