But what is to be unprofessional or incompetent? How does it look?
When you start reducing the solution space, looking for feasible solutions that still provides the value is easy to cross the line.
So let's try to separate the solution itself from the implementation of that solution in our code.
We should start reducing the solution space to the minimum that solves our problem, but once you are there, can you somehow simplify the implementation without being unprofessional or incompetent?
If you leave behind obvious pending work probably that is incompetence, if you take shortcuts and does not track them as technical debt probably this is unprofessional.
We need to improve our skill to detect code not good enough as much as possible, and we need a framework to decide when to acquire technical debt, how to track it and when to pay it.