Indirect Paths to Learning
Although formal coaching and training is at the front line of education, learning is something that happens in many different ways. Under the right circumstances, we can learn from each other (peer to peer), we can learn from role models, and we can learn from those who provide leadership. Many of these indirect paths to learning fall into a category called "social learning." Social learning encapsulates the learning we attain from the direct observation of those around us and through the inter-actions we have with other people.
Both consciously and subconsciously, we learn behavior from those to whom we have direct exposure. By observing the behavior of those around us, and the outcomes they attain, we absorb a portion of information that then forms a part of our own learning experience. The sequence in which improvements were made by the development team illustrates some of the social and indirect paths to learning. Understanding how changes in behavior set in and then spread throughout the group indicates the internal workings of some of those processes.
As you might expect, within the group being trained, the first subgroup to actively adopt the improved set of practices were those who were the most junior. Having the openness of the beginner's mind, they lacked the baggage that takes hold when we perceive ourselves to be proficient at something. That openness was also demonstrated by the fact that it was this group who was most likely to seek out additional one-on-one coaching from the senior developer who was leading the program.
The second group to make noticeable changes was the team leaders who were overseeing the more junior resources. Although this group did not solicit additional one-on-one coaching, they became exposed to more real-life examples of high-quality code because they were responsible for reviewing the work of the junior resources that reported to them. By being exposed to more examples of well-written code and possibly through something of a peer-pressure mechanism, significant improvements in code quality started to take hold within this group as well.
Not unexpectedly, the final group to change was those who were the least interested in particular, the curmudgeon who was directly hostile to the idea of change. Doing minor maintenance work rather than project-related work, several of these individuals worked in isolation from the rest of the team and were not responsible for reviewing the work of the junior developers. Despite their lack of direct exposure, the complete department was working on the same application, so again, even these diehards were able to see examples of the better code in the shared libraries and hence were able to start picking up some of the ideas through osmosis.
As well as the effects of peer pressure and social learning, one of the underlying elements in the sequence of events outlined earlier comes down to building up a body of samples. They say a picture is worth a thousand words; as a corollary, I would say that a sample is worth two thousand, and a set of good examples is worth many more. When a person is surrounded by good examples, it gives them a frame of reference against which to work. Although the workshops were the starting point, the program really took hold once a sufficiently diverse set of examples became available. From that point forward, the improved practices became institutionalized and a part of the group's everyday practice.