I'm a major advocate of traditional simplicity principles like
KISS,
YAGNI,
DRY, the
Unix Philosophy, etc. I'm also very interested in complexity and solving large complex problems. It occurred to me during an all day "fix this process problem" meeting today that the ideas of
complexity and
simplicity aren't actually antonyms. Sure, by definition, they are, but I think the paradox in that comparison is that perhaps
complexity can be defined as
simplicity that changes over time.
My perception of complex problems is that given the examples of any one particular moment in time, the situation can be easily dissected, analyzed, documented, and understood. Take a sample from the next moment in time and the same is true. Try to combine that collection of understandings into a generalization that can be applied to other past and future points in time and the problem suddenly becomes complex.
One of the observations we get from agile development is that solutions will be more correct, given the flexibility to adjust to customer needs versus following a previously defined historical specification. Agility is the ability to adjust to change.
Therefore,
complex problems should be solvable by solutions that are simple and agile. Solutions do not have to be complex.
We run into challenges designing agile solutions, though. Many traditional solution design tools often call for static process flow diagrams, swim lane control charts, concrete data models, class diagrams, etc. I think that some of the
behavioral object oriented patterns give us some clues on how to introduce agility into solutions, but understanding when to apply those (and how to apply them within some technologies) takes creativity and experience.
I think that introducing that same kind of solution agility into human processes is also very challenging. Often, we want clearly defined instructions and flow charts to instruct individuals on exactly what to do. The only variation being a Madlib style fill-in-the-blank. Perhaps we need
more "and then a miracle occurs" steps in our complex processes. And perhaps that's both acceptable and desirable in some processes.