Over the last couple of months I have found myself thinking time and time again of this quote attributed to Bruce Lee:
“One does not accumulate but eliminate. It is not daily increase but daily decrease. The height of cultivation always runs to simplicity.”
When working on or reviewing technical architecture, software designs or code I always feel un-easy if the solution is starting to seem complex or big. For some, size and complexity may appear impressive but, for me, creating great software is about finding simple solutions. Why do I think this? Three reasons:
Simple solutions enable you to be more agile.
Projects need to be agile to support the businesses of the future which will be agile. Complex solutions do not lend themselves to agility. In Getting Real (an eBook from 37signals who created BaseCamp, CampFire and Ruby on Rails) this is described aptly:
“You’d think that twice as much code would make your software only twice as complex. But actually, each time you increase the amount of code, your software grows exponentially more complicated.”
It goes on to describe how reducing the size and complexity of the code reduces the level of management required, the amount of maintenance work and the number of bugs.
This matches my experience. As I described in this post, reducing the size of a code base enables you to innovate more rapidly and reduces the cost of maintaining and updating your product.
Simple solutions require significantly less effort to develop.
It stands to reason that if you are writing fewer lines of code then your project can be completed in less time. But there are other savings as well. As Jamie Arnold put it in his post about the agile delivery of a large government project:
“Had we focussed on fewer things from the outset, the overhead of getting people up to speed and the additional communication needed to manage this would have been far less and our momentum would have increased. Lesson: We should have committed to doing less.”
Simple solutions allow you to deliver more value.
It is my belief that all projects should aim to deliver as much value as possible, as quickly as possible. Choosing a simple approach enables this. This idea challenges the notion that you should always deliver exactly what is requested/required at the outset. Getting Real has advice in this area too:
“The key is to restate any hard problem that requires a lot of software into a simple problem that requires much less. You may not be solving exactly the same problem but that’s alright. Solving 80% of the original problem for 20% of the effort is a major win. The original problem is almost never so bad that it’s worth five times the effort to solve it.”
Sometimes this may mean changing a business process to fit a simpler software solution. And if you do decide to change a business processes you may well find that it can benefit from a reduction in complexity in the same ways that software does.
Perhaps all of this advice is best summed up by a quote widely attributed to a man who evidently knew a thing or two about software development, Bill Gates:
“I choose a lazy person to do a hard job, because a lazy person will find an easy way to do it.”
Image source: Flickr.com