[Podcast] fallthrough: Worst Is Better
Context
Section titled “Context”“And it allows you to nerd out about stuff, right? Like, when modules being developed, like one of the things of why Rust decided to do Vico instead of DEP focused on like a SAT solver, which is NP complete versus NVS, which is, you know, NL. And like, oh, well, we can do dependency resolution so much faster.”
From Fallthrough: Worse Is Better, Dec 25, 2025 https://podcasts.apple.com/in/podcast/fallthrough/id1783181295?i=1000742654570&r=2859
This quote is from a December 2025 episode of the Fallthrough podcast, where Kris Brandow and Matt Layher (both prominent in the Go community) discuss the philosophy of “Worse Is Better” as it applies to software design.
The speaker is contrasting two different mathematical and philosophical approaches to dependency management—specifically the battle between the approach used by Rust (Cargo) and the one used by Go (Modules).
1. The Context: SAT vs. MVS (not “Vico” and “NVS”)
Section titled “1. The Context: SAT vs. MVS (not “Vico” and “NVS”)”To understand the “nerding out,” you have to correct the terms:
- “Vico” is actually MVS (Minimal Version Selection).
- “DEP” refers to the original Go prototype
dep, which used a SAT solver. - “NVS” (or “NL”) is actually MVS being described as having a lower complexity class (specifically, it’s a linear or simplified graph traversal).
2. The “SAT Solver” (Rust / original Go dep)
Section titled “2. The “SAT Solver” (Rust / original Go dep)”Most package managers (Rust’s Cargo, C++‘s Conan, Ruby’s Bundler) treat dependency resolution as a Boolean Satisfiability Problem (SAT).
- The Problem: You have version constraints (e.g., “I need
A> 1.0” and “B< 2.0”). You have to find a single set of versions that satisfies every constraint simultaneously. - Complexity: This is NP-Complete. In the worst case, as the number of dependencies grows, the time it takes to find a solution can explode exponentially.
- The “Nerd” Bit: The speaker is saying Rust chose to embrace this complexity. They use a sophisticated “solver” to find the “best” or “newest” compatible versions, even if it’s computationally expensive.
3. “MVS” (Go’s “Worse Is Better” approach)
Section titled “3. “MVS” (Go’s “Worse Is Better” approach)”Russ Cox (the lead for Go) famously rejected the SAT solver approach when designing Go Modules. He introduced Minimal Version Selection (MVS).
- The Philosophy: Instead of trying to find the “best” version (which is hard/NP-Complete), Go always picks the oldest version that satisfies the minimum requirement.
- Complexity: This reduces the problem from an NP-Complete search to a simple graph traversal (often referred to as P or even simpler complexity classes).
- The Benefit: It is “so much faster” and predictable. It doesn’t require a complex “solver” because it follows a simple rule: if three packages ask for version 1.1, 1.2, and 1.5, Go just picks 1.5 and stops thinking.
4. Why is this “Worse Is Better”?
Section titled “4. Why is this “Worse Is Better”?”The “Worse Is Better” ideology (originated by Richard P. Gabriel) suggests that simplicity of implementation is more important than correctness or completeness.
- The “MIT” Way (Rust): The design must be “correct” and “complete.” Cargo tries to find the perfect set of dependencies that satisfy all constraints, even if the algorithm is complex.
- The “New Jersey” Way (Go): The design must be “simple.” By choosing a “worse” (simpler) algorithm like MVS, Go avoids the entire category of “NP-Complete” bugs and performance issues, even if it occasionally forces developers to manually upgrade a version that the SAT solver would have found automatically.