pinkham often said, and now i often say, complexity moves up the stack. the amazon primitive web services are pure expressions of this idea. defined simply, complexity in the form of opacity, moving parts, cost, and so on, is transferred further up the stack of infrastructure where it can be either eliminated or reduced through application software. this implies low-level infrastructure that is regular, simple, and static with increasingly complex and dynamic layers built on top of it.
we see a similar concept in an unexpected and far more wondrous place: the evolution and expression of dna. biologically-inspired technologies have been a research topic for years, autonomic computing and epidemic protocols as two examples. these techniques often have very attractive properties to go with their fun names: scaling, self-healing, resilience, blah, blah, blah. i think about infrastructure and have taken some different things from biology.
the not-quite-accurately named universal genetic code (ugc) and the other, extremely similar variants found in mitochondrial DNA and other small organisms, evolved. we’re used to dna being the stuff of evolution (rna fans save your flame mails), so the code itself evolving is a bit of a brain bender. think of it as meta-evolution.
the end of evolution for the ugc happened billions of years ago. experts call this “early fixation”. the code itself is a marvel of efficiency. it resists exactly the sort of errors to which the transcription machinery is prone. when a transcription error gets through, chances are the erroneous amino acid will have properties similar enough to the correct one that there is little functional difference in the geometry of the final protein. we can appreciate just how spectacular it is because we can almost completely quantify its environment, something simply out of the question with complete organisms. physics, chemistry, geometry.
the high school biology textbook version of how genes evolve goes something like this: mutation and crossover. mostly mutation. read chapters 5 through 7 for monday.
reality is far richer. enter systems biology and evolutionary developmental biology (evodevo). i can’t do justice to the topics in a blog post, but the important idea is this: genes change very slowly, while the gene regulation networks that control their expression are incredibly complex and evolve rapidly.
the bottom of the stack is ridiculously efficient, defined almost entirely by physical constraints, and completely static. up a level we see simple, modular structures that can be assembled in a variety of ways, and that change very slowly. finally, at the top, we see the incredible complexity and the roiling expression of evolutionary change.
ugc -> genes -> regulation networks
hardware infrastructure -> software infrastructure -> applications
this is complexity moving up the stack in the most complex, distributed system to which we have access. that’s probably a lesson worth learning.
in 2007 i had the fortune of speaking with john dunagan about designing distributed systems and he introduced me the powerful idea of a “complexity budget”. i now see complexity moving up the stack as merely an effect of complexity budgets. like anything worth knowing, complexity budgets are simple: complexity has a cost, like any other resource, and we can’t expect an infinite budget.
spending our complexity budget wisely means investing it in the areas where it brings the most benefit (the most leverage, if you must), sometimes immediately, sometimes only once a system grows, and not spending it on things unessential to our goals. returning to aws, ask yourself whether buying, racking, and operating your own servers, storage, and network, that is, building your own infrastructure, gives you significant, quantifiable advantage in your space. if it doesn’t, the complexity budget associated with that work can now be applied to your applications. it has moved up the stack. the money and people you would’ve put towards infrastructure are now available for creating more code, supporting more customers, closing more deals.
ultimately, you want to spend 100% of your complexity budget on the things central to your business and none of it on ancillaries. if there is currently no offering out there for something ancillary to your business, meaning you have to spend complexity budget on it, perhaps it’s a new space into which you can expand. looking at the world through the lens of a complexity budget changes the conversation away from tiny details about technology, putting us square to questions of strategy.
these are things i have learned from others. if you like the ideas, thank the folks who taught me. if you don’t, it’s my fault.






