Complexity is the nemesis of application developers everywhere. While software products' complexity may be, to a great extent, unavoidable, we don't have to complicate software development to match it.
That's the conclusion driving many of the new approaches that app dev teams are embracing. For example, Agile breaks down humongous, complex projects into incremental deliverables that are far easier to scope, build, test, and deliver. Lean practices simplify processes, making it easier for teams to achieve a state of flow. DevOps advocates are trying to eliminate the needless complexities that result from throwing software over the wall from one team to the next.
But there's more to Agile, Lean, and DevOps than just a common enemy. It's no accident that practitioners often speak of this trio in practically the same breath. The Kanban board is the symbol of this convergence of practices. Here's an increasingly common use case: an Agile teams uses a Kanban board to manage work with other groups, including the DevOps team.
The evidence for this convergence is more than just anecdotal. When we survey app dev professionals, they report that they're mixing methodologies all the time, including Agile and Waterfall. For a variety of reasons, Agile teams have made the adjustments necessary to accommodate Waterfall. Not every planning activity at the beginning of a project can be handled in a strictly Agile fashion, and not everyone involved at the end of the project (release management, operations, and business users) is necessarily sold on the idea of rapid, continuous delivery. If you work in a regulated environment, you're required to take extra steps at the beginning and end of a project.
[For earlier posts in this series, click here, here, and here.]
Imagine yourself back in childhood, sitting in the back seat of the family station wagon, en route to one of those long, high-stress family vacations that Americans have honed to perfection. Mom and Dad are arguing over what went wrong so far on the trip, and of course, how they could have avoided these mishaps. Why didn't we ask for directions at the last gas station, instead of letting Dad navigate by dead reckoning? Should someone have called ahead to ensure that there wasn't a problem with the hotel reservations? Who was supposed to remember to pack the camera? Was it reasonable to expect a travel rate of 500 miles a day? Quickly, your vision of vacation as a straight line into the heart of fun evaporates. Replacing it is a circuitous flowchart, each serpentine twist representing a different set of decision points, estimates, and possible outcomes. Who knows what might happen next? The wheels will fall off on a desert highway, and someone will have forgotten to renew the AAA membership?
[As promised, here's the first in the series about the tech industry's drive to reduce complexity.]
Remember the magic number? It's the one thing from Psych 101 that you should recall, since it pertains to memory. The brain has an upper limit on the number of chunks of new data it can stuff into working memory at one time. The number is around seven, plus or minus one or two depending on the person and the task. It's the limitation that makes the old game Simon challenging, and that bedevils us when we try to remember a phone number that someone just told us.
The magic number is one way in which the human brain tries to trim down complexity. Another more recent discovery is the brain's fuzzy boundary between literal and metaphorical statements. Attach a candidate's resume to a heavy clipboard instead of a light one, and the interviewer is more likely to treat the candidate seriously, because the resume seems somehow weightier.
Countless other examples exist where the brain takes shortcuts, filters information, and otherwise simplifies the constant, complex stream of perceptions, thoughts, feelings, and actions that would otherwise turn into a "blooming, buzzing confusion." We're not stupid creatures, but the machine that grants us powerful mental capabilities also puts limits on them.
The Death Star Would Be Great If I Could Figure Out What All These Buttons Do
Ever since I got an iPad, I've been eager for the update to the upgrade to the iOS4 operating system that premiered on the iPhone months ago. The ease of use of the iPad erodes, grain by grain, with each app that you add to it, as long as you're forced to keep sweeping across page after page of apps. Organizing apps into functional groups across pages is a tedious process. After a while, you really feel the need for folders to organize your apps more effectively.
Imagine my disappointment, therefore, when iTunes froze as soon as I launched it. It was the start of yet another chapter in the story of my hate-hate relationship with iTunes, because of its unstoppable bloat and accompanying seizures. With every major update, iTunes grows another layer of fat, causing more frequent electronic coronaries when it needs to run (or waddle) through its paces. I can't say I was surprised that iTunes froze, forcing me to reinstall it (the software equivalent of sending someone to fat camp?) before I could get it working again.
Here, from a single company, on a single desktop, is the history of the tech industry's problems with complexity. A device that is consummately simple to use, the iPad, is handcuffed, like a slender Sidney Poitier to a morbidly obese Tony Curtis, to iTunes. As Apple keeps jamming more of its business plan, in the form of new features (Genius, Ping, etc.) and new content (anything that could be described as "released" or "published"), iTunes swells to ever-increasing levels of complexity.
Recently, I discussed complexity with a banker working on measuring and managing complexity in a North American bank. His approach is very interesting: He found a way to operationalize complexity measurement and thus to provide concrete data to manage it. While I’m not in a position to disclose any more details, we also talked about the nature of complexity. In absence of any other definition of complexity, I offered a draft definition which I have assembled over time based on a number of “official” definitions. Complexity is the condition of: