Teaching is the best way to learn
Imagine having a tool that can automatically detect if you are using JPA and Hibernate properly. Hypersistence Optimizer is that tool!
Software development is all about knowledge, and nowadays the number of things a programmer needs to know skyrocketed. Most of the time developers are hired by matching their current skills with some project requirements. The project eventually ends, and the developer is assigned to a new project, sometimes using different technologies than what he was previously hired for. What’s the policy for training this guy to deliver his best the soonest possible?
Usually, training and coaching are left-out, so each programmer is on his own. Every time we leave things to chance a huge risk is implicitly undertaken. I believe we should give more to training and coaching and see them more of an investment rather than a spending.
There are multiple ways of training a team.
Hiring an external consultant
If you have a budget for hiring external trainers then you may as well consider this option. Unfortunately, not all small companies are willing to dispense their money on external trainers, especially since you can’t easily quantify the Return on Investment.
I’ve been attending such trainings, and while during the training sessions, I get the feeling I understand everything, I later find out there are many questions to be answered. But the training’s already over, and the true value of a training comes after you digested the given information.
Using a skilled employee as a trainer
If you have an employee with a strong background in a particular field you may ask him to prepare and present a training material to the rest of the team. This is way cheaper than an external trainer, but there are other subtle advantages as well. Training is beneficial for both the trainees and the trainer. I remember I was told during my high-school psychology classes that teaching is the best way to memorize information (you retain up to 90% of what you teach). So the trainer gets well-trained himself (by simply preparing the didactic material) throughout this process.
I’ve seen an interesting outcome after giving presentations. People come afterward for counseling and this puts you into a coaching role too. This has a snowball effect, since trainees become more interested in what you’ve been taught them, and you also get to deepen your knowledge on that subject and to improve your training skills too.
I’ve been having this idea for quite some time, and after browsing the internet I found out it’s been already applied for teaching foreign languages, so why not Learn by teaching?
My idea is to encourage all employees to teach others. It may be on their best skills or even on new concepts. If you can afford, you can even think of giving a bonus to each trainer, or simply allow him to spend some of his daily working time for preparing his lessons. This may be fun, especially if your daily routine got boring lately.
This works even if your team requires adopting a new technology which is not easy to grasp (e.g. Scala). All team members should be involved in learning the basics, but each one dedicates himself to studying thoroughly on a particular subject (e.g. Mixins). This way we distribute the learning effort among team members, hence parallelizing and speeding it up while obtaining better knowledge acquisition.