Simplicity is good. Simplicity is the source of understanding and effectiveness. Lack of simplicity drives misunderstanding and errors.
This shouldn’t be a big surprise to too many people, but I see lots of people forget about simplicity all the time. That’s really too bad, since there’s such a strong correlation between simplicity and success. Let’s look at some areas where simplicity pays off.
Simplicity in Communication
Speak clearly. Write clearly. Watch for fluffy words that sneak into your writing and obscure your ideas. This is very common advice, but too rarely followed. We’ve all seen the effects of overly complex communication: eyes glaze over, drool dribbles out of the corners of mouths, and ideas fall on deaf ears.
Everyone knows someone who speaks or writes much too verbosely. Entire paragraphs are used where a few words would do nicely. When you find yourself unwinding sentences to figure out where you missed a left turn, you’re a victim of unneeded complexity. When this happens to you, pay attention to your ability to keep up with a conversation and actually get anything out of it. It’s a ton more work as a listener, and when you do that to your listeners, you’re decreasing your effectiveness.
Simplicity in writing doesn’t mean lack of color or imagination. Color drives interest, and interest drives understanding. When you read something from an excellent writer, you’ll see both color and simplicity. Each word seems chosen to achieve a specific intent. It’s as if the writer has a limited budget, and is careful not to exhaust his supply, but in reality, the limited budget it the reader’s patience and attention.
Simplicity in Design
There’s a feeling I get when designing software. Designs often start out or pass through a complex period where things seem like they’ll probably work, but there’s a lot of “noise” in the design. It feels like the design is tough to communicate because it’s incredibly intricate or complicated.
On the other hand, sometimes a design is just dead-on. It’s right – there’s no other way of doing something that could possibly be more right. It’s boiled down to a perfect formula, and everything about it gets easier. It’s easy to understand, easy to talk about, easy to advance through development, easy to test, and easy to document.
I believe that almost all complex designs could somehow be refined to be simple. Often, this is hard work that takes a long time and requires intense analysis. Sometimes it’s not worth it. Marginal complexity doesn’t hurt too badly, so strive to simplify when you need to, and leave well enough alone when you don’t.
Simplicity in Coding
It’s a rare case when less code is worse than more code. Most developers have seen mind-bending recursive code that breaks this principle, but it’s uncommon. Far too often, we see page after page of spaghetti code that’s difficult to debug, maintain, and extend.
If you or any of your developers isn’t familiar with Steve McConnell’s Code Complete, I highly recommend you pick it up and give it a read. A recurring theme in this book is the need for deliberate intent in design and code. Each module, each subroutine, needs to have a purpose and a cohesion. This approach yields simple, efficient, maintainable code.
Refactoring is the process of deriving simplicity out of a pile of spaghetti. If you truly end up with simple code as a result, this is a good thing, but watch out for refactoring being used as a substitute for correct understanding and design up-front. It’s all too easy to dive straight into coding without really understanding what you’re building, and end up having to refactor a couple of times because there’s no design to support your work. Simplicity by design beats simplicity by refactoring ten times out of ten.
Simplicity in Marketing
Quick – what does your company do? If you can’t rattle off an elevator pitch without stopping to think about it first, you are suffering from lack of simplicity in Marketing. If you have a hard time communicating what you do, your customers will have a hard time understanding what you do, and that tends to be bad for business.
The concept of “sound bites” in marketing has a questionable stigma, but truth is that when you don’t have this sort of simplicity of message, you don’t have control over your product and your company. Be sure you can tell the difference between a short message and a meaningful message, though. Short is only good if it means something. Watch out for words like “quality”, “usability”, and “scalability” that are completely hollow unless they’re made specific.
Seek simplicity of understanding above all, and then express this with the fewest words possible.
Simplicity in Vision
Vision is a special form of Marketing. Vision is about imparting understanding of something that you usually can’t lay your hands on. Vision is about seeing a future that you can never quite attain, but will always strive for.
People talk about “shared vision” as if there was any other kind. In fact, a vision that can’t be effectively communicated to others is pretty close to a wasted effort. I’ve seen people ranting about how they’ve got a vision for something and it’s up to an audience to figure out what the vision is. Words fail me in expressing my distain for this position.
Vision, much like Marketing, is about leading a group of people to share a common way of thinking about something. This is tricky under the best circumstances, and damned near impossible if you can’t communicate your vision with clarity. The more complex the idea, the more likely someone will be to get it wrong.
Again, seek meaning, not just low word count. “World peace” doesn’t convey as much meaning as “no nuclear weapons anywhere on the face of the earth.” While Marketing is about driving understanding of something that exists, vision is about driving understanding of something intangible, so it’s more difficult to find meaning. Nevertheless, that’s what you have to do in order for vision to be worthwhile.
What to do when you lack simplicity
Many things aren’t, in fact, simple. Fear not, faithful student – half the battle here is just detecting lack of simplicity.
Knowing that something is complex – maybe even a little too complex – enables you to deal with this deterministically. You can deal with the complexity. You can plan for it. You can decide whether to expend effort to make the thing simple or whether to just let it be.
Knowing that there’s an area of complexity in something, allow for more effort whenever working with it. Communicating design, performing maintenance, and so on will take longer and be less reliable. If you have a complex message, you’ll probably have to repeat it a few times before it sinks in. If you don’t like this, simplify. If you can’t simplify, deal with it. In any event, don’t be surprised by the results, because I warned you.
Once you start paying attention to simplicity and complexity, you’ll find that you can predict and/or prevent a lot of problems. It’s definitely worth consideration if there’s a problem you can’t explain otherwise.