Friday, November 6, 2009

Expert Knowledge Model and Custom Application Development

I recently read Andy Hunt's book "Pragmatic Thinking and Learning." It's a very interesting book combining ideas about cognitive science, management, software development, and personal development. (It's also well written and fun to read)

The 2nd chapter discusses the Dreyfus skill model, and the "Journey from Novice to Expert" along five stages of skill development. This is relevant for any skill, but especially for technical skills requiring years of practice to achieve a suitable level of mastery. Certainly different people are capable of learning at different rates, and some people are able to actively learn and apply new concepts while others seem to repeat the exercise but not learn the concept (the classic interviewing criteria of actually having 10-years of experience, rather than 1-year of experience 10 times over), but overall when looking at a community or organization (or team) recognizing the different skill levels and capabilities associated with them is critical.

For instance, many agile teams have individual developers designing the implementation for a specific user story (or more accurately, a task as part of a user story). By recognizing that a particular developer may be a Novice and a different team member may be Proficient the team can change the dynamic around the design effort when these two are paired together. The Proficient team member can act as a mentor for the Novice, more carefully reviewing and enhancing any designs the Novice developer creates and fully explaining any designs the Proficient developer creates as a teaching exercise. This enables the peer review process to work as both a technical review exercise and as a learning process. Similarly, the team may recognize that it does not make sense for a Novice developer to peer review an architecture that is created by the Expert member of the team - it would be more appropriate for someone who is Competent or Proficient to peer review, as they will more easily understand the design and be able to more easily offer suggestions to improve the design rather than feeling overwhelmed or lost when reviewing the design.

Additionally, when establishing the engineering practices for a custom application development effort, a team of all Novices or even mostly Advanced Beginners should not be expected to realize the best approach to continuous integration, automated unit testing, and test coverage. A more knowledgeable mentor should help the team implement the best practices, teaching as they go, but insisting on the appropriate integration and automation techniques to ensure high quality.

And of course, the skill model applies equally to the technical and business domain aspects. It is important for both the individual developers, managers, testers, and architects to realize that although they might be Expert at their technical craft, they may be Novices in the business domain of their current application. Once this realization occurs, the team members should seek out additional information on the business domain - through web sites, books, the Product Owner or business sponsor, or other more knowledgeable members of their organization. This type of self realization that you "know what you don't know" is a key step towards ensuring you are always delivering high quality, useful,valuable software.

2 comments:

  1. These days where companies are measured from their achievements amount it has become essential for them to look at every option possible which would ensure they are able to maintain a high achievements amount. Custom application development is a great way to accomplish this purpose because it is designed to make the business procedures more powerful and less expensive with regards to money.

    Custom Application Development

    ReplyDelete
  2. Very useful blog .i enjoy to read it .Thanks for post it .
    Mobile Application Development

    ReplyDelete