(This post is an excerpt from my forthcoming book, Lifeware. Follow my blog [see right sidebar] to catch the publication announcement.)
A paleontologist walks along a canyon. She finds part of a fossilized crocodilian skull in a layer of sandstone. She immediately knows that this creature’s environment was wet and warm, with an abundance of animal and plant life at all layers in the energy pyramid. In fact, that single clue implies an entire ecosystem with an amazing amount of detail.
Her predictions derive from the fact that adult crocodiles are apex predators. They’re at the top of a food chain which stretches down through medium-sized herbivores, omnivores, or carnivores (in modern times, a zebra or jackal, for example), to smaller omnivores and herbivores (fish, turtles), to insects and nematodes and molluscs and arachnids, to plants in a thousand varieties… At every trophic level in the energy pyramid, there’s roughly 10x the biomass of the layer above it, so one crocodile implies a lot of bugs and reeds and mangroves.
Ask a kid for his favorite animal, and you’re likely to hear about an apex predator: tiger, orca, polar bear, great white shark, eagle. The freedom, fearlessness, and power of these animals captures our imagination.
Kids who grow into software engineers have an affinity for complex software “organisms” with highly developed competitive advantage. They still love apex predators.
As my friend Chris was pointing out to me yesterday, a highly evolved design comes naturally in software. Structural engineers are constrained by gravity and tensile properties of steel to not attempt bridges across the ocean; software, on the other hand, has much fuzzier (and more poorly understood) limits.
But here’s an important lesson from biology: apex predators require a rich, layered ecosystem in which their adaptations can shine. Take a crocodile and plop it down in the middle of the Sahara or the artic tundra; how long will it survive?
Software is the same way. If you are designing an enterprise application that offers rich reporting, seamless transitions to and from the cloud, sophisticated licensing, integration with management frameworks and directory services, single sign-on, and industrial-strength security, you are designing an apex predator. That’s cool. But is there enough “biomass” in the environment to sustain your killer app? The enabling environment has to include trained support and sales staff, analysts, VARs, professional IT organizations with time and budget, a friendly legal climate, whitepapers, a developer community, and so on and so on. If you don’t have this, your apex predator will die. Make sure you understand the ecosystem implied by your design; addressing the environment is as much a part of the design and development as the UML diagrams and the WSDL.
Cheating is possible. You can keep crocodiles alive in a zoo without an acre of mangrove swamp, and you can short-circuit VARs and skimp on whitepapers and so forth. But cheating is expensive and suboptimal. And even cheating requires plenty of planning and investment.
An alternative to cheating is to not try to build your apex predator until the ecosystem evolves. Maybe you should settle for a handful of snapping turtles and a snake, until the swamp’s big enough to house a crocodile. Snapping turtles might not be a bad business… This choice isn’t the same as abandoning a vision–it’s just realizing that ignoring the timetable of evolution may be unwise.
Look at your roadmap. Is the next round of releases going to drop an “apex predator” on the market like a crocodile in the arctic? What must be true of the ecosystem for the product to succeed, and how can you make those things true?