The keynote address at CodeMash, an education event aimed at developers, was by a prominent architect named Ann Pendleton-Jullian. She spoke about Emergent Design, the idea that a system is not designed with an all-encompassing, top-down plan, but rather with simple definitions of components and rules that govern their interactions. This allows the behavior of the system to grow organically.
She gave several interesting examples. The cities of Venice, Italy and Valparaiso, Chile were not designed by a city planner. Rather, there were sets of rules that were followed as the cities grew. Eventually, both cities came to have diverse and challenging geographies, but both have a consistent and beautiful layout.
Coral reefs, another of Pendleton-Jullian’s examples, can be miles long. But each individual coral is only a few millimeters in diameter. There are certain requirements that must be met for the corals to survive, limitations based on their size, and certain restrictions they have in their physical composition. But, as a system, they are able to build enormous reefs that can react to various currents and terrains.
Twitter also has a very simple rule base. Each post is at most 140 characters, and you can follow anyone. Within these constraints, users have developed the ideas of hashtags and retweets. The system has evolved to be so powerful that it was instrumental in overthrowing the Egyptian government.
Many games also have emergent design characteristics. Games like Chess and Go define a small number of pieces and relatively small number of rules. But they result in very complex game play.
Using these examples, Pendleton-Jullian explained how the key to emergent design is that lower level rules lead to high level behaviors.
But what are the applications?
The talk was fascinating, but the consensus among the attendees I spoke to was that it didn't have any direct applications to software. On Friday afternoon, however, I attended Kevin Berridge's presentation on good object-oriented design, and I realized how the keynote really could apply to software.
One of the fundamental ideas of OOP is that the system is made up of agents that interact with each other via messages. Our software should be made up of small, cohesive classes that have a single responsibility. Then software will be able to adapt easily to changes. The changes could come from a requirements change, a technology change, or even a bug fix.
The objects start to organize much like a coral reef. Each one has a single purpose. It is only able to communicate with the other objects around it. But, when they are combined into a larger whole, they can form something beautiful, functional, maintainable, and robust. The system can grow organically. Given user feedback, the system can evolve into something that increases in value over time.
Eric is a Microsoft MVP and Software Architect for Aptera Software in Fort Wayne Indiana, working primarily in the .Net platform. He has been developing high quality custom software solutions since 2001. He is also an adjunct professor of computer science at Indiana Tech. He loves to dabble in new and exciting technologies.