I have always been thinking about how I am going to train a freshly graduated student coming just out of college and joining my company. Not having a good training program in place is one of the major mistake any startup makes. I have been with a startup where we had same problem. So what we did was devise a sound training program. Most important thing you have to understand is writing quality code is art, there is no other away to put it across. Have you ever learnt a musical instrument? Painting? Singing? How do you learn it. First you have see a maestro at work, live. Performing just for you. So you know the body language, know the small movements, listen to breathing as he/she performs. We do the same in our training program. We start with one week of class room training focused on software solutions and not technology. (We hire people who have some knowledge of technologies we use) After this one week, we give new trainees a project to execute, typically a small project like implement a blog tool, bug management tool etc. We work with the trainees in all phases of project execution. We do requirement analysis together and play roles of customer as well as facilitator. We do design with them. But most importantly when the architecture of the project is decided, we implement a use-case for each new person in pair programming. All the trainee has to do is sit with one of the more experienced developer and watch him implement the use-case. Advantages:

  1. When a person see how a pro writes code, how he uses various tools including time-sheets, IDEs, debuggers , he gets window into how as a professional he should work.
  2. Experienced person normally walks trainee through various things, classes as he is writing them. This gives insight into how a high level design is transformed into low level classes and data structures.
  3. We normally don’t have time to do entire low level design, attribute design. So we rely upon experience and re-factoring to some extent.  Pair training gives trainee hands on re-factoring.
  4. Get to know various tools, shortcuts, first cut what proficiency trainee should have once he/she has experience.
  5. Time management. How much can be accomplished in how much time.

Disadvantages:

  1. Sometimes there is chance that trainee will pick exact bad habit trainer has. Though we try to monitor our training processes closely, but there is still a chance. To reduce it we do pair training with multiple trainers.
  2. Time consuming. Hence we do it on a Sunday. Yes we work on Sunday! We want to grow and build a great company.