Complexity
Often times, software engineers are faced with the prospect of adding new functionalities or checking in new code that seems to be beneficial but are not core to the product, things like additional settings, corner cases, functionality for power users, etc.
The common reasoning is and especially when the feature is already implemented: why not? What do we have to lose? We already wrote it. It will provide the customers with more options.
In reality, these small changes introduce friction and complexity on the engineering team, the product experience and the code base. They are costly and need to be continuously maintained and supported. They end up anchoring and bugging down the product team.
It is one of the reasons why innovation usually emerges from startups rather than from the incumbent companies.
The incumbents are hooked down by many anchors, complexities and legacy logic that scatters their attention and reduce their velocity.
So what to do to avoid this?
Experienced product managers and engineers understand the cost of complexity and strive to keep the product experience simple and targeting the majority of the users only.
Non experienced ones have the tendency to cater for all scenarios and flows. This can have devastating impact on the product and company.
As a rule of thumb once the if and elses are widespread in the requirements and if the flow feels complicated with many steps and clicks, the engineering team has to go back to the whiteboard and revisit the product experience.
Architecture matters too. Having capabilities in the software stack to launch isolated experiments with minimal debt will allow the team to launch and test new features with minimal disruption to the overall flow.
Finally, allowing time to refactor every then and while to clean up and consolidate the different changes that invariably piles up with time will keep the codebase lean and maintainable and the team agile and able to respond quickly to changes and new requirements.
Software Engineering from the Frontlines Course on Maven
If you liked this article, I will be teaching a “Software Engineering from the Frontlines” course on Maven where I will teach hard-learned lessons I acquired developing large-scale products at companies such as Uber, Airbnb, and Microsoft.