How Distributed Systems Are the Software Equivalent of Cities