As an avid photographer I’ve learned a lesson that sometimes a well composed photo depends more on what is left out of the photo. More is not always better and can sometimes ruin what could have been a good composition.
As an example, this photo is as was taken. I realized there were distracting elements (the house, dead tree) and the composition was just not one that created a compelling photo. The highlighted section is where the final crop was made. I left out more than I left in and I believe the end result was a more pleasing composition. You can see the final image here but that is not relevant to this article.
I believe this concept can be applied to software development. We talk about determining the minimal marketable features, those that must exist for a product to meet the user’s needs. This requires us to be very intentional about what we leave out. The Standish Group notes that 45% of software features are never used and only 20% are always or often used. Those are astounding figures that illustrates the tremendous potential for wasted effort and time in a software development project. We must become better a composing a frame that contains only those features required to satisfy our customers and leave everything else out of the frame.
These unused features come from many sources: product owners, customers, and even the software development team. We get caught in the trap that we need to capture everything, provide all possible features, or convince ourselves that while we are working in some part of the code there is little cost in adding just a few more capabilities. As well meaning as we believe we are, these non-necessary features exacts a ongoing cost. Costs from unused features that must continue to be tested, increased difficulties for adding new features, and increased technical debt.
Recently I worked with a client that was debating on whether or not to add a capability to allow multiple items to be selected and then updated with the same information or just provide the capability one item at a time. From the customer’s perspective the real requirement was to be able to select an item and update. Doing so for multiple items would be a nice to have but _not_ necessary. After much debate the product owner made the the decision to not add the multiple select capability. It was not a minimal marketable feature and should be left out. It was a beautiful thing.
Always be mindful of what is necessary and be very aware of the true cost of adding capabilities that appear simple to deliver but do not contribute to the final composition. Be ruthless in cropping out unnecessary elements and focus on those items that create a great composition.