13
Some checks failed
Build Quartz Notes / build (push) Failing after 20s

This commit is contained in:
2026-07-13 09:16:09 +01:00
parent 9645ee23b0
commit 129ce1442b
336 changed files with 3812 additions and 579 deletions

0
Career/Devops/CI-CD Example (site visits).md Normal file → Executable file
View File

0
Career/Devops/CI-CD Summary.md Normal file → Executable file
View File

View File

@@ -0,0 +1,599 @@
---
note type:
- devops
- theory
- note
date: 2026-06-20
done:
link: https://app.pluralsight.com/ilx/video-courses/devops-foundations-core-concepts-fundamentals/course-overview
---
# Introduction
> **Epistemology** is the branch of philosophy that examines the **nature, origin, and limits of knowledge**, often referred to as the **theory of knowledge**.
# Lean Software Development
- Lean originates from **Sakichi Toyoda**, who focused on reducing wasted human effort after observing his mothers weaving work.
- Core idea: **optimise systems by respecting and improving human work**, not just machines.
- Toyodas innovations in **automatic looms** laid the foundation for modern industrial efficiency.
- His son, **Kiichiro Toyoda**, expanded into automobiles → founding **Toyota** (first car: 1936).
- Post-WWII constraints forced Toyota to **avoid mass production** and focus on efficiency instead.
- **Toyota Production System (TPS)**, led by Taichi Ohno, aimed for the **complete elimination of waste**.
- Two key pillars:
- **Just-in-Time**: produce only whats needed, when needed
- **Jidoka**: stop immediately when defects occur
- **Andon system**: any worker can halt production to fix problems early (quality over speed).
- Term **“Lean”** coined in 1990 to describe this high-efficiency, low-waste system.
- Adapted to software (2003): focuses on **waste reduction, continuous improvement, and delivering value**, closely aligned with **Agile principles**.
# Lean Software Development Waste & Principles
- Central idea in lean: **waste is the primary enemy**. Eliminating it leads to better outcomes.
- Key insight: **optimising for speed alone creates waste**, but **eliminating waste naturally improves speed**.
- In software, this effect is amplified. **Early problem detection drastically reduces cost and impact**.
## Bug Example (Cost vs Timing)
- Bug found by **customer** → highest cost (damage to trust/reputation).
- Found **just before release** → still costly (delays).
- Found in **code review** → limited impact (few people involved).
- Found during **development/testing** → minimal cost.
- Found via **test-first (TDD)** → often prevented entirely.
## Core Concepts
- **Shift-left thinking**: move detection and quality checks as early as possible.
- **Test-first development (TDD)**:
- Write tests before code
- Forces clarity and simpler, more reliable designs
- Reduces the chance of defects early
- Even though tests arent perfect, they **guide safer, more focused development**.
## First Lean Principle
- **Eliminate waste**:
- Fixing avoidable bugs = waste
- Rework and repetition = waste
- Human effort spent on low-value tasks = waste
## Key Philosophy
- Repetition of simple tasks by humans = **underutilising human potential**
- Lean aims to **free people to do higher-value, creative work**
# Lean Software Development PokaYoke & Defect Prevention
## Inspection Types
- **Inspection to find defects**:
- Happens **after the process**
- More costly and disruptive
- **Inspection to prevent defects**:
- Happens **during or before the process**
- Cheaper and more effective
## PokaYoke (Error Prevention)
- Japanese term meaning **“error avoidance”**
- Focus: **design systems so mistakes are impossible or immediately caught**
- Aim: **build quality into the process, not inspect it afterwards**
## Everyday Examples
- **UI validation** (e.g. input masks, dropdowns, live error messages)
- **USB design**: only fits one way
- **Electrical outlets (GFCI)**: shuts off power to prevent harm
- **Manual cars**: must press clutch to start
## Software & DevOps Applications
- **Principle of least privilege**:
- Users only have permissions they need
- Prevents both malicious actions and accidental errors
- **Protected branches**:
- No direct commits to deployment branches
- Changes go through **pull requests + reviews + automated tests**
- **IDE checks**:
- Real-time compilation and error detection during coding
## Test-First Development (TDD)
- Write **tests before code**
- Forces clarity about:
- Requirements
- Assumptions and expected behaviour
- Helps:
- Prevent defects early
- Keep code simpler and more focused
## Key Insight
- Code contains **implicit assumptions** that are hard to debug later
- Writing tests first makes these assumptions **explicit and verifiable**
## Long-Term Value
- Tests dont just prevent initial bugs
- They **guard against regressions** (future defects)
# Lean Software Development Certainty & Knowledge
## Core Idea: Certainty Matters
- Lean emphasises not just **knowing something**, but **being certain that it is true**.
- Two separate statements:
- “This code works”
- “We are certain this code works”
## Creating Certainty in Software
- **Automated testing**:
- Creates knowledge (code works)
- Maintains certainty (re-run tests continuously)
- At release level, certainty comes from accumulated evidence:
- Passing automated tests
- Code reviews
- Successful builds
- Load/performance tests
## Limits of Human Testing
- Human testing is **inherently limited** in software:
- Fixing one bug does **not guarantee stability elsewhere**
- Unlike physical systems, software behaviour is **non-linear and unpredictable**
- Conclusion: **minimise reliance on manual testing**
## Key Insight: Software is Uncertain by Nature
- Software development is **“predictably unpredictable”**
- Traditional planning often fails because:
- Required knowledge **doesnt exist upfront**
- It only emerges **during development**
## Lean / Agile Perspective
- Lean, Agile, and DevOps:
- **Force teams to confront uncertainty honestly**
- Reject the illusion of perfect upfront planning
- Agile is not idealistic—its based on **real-world experience of failure in rigid planning**
## Software as Research
- Software development is essentially **research work**:
- Problems are **“wicked”** (cant be fully defined upfront)
- Understanding evolves through **iteration and experimentation**
## Principle: Epistemic Humility
- Accept that:
- Your knowledge is **incomplete and uncertain**
- Plan and work accordingly:
- Short feedback loops
- Continuous validation
- Incremental delivery
## Practical Implications
- Build systems that:
- **Continuously generate evidence of correctness**
- Adapt as new knowledge emerges
- Shift focus from:
- “Are we right?” → “How sure are we that were right?”
# Lean Software Development Defer Commitment
- **Defer commitment**: avoid making decisions too early when knowledge is still uncertain.
- Early commitments (BDUF Big Design Up Front) **reduce predictability** because key knowledge doesnt exist yet.
- **Software development creates knowledge over time**, so decisions improve as the project progresses.
## Decision Types
- **Irreversible decisions**:
- Hard or costly to undo
- Should be **delayed as long as possible**
- Allows better-informed choices
- **Reversible decisions**:
- Easy to change later
- Can be made **early to maintain progress**
## Key Strategy
- Prioritise **reversible choices over irreversible ones** when possible.
- Make early decisions that **keep options open**, not ones that lock you in.
## Practical Examples
- Architecture choices:
- Use modular systems so components can be swapped later (reversible)
- Business analogy:
- Travel insurance or flexible bookings = **paying for reversibility**
- Easy returns (e.g. Amazon, Zappos) encourage decisions because they reduce risk
## Takeaway
- **Better decisions come from better information**, which takes time to develop
- Lean encourages:
- **Delay irreversible commitments**
- **Keep options open**
- **Move forward with flexible, changeable decisions**
# Lean Software Development Deliver Fast
## Core Idea: Deliver Fast
- “Fast” means both **early delivery** and **frequent delivery**.
- Goal: **accelerate feedback and learning**.
## Deliver Early
- Release **small increments quickly** (e.g. end of each sprint).
- Even simple outputs (e.g. a mock login page) help:
- Expose issues early
- Trigger useful discussions
- Force setup of delivery processes (CI/CD, version control)
## Deliver Often
- Shift from **large, infrequent releases (e.g. quarterly)** to **frequent ones (e.g. weekly)**.
- Frequent releases:
- Reduce pressure to “get everything perfect”
- Allow unfinished features to be safely deferred
## System-Level Impact
- Frequent delivery forces teams to:
- **Automate repetitive tasks**
- **Simplify or eliminate unnecessary processes**
## Key Principle
- **“If it hurts, do it often”**:
- Increase frequency of painful processes (e.g. releases, testing)
- Forces improvement, automation, and efficiency
## Practical Mindset
- Identify risky/problematic areas (“what feels uncomfortable”)
- **Tackle them early and repeatedly** to reduce uncertainty
# Lean Software Development Respect People
## Core Principle: Respect People
- Lean (Toyota) places **people at the centre of systems**, unlike traditional approaches that treat workers like machines.
- Origin influenced by **Sakichi Toyodas human-focused perspective** (seeing work through his mothers experience).
## What “Respect People” Really Means
- Not just:
- Being polite
- Fairness or “HR-style” gestures
- Instead, it means:
- **Empowering individuals**
- **Giving ownership and responsibility**
- **Trusting people to contribute and improve systems**
## Key Idea
- “People operate the system, not the other way around.”
- Workers are **intelligent contributors**, not interchangeable parts.
## Practical Implications
- Give teams:
- Authority to **stop processes and fix issues**
- Opportunity to **suggest improvements**
- Build systems where:
- **Anyone can contribute ideas**
- Collaboration is encouraged over rigid hierarchy
## Business Impact
- Human-centred systems:
- **Outperform top-down, rigid structures**
- Improve innovation and adaptability
- Benefits include:
- Lower turnover
- Higher engagement
- Better overall results
## Risks of Ignoring This Principle
- Treating people like machines leads to:
- Poor morale
- Lack of innovation
- Long-term organisational failure
# Lean Software Development Optimising the Whole System
## Core Idea: System Thinking Over Local Optimisation
- Focusing on improving **one part of the system (e.g. development speed)** can harm the **overall system performance**.
- True optimisation comes from improving the **entire value stream**, not individual components.
## Example: Test-Driven Development (TDD)
- TDD may:
- **Slow down development initially**
- But it:
- Eliminates or reduces **manual testing effort**
- Prevents **regressions with automated tests**
- Creates a long-term **quality safety net**
- Net effect: **faster, more efficient system overall**
## The Problem: Suboptimisation
- Optimising individual parts ≠ optimising the system
- Common mistake:
- Managers focus on **visible metrics (e.g. dev time)**
- Ignore downstream effects (e.g. testing, defects, rework)
## Key Insight (Elon Musk Quote)
- “Optimising something that shouldnt exist” = waste
- Highlights:
- Even smart people fall into **misplaced optimisation**
- We often optimise **means instead of outcomes**
## Evaluating System Components
Every part of a system:
1. **Adds value** → keep and improve
2. **Hurts the system** → fix or remove
3. **Adds no value** → eliminate
## Lean Mindset
- “The best part is no part. The best process is no process.”
- Remove:
- Unnecessary steps
- Redundant processes
- Inefficient workflows
## Practical Implications
- Automate instead of manually repeating tasks
- Eliminate processes that **dont contribute to value**
- Focus on:
- **Flow of work across the whole system**
- **End-to-end efficiency**, not local metrics
## Takeaway
- **Optimise the system, not individual parts**
- TDD and automation may slow one step, but improve the **entire pipeline**
- True lean improvement often means:
- **Removing what shouldnt exist** rather than refining it
# Lean Software Development Waste (7 Types & System View)
## Core Idea: What is Waste?
- Waste = **any activity that does not add value to the end product**.
- Important distinction:
- Something may look like waste **in hindsight (final product)**
- But may still be **necessary in the process (learning, iteration)**
- Lean requires **careful identification of real waste vs necessary work**
## The 7 Types of Waste (Lean Development)
### 1. Partially Done Work
- Work that is **not fully complete or deployed**
- Creates:
- Hidden effort
- False sense of progress
- Example:
- Code written without tests → _looks done but isnt actually usable_
### 2. Extra Features (Overproduction)
- Features built **too early or unnecessarily (“just in case”)**
- Equivalent to **unused inventory** in manufacturing
- Root cause:
- Poor adaptability / fear of future change
- Lean approach:
- Build **just in time**, not “just in case”
### 3. Relearning
- Re-acquiring knowledge that was **already known before**
- Causes:
- Poor documentation
- Staff turnover
- Knowledge silos
- Mitigation:
- Documentation, automation, simpler design
- Cross-training team members
**Example**
- Losing key developers → project knowledge lost → costly recovery
### 4. Task Switching
- Switching between tasks reduces efficiency significantly
- Cognitive penalty ≈ **40% productivity loss**
- Humans **cannot truly multitask**
- Impact:
- Slower delivery
- More errors
### 5. Delays
- Idle time waiting for:
- Decisions
- Information
- Approvals
- Causes:
- Centralised authority
- Poor communication (silos)
- Lean solution:
- **Empower teams, improve access to information**
### 6. Defects
- Errors that require **rework and disruption**
- Effects:
- Task switching
- Relearning context
- Delays and wasted effort
- Worse when found late:
- May require multiple people
- May be harder to fix
### 7. Handoffs (implicit in examples)
- Knowledge transfer between people/teams
- Risk:
- Miscommunication
- Loss of context
- Example:
- Poorly transferred project → failure after staff leave
## Key Insight: Wastes Are Connected
- Each waste often results from **missing lean principles**:
- Lack of **knowledge creation** → relearning
- Lack of **respect for people** → delays
- Poor **defect prevention** → defects + rework
## System-Level Impact of Defects
- Defects amplify multiple wastes:
- Trigger **task switching**
- Require **relearning context**
- Create **delays**
- Increase **partially done work**
- Extreme case:
- Original developer unavailable → severe handoff waste
## Real-World Example Insight
- Loss of key employees caused:
- Knowledge loss
- Project failure
- Major financial loss
- Preventive actions could include:
- Better knowledge capture (recordings, docs)
- Cross-training team members
- Retention incentives
## Takeaway
- Waste is **any non-value-adding effort across the system**
- Most waste comes from:
- Poor knowledge management
- Late feedback
- Weak processes and structure
- **Defects are a critical signal**:
- If defect rates are high, other wastes are likely unmanaged
# Lean Software Development Practical Application (DevOps)
## Core Idea: Focus on Impact (Pareto Principle)
- Use **Pareto (80/20 analysis)**:
- **80% of problems come from 20% of causes**
- In DevOps, biggest win:
- **Reduce defect rate first**
- Focus on the **“bad neighbourhood” in code**:
- Areas everyone avoids → highest impact if fixed
- Approach:
- **Go where the pain is (fear-driven development)**
## Practical Strategy to Reduce Waste
### 1. Target High-Impact Problems First
- Identify:
- Bug hotspots
- Fragile systems
- Fixing these yields **disproportionate improvements**
**Example**
- A single unstable module causing most outages → prioritise fixing it
### 2. Improve Developer Experience (Respect People)
- If developers are:
- Slow
- Frustrated
- Error-prone
- That is a **system failure**, not a people problem
**Example**
- Inability to debug locally:
- Leads to slow, painful development
- Fixing this improves speed and quality immediately
### 3. Prioritise User Pain (Internal Customers)
- Treat internal teams (e.g. support engineers) as **customers**
- Fix their tooling issues first
**Example**
- Improving admin tools → enables support to resolve issues faster → better customer outcomes
### 4. Reduce Handoffs (Cross-Training)
- Train multiple people to perform key tasks
- Avoid reliance on individuals
**Example**
- Rotate responsibility for complex processes → spreads knowledge → reduces risk
### 5. Simplify and Standardise Systems
- Look for duplication:
- Similar processes/tools doing the same job
- Consolidate into **one flexible system**
**Example**
- Replace multiple build pipelines with **one parameterised build system**
### 6. Automate Repetition
- Rule:
- If you do something **twice**, consider automation before the third time
- Benefits:
- Reduces waste
- Improves consistency
- Frees up human effort
**Example**
- Automate deployments, testing, or data imports
## Key Lean Connections
- **Reduce defects** → biggest system-wide gain
- **Respect people** → improve how work actually gets done
- **Eliminate waste** → focus on high-value activities
- **Create knowledge** → through automation, documentation, and sharing
## Takeaway
- Start with **where the pain is highest**, not whats easiest
- Improve systems by:
- Fixing bottlenecks
- Empowering people
- Automating repetitive work
- Lean DevOps isnt about doing small improvements everywhere—its about **making the biggest difference first**
## Summary
- Use **80/20 thinking** to prioritise work
- Focus on:
- High-defect areas
- Developer productivity
- Tool usability
- Standardise, automate, and cross-train to reduce waste
- Always aim to **improve the whole system, not just individual parts**