Organizations that want their information technology (IT) training and education (T & E) programs to be successful must carefully distinguish between the two concepts. Training is the process by which people gain tangible skills that they can start applying immediately. Education, on the other hand, is process by which people gain knowledge and understanding. Training and education can occur in class room settings, in mentoring sessions, or through apprenticing. Some courses, such as Introduction to Java Programming, are for the most part training. Similarly, some courses such as The Principles and Practices of Agile Modeling, focus more on long-term education. Many courses are a mix of both, a course entitled Object-Oriented Analysis and Design With UML would likely be one such example. The point is that you need both training and education to help round out the skills of your staff.
This article overviews my experiences helping to train and educate people in IT skills such as object-orientation, Unified Modeling Language (UML), Agile Database Techniques, and agile software development in general. Throughout this article I'll use the example of learning agile development techniques but as you can see the advice can easily be generalized to learning any new technique or paradigm. In fact, this material is adapted from my fourth book More Process Patterns, the focus of which was object technology.
I'd like start by saying that there is no magic when it comes to T&E. It takes time for people to learn things, and often years for them to master it. For example, it takes several months for a person to gain a working understanding of Extreme Programming (XP), and potentially another year or two for them to become truly expert at the process. Agile software development is a whole new paradigm, one that you cannot pickup overnight.
A second issue is that people learn differently. Sometimes people respond best to hands-on training, whiles others prefer lecture-style instruction. Some people like computer-based training (CBT) and others work best in learning teams. Successful T&E programs are flexible enough to support various learning styles.
Figure 1 depicts an approach to T&E which I have found useful. The square boxes represent activities which usually occur within the scope of an initiative, the rounded rectangles are typically associated with the people management efforts within your organization. This approach is comprised of six activities:
Figure 1. The Training and Education Lifecycle.
It is critical that you get IT professionals the right T&E at the right time, and the only way that you can do this is through regular assessment of their skills. To do this successfully you must:
IT professionals need specific, introductory training, on new subjects. A serious mistake that I see many organizations make is that they assume that because someone is in a senior position that they don't need introductory training. For example, an experienced Java programmer could very likely benefit from a two-day introductory course in user interface design and a senior executive an introduction to Extreme Programming (XP).
Once the initial training is complete, your staff is ready to begin applying their new skills. It is at this point that many organizations run into trouble because they mistakenly believe that their staff now has the necessary skills to do the job on their own. Often, nothing could be further from the truth. Would you send somebody to a couple of accounting courses and give them control of your organization's finances? Would you send somebody to a couple of marketing courses and put them in charge of your advertising campaign? Would you somebody to a couple of law courses and then have them defend you in court? Of course not. Therefore, why would you send somebody to a couple of agile software development courses and expect them to develop mission-critical software with their new found skills?
After initial training is complete developers are now qualified to be mentored by someone experienced in the subject. The objective of mentoring is to have someone who is experienced guide novices through the learning process, showing them how to use the new techniques in practice. The mentoring effort should be performed on an actual development team, one in which the trainee is given the opportunity to apply and evolve the skills that they received during training. The best mentors have several years of experience in the technique, have mentoring experience, and have good communication skills.
For mentoring to be successful your mentors must be qualified to do the job. Did you ever take a college course where the instructor was ahead of the students in reading the textbook by only a chapter or two? Or a commercial training course where the instructor just got back from the "train the trainer" version of the course? Wasn't a very good learning experience, was it? The same thing applies to mentors - mentors must have experience in what they are teaching. The bottom line is that good mentors have communication skills and several years of experience in what they are mentoring. If you do not have people with the skills, and many organizations still do not, you'll need to hire from the outside.
Mentors should participate as active members of your team, not just as teachers. For a mentor to be a productive member of the team you will need a ratio of one mentor for every two or three novices, anything more and the mentor will be too busy mentoring to get anything done on your team. There is nothing wrong with this, as long as there are other experienced people available to develop the complex portions of your application. teams consisting of one expert and a large number of novices are likely to fail.
Mentoring is in addition to training and education, not a replacement for it. One of the roles of a mentor is to help your team to see the big picture and will need to refocus the team occasionally by explaining how new methods can be applied to solve development problems. Mentors should be involved throughout the entire initiative, especially at the early stages of it, so that the learning process gets off on the right track.
My experience is that when you're adopting a new technology such as web services, or a new paradigm such as agile software development, that the mentoring process typically takes between six and twelve months. The mentor is needed full-time at the beginning of an initiative and then only a day or two a week towards the end when your development staff become self-sufficient. The trick is to slowly wean yourself off your mentor by having them transfer their skills to your staff. Good mentors make you independent of them, bad mentors do not.
In addition to providing advanced training courses, you should also consider supporting educational opportunities such as:
In the end, if someone has a diploma or certificate all it really says about them is they put in the time to earn it. I've worked with many people that don't have any sort of certification or post-secondary education and they've been great developers. Similarly I've worked great people that do have these things. Fundamentally a diploma or certificate gets your foot in the door, after that it's up to you.
There is far more to the T&E process than formal classroom training. To support the learning experience you can promote:
Learning teams. Learning teams are small, cross-functional groups of people who are given the task of working together to learn a particular new technology or technique. Learning teams are often asked to produce a small application for the company, perhaps something for the human resources or marketing departments. They are usually asked to spend between 20 and 50% of their working hours on the mini-project, devoting the rest of their time to their current responsibilities. Members of the learning team will still need initial training and mentoring, otherwise they are likely to flounder.
Reading groups. A common technique is for a group of people to choose to read a book together and then to get together and discuss it on a regular basis. For example, you might choose the book Agile Database Techniques and then once a week get together to discuss the contents of one of the chapters. This motivates people to not only read the book but to actually focus on and understand the material.
Bag-lunch training. These are one-hour mini-lessons held during the daily lunch break. The sessions are typically given by an expert in the subject, usually but not always one of your mentors, and will cover a wide range topics. One lesson may be about test-driven development (TDD) and the next about agile requirements management. Successful bag-lunch training programs typically involve 2 or 3 sessions a week with each individual session being given several times so that everyone has an opportunity to attend, minimally you should try to give a session once a week. Bag-lunch sessions are easy to do and really give a boost to the learning process.
Information access. Get people access to the Internet, magazine subscriptions, and books. There is a lot of information out there, much of which is free for the taking.
Mentoring. See provide mentoring and hands-on experience.
Computer-based training (CBT). CBT is also a valid T&E approach, especially when combined with formal training and mentoring. Many organizations provide their employees access to introductory CBT courses before sending them on formal training courses, giving them a head-start on learning. Unfortunately, CBT by itself is of minimal value by itself. Most aspects of software development are simply too complex, and evolve too quickly, to be captured in a CBT course. Furthermore, when you have questions about something you need to talk to an expert to get them answered. A computer cannot do that for you, although a mentor can (mentoring and CBT are a powerful combination). In short, CBT is only part of the solution, albeit a potentially important one.
I would like to share several tips and techniques that lead to success in training and education: