As a developer, I think the single biggest lack that I see in many of my fellow IT professionals it that they have a mindset of becoming expert in a specific tool or programming language and think that that is the path to success.
While I think that in-depth expertise in whatever your current field is, is a great idea, I think we all should remember that our primary function is an understanding of the process of problem solving and development, and that the IDE's and languages we use are just tools to accomplish that goal.
If I can correctly articulate what the problem or goal is, and the steps needed to accomplish the solution, then the actual coding becomes a detail - the means to an end, and not the end in itself.
Understanding what drives our host business (whether employer or client) is also paramount ... taking 8 hours to optimize the "perfect" code so that I save the company 6 minutes in CPU cycles over the next year may be "elegant" ... but does it make business sense when I'm being charged out at a few hundred Rand (or Dollars) an hour?
After becoming an "expert" in Clipper, dBase IV 2.00, Pascal 7.02, Delphi, ... and spending an incredible amount of time and effort in learning techniques which impressed my colleagues but never actually changed the bottom line for my employer at the time, and found that each skillset become redundant as the world changed around me, I finally decided that what I needed to learn were not the tools and languages of my chosen career, but the techniques and mindset of problem-solving, whch remain a constant and make me valuable to my employer regardless of the actual tool used to acchieve that objective.
What we need in this industry are less product experts and more out-of-the-box problem solvers.