| This is really, really good as an overview of system-level issues. I write only to encourage others to read it. Ideas that helped me situate many of the issues we struggled with at various companies: - distinguishing programs (the code as designed) from (distributed) systems (the whole mess, including maintenance and migration, as deployed) - versioning code (reversibly) and data (irreversibly) - walk-through of software solutions for distributed systems, and their blind spots wrt data versioning; temporal databases - semantic drift: schema-less change - Limitations of type systems for managing invariants - co-evolving code and data; running old code on old data The real benefit of systems thinking is recognizing whether an issue is unsolvable and/or manageable (with the current approach, or warrants a technology upgrade or directional shift). It's like O(n) evaluation of algorithms, not for space/time but for issue tractability. |