I have been made team lead on a project where the previous lead didn't have a clear idea of where he wanted the software to go--his philosophy was just meet the current requirement and let the future take care of itself.
Very shortly after he took over, the company hired two developers who were fresh out of school. My opinion at the time was that the code was not really what you should put new developers on, both because code like that is very difficult to work with and because I felt it had the potential to lead them into very bad habits. My role in the project at the time was fairly minimal, because I had other responsibilities.
The team lead at the time delegated large tasks to both of these young developers, tasks that I felt were senior developer type work. They were both able to more or less successfully able to at least meet the requirements of the time, but the way it was handled wasn't the best way to increase code quality.
The team lead left and one of the young developers left as well. So the main reason the above is relevant is that it speaks to the history of the other young developer. I'll call him Chris to make things easier. I think Chris is brilliant, but I think that he simply isn't experienced enough to take on the architectural tasks he was given and to a certain extent is still being given.
In part, he is being given those tasks because there's not enough of me to go around. In part, he's being given those tasks because I think he won't learn why certain approaches do and don't work unless he can try them out. And in part he is given those assignments because I don't have complete control over what assignments the people under me are given, and my manager assigns him things without asking me.
When he takes on architectural tasks, I usually wind up redoing large parts of what he did, both because there's no way to specify in detail how to build these things until you're in there with your hands dirty (so I can't give him detailed directions and tell him make it so) and because he doesn't see the long term picture I do and can't take a line that will meet where the project will be in a month. I don't think it's workable at this stage to ask him to go back and rework something he didn't do in line with what I know in my head I need, both because I can't dump what's in my head into his head and because I really don't want to discourage him.
I've told my manager I am leaving in a few months and I've asked him to hire a senior person for me to train. That hasn't happened, so I think that I need to do my best to put Chris in a position to succeed me when I go. My issues are that I don't know how to get that much growth no matter how brilliant Chris is and I also am spending a lot of time both cleaning up after the last lead and cleaning up after Chris so it's hard to share what I think he needs.
Recently, we hired "Mary," who is also fresh out of school. So far, she seems content to do more manual type tasks like preparing xml and json files, but over time I'd like to see her take a more active role. In particular, when I go she'll need to be able to pick up some of the coding tasks Chris is handling now, and he'll probably need to start thinking in terms of his own succession given how short tenures in software development tend to be. I'm actually very concerned that he might not stay very long after I leave regardless of what I do, but that's not something I'm in a position to do anything about.
So I guess I have several questions:
- How can I let Chris spread his wings without creating so much extra work for myself?
- How can I best grow Chris both in his coding skills and his leadership skills to prepare him to take over?
- How can I ease Mary into more coding at a rate that she'll be comfortable with that gets her ready for more responsibility?
I apologize for not being clear on the time frame, but I thought the post was already wordy. "A few months" is more like a year plus or minus. It's not really feasible to ask Chris to do multiple rounds of edits to get to where the code needs to be, because we both have lots of things to do. It's also not feasible to leave the code as he wrote it, because we have extremely demanding clients who like to have random different variations of pretty much everything we do, so the code has to be squeaky clean and ultra extensible or it flat can't do what they're asking.