Serengeti's way of teaching juniors to be productive in the shortest time possible
If we wanted to explain what a shadow developer in Serengeti is, the simplest way would be by illustrating with a real project.
Our client is a respectable bank in Europe. They needed a trusted partner who will provide them with maintenance and implementation services, where their core banking system would be maintained, and new features would be implemented. We first performed a thorough analysis of their system and concluded that this is a job for a team consisting of at least 10 experienced developers.
However, depending on the number of change requests for the implementation of new features and legal obligations that the bank had to fulfill, it was possible that a team of ten developers could be too small to complete the work before the deadline. On the other hand, since the workload was too light for a larger team, we had to come up with a flexible solution.
Our flexible solution was to offer our client a core team which consists of 10 experienced developers and 3 juniors.
These juniors were free of charge and we called them shadow developers.
In the beginning, their job was just to sit with our experienced developers while they worked on a particular problem in the system. At first, these problems were simple and our juniors quickly learned how to solve them independently. As time passed, they learned how to solve increasingly more complex problems and while they were perfecting their programming skills, they were also gaining a lot of domain knowledge. So, by the time the crisis arose, they were ready.
The crisis arose under the name COVID-19.
The national bank, in response to the lockdown which left a lot of people without income, mandated several rules that had to be implemented very quickly to the core banking system. While doing all their regular maintenance work, our original team of ten people could not possibly complete this added workload by the very short deadline.
Luckily, our shadow developers were ready. The client agreed to expand the team to 13 full-time developers and thus, our shadow developers easily took over the job of fixing the majority of regular production problems, which then freed up a lot of time for the core team to work on mandatory changes in the system. Needless to say, we have managed to complete all the work in time, and the client was very satisfied with our effort.
In our line of work, it is not uncommon that people want to switch projects they are working on from time to time. This usually presents a threat to the project because it is hard to replace an experienced person with a new, inexperienced one. Even the most experienced developers will need some time to accommodate to the new system they will be working on.
The shadow developer model is a solution to that problem. When a colleague decided that he wants to leave the project, we suggested that we replace him with one of our shadow developers, who already had a lot of experience with their system and has in the meantime reached the needed seniority. The client agreed and the process went by painlessly – the ex-shadow developer became a productive member of the core team. Of course, we have immediately added a new shadow developer to the project.
Benefits of the Shadow Developer Model
Both the client and Serengeti have benefited from this approach.
Our client gets real flexibility – we can easily enlarge our team with experienced people who have already worked on the client's system if there is a sudden increase in the workload. In cases when a developer wants to leave the project, we have the best possible replacement ready.
For Serengeti, probably the biggest benefit of shadow developers is that the model has proven itself to be a very effective way of mentoring junior developers. We generally prefer that our shadow developers have some programming experience, but a lack of experience with large and complex projects. By putting them to work on a real project, but without charging them to the client, we give them the opportunity to learn from experienced developers without the stress and deadlines that all developers have to face from time to time.
In our experience, this approach has shown that such developers quickly become productive and independent, and their seniority level rises to mid and senior in a relatively short time.