When do we reach the expert stage?

In a previous post, I discussed about the Dunning-Kruger effect. As a brief summary, it means: “people reach erroneous conclusions and make unfortunate choices, but their incompetence robs them of the metacognitive ability to realize it”. When you are aware of this result, you just ask yourself whether it’s normal to be confident in a domain.

So, how do we acquire skills? Perhaps, you know the Dreyfus model:

The Dreyfus Model of Skill Acquisition postulates that when individuals acquire a skill through external instruction, they normally pass through five stages. This model, first proposed by Stuart Dreyfus and Hubert Dreyfus in 1980[1] proposes that the five stages of skill acquisition are: Novice, Advanced beginner, Competent, Proficient and Expert.

In the novice stage a person follows rules that are context free and feel no responsibility for anything other than following the rules. Competence develops when the number of rules becomes excessive so organizing principles need to be developed and information sorted by relevance. Competence is characterized by active decision making. Proficiency is shown in individuals who use intuition in decision making and develop their own rules to formulate plans.

This picture gives a good representation of the five stages.

Dreyfus Model - Credits: vitorpamplona.com

Dreyfus Model - Credits: vitorpamplona.com

The Dreyfus model and developers

It’s a common situation with developers: we have just studied something in a book and some of us think that they are experts in the domain. We often observe this behavior with young developers. In my opinion, many of us stop the learning curve on Advanced Beginner. Some book series are completely based on our wishes to learn things quickly: just look at this amazon research.

This Dilbert comic strip make a funny representation of this situation (but with a MBA owner in this particular case)

Credits: Dilbert.com - 2009/05/19

Credits: Dilbert.com - 2009/05/19

We must considerer this model because our objective is to reach the next stages as soon as possible. Imagine that your team is doing a project which lasts one year. Afterwards, you have to rebuild exactly the same project from scratch: how long does it take to complete it? Maybe, your team has now experience and it will be accomplished in half the time. The reason is that your team has learnt for one year and it is not anymore at the “novice” stage. We can progress quicker when we have an immediate feedback on our work because it avoids us to go in a wrong direction too longer. Agile methodologies are completely adapted to this model: with short iterations, we improve our teamwork skills in a shorter time.

Sample with code quality

When we finish our studies, most of us are convinced that we’re ready to develop software and, we begin to write software. Then, we recognize that managing code is harder than what we thought. We are introduced to binary/runtime compatibility and we understand that we can’t break our API consumer all the time. We have to deal with legacy code that we can’t change/rewrite and half of this code is just so bad (no naming rules, bugs, etc –> maybe, too many developers have never read books of the starter pack (or equivalent) or they read them and just forget them).

If we’re looking at code quality, I’m convinced that every developer has to fix warnings as soon as a static code analyzer find one : I see too many developers who launch/discover these tools when they are in trouble. Don’t wait to reach this situation to learn how to avoid bugs! In this way, if you want to improve the skills of your team, continuous integration is a must-have. Automate the build, analysis and test-runs will give to your team a feedback as soon as possible.

Come back

I’ve been blogging for less than three months but I appreciate this activity more and more. It’s good to get a kind of “storage” of our reflexions. In a previous post about concurrency, I wrote:

Before reading the Brian Goetz’s book, I thought that it [concurrency in Java] was not a problem. Afterwards, I was proud to understand its complexity and, some months after, I think that it is hard to develop and maintain thread-safe code!

These sentences describe exactly some steps of the Dreyfus model. But I don’t know which stage I’ve reach at this time: it’s hard to say “I’m competent” or “I’m proficient”.

And you, have you already observed the Dreyfus model in your domains?

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Reddit
  • Yahoo! Buzz

Post a Comment

Your email is never published nor shared. Required fields are marked *

Additional comments powered by BackType