Getting from complex to simple

Why do some things we use feel so simple and others just get in our way? The world is increasingly complex so any attempts to make our lives simpler are always welcome. Each extra decision causes us a cognitive load and in a distracted environment this can come at a personal cost.

Managing software projects has led me to conclude that, as development leaders, it is our job to ensure that we can make things that are usable and maintainable. If we make something that is hard to use, we put the load on our users to understand. If we build something that is hard to understand by the people who develop or maintain it, then they are less likely to put good thinking into how to make a better experience for whoever has to use it.

Software is complex because it tries to directly reflect a complex world. Often, analysts will analyse a complex business situation and this gets mapped directly into complex requirements. This results in complex software that can be hard to use.

Complexity is propagated

Complexity gets propagated from one person to another. From business to analyst to designer to builder to user. To make matters worse, ask someone what they want from a complex user interface and the chances are that they will ask for a simple extra to make their lives easier. But taking a complicated beast and adding a “simple” alteration makes that beast a little bit bigger and a little bit uglier.

So, how do we get back to simple?

Chances are that things got complex for a reason. What may have started out as an “On” switch can quickly become a beast thanks to demands for a wealth of features.

To get out a of a complexity spiral, someone somewhere has to Man Up and get down to distilling some of the complexity into something that’s easy to consume. But it’s hard to do. To get complexity down to something simple you have understand all the nuances and only then can you see the patterns arise and the elegant shortcuts available. If we’re talking about a complex bit of software then that’s a lot of stuff to model.

Identifying simple patterns from overwhelming complexity is what  may appear to distinguish the truly inspired from merely smart. Getting inside all of that complexity and distilling it down is hard though.

Fortunately, to get to something simpler we have a couple of options.

Break it down

One option is to break it down into a smaller chunk and model just that part. This can help to a degree. For example, if I have a complex app interface I might want to break it down into specific pages and model and simplify each one. That’s fine but I may well miss the simplifying threads tying each part together.

Be less clever and experiment

Another way is to experiment. Admit you cannot or are unwilling to put yourself under cognitive stress to fully understand the thing and just try some approaches that will make incremental simplifications. Get your idea out in the real world, get some feedback then change it, abandon it or accept it’s good enough and move forward. And repeat. Eventually it will all come together and you will look a little bit clever.

This is why iteration works.

Personally, I’ve often found myself using a limited mental capacity to bludgeon my way through a problem in the past. Better instead to set my mind on making things simpler and better, and accept it may take a few attempts to get there, some of which will be plain wrong. But ultimately being wrong is still a path to making it right.