One critical skill that I have seen in great developers is double-loop learning.
What is double-loop learning?
Good developers are those who keep learning newer, better ways of solving problems. They upgrade their technical skills, learn the latest in the industry and solve problems in the smartest, most efficient way. This is called single loop learning.
Great developers first figure out if they are solving the right problem. What good is it to be efficient if you are solving the wrong problem? Great developers spend a lot of time learning how to get better at identifying the problem, be it by asking questions, understanding the context, or creating ways to get fast feedback on the problem statement. This is double loop learning.
Single loop learning is about using feedback to iterate and reach certain goals. Double loop learning is about turning the feedback loop onto oneself to question underlying assumptions (ie. are the goals itself valid or do they need adjusting).
Double loop learning can apply to individuals, teams or entire organisations. It is one of the mental models that has a large impact on businesses because many teams in large companies are not working on the right problem to start with.
Yet, this concept is a not new one. Chris Argyris wrote about this concept in the context of business organisations way back in a 1977 article for HBR. If you are interested in a more in-depth look at double loop learning, check out the original HBR article here.