Managing Complexity

Blake Lockley
3 min readJan 12, 2021

The best products are simple to use, we’ve known this since 2007. Turns out creating simple software is actually really complex.

Whether you’re building software, hardware, or a designer line of miniature horse saddles, you will be constantly wrangling complexity. Usually, this experience will look like a perpetual Iteration Loop of introducing complexity to improve functionality and refining complexity to improve extendability.

The Best Case

Simple Iteration Loop

This is the best-case scenario. Your product requires a new feature/functionality, you implement the feature (introducing complexity) then refactor out the complexity (improving extendability). Simple.

The Bad Case

Unfortunately, projects don't often follow this tight loop, more often than not functionality and thus complexity is added, but the complexity is not removed. And, for a pretty understandable reason — complexity comes with functionality and functionality mean value.

As an oversimplification let’s say it takes t-time to add functionality and half that time to reduce that complexity back to a simple state. The more complex the product is the more time it will take to add more functionality (thus value) and the more time it will take to reduce complexity.

Complex Iteration Loop

Let’s say it takes 2 hours to add a complex feature to our product, adding the next feature might take 4 hours, and the feature after that an entire day. Already at this point, we have spent almost 2 days on 3 features, and getting back to a usable product might take us another day on top of that. 3 days spent in total.

In the best case iteration loop, if adding each feature to a simple product only takes 2 hours plus 1 hour of reducing complexity, we can get the same 3 features done in 9 hours, maybe even all in one day!

The Problem

More complexity, less extendability, less value over time.

It is difficult to add new functionality on top of an already complex project. Often product teams will be under pressure to keep adding values (whether that’s from Product Owners (POs), Project Managers (PMs), or directly from customers.

Less extendability is not the only issue, this complexity can rear its ugly head in many ways. More complexity means…

  • Longer development times for new features.
  • More chances of issues, bugs, defects, etc.
  • More chances of security holes and obscured vulnerabilities.
  • Frustrated team members that might leave, followed by…
  • Confused team members who are new to the team.

You might end up with an incredibly feature-rich designer horse saddle but a paddock full of unsaddled miniature horses.

The Solution

It’s really simple.

  • Address complexity while you're still in the state of mind.
  • Regularly spend the time to tackle old complexity (tech debt)
  • When you reach a significant product milestone, take the time to tidy up the recently introduce complexity before it becomes tech debt.
  • Leave things better than how you found them. If you are working on a feature with residual complexity take the time to tidy it up before adding more complexity on top.

Most importantly, Make sure everyone knows why managing complexity is so important. It’s easy for those who only see the value to question why time needs to be spent on something else. Show your POs or PMs how taking the time to address complexity means more value in the future.

Share this article with your PM/PO, a great manager will listen!

--

--