The other members consist of:
A Maverick who insists they know what they are doing but clearly don't and won't admit it. Going so far as to add concepts to the code that don't belong (or work for that matter), applying shiny new ideas from stackoverflow that bog down the system where a simple line will suffice.
Hour long tasks for them take a whol work week because of back and forth with PR comments.
The other member is a copy paster who will grab anything from anywhere (old projects, the web) and paste it in and expect something to happen (it doesn't).
I'm going on vacation and all PR's require my approval. I dread the mess I will have to sift through when I get back, could push the project back weeks.
What can I do in this situation?
I'm sure there are many thoughts going through your mind regarding the team and perhaps my lack of managment skills but I am only lead on the project, I don't manage people.
My boss trusts my judgement and is aware of the situation but he is not technical enough to take over the code reviews.
Is there a possible solution to this without adversely affecting the porject?
Thanks
Code that doesn’t work is an obvious problem; there needs to be a culture of reviewing your own work before it goes out for review. You also need to be more patient: I’m sure you write bugs, too.
But if _everyone but you_ isn’t comfortable working in a system, I don’t think that’s a problem with with those people, I think it’s a problem with that system.
It’s easy to get frustrated and say “eh, these people suck, let’s find new ones,“ but just like how it’s your job to solve the hard engineering problems, it’s also your job to get over it and find a way to actually work with these people.
If it _actually_ takes a week of back and forth for PRs to get merged, that means that there’s a massive problem with your review process. I’m going to guess that most of the time, this means that your comments are indirect, or worse. It’s your job to enable your colleagues to work faster, and if you don’t like that, you probably shouldn’t be a leader.
They need to loose the fear of talking about the techstack with one another, which also means that somebody has to embarass themselves publicly and repeatetly to take that fear. Code-review your own repository first and talk openly about your mistakes. Remove the "smartest man in the building" dick measuring contest. Make it a habbit, that everyones code repository can be "visited" by the whole team. Make those visits constructive and something people will look forward too and even collect "large scale problems" for.
Actually manage this instead of just managing.
Also if your projects grind, do not expect smart people. Grind turns every great hire into an idiot, which then again turns every project into grind.
Assuming this is relatively new to you, my advice is to focus time (2-4 weeks perhaps) on how the team/people operate. Worry less about the task, more any about the team... for that period. Break bad habits and form better ones. Realise that negative feedback is tough, and treat it as your current problem. Like other hard tasks, it can't be done well while other things are getting top priority.
There are people who can't really perform at a job. It probably doesn't matter what you do in these cases. More commonly, these are bad patterns.
In all honesty, a lot (most?) jobs are about putting the ball in another's court, having a talking point ready for the daily standup and such. Relatively few jobs are about "genuine work." That's not going to change if you work for CitiBank. A peppy team lead won't change that (for long). It's how the process of incentives and culture work at a proverbial Citibank.
Last... The truth is a lot of employees really suck. It takes some experience to tell a from b from c... so don't jump to conclusuons. If that's the reality, realise it.
Programming is one of the most unprofessional professions, culturally. People pretend to know more than they do. "I can figure it out" counts as "I know." That leaves a lot of unacknowledged lies in the game.
It's very possible that members of your team are missing crucial knowledge/understanding and hiding it, like a fox hides an injury.
- They know exactly what needs to be done and are expected to do, so even the Maverick is placed on a leash.
- You are probably going to return to a mess anyway, but this way you (and your boss) have the task lists to point to as evidence when reprimanding or even removing people from the team down the line.
- You're covering yourself if the project does get delayed. You did everything you could to help the team while you weren't there.
Your boss may not be technical, but if he has these task lists for each person and you sit down and go through them with him before you leave, he can do daily checks to keep them on track.
Finally, switch off and enjoy your vacation. There is nothing you can do while you are away and probably a lot you will have to do when you return, so throw yourself into the break and enjoy it as much as possible.
In one company I was one of these people who was causing this to happen. For any bigger change the TL would leave close to a hundred comments.
The problem here was that the TL had a certain vision on how to approach the task. Vision that he wouldn't share until code has been written. Then he'd write these comments, telling us to redesign this or that or to use a certain library. We'd challenge him from time to time to which he'd respond that we talked about this in the past on some meeting ages ago and that we were supposed to "take notes". At the same time he refused to formalize the process and set up any sort of a coding standard.
We literally had to guess what he expects of us. I couldn't even ask to clarify because there was no telling what might become unacceptable to him. So the standard has become "anything that went through the review process in the past", which leads to an another pattern that you've mentioned being a "copy paster". Even this stopped being a safety net at some point. I'd set something up exactly as it was for an another project - a project that was completed merely 4 months ago - only to hear that it's all wrong and that "we don't do it like this anymore". Naturally he didn't even bother to notify us. Stuff like these kept on piling up until it became so ridiculous that I've left the company.
So my advice would be to set up clear expectations and standardize things as much as possible.
Is there anyone else in the organisation who you trust that could cover code reviews for a week? When you get back your boss will have two voices stating clearly that the team is not up to scratch.
Then your boss needs to start performance reviewing the engineers more closely with your input and make it very clear what behaviours need to change and see those behaviour changes or they need to reconsider their position.
Management is hard and your boss might not be up to the job(I only say this based on where the team is currently at), if your not seeing the results you want, then it’s time to reconsider your own position.
As for your vacation, I agree with the commenter who suggested having them pair while you're gone. In fact, pairing or mobbing might be just what this team needs. You'll be a much more effective coach if you work with them directly rather than "seagulling" [1] PRs.
[1] Seagull coaching: Fly in, shit all over everything, fly out.
It is not acceptable to divide the leadership that way. You either need the ability to hire/fire and fix that team, or you have to quit.
At the moment there's not a lot you can do, considering you're going on vacation - try not to think about work during your time off.
But what you can do in the long run is to figure out their motivations. Here's my assessment of the situation:
Problem 1: The maverick thinks they're too good for this job and they'll show you all and whatnot.
Solution: show them that there's more to this job than leet coding and picking up the new shiny.
Divide their tasks into the smallest chunks possible - ideally ones which can be finished in a day.
Schedule regular updates(ideally daily) during which they will tell you what they've accomplished in terms of value to the user.
They'll protest all that, in which case remind them that you're all here for the users - that's the priority.
Also really - if they're as good as they think then surely they can deliver multiple small tasks?
---
Problem 2: the copy-paster just needs to keep this job and thus focuses on delivering whatever to, in their view, appease their superiors.
Start off by making them feel safe and stopping this unnecessary theater - at least in front of you.
Then give them something to learn - something which requires going through documentation and actually understanding the problem. Something that they can't copy-paste from somewhere else.
BTW how does the maverick judge the copy-paster's work?
Tell the teammates that you want to see them grow to become code reviewers. At first require PRs to be approved by two people: first someone else reviews it. once they LGTM, then you review it for final approval. Do this for a while, until you start noticing like you have little to add. And then grant the relevant reviewer the privilege to review in a single pass. Bus factor += 1, and better knowledge transfer.
That is the process you'll have when you get back. But in the short term, it's probably fine to let them approve each others code while you're gone. Yes they might they break something.. but you can always roll back (I hope). Blocking all PR merging until you return sounds a little overkill to me, but there might be some reason the stakes are so high that I'm missing.
responsibility without power
>My boss trusts my judgement
looks like classic "delegation", ie. the boss delegated responsibility while kept the power (you only fall for such "delegation" the first 5-10 years in the industry).
One can guess who is going to get ultimately blame assigned :)
>Is there a possible solution to this without adversely affecting the project?
With only 2 people it is actually much simpler to do their job for them. Just send them on a long trip - like some very important future architectural R&D without any need to commit anything in the near term. Doing very important architectural thing they also may get promoted so you wouldn't have to deal with their code :) Best course of action though - just leave this project or this company.
If you're lead on the project you do manage people. It might not be in your job description but that's part of seniority. And if you want the projects you work on to be delivered you're going to have to step up and be that leader.
I've managed a copy paster successfully before. I set clear tickets with success criteria so it was obvious when their copy & paste didn't work. And as it was their ticket, assigned to them it was their responsibility to make it work. When enough of those built up they got the message and we wrote up a performance improvement plan. I mentored them through solving a couple. Then they started to do it. Enough to keep their job.
I've managed and worked with mavericks before. I have never found a successful strategy. The worst quit within 2 weeks because their new and unasked for contributions (e.g. rewriting a system unrelated to the project because "they could do it better") get called out quickly and stopped. The others burn me out.
I think thats the main problem. They, the team - and probably you, as you are part of the team - need management.
Clear goals. Intensive training. Clear modus operandi. Clear consequences (pos/neg).
Additional you as a team lead see your real "Handlungsspielraum". As a not manager you might not be able to fire them, but you can define what to do, what not to do and how to do it.
As the old way of doing things did not work, over your vacation try something new. A new way of doing things. And then go on vacation and do t check your work email.
First with you, and then together. Maybe they can learn, and it would at least save all the time lost on the pull requests.
Of course this doesn't help with the immediate problem of your vacation.
- Make sure only you can merge to main
- demand all PRs be small and focused so you can sort thru what they do while you're gone
- also demand descent test coverage
Medium term:
- build evidence proving the teams issues
- present to boss and hope they listen.
Long term:
Look for another job. From your other comments it sounds like their decisions have ensured failure.
But since your team consists solely of a maverick and a copy-paster, you're in trouble. Normally you'd fire the copy-paster and mentor the maverick (or fire him too if his ego is too big to handle).
Getting into a situation where you have to be the one to approve all PRs is a bad sign, because it shows that you have no trust in the team members. Regardless of the validity of your reasons, this is not good because you become a bottleneck.
Another option would be to look elsewhere.
Also you should be upfront with the management about the quality of the developers.
In the end I suppose it's more about being afraid yourself of confrontation. There is absolutely no reasons to dread your work (pull request or anything else)
Can you find new team members? And in the meantime, perhaps do more coding yourself?
The business cares, first and foremost, in terms of their perspective of your role, on delivery. You have been identified as a gatekeeper, and they depend on you to shepherd this work to the realization of management targets and higher-level goals.
Questioning hires is a no-go, mostly because I lack personnel experience and sometimes folks come as a group package. Then you're questioning B2B practices and thus high-level folks as an IC...
As for the team, the maverick has a sharp mind for identifying inconsistencies and "holes for ideas." Fill that space with guardrails with your internal framework [1]. Praise the change, yet ask to defer, certain code changes in lieu of more conservative ones. Promise in tiny drips, and point to future stories where you show a roadmap for shiny spikes.
The copy-pasters are self-motivated seekers. This is good! They can identify potential solutions quickly. Guardrails with GitHub Actions automation (linting, etc) help here.
Teach them what you know. Share ideas and concepts. Try recording some training videos.
Schedule a daily group session where you look at everyone's PRs and discuss them. Review comments are softened by a live reading.
[1] And refactor later to something less internal.
And maybe the realization that everyone is in a different place, for different reasons (a different combination of experiences and choices made), so what helps or doesn't help them could vary.
(I've put some things about social development, including how to work with people, such as when trust matters, etc., at my web site, and have more content to add if interested. Simple; feedback welcome; nothing for sale.)
ps: I commented some about balancing positive/negative feedback, to maintain the working relationship in a way that they won't just start ignoring what one says: https://news.ycombinator.com/item?id=29323685
When people know that you care about them as a human being first, it goes a long way toward ... everything.
1. Who is covering your role while you are on vacation? Hint, it's not your boss. 2. You are the lead dealing with a maverick. Are you sure that you are right on the technical points? 3. Have you documented your observations and team assessments? 4. If neither of these individuals are working out, what are the characteristics of the individuals you think the project needs? Are they within the company?
I'm assuming this is perhaps your first lead assignment? Your role is to bring in the project within time and budget and with acceptable quality. Your role is not to make all the decisions or write all the code.
Moving to a lead role is challenging, more difficult for some than others.
Bottom line is that if I were your manager, I would expect you to lay out the big picture, apprise me potential issues/delays, etc. If you don't do that, the project's failure is on you and you alone. Once you miss the deadline, run over budget, etc., I wouldn't care about your comments on the maverick, the copy guy, etc. Everything would be your fault at that point.
No, you almost hit the nail on the head. This is not about management, it is about leadership and it sounds like a lack of leadership skills. Mentoring people to point out why their behaviors have a negative impact and how to grow to more productive habits is leadership. It is the role of a team lead. Communicating these concerns to them in a way that is productive and not combative is a skill you need to learn.
We all were unskilled once. And probably still are in various ways. We grow by having people guide us. Be that guide.
As far as adversely affecting the project, which will be a worse result? Quietly grumbling and not bringing change? Or putting up with some difficult conversations and improving the team?
The copypaster has the humility to poke around for answers and probably a more routine oriented perspective.
The maverick has the drive and fresh ideas to keep things interesting.
When they have to share with each their weaknesses they can probably grow together. Doing teamwork in person would help because its easy to dodge or delay difficult work online.
If neither has the nous or skill to actually do the task, you're not going to fix it before you go on holiday. Dump all the resources they might need in a handy location for them to stumble into when it goes wrong.
They won't use the resources, but you will have peace of mind they could theoretically solve the problems.
Put some backups offsite. Somewhere your boss could access if necessary.
If they are as slow as you say (hr long jobs done in a week), you'll only have three hours of mess to catch up on when you get back, right?
I'd make it clear that everyone is responsible that their own changes work, regardless of what came into the system before it, there are no excuses.
Forbid merge commits (because that's more complex than they can handle).
When a dev wants to submit their code, they have to rebase it first, tough luck, and they have to get it to work again, if anything breaks, their own stuff or what came before, it's their problem, they fix it before submitting.
All tests must pass before code is submitted.
If someone must drive standups while you're away, pick the least technically competent person for that job, because they will then spend some time not doing damage and you don't want the hotshot maverick setting the direction.
Go enjoy your holiday.
Go figure why I'm not in management ;)
Very often work gets slow when goals are not precisely defined and developers have to improvise on the requirements. Micro-managing is bad but maybe their responsibilities need to be a bit stricter at first. With experience the railings can be removed.
Some suggest hire and fire, but if you don't put an effort into training you very likely will not find highly qualified developers or you have to pay extra.
Do you mandate working tests and reasonable test coverage as part of your checkins? That could help, but it if you don't currently do that, productivity will drop further before it picks up. But that's the nature of any impactful change.
When there absurd back and forth on PRs, step-in and mediate a resolution. Pull the people into a room and require a resolution before anyone can leave--drastic, but soon people will realize that they pay more for pointless whinging. It's not doing the company any good for pointless bickering, and it's not improving the product either.
Considering using an external code-review as a service like PullRequest while you are gone. And maybe keep them if it works well.
First realise that there won't be a lot to do when you get back. They are not that quick as you say.
Second discuss with the team the problem: If you need to correct all their work when you get back the project will get delayed and hell will be paid/management will be displeased (depending on management culture). So you expect them to do minimale code changes and spend extra time testing. In your absence review each others code changes so you won't have to spend too much time approving when you get back. Empower them.
Third, but long term: If you are the most competent person in the room look for another.
If your boss doesn’t want to help try talking to their boss, and so on. Presumably someone somewhere wants this business to succeed and can be convinced to care.
If that doesn’t work it might be time to find a new job.
As for strategies to do that: consider (provisionally) lowering the overall code quality standard, as your team is clearly not up to yours. This is an important practical concession when working with average engineers -- otherwise you'll have an effective bus number of 1.
For example, ask your team to break down the tasks and provide a schedule for each task, and try to help them follow the schedule. If a task is taking way too long, ask them to break down it again. Remember to ask them to explain why they plan it like that.
Make sure you and your team have enough communication so you all know what need to do and what NOT to do. If your teammate is doing thing that is not in the scope, discuss with them and make the decision whether to support them or ask them to follow your request.
Rinse and repeat.
Other than that, maybe set a time limit of a few months for yourself, if you haven't been able to improve things, it's time to move on.
Get them to make a branch each, and work through the whole thing line-by-line, documenting what they think is going on. Ideally, get them to work on each other's code. Given what you've said about their coding style and techniques, there ought to be plenty for them to figure out.
You sound like you're due a cleaning of the stables that'd give Hercules the fear, and you must play the role of Eurystheus.
If you can't fix things on your own, escalate the problem. Document and share with the team and upwards the consequences of your vacation:
1. You are not reachable during vacation 2. If they choose to deploy and break production, they need to firefight themselves 3. The team is not resilient since you're obviously the single point of failure.
If it's either of the first two then you could always find them some tasks that they're more likely to get right and make sure they're the ones worked on while you're away.
If you're in a startup that needs to produce a product yesterday then you may need to walk away as the company hired wrong, but if you are in charge of just a team in a company then its time to grow them.
When I have been in this situation the first step I take is to articulate where I want my team members to be, then deciding on the plan to get them there. It is an easy trap to fall into, to just complain about the current talent you have, but that will just build resentment and not create any improvement.
You should define what behaviors you want them to exhibit first. Then build a plan on how to get them from where they are, to where you want them to be, then start working with them to implement that plan.
Your 2 major possible impediments are going to be
1) having a boss who wants no change to the situation, in case you have been set up to fail and should look for a new job
2) an employee who accepted the job under certain terms that you are now changing. That is not their fault, but is one of those situations HR likes to describe as needing "managerial courage", where you either need to move the person on to their next role(most places this means shitcanning, but the moral choice is to tap your network and help them find a better suited role) or help them get with the program
The absolute worst choice is to just accept whats going on and let everyone deal with a shitty situation that breeds resentment until someone or everyone blows up and the whole team turns over.
Edit: I wrote that up somehow having glossed over your comment that you don't manage people and your boss isn't technical.
You have been set up to fail
If you have no control over people on a team but are responsible for their output you are the software equivalent of a supervisor at McDonalds. Either don't rock the boat and just collect a paycheck, or find a new job if it bothers you on a deep level. There is no solution to this situation. If your boss is not technical and already realized his deficiencies he would have empowered you. Being responsible for a team without the power to manage them means you are just a meat shield for the first time something goes wrong.
Agreeing to that was idiotic. :) You seem to have put yourself in a bad spot by taking on a lot of responsibility without much authority or enough salary. If you have no faith in your colleagues you should jump ship or see if they can be replaced.
On my return, nothing was working as intended, although the codebase grew by 5,000 LOCs. I made it clear to everyone that they failed and a couple of weeks later I was gently asked to quit, which I happily did.
You can’t possibly be a good leader with a bad team that you don’t even trust.
But you will be blamed for all the troubles the team caused.
This is why hiring people is a #1 skill any decent leader has to have.
You say your boss is aware of the situation. Make sure this is formally documented.
Ultimately, if management are aware that this team doesn't function well but won't do anything about it, find another role.
Other possibility since you’re obviously just sharing one side of the story is you yourself don’t understand their code.
Then, if they keep trying to merge junk, just reject their PRs
No. This is a doomed project and team. Leave now.
stop trying to be perfect. remember the 80/20 rule.
focus your time on what matters.
if there is a serious problem, then it's your responsibility as the lead to deal with it, if needed.
change all their roles and tasks to thing that they dont normally do, but if they try hard they could rise to the challenge.
get them out of their comfort zones.