Sometimes I think humans have a fondness for complex things. This fondness seems to be especially true of engineers, software developers, software designers, and others with scientific or maker-oriented minds. Perhaps it isn’t all our fault, maybe it was just our childhood. Who doesn’t remember the game Mousetrap?
Mousetrap is a classic example of Rube Goldberg machine, an intentionally over-complicated solution to a simple problem. I have to admit that I love a good Rube Goldberg machine, something about the creativity that the intentional complexity brings out is just fascinating. And, if you remember Mouse Trap, then you are probably a child of the 80′s and you also remember Back to the Future and The Goonies. The real test is not just whether you remember the automatic dog feeder or the gate opener in these movies, but whether you tried to build your own versions of these and other overly-complicated machines. I know I spent more than a few evenings running string, tape, and other components around by bedroom to create a “better” way to open the door.
The problem with our love of complexity is that we sometimes overlook that the best solution is also the simplest solution. The KISS principle and other variants are so popular because they remind us of what we should already be thinking, that we should aim for simplicity in our design. Imagine for a moment that you are Kelly Johnson and you are working on a team designing the most advanced (and IMHO the coolest) planes ever conceived. You have any resources you need. You have some of the top minds in the world working with you. You have an open check book. You are designing war planes, which by definition have to operate under combat conditions so they will be broken, they will need repair, and they will need maintenance. Under those combat conditions, you won’t have all the resources you need, you won’t have the tops minds in the world, and you won’t have that open check book. A broken war plane is a useless war plane thus, the mechanic with basic tools working in a combat situation must be able to keep the plane operational. So, if you really are Johnson, you hand your team the same set of tools that field mechanic will have and in so doing, you clearly define one of the goals of your design is simplicity.
As intriguing as I find the creativity in complexity, I also find inspiration in simplicity. It was the simplicity of a single product that inspired this post.
Yes, that is my shower mirror. For some time now, I have preferred to shave in the shower and I would recommend you give it a try. You might be wondering just how complicated a shower mirror could get. Well, the thing that makes this product so remarkable is its simplicity. This is (at least) the third “fogless” shower mirror I have purchased and it is also the one I have had the longest. There are over 100 shower mirrors on Amazon, some of the mirrors attach to your shower head with telescoping arms, some have lighting, some a place to hold your razor, some of them magnify, and some attach with suction cups. Many claim to be fogless, others don’t bother. Of the ones that claim to be fogless, some have special coatings on them, some have special water chambers, and there are some that recommend that you buy some spray used by divers to prevent fogging on their goggles. All too complex and as a result, my past mirrors all had to be retired after various failures such as they just wouldn’t clean just wouldn’t stick anymore. This mirror, which just happens to be one of the cheapest you can buy on Amazon has been the best. So what makes this mirror so simple yet so effective?
The design. It is only two pieces. The mirror itself is just an acrylic mirror with a circular hole. The attachment mechanism is just a hook, like an ordinary peel and stick Command hook. There is no lighting, no suction cups, nothing complex. However, it is the fogless part that makes this mirror stand out. No, there isn’t a special coating or water chamber, in fact as best I can tell, there is absolutely nothing special on this mirror to prevent fogging. The genius in the solution is that it just hangs on the hook and fog is eliminated by simply removing the mirror from the hook and placing it under the running water for a few seconds. It is because of this simplicity that I have never had to clean the mirror, apply a special film, and I’ve never had to deal with it falling off during a shower.
What things do you use in your daily life that could be simplified? I know one that has always bothered me is an elevator in a two story building. My issue is not with the users who prefer the elevator over the stairs, I know that stairs are not feasible for everyone, my issue is with the buttons. Once I’m inside the elevator, if there are only two floors in the building, why should I have to press a button to tell the elevator where to take me? Yet even though I can see the simplicity from the perspective of user of the elevator, I realizee that in simplifying for the user, we must consider what complexity is needed to support this user perceived simplification. What if no one got on the elevator, how would the elevator know that it should not waste energy and bother going to the next floor. Perhaps a motion sensor or weight sensor could solve this problem, but now we are introducing complexity. Which is more likely to break, a sensor or a button?
The elevator example illustrates one of the problems with simplifying; sometimes when simplifying for one task, you are complicating another. Perhaps the complex solution is the right solution. After all, is a single button really that complex?
I will end with a story of both simplicity and complexity from a real world problem faced by a team with I was working with. We had been working many late nights to meet a tight deadline. It wasn’t just any arbitrary deadline, missing this deadline would mean stiff financial penalties for our customer. Our customer was a major financial institution and the solution we were working on was going to being processing transactions driving an important revenue stream. It had to go in on time and it had to work. When approaching time to go-live, we discovered an issue. The issue was not any fault of our team or the customer, the design in place was solid. The problem stemmed from another component, outside of our control, that simply could not keep up with the expected volume. Luckily, our load-testing had caught the issue before going live, however we knew that the simplest solution, fixing the component causing the problem would never be done in time and we were not even sure the component could be fixed at all. We were forced into complicating our design ever so slightly, by implementing some queuing / throttling into our components. As it turned out, the problem component that we were dealing with had a sweet spot, if we kept the number of transactions within a certain range, it would hum along at its optimal performance level. Unfortunately, we did not have enough time to build and test our new throttling capability before going live. Faced with this dilemma, we found an even simpler solution which required a person watching a folder for files and manually moving them into another folder. This multi-million dollar project was now up and running, processing live transactions for real world dollars with a human watching over every single transaction. Obviously this was not a long term plan, but it bought us a week to fully implement and test our throttling solution. The week long manual solution worked perfectly and the throttling solution went in over the weekend. The project had been a success and helped the customer achieve an automation level they had not thought possible. Sometimes, the answer is simple and perhaps even simpler than you can imagine, the mechanical turk comes to mind.