Software is a very malleable thing. Technically nearly every idea we have can be implemented and added to a software product. Knowing when to say “No” and not add features is just as important as knowing when features are important and should be added.
I enjoy using lean software. That is software which presents one key concept and is easy to understand and use. This “Core concept” of a piece of software is really what helps determine what features need to be added and how things should work.
On the other hand, sometimes complexity is required.
However, complexity should not interfere with the simplicity of an application. That is not an easy thing to accomplish though.
I have had the pleasure of supporting some very nasty Excel spreadsheets. These spreadsheets pushed Excel to the limits and included thousands of lines of custom VBScript code which continually refreshed the cells, ran optimizations and interfaced with databases, files and APIs over the network. They regularly crashed because Excel simply isn’t designed to be used in that way. Features had been added over time until it became unmanageable. In the end these features became a major liability to the business.
One of the things that really appeals to me about many of the current Silicon Valley startups is the approach to creating a minimally viable product for a first cut. Get it out there, see how it does and then invest in adding obvious new features after it has gained some traction in the market.
Some Examples of simple apps that just get out of the way and let you do your work: