Architecture Without Architects introduced me to urban planning as a metaphor for software architecture, and I love it.

Large-scale software design has notable overlap with urban planning. Systems take time to change, they build on what exists, and they change continuously. Cities and software both evolve under continuous use.

Both system types will never be completely uniform to an overarching design, nor need they be. No one can manage the full picture with detail anyway. And, Needs often change before large-scale initiative are complete. Some parts will require custom approaches, and many parts are out of the planner’s ability to change.

Still, we can influence how the system grows by how we layout incentives and processes. Too central or too heavy of standards will stymie growth. The key is finding levers for the most critical outcomes and leaving the rest.

I think urban planning highlights some aspects of high-level software design that aren’t encapsulated well in the architecture metaphor. Particularly the continuous evolution, evolution under continuous use, and the decentralized nature of many decisions.

This metaphor, of course, also has it’s flaws. Software evolves much faster than cities, and individuals have more power for harm or good. Still, I find it a useful perspective on software design.