Not OP, but fwiw I think there are 2: Having the communications skills and domain knowledge to understand what problem needs to be solved and why, and having the technical skill to do that in the most direct manner that closely matches those constraints.
Sometimes you need to get better technically, sometimes you need to get better at figuring out the problem (solving the wrong problem isn't worth a lot. regardless how "clean" it is). Sometimes you need to get better at figuring out what you need to get better at.