To answer you question. The problem could be complex, the solution could be complex, the environment could be complex. In software development (not programming alone) we try to reduce or remove complexity. If we have to manage complexity we are on a bad path, probably we didn?t think deep enough to understand the problem or the solution. I think solutions could be always simple and many people around here hopefully agree with that. But most of the time the deadline is biting us so that we are working in a hurry and instead of reducing the complexity we are doing the opposite - and than we are doing something wrong.