Don't Complicate the Solution

Designing software is about solving problems. Whether it’s a website, a desktop application, or a server tool, software is supposed to meet a need. We live in a world where many of those problems are extremely complicated. Too often I see people — very intelligent people — solving real-world problems with complicated, real-world solutions.

The definitions in their software must match real-life terminology, or their solutions must meet real-world expectations eye-to-eye. They spend days, sometimes months, toiling over their solutions, writing and rewriting code into a complicated mesh of logic and conditions.

And these solutions work. It’s not like they’re broken. They accomplish their goals, sometimes very successfully. But I can’t help but think that it just doesn’t have to be so hard.

Simplify the Problem

One of my favorite quotes is “Simplify the Problem, Don’t Complicate the Solution.” Before you attack a complicated, real-world problem with an equally complex solution, step back and see if you can’t figure out a way to make the problem simpler to start with. Simple problems make for simple solutions. Not always the most simple to develop, but the simplest to use. Complicated requirements almost always mean complicated software, both to develop and to use.

It’s Just Natural

When I think back to my days studying physics, I was always amazed that some of the most influential, ground-breaking physical discoveries were based off the most simple physical equations. Take Einstein’s e=mc2. Very simple equation, amazing implications. Nature simplified a very complicated problem down to something very simple. This repeats itself all the time: Newton’s second law of mechanics, the Maxwell equations, Lorentz’s equation, gravitation, and many more.

Redefine the Problem

Software gives you a marvelous opportunity to simplify real-world problems by just defining them to be simple. Take one of my favorite math jokes. (I know this makes me a geek, but it helps make my point. Give me a break.)

An engineer, a physicist, and a mathematician are shown a pasture with a herd of sheep, and told to put them inside the smallest possible amount of fence.

The engineer is first. He herds the sheep into a circle and then puts the fence around them, declaring, “A circle will use the least fence for a given area, so this is the best solution.”

The physicist is next. He creates a circular fence of infinite radius around the sheep, and then draws the fence tight around the herd, declaring, “This will give the smallest circular fence around the herd.”

The mathematician is last. After giving the problem a little thought, he puts a small fence around himself and then declares, “I define myself to be on the outside.”

Whether you understand the first two solutions doesn’t matter. You should, however, be able to see the beauty in the last. As this example is meant for humor, it’s obvious the simple solution here isn’t the most effective. But hopefully you get the point.

Wrapping Up

Make your solutions simple. If looking at your code, your interface, or your users reaction makes your head hurt, your solution is probably way more complicated than it needs to be. And sometimes you can’t simplify the solution by reworking the same problem. Sometimes you need to rethink the whole scenario, including the problem itself.

Post and Author Info.

Published November 14, 2007 by:

This article is tagged with problems, simple, software, and solutions.

Commenting is currently off for this post.
So far there are 17 comments.

17 comments

Another interesting thought is that e=mc2 doesn’t always hold true. It does in most cases, at least the cases that Einstein cared about (or knew about). But it breaks down under certain circumstances. That doesn’t make it less valuable. It is perfectly suited for the problem it is trying to solve.

One simple solution for the majority of cases and different solutions for the edge cases.

I´m tired of seeing complex solutions to simple problems.

Take for example the simple case of a company that needs to put a catalog of their products online. Simple problem… complex solutions.

I´m planning on releasing a solution to that problem as open source by next February

A lot of those ‘very intelligent people’ you refer to, often come up with complex solutions to try and show off…in an effort to make themselves look more skilled than they need to. There’s plenty of examples of that in Web Design (especially older sites on the Web) – where the solutions have been far to elaborate and complex…and using too many scripts when they weren’t needed in the first place.

Me, I’m a fan of graceful, simple and effective solutions…(if something can be done well in five steps, why do it in ten?!) I am constantly trying to bring simplicity to my own solutions, but I also hope that isn’t interpreted as me not being smart enough to do something more complex if needed.

Brandon: Very true. It’s a simple solution that meets 99.999% of the need.

Matt: I agree that simplicity can be misinterpreted. But I would make the case that simplicity shows more control over the medium. In software, nearly anything can be done. But that doesn’t mean it should.

It’s the same with my studies in economy informatics .... Often the simplest solution is the best one and the one everybody can follw

True words! However buisiness itself makes it all much more complicated.

Sad but true. Too many employees seem to believe that creating a complex solution is a sign of their professional experience and skills. In fact it’s the simple, graceful and easy to implement solutions that are real challenge.

“Simplify the Problem, Don’t Complicate the Solution. .....Sometimes you need to rethink the whole scenario, including the problem itself….......I love these two sentences…Thanks Amigo…..really great lesson for me.

Good advice but it does take some practice to routinely follow those steps, as I believe it is probably natural for people to want to give complicated problems a equally complicated solution because it almost seems “simpler” that way.

Great article. It helped me right now! =D

Case in point: Recently attended a company meeting where we were told our complex software product is getting whupped by simpler, leaner alternatives. Why? Because we have features, aka “requirements,” that no one actually requires. Simple problems, complex solutions.

(Sadly, it’s unlikely to change. When someone asked, “So when do we start culling the unnecessarily complex features?” the answer was, “Never—someone out there might be using them.”)

coward (the anonymous kind)coward (the anonymous kind)

December 10th, 2007

Very true, your Wrapping Up section says it all and i’m a great fan of this.

I am very prone to trying to work a solution for that long pulling my hair out, then just turn around and say you know what i’m trashing this and starting again much to peoples dismay.

Also slightly unrelated, i’m “still” not used to your new design. The font needs to be several shades lighter so there’s more contrast with the background.

good hints. i think its a great “first step” to think about it and definate the goals, after that starting the programming … thats a point i allways stuck with but i will learn it with the time (i hope so :) merry xmas all.

It´s normal that most people go the difficult way, if they have two possibility´s. It´s the human nature to make a little problem to a big problem. Chinese people solve Problems better.

I just want to say that it is very useful article and it helped me a lot. Thank you and sorry for my previous comment

Nice article :) Liked reading it.

Great Article!

It is perfectly suited for the problem it is trying to solve.

Thanks.


You are viewing a mobilized version of this site...
View original page here

Mobilized by Mowser Mowser