Mapping a general graph onto a hierarchical tree structure is a third fundamental hard problem in CS, alongside naming and cache invalidation.
Key Takeaways
Tree mapping appears in file systems (organize by component vs. language), writing (linearizing idea webs), city planning (Levittown vs. Siena), and biological taxonomy.
File systems remain tree-shaped skeuomorphs of physical folders; experiments like BeFS and WinFS with web-like structures never displaced the status quo.
Google’s monorepo approach and tools like Bazel/Blaze are a direct response to the component-vs-language tree-mapping dilemma in large codebases.
Cladistics replaced morphological taxonomy by preserving ancestry connections rather than imposing artificial trait-based hierarchies, reducing misclassification.
The problem also lurks in MongoDB schema design, OOP class hierarchies, and Rust’s ownership model, where object interaction graphs exceed tree structure.