Package Management Is a Wicked Problem
3 months ago
- #package-management
- #wicked-problems
- #software-development
- Horst Rittel and Melvin Webber introduced 'wicked problems' in urban planning in 1973, describing them as problems that change when you try to solve them.
- Package management is a wicked problem due to its complexity, involving millions of packages, versions, and downloads, with small improvements affecting all dependent projects.
- Rittel and Webber identified ten characteristics of wicked problems, each applicable to package management.
- 1. No definitive formulation: The problem and solution are intertwined, with different interpretations of terms like 'package management'.
- 2. No stopping rule: Package managers evolve continuously without a definitive endpoint.
- 3. Good-or-bad rather than true-or-false: Solutions are subjective, based on stakeholder perspectives.
- 4. No immediate or ultimate test: Consequences of decisions emerge over time, making it hard to evaluate alternatives.
- 5. Irreversible consequences: Decisions leave lasting impacts, like typosquatting in PyPI or version ranges in npm.
- 6. No well-described set of solutions: Conflicting stakeholder goals make it impossible to enumerate all solutions.
- 7. Essential uniqueness: Solutions are context-specific, as seen in npm, Cargo, and Python's different approaches.
- 8. Symptoms of other problems: Issues like supply chain security are entangled with broader systemic problems.
- 9. Multiple causal explanations: Different stakeholders propose competing theories for problems and remedies.
- 10. No right to be wrong: Package manager designers face high stakes, with no room for errors.
- The wicked problem framework explains why progress in package management is slow and solutions create new problems.
- Rittel and Webber advocated participatory planning, emphasizing stakeholder collaboration and continuous iteration.
- The article suggests shifting focus from perfect tools to better communication and interfaces, like a shared protocol for package management.