- "Simple" is not the same thing as "easy to do/understand."
- Sometimes something that is "simple" is easy to do or easy to understand. Whether or not it is easy, is often more closely related to how familiar or intuitive it is. Eventually, it may be quite simple to do or understand. But initial attempts to do or understand it may be anything but easy!
The simpler solution may require us to learn something new, and think about something in a way that hasn't occurred to us before. Closed-minds will often close-doors on new ideas (simple or otherwise) because they simply don't want to entertain changing their current views and beliefs. - "Simple design" is not the same thing as "simple to develop/deploy."
- If it's simple from the get-go, then it may perhaps be simple to develop/deploy. If the solution is already in place, then making it simpler may involve changing a lot of minds/behaviors as well as a lot of the system, and both of those may be anything but easy to do (especially changing minds/behaviors).
- "Simple" is not the same thing as "good enough!"
- Put another way, Simplicity != Sufficiency. "Good enough" has more to do with whether something is sufficiently workable "for now" while still fostering subsequent improvement or refinement for later. That doesn't mean the deployed result is simple/simpler; it just means we may be better served by getting to that point in an incremental and evolutionary (emergent) fashion.
In order for that to be true however, it means that the partial/incremental solution must be easy to subsequently change in order to refine and improve!!! - If I install something that is incomplete with the intent of making it more complete, and if it is very hard/painful to change, then I may end-up with the current-state-of-affairs for a number of IT solutions and business-processes: short-sighted, insufficient solutions that the organization defends, and chooses to suffer and impose on others because they don't want to suffer the impact of the change that could bring about relief from the suffering they have become accustomed to living with.
- "Simple" is not the same thing as "simplistic!"
- A simplistic solution often does not work! One definition of "simplistic" might be the false appearance of simplicity. It's not enough to seem/appear simple. It also has to work (successfully) in order to actually be simple!
Many times someone will discard or exclude a suggestion because it introduces something additional or new into the current design, and they don't want to add anything more/new in the name of simplicity, but they may be being simplistic instead. If the new/added thing is a rightful part of the problem that needs to be solved, then its introduction is correcting an act of omission in the solution design that neglected something essential in the problem-domain.
Sometimes we exclude things that we don't want to see (in the name of simplicity) which are nonetheless a real-world element of the problem we need to solve. Dismissing them in the case where ignoring them has failed to solve the problem, is not simplicity; it is ignorance. It is okay to want something that is "stupidly simple," but not at the expense of being simply stupid!
If the result doesn't do what it's supposed to do when it's supposed to do it, it may seem simple, but, as Gerry Weinberg points out, it's likely that something crucial to the problem statement was omitted or misunderstood either in the design, or in the problem statement itself. - What is "simple" for one request may not be "simple" for the whole!
- When faced with a single, seemingly simple request to enhance a system, the requestor may want the specific solution to be simple for their particular situation and perspective (this is sometimes called "point-based thinking"). But what usually needs to be simple is the resulting overall system. Making it simple from one view or situation may just compromise other parts (and stakeholders) of the system. That's not eliminating complexity; it's not even "sweeping it under the rug"; it's just sweeping it onto someone else's doorstep.
Note how a lot of these myths/misunderstandings are more about resistance to changing our thinking/behavior than about being simple.
The Agile Manifesto defines simplicity as "maximizing the amount of work not done." But I think that's a more accurate characterization of Lean than of simplicity.
Recently, I looked though a number of sources of information about what is the meaning of "simplicity" and what are its principles, and I came across a number of interesting resources:
- A Forrester report on The Power Of Simplicity In Application Development
- The MIT Media Lab's SIMPLICITY Project and
Maeda's Thoughts on Simplicity Blog - Principles of Design from the W3C
- Principles of Landscape design, including Simplicity, Variety, Balance, Emphasis, Sequence and Scale.
- KISS Principles for Object/Relational DB Mapping
- An essay on Elegance and Simplicity & Scale
- Wikipedia entry on Occam's Razor
- The entry on "Simplicity" from the Stanford Encyclopedia of Philosophy
- University of Wisconson's webpage on Simplicity, Unification, Parsimony, and Occam's Razor in Science
- An essay entitled The New Science of Simplicity
- Edward DeBono's principles of achieving simplicity
- a DM Direct special report entitled A Simple Plan: Embracing Simplicity Can Reap Huge Business Intelligence Benefits
- a paper on the Simplicity Principle in Human Concept Learning
- Some Design Principles for Simplification from the SAP Design Guild (and a corresponding webpage of resources on simplification)
- Various sources of quotations about simple/simplicity, such as ThinkExist, QuoteGarden, Quotes of the Heart, Brainy Quote, Albert Einstein quotes, quotations on simplicity of design and quotations about software design
- Simplicity involves being able to see the whole from a systems thinking perspective while at the same time being able to focus in on what is relevant and essential and how it impacts the rest of the system.
- Sustainable simplicity often has to evolve or emerge on it's own from a set of simple guiding rules.
- The opposite of simplicity is complexity (as opposed to "hard" or "difficult" or "time-consuming" or "labor-intensive")
- In mathematics, simplicity is often "elegance" and is more than just the intersection of "what is necessary" and "what is sufficient"
- In architecture, "simplicity" is often synonymous with "beauty"
- Hiding complexity isn't the same as removing complexity.
- Many of the tools we use to manage complexity in systems design may in fact add more/new objects to hide complexity or separate concerns
- Minimizing dependencies throughout a system is more critical to simplicity than minimizing the number/types of objects
- Occam's Razor does not in fact say that the "simpler explanation is better" ... it says that the explanation that makes the fewest assumptions and poses the fewest hypotheticals (i.e., minimizes the number of "given" and "unproven" conditions) is the most preferable because it is easier to comprehensively test in order to prove/disprove.
I think that true simplicity is about minimizing and managing overall complexity. Complexity in software design and development comes from the sheer size and complexity of the problem we are being asked to solve, and the richness and vastness of the interconnected maze of interactions within the system and between the system and its environment.
- The overall complexity of the system is dominated far more by the interactions between the parts that makeup the whole than it is by the parts alone.
- For any non-trivial system, simplicity often has less to do with the number and kind of different things involved and more to do with the number and kind of interdependencies between them.
When dealing with large or complex systems (like most software, and software processes) the number of things (scale) and different types of things (diversity) that need to be managed is overwhelming. If we can come up with a modicum of modest, simple rules & principles to govern our design decisions in ways that help us minimize and manage interdependencies, eliminate constraints, and remove waste, then we are on the path to solving the real problem and meeting stakeholder needs in a way that is both simple and sustainable.
I'll close with my collection of favorite quotes on simplicity and simple design from the sources I culled above.
Everything should be made as simple as possible, but not simpler.
-- Albert EinsteinThree Rules of Work: Out of clutter find simplicity; From discord find harmony; In the middle of difficulty lies opportunity.
-- Albert EinsteinFor every problem there is a solution which is simple, clean and wrong.
-- Henry Louis MenckenThink simple as my old master used to say - meaning reduce the whole of its parts into the simplest terms, getting back to first principles.
-- Frank Lloyd WrightBeauty of style and harmony and grace and good rhythm depend on simplicity.
-- PlatoThe ability to simplify means to eliminate the unnecessary so that the necessary may speak.
-- Hans HofmannMaking the simple complicated is commonplace; making the complicated simple, awesomely simple, that's creativity.
-- Charles MingusEverything is both simpler than we can imagine, and more complicated that we can conceive.
-- GoetheThe whole is simpler than the sum of its parts.
-- Willard GibbsThe pure and simple truth is rarely pure, and never simple.
-- Oscar WildeAny intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius--and a lot of courage--to move in the opposite direction.
-- E. F. SchumackerBesides the noble art of getting things done, there is the noble art of leaving things undone. The wisdom of life consists in the elimination of nonessentials.
-- Lin Yu TangVery often, people confuse simple with simplistic. The nuance is lost on most.-- Clement Mok You can't force simplicity; but you can invite it in by finding as much richness as possible in the few things at hand. Simplicity doesn't mean meagerness but rather a certain kind of richness, the fullness that appears when we stop stuffing the world with things.
-- Thomas MooreThe point of philosophy is to start with something so simple as not to seem worth stating, and to end with something so paradoxical that no one will believe it.
-- Bertrand RussellThe aspects of things that are most important to us are hidden because of their simplicity and familiarity.
-- Ludwig WittgensteinManifest plainness, Embrace simplicity, Reduce selfishness, Have few desires.
-- Lao-Tzu, Tao Te ChingSimple things should be simple and complex things should be possible.
-- Alan KayThe key to performance is elegance, not battalions of special cases. The terrible temptation to tweak should be resisted unless the payoff is really noticeable.
-- Jon Bentley and Doug McIlroy... the purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.
-- Edsger W. DijkstraSimplicity and elegance are unpopular because they require hard work and discipline to achieve and education to be appreciated.
-- Edsger W. DijkstraBeauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defense against complexity.
-- David GelernterFools ignore complexity; pragmatists suffer it; experts avoid it; geniuses remove it.
-- Alan PerlisTechnical skill is mastery of complexity, while creativity is mastery of simplicity.
-- E. Christopher ZeemanArchitect: Someone who knows the difference between that which could be done and that which should be done.
-- Larry McVoyOne of the great enemies of design is when systems or objects become more complex than a person - or even a team of people - can keep in their heads. This is why software is generally beneath contempt.
-- Bran FerrenA complex system that works is invariably found to have evolved from a simple system that worked.
-- John GallThe most powerful designs are always the result of a continuous process of simplification and refinement.
-- Kevin MulletThere are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
-- C.A.R. HoarePerfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away.
-- Antoine de Saint-ExupérySimple, clear purpose and principles give rise to complex intelligent behavior. Complex rules and regulations give rise to simple stupid behavior.
-- Dee Hock