We all do it. I’ve looked back at something that took me weeks to build and said to myself.. wow that could have been far more simple.
I blame it on brain “modes”. When we put our brain into solutioning mode – we forget the problem and begin constructing a solution we can take pride in. I suspect it has something to do with creativity. It’s not limited to software development either – I credit overengineering for that really complex change management process or that 200 page employee handbook you may have been asked to read.
In the end there is far more value in a simple solution to a well defined problem than a sophisticated solution for a variety of possibly non existent ones. So how do we get there?
First break down a technical design into capabilities:
Take that diagram the team has been working on and extract all of the cool capabilities it provides. For example:
– Table A,B,C allow us to have dynamic tags for each directory entry.
– Method X on the code interface returns a description of what this implementation does.
– This service allows other applications to utilize this data set.
Now ask these 7 questions for each capability:
1) Has anyone asked for it. (No doesn’t necessarily mean you shouldn’t do it – but it should be considered).
2) Can we create one or more examples of why someone or something would need to utilize this capability (or you could consider asking – what problem does this solve?)
3) What is the likelihood this capability will be utilized in the next 180 days?
4) How hard will it be to implement this feature later if we decide to wait?
5) If we don’t do this how will it prevent us from achieving our current goal or objective?
6) If we don’t do this how will it impact us or our customers in the next 365 days?
7) Can we simplify by breaking the capability down into smaller pieces?
Understand that the intent here is to create a conversation. There is a certain finesse required when asking these types of questions – especially if team members are invested in the design. Make it clear that the goal is to properly evaluate the advantages of the design so that all can understand the benefits – while making good decisions on what should and should not be included in the current effort.