Why Legacy Systems Remind Me of That Song “I’m Still Standing”March 10, 2023
MSBuild CLI: A Gateway to Continuous Integration/DeliveryApril 3, 2023
You’ve worked on your software development job for 20 plus years and now you realize someone else is needed to grow your team and continue the legacy of the software. But how do you integrate this new person into your team in such a way as to pass on your years of knowledge, but keep it interesting and challenging to them so they stay?
Hire Right and Welcome Them
Much of the success in hiring depends on finding the right candidate. To increase your odds of success, give developer candidates a proficiency test to ensure a level of technical proficiency. During the interview, try to gauge the person’s interest and enthusiasm for the subject matter. Learn about their personality and decision-making processes. Will they fit with the culture of the company? Will they get along with you? Is there anything unusual that stood out about the candidate that you liked?
First impressions count! Before your new hire arrives, devise a welcome package for them. If you don’t have one, contact your Synergex account manager for examples. Most importantly, before they arrive, create a specific 90-day plan that details all the training, tasks, and goals for each 30-day interval. For each item, list the goal and the one or more tasks associated with that goal. In addition, include tasks they can do when there’s downtime, such as learning about the company itself. Training on languages, tools, and processes are all important. Consider also what training and classes they’ll need during each time interval, so that by the end of the 90 days they have a good base of understanding on which they can build additional knowledge. Developing a 90-day plan tells your new hire that you have thought about them, that they are important to you, and that you want them to succeed. After each 30-day interval, do a performance review to go over the expected completion of tasks. If you’re looking for a sample 90-day plan, contact your Synergex account manager and we’ll be happy to forward one of ours.
Document the Unknown
The base design of the current Synergy compilers was developed over the course of 15 years by a large group of developers. At Synergex, we typically document software with extensive comments. But throwing someone into a code base, even with extensive comments, is not fair. You may have old requirements documents and thousands of pages of old design documents with pretty diagrams, but, if they’re not already out of date, would you really want to sit down read that volume of documents? Please don’t bore your understudy.
You understand years of decisions and designs about that software. You know its strengths and weaknesses—so share these in a concise, readable form by developing a “My Software 101” document that gives bite-size descriptions of each important individual design concept in your software. Describe these in common, easy-to-understand terms so that a person without your level of experience can grasp them. For each design concept, ask yourself: What is its purpose? Why is it important? How does it fit in with the whole design? Add detail as necessary, but don’t get into the weeds—stay focused on the higher-level concepts. For example, in our 101 document on the Synergy compilers, we broke the design down by stages of compilation first, and then went into more detail on the main concepts in each stage.
Code Reviews with a Purpose
Let the new hire read the 101 document and ask questions. These questions will guide you to improve the document, so take the opportunity to do so.
Using the 101 document you developed, on a frequent basis (we do daily), review the code associated with a single bite-sized design. Before COVID-19, we sat side-by-side to review code, but we’ve found that remote presentation over Microsoft Teams also works well. Start with the most basic building blocks of the design concepts and work your way into those that are more complex and that build upon others. Explain how the code implements the design and what is important to understand about the code for a particular design.
At some point, you’ll want to give your new hire some small challenges, likely during the last interval of the 90-day period. It’s best if you can find a bug related to some section of code you’ve already reviewed with them. Find something you think they should be able to solve on their own given their training up to that point, and which isn’t time critical.
Once you assign the challenge…step away! Let them try to solve it on their own and have them contact you when it’s done. It’s likely their solution may not be exactly what you would have done. That’s OK. Review the code to see whether it meets your coding standards, is maintainable, and solves the problem. If there are improvements that could be made or a different approach that could be taken, ask questions about their solution to guide them toward these changes. The important part isn’t to tell them how you would solve it or exactly what they need to do, but to guide them in how to think about the problem, so they can come up with the solution on their own.
As your new hire completes these small challenges, you may find additional design concepts that you hadn’t thought of initially, or things that you thought were too detailed, when creating the 101 document. As you find these, add them to the 101 document and do a review of them along with the associated code.
The Deep End
After your new hire completes the 101 discussions and reviews, along with a number of smaller challenges, you’ll want to give them something much more challenging. Maybe it’s a mini-project they can do on their own or a project where they’ll need to work together with other developers. Whatever it is, make sure the tasks and expectations are well-defined and understood. Set a schedule for the completion of tasks and let them know you are available to answer questions. Again, as before, use leading questions to develop their ability to solve problems on their own.
Throughout the project, ensure you touch base with them at least once a day to find out what they worked on yesterday and what they plan on doing today. Not only will you get a sense of how the larger project is going, but it’s a good time for them to ask any additional questions of you and promote the team dynamic.
The goal at the end of it all is to have an efficient, knowledgeable developer who understands the important design concepts used in your software and can think on their own of solutions to problems they encounter. Much of the success of it does depend on the talent and ability of the new hire, but you also play an important role in that person’s success by mentoring, guiding, and encouraging them along the way. By planning from the start, you can make this a reality for your team and your company.