Formal Methods: Just Good Engineering Practice? (2024)
Meta / Prior Discussion
- Thread notes an earlier HN discussion of the same article and related AWS work.
- Reposts are generally seen as fine if prior threads are linked for context.
Where Formal Methods Fit (and Don’t)
- Widely agreed: high-value / safety- or security‑critical systems benefit most (aerospace, high‑assurance security, critical distributed infrastructure).
- Many argue most business software doesn’t justify pushing correctness from “good enough” to “near perfect”; cost and time outweigh benefits.
- Several note that formal methods require some degree of stable, formalizable requirements; “we don’t yet know what we want” agile environments are a poor fit.
- Others counter that you can specify and verify only key components (e.g., state machines, allocators, deployment workflows) and evolve specs alongside code.
Costs, Benefits, and Adoption
- Strong sense that full formal verification remains expensive in expertise, time, and tooling; learning curves are steep.
- Some see lack of broad industry uptake after decades as implicit evidence the ROI is marginal outside niches.
- Others argue costs have dropped (e.g., TLA+, Alloy, model checkers) and that even partial modelling finds subtle bugs and clarifies thinking.
Types, Tests, and “Lightweight” Methods
- Static type checking is framed as a widely used, limited formal method.
- Tests are described as formal specifications of specific behaviors; property‑based testing sits between tests and model checking.
- Debate over whether property‑based testing and randomized testing count as “formal methods” or just informed testing.
- Trace checking with temporal logic and linearizability checkers are mentioned as practical, non‑exhaustive but powerful techniques.
Tools, Syntax, and Learning
- TLA+, Alloy, Lean, SPARK Ada, dependent types, Verus, Quint, FizzBee, and P are cited.
- Opinions diverge: some say tools like TLA+ can be taught in a week; others report needing 100+ hours before they’re useful beyond toy examples.
- Mathematical syntax (e.g., TLA+, Lean) is a major barrier for many engineers who “only think in code”; more code‑like notations (Quint, FizzBee) aim to reduce this.
Specs vs Code; Intrinsic vs Extrinsic
- Some argue “the code is the spec,” and external specs often end up tautological or drift from implementation.
- Others emphasize that simple, high‑level properties (invariants, universal quantifications) are much clearer than code and catch deep design errors.
- Distinction raised between extrinsic methods (separate models and proofs) and intrinsic methods (types, dependent types, inline proofs) that tie correctness more tightly to code and compilation.