01 Introduction
-
Vasa Syndrome:
- A famous historical failure in shipbuilding is used as an analogy for software projects that suffer from unclear requirements, shifting specifications, and inadequate testing.
- Requirements
- Changing shipbuilding orders
- No specifications for modified keel
- Shifting armaments requirements
- Teams
- Shipwright’s death
- Metrics
- No way to calculate stability, stiffness, or sailing characteristics
- Quality Assurance (QA): Testing, reviewing
- Failed pre-launch stability tests
-
Complex software engineering issues
- Requirements (Architecture & Design)
- Software running with kernel-level privilege can crash the system (BSOD) and prevent booting: High-privileged software can cause catastrophic system failures, like a Blue Screen of Death (BSOD), making the system unusable.
- Content updates more continuous than software updates: Continuous content updates outpaced the software's ability to accommodate them, introducing instability.
- QA
- Insufficient testing of content and parser: Lack of thorough testing of both the content and the parsers (which interpret the content) allowed defects to go unnoticed.
- DevOps
- No staged roll-outs: The absence of gradual deployment of updates (staging) increased the risk of introducing wide-scale issues.
- No way to fix issue remotely after impact: Once problems were introduced, there was no mechanism to resolve them remotely, leading to greater operational downtime.
- Metrics
- Skewed incentives: Misaligned goals or motivations across teams or stakeholders led to decisions that negatively impacted the product's quality or performance.
- Licenses
- Limited liability: A lack of accountability or liability limits may have discouraged sufficient quality assurance, leading to negligence in testing or development.
- Requirements (Architecture & Design)
-
CrowdStrike Incident:
- A modern example of software engineering failure due to insufficient testing, lack of staged rollouts, and difficulty in addressing post-release issues remotely.
-
Key Themes:
- Software engineering as a human process
- Requirements and Specifications
- Metrics and Measurement
- Software Quality: Testing + CI + Security
- Continuous Deployment and DevOps
- Software Project Teams
- Managing Time, Teams, and Risks
- Software Architecture and Design Docs
- Scaling and Performance, Trade-offs
- AI/ML in Software Engineering
- Open-Source Software
- Strategic Thinking about Software