Files
vault/Career/Devops/DevOps Foundations Core Concepts and Fundamentals.md
Zaine 129ce1442b
Some checks failed
Build Quartz Notes / build (push) Failing after 20s
13
2026-07-13 09:16:09 +01:00

599 lines
18 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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**