Show your web app some affection – the KISS principle

You know that story about how NASA spent millions developing this pen that writes in zero-G? Did you ever read that? And how Russia solved the problem?
-Yeah, they used a pencil.

Although not based in fact, this urban legend demonstrates how problems often have an overlooked simple solution.

When building Barometer I could of added a password field, so that a user could login and change their recipient email address. It is easy to think this would be quick to implement.

The Fisher Space Pen

The Fisher Space Pen

However when you think it through this seemingly simple change, it is actually very ‘expensive’. It creates a whole raft of additional costs, including code, design, copywritting, and testing:

  • Initial account creation validation i.e. passwords match
  • Email address validation to ensure the forgotten password function will work
  • A login form
  • Forgotten password link/page
  • Reset password function

However a simple solution already exists. If a user wants a Barometer feedback tab to send to a different email address they just create a new one. Sure this is going to lead to a few extra rows in my database, but this is ‘cheap’ in comparision to my time.

My ‘signup’ form is one field long; your email address. I joke that the signup only takes ’3 seconds’. This ultimately comes to the same thing as creating a password field, but simplifies the codebase greatly, and removes a barrier to signup for my user.

kiss37 Signals make a very interesting point in the chapter Start with No of Getting Real:

Each time you say yes to a feature, you’re adopting a child. You have to take your baby through a whole chain of events (e.g. design, implementation, testing, etc.). And once that feature’s out there, you’re stuck with it. Just try to take a released feature away from customers and see how pissed off they get.

Adding a new feature makes your codebase exponentially more complex, and once added it is there for good. Starting from a ‘No’ position makes you really think and consider a feature’s implications. Often I find there is a simpler way (the KISS principle) to solve the problem, or given the extra work involved in implementing the feature, it is just not worth it.