Dreyfus, Agile and other scary words
In his book "Pragmatic Thinking and Learning", Andy Hunt talks about a lot of interesting subjects, including how to take advantage of the way your brain works and apply this in the context of software development. There is at least one interesting point, which should draw the attention of managers and developers interested in successfully applying the concept of "agile development".
And that is the Dreyfus model.
The Dreyfus model and software development
The Dreyfus model is based on the idea that different people, no matter their profession, can be divided into 5 categories - from novice to expert. In addition, each category has a specific set of skills and, most importantly, different approaches to solving problems.
- Newbie (novice), or beginner. He needs a set of clear instructions to solve any sort of problem. Any guidelines he is given will be considered as the truth and any sort of issues that can’t be solved with the models he has will cause him to panic.
- Advanced beginner. Steps and rules are still needed, but they can try to solve tasks on their own with some of the challenges inherent with trying to tackle something new.
- Competent. People at this level have a desire to understand the problem, and not just solve it, without necessarily focusing on every detail. They can base their approach on other people’s experience but patterns are still understood quite literally.
- Proficient. They have a desire to understand the big picture. Recipes are no longer that important because their experience tells them where and what to look for.
- Expert. He no longer depends on technology, principles or paradigms. He solves problems and can help others in finding them. Most of them work on intuition and past experience to solve these issues.
This description does not purport to be complete or accurate. But the most important thing you need to understand are the stages you go through - from beginner to expert. The higher a person is on this chain the less instructions he needs for solving the problem. Moreover, the professionals and gurus, when given a specific task to solve are categorically against someone explaining to them how it should be solved – all they need is the problem and its description.
Individuals at the last two levels know that simple answers to complex questions can’t be found all the time and that context is important. They have a sense of beauty and intuitively understand where you need to beef up your code and where you need to invest in design. They know the meaning of patterns and how to use them.
UPDATE
Another important aspect when somebody goes through the 5 stages detailed above is his attitude. Novices do only what they are told and everything else is not their problem. For an expert there is no such thing as "not my problem". Any problem related to the project or the customer is his problem.
The Dreyfus Model and Agile
How are the Dreyfus model and Agile concept related, you ask? Here's how:
"As you may realize by now, some of the most exciting new movements in the software development community are targeted at proficient and expert developers........ Agile development uses feedback to make constant adjustments in a highly collaborative environment. But being able to self-correct based on previous performance is possible only at the higher skill levels....... Advanced beginners and competent practitioners often confuse software design patterns with recipes, sometimes with disastrous result.... Agile Development is a very effective tool, but it does not work in teams, built entirely of beginners and intermediate levels. "
Andy Hunt «Pragmatic Thinking and Learning: Refactor Your Wetware», pp. 36-39.
In other words, if you want a "flexible" team you must have a critical mass of experts at the last two levels. Of course, this does not guarantee a positive result, it is only a necessary requirement.
Moreover a "flexible" team must have experts in all key areas of development. You need someone that is able to gather requirements and analyze them otherwise you are at the mercy of the product owner. Also, someone should be able to design the software architecture. You also need someone who is good at testing to make sure the product meets requirements. You can’t just say our team is flexible and we can change roles.
A team that respects these criteria and takes into account the information above can have a higher chance of success with their project. Granted that this sort of team can’t overcome all obstacles such as a very difficult customer or inadequate management but the chances are greater.
Sergey Teplyakov
Expert in .Net, С++ and Application Architecture