Rarely, if ever, do we talk about complexity within its rightful context – complexity for whom. Is a solution complex because it’s complex for the end user? Is it complex if it’s complex for an API consumer? Is it complex if it’s complex for the person maintaining the API service? Is it complex if it’s complex for someone outside the team maintaining it to understand?
This is something I think about constantly. Once you get the feel for it, you can start thinking intentionally about how you want to push around complexity, where it ought to live.
"Fools ignore complexity. Pragmatists suffer it. Some can avoid it. Geniuses remove it."—Dr. Alan J. Perlis, "Perlisisms: Epigrams in Programming" (1982)
We build up libraries of patterns to manage and sanitize problems rather than lifting our point of view and removing the problems.
I think programmers torture themselves with this! The constant pursuit of the perfect abstraction in the hope of removing complexity causes programmers to add accidental complexity more often than it causes them to come up with a genius stroke that eliminates it in a poof of logic.