The Problem of Complexity and the Evolution of Computing

Complexity in the digital world is beyond our control, yet computing becomes ever more central to business and society.

In 2005, early in his tenure as CTO of Microsoft, Ray Ozzie wrote a memo to Microsoft developers in which he points out that: "Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges, and it causes end-user and administrator frustration." He went on to suggest that better software engineering techniques and improvements to processes within their programming culture can keep complexity under control. He's certainly right about the problem.  Consider the below call graph of Microsoft's IIS Web Server serving an HTTP request containing a single image.

IIS HTTP request call graph

Yet complexity has not been brought under "control." Windows continues to grow more complex. Reportedly, there were 20 million lines of code in Windows 2000, 25m in XP and 50m in Vista. Microsoft has not revealed the number for Windows 7. Even if by brute force-of-will Microsoft could tame complexity within its domain, the digital world outside their walls continues to grow more and more complex because it is beyond our control. Operating systems, applications, browser plug-ins, clusters and grids, blogs and wikis, peer-to-peer file-sharing networks, and collaborating web-services grow and mutate before our eyes.

Computing systems tend to evolve rather than be carefully designed. As they do so, they become ever more Byzantine and complex because evolution is never tidy. The Internet and the Web are the most obvious example of such evolution. While the underlying protocols were designed, the resulting networks emerged in unexpected ways as people discovered novel ways to exploit those protocols.

Various sorts of encapsulation mechanisms, i.e., barriers to unwanted interactions, have evolved in both living and computing systems to help control runaway complexity. We can and should continue improving our systems in a piecemeal way when possible. Nonetheless, it is impossible to infallibly permit only desired interactions. Without that ability we cannot precisely control and manage all interactions in complex living or digital systems.

Instead of stubbornly attempting to control runaway complexity, we should look for large-scale architectural approaches that are inherently less susceptible to failure. And where better to look than the complex world of living systems? Carver Mead, a professor of Computer Science at Cal Tech, said years ago that, “engineers would be foolish to ignore the lessons of a billion years of evolution. He was talking then (1993) about constructing a silicon retina and silicon cochlea. The rapid growth of the Internet was just beginning at that time. Its current extent and complexity was beyond our imagination then, just as the extent and complexity of the Internet/Web of 2020 is beyond our imagination today.

This site explores some of the lessons we can draw from that billion years of evolution. It focuses in particular on four organizing principles that evolved during the evolution of multicellular organisms. I believe these principles can illuminate our development of multicellular computing.



Contact: sburbeck at mindspring.com
Last revised 2/8/2010