Built something so complex I no longer want to deliver it
A friend reached out to me the other day with a question:
How do I tell my team that the project I've been working on has become so complex I no longer want to deliver it? I think it would actually be detrimental to the codebase.
What popped in my mind was: this looks like accidental complexity. That’s something that can be tackled. If you haven’t heard “essential” vs “accidental” complexity before, I bring you a brief explanation.
Essential complexity is the complexity of the problem you are solving. Any solution you deliver cannot be less complex than that complexity, as the solution can’t be less complex than the problem itself. Otherwise, the problem is not fully addressed.
Accidental complexity is the complexity you add to your solution, while building it. There's always some of it. Usually there’s a fair share of it. And also, not so rarely, there’s a ton of it.
So my actual answer to my friend, after explaining “essential” vs “accidental” complexity was:
It sounds like you landed on something that has a lot of accidental complexity, which is common, when you're solving a problem for the first time without having good examples or experience on it.
So now the question is how much would the team like to invest on bringing it down.
You can tell them you have something, but it feels a bit overblown for the problem it is solving, as you were exploring and adapting as you were figuring things out. If someone would pair with you, where you explain the code and both of you work together on making it clean, you would probably arrive at something maintainable. Because as it stands, it's a bit rough
That gives the team an option to double down or back down.