Andy Hunt describes in his book: Pragmatic Thinking & Learning the Dreyfus model for skill acquisition. It is a model that breaks any given skill level into 5 different stages: Novice, Advanced Beginner, Competent, Proficient and Expert.
The model will for each level describe how the person handles problems and tasks. The idea is that it will be easier to improve your skill once you know your current level and what that implies.
If you are in a position that you are leading someone then this model is particularly useful. Treating an expert knowledge worker as a novice is a safe path to mistrust and unproductivity. The model also relates to the findings of David Dunning and Justin Kruger in their work called the Dunning–Kruger effect. It basically says that the more you know, the more you realize that you really do not know anything. It also points out the contradiction that a knowledge worker at the two lower levels will often speak with more certainty than the ones above.
Novice is the first skill level. This is where one is a total beginner. The focus is on strict rules and if something goes wrong the novice are generally clueless on how to proceed. There is no focus on the context and everything is considered equally important. The novice depends on rapid feedback: is what they are doing right or wrong, good or bad.
Here the practitioner have some sense of context and can do some basic troubleshooting. Advanced beginners want information fast. When learning a new framework or programming language the advanced is not interested in being spoon fed the basics yet again or go through a lengthy description about a particular problem. A quick answer that works, often found on StackOverflow, will do.
The advanced beginner is not interested in the big picture. When the company is assembled to get a company status, for example, the advanced beginner does not think this concerns her. It is though of being out of her job description and discarded as irrelevant, when it is in fact very important. After all one of the main premises for her having a job is that the company is doing well financially.
The competent workers can develop a conceptual model of the domain and work effectively with that model to solve novice problems. Problems that they have not faced before. They can find information from experts and use it effectively. Their work is based on deliberate planing and passed experiences. However they still have trouble finding out what to focus on, i.e., everything is considered equally important.
The proficient practitioner wants the context, and is annoyed over simplified descriptions. The big step and difference here, from the competent level, is that here we have the ability to self correct. Both from own experiences and from others. We can also apply maxims in the correct way.
One example of a maxim is, in xtreme programming(XP) and test driven development, that one should test everything that can break. For a novice this would mean to test literally everything. The proficient practitioner knows that it would be foolish to test everything. “Getters” and “setters” in a domain transfer object for example is not necessary to test. Neither is the programming language constructs or the frameworks one uses.
The expert rely more on intuition than strict rules. He considers the context and has a vision of what is possible. The expert has deep technically knowledge. There are not many expert world-wide. They are the ones that create jobs, invent new technology, see solutions on problems that others don´t see. And see problems where others only see green fields. They should be held up high and get the freedom they require. I have yet to be working with one. Although I have worked with several people that considered themselves as one. By one theory it takes at least 10.000 hours of deliberate practice to become expert in a field. Deliberate practice is different from practice. Working on a project where you do the same work over and over again does not improve your skills. You have to seek out your weaknesses and improve upon them by training, exploring, studying, failing and thereby learning.
The Dreyfus in the field of IT projects
One aspect of the Dreyfus model that I clearly see on the projects that I have been working on is the context part. When I starting working on my first project after school I was totally focused on the technology and how it was working. It is necessary, but maybe if I had known about the Dreyfus model I would have tried to see more of the functional requirements, listened to the project manager or the functionally responsible a bit more.
Also there is a trend now to categorize developers into front-end and back-end. You can make a killer good front end but without the context of the back-end there is a good chance that you are implementing the wrong functionality.