As software developers, we happen to come across many business problems with various complexity levels. Although this complexity depends on the nature of the domain sometimes, what I have noticed that product owners add a lot to this complexity themselves without a need!
For once, software developers are innocent here; the product owner, the entrepreneur, or the man behind the niche, these people have a very big responsibility on defining the complexity of the system; most of the time, the complexity introduced to the software was because they wanted to solve everything with a button, maybe two!
Let’s take an example, let’s imagine that we want to create a vehicle, simple vehicle that transports people around, simple project with simple goal. But the product owner finds that this is too simple, and we will loose potential customers if that was the only functionality in the system!
Ok then, let’s add an arm to it just in case if other customers will need a vehicle to remove obstacles, yeah! that sounds good, now our customer base is larger, and this way the possibility of buying our product is larger.
But man! check how big the customer base is going to be if we just cover customer who need a vehicle that lifts people up to fix high points like street electricity bulbs, let’s add that to the vehicle…and the story goes on!
In theory more features is better, right? the problem is that once we bring something to existence, we bring the burden of managing its effect on the things that existed before, and a long with that the burden of managing the effect of the already existing things on it.
Adding an arm to the vehicle will affect the balance, will increase the danger on the passengers, will increase its weight, and certainly having a big space of passengers will not make the work of arm easier.
And this is exactly what happens with a system that tries to solve too many things, starts introducing too many features that affect each other greatly increasing complexity in magnitudes.
I am not saying that you should make your project dead simple and not grow your product; what I am saying is that your project should solve one problem only, this problem can have many small needs and smaller goals, but adding any of these should be checked according to the following:
- can you still use the same words as an answer for the question “what is your product trying to solve” after adding the feature?
- Is it an inherent part of the original solution? does it “complete” or does it “add”?
- If you have customers already, the majority of them might not be the ultimate reference to your decisions, but if the majority of them agree on a need, then most likely it is part of the problem your product is trying to solve.
- The counter point to point #3 above is that, your existing customers might be the pioneers who adopted your product, hence their further needs might be guest solutions to other problems they have that is NOT part of the problem your product is trying to solve; be alert not to be driven away from the original goal.
As for you, my dear Technical Consultant, you have to keep your valuable input to this formula; your responsibility is not only to create what the product owner wants, your responsibility includes warning him, he might not understand the consequences of complicating the solution by trying to solve everything, we have much bigger clarity of the complexity being introduced than what he has; the loops, the decision code structure, the “special” cases, all this you can see very clearly. It is as much of a business problem as it is of a technical one.
P.S. The awesome picture accompanied with this post (slightly edited) is from an inspirational blog post on mylifeinthetechworld , can be found here.