“The way to build a complex system that works is to build it from very simple systems that work.” – Kevin Kelly, founding editor of Wired Magazine
In many ways, we are most comfortable with complexity. As engineers, we enjoy the process of creating, modifying, re-creating, and maybe at some point in time actually producing something that works. We find that more often than not we enjoy the process more than the creation itself. So we undertake the analysis, re-analysis, re-re-analysis, of solving a given problem and often find the most complex, sometimes most costly, often difficult, solution as it appeals to the problem solver in us all.
I often remember the following cartoon when I am faced with solving a technology problem…
Back in the good old days when I was involved in developing UNIX kernels, we often played games with code trying intentionally to make it as obfuscated as possible. We even gave prizes out for whoever could write the most unreadable code. We considered it a fun way to solve problems and also impress our peers with our programming skills.
What we lost in the process was that there were people actually using our software and that others in the future would have to maintain it. As I look back at code I wrote in the 80s, I have no idea what I was trying to do unless there were some semblance of comments scattered haphazardly throughout the code. It was fun back then, but today I would not be happy having to need to make a code change.
As engineers, we need to maintain the balance between simple solutions and complex answers. Occam's Razor has proven true all too many times for us to ignore it and yet at times we do. We become so enamored of our favorite shiny object that we develop an amazingly transparent blindness to others' blind spots, to anything other than what has become the new toy in our toy box. However, we do know we cannot completely depend on it. We may build large, complex, and even unwieldy, solutions to posed problems, but very often we are solving for things that have never even been presented as a concern.
For my architecture team, we maintain five simple rules:
1. Simple, modular architectures always win
2. Centralize what you can, distribute what you must
3. Silicon matters for scale, availability, and resilience
4. Automate anything that can be automated
5. Support open standards
The more complexity we introduce into an already complex ecosystem creates a difficult road to navigate over time. Each change creates a ping-pong effect that often touches remote pieces of the design in our minds, never to be impacted. But in some small way they are changed enough to cause havoc that we end up spending much time troubleshooting.
Back in my last column, I spent time discussing the delineation between network layers in the cable modem termination system (CMTS) functional block diagram that I've been using for a few articles to show how this simplification may help. Putting the physical layer components (and possibly MAC) into a remote device helps with the scale issues at hand while also simplifying the architecture. (See Embracing Technological Change and Learning From Mistakes.)
There are many ways to solve the same problems using monolithic architectures that are completely sound both technically and financially. But do they get us where we want in the long run? How do we simplify even more? What can we do to not only break the functional blocks and layers apart further, but also provide a communication path between them?
Enter SDN and NFV…
While they are our industry's current shiny objects, if we treat them as another tool in our toolbox they do provide a framework for achieving this goal. I am often involved in discussions about how they can be used to solve almost every imaginable issue simply by decomposing functions or using OpenFlow (or other protocols) as a standard communication mechanism. Realistically, both SDN and NFV are finding their way through the complex organism we call our network. But, in order for them to flourish in our technological world, we need some quick wins to show how they may help.
So what are they? I like to look for ways to reduce the complexity both in design and configuration. As we add more devices, paths, circuits, flows, routes, etc, we make things more complex. As we are required to configure more equipment with device-specific configurations using unique command line interfaces, we simply increase the complexity.
So how can we simplify things? One way is to use an abstraction that allows us to define things in such a way that it is applicable to multiple physical manifestations. Rather than force us to integrate device and service-level provisioning, is there a way to focus on the services and let the devices provision themselves? To me, it is a holy grail in network design and management; but through standardization we are getting much closer.
In the excellent work done at CableLabs, with MSO and vendor support, on Converged Cable Access Platform (CCAP) and DOCSIS 3.1, we are seeing a real-world impact through the use of YANG models for device and service abstraction, and NETCONF for configuring devices. In many ways, this is the beginning of a whole new way to view the cable ecosystem. We are no longer encumbered with doing things as we have always done them; it is a completely new way to envision how we may be able to manage our networks.
Stay tuned for future blog posts and ruminations on ways to think about N2GCable, i.e. the next-next generation of cable we are now entering…
— Jeff Finkelstein, Executive Director of Strategic Architecture, Cox Communications