November 14, 2007
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.
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.
November 14th, 2007
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
November 15th, 2007
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.
November 15th, 2007
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.
November 15th, 2007
It’s the same with my studies in economy informatics .... Often the simplest solution is the best one and the one everybody can follw
November 18th, 2007
True words! However buisiness itself makes it all much more complicated.
November 26th, 2007
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.
November 28th, 2007
“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.
December 3rd, 2007
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.
December 3rd, 2007
Great article. It helped me right now! =D
December 4th, 2007
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.”)
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.
December 22nd, 2007
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.
December 23rd, 2007
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.
December 27th, 2007
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
December 29th, 2007
Nice article :) Liked reading it.
January 3rd, 2008
Great Article!
It is perfectly suited for the problem it is trying to solve.
Thanks.
January 6th, 2008