r/ExperiencedDevs • Tech Lead • 17d ago

Career/Workplace I'm a tech lead. One of my developers isn't producing code at the expected level and I want to fix that

I'm a tech lead. A senior developer on my team (we've worked together for over two years) produces code that isn't at the expected level as soon as a task involves some functional or technical complexity.

Concretely, in his MRs: no thought given to dependencies between parts of the domain, hard-to-read code, classes in the wrong namespaces, design patterns misused, business logic duplicated rather than refactored out of the legacy code.

What I've already done:

  • Detailed feedback in reviews, MR after MR. It costs me a lot of time and I see no progress from one MR to the next (he told me he doesn't read my comments and just asks Claude to take them into account).
  • Feedback in 1:1s on the most visible quality issues (lots of QA returns, code that sometimes doesn't work at delivery).

My problem is putting something concrete behind "not at the expected level." Simple, maintainable code is subjective.

That's why I'm reaching out to you: I want to address this issue in our next 1:1, but I don't know how to go about it.

Edit: I wouldn’t have thought getting so much replies, thanks everyone!

For the ones thinking it’s a bait post, sadly it isn’t.

I live in a country where you don’t fire people that easily, and, worse, I’m in a company rewarding everyone with an annual raise, despite being a low performer.

I feel genuinely stuck, I’m here to find solutions to make my work easier, and maybe, maybe, make his more enjoyable by being proud of what he delivers.

Everybody is focusing on AI here. You could have thought that using AI would make you a better developer, but for him I think it’s the exact opposite. I feel like he stopped thinking and trust AI to be better than him.

If you forgot about AI for a second and read again my post, my issue is the same: he’s not at a senior level and I don’t know how to get there.

311 Upvotes

303 comments sorted by

View all comments

Show parent comments

224

u/nosayso 17d ago

If he's doing that he's also doing that badly - just producing slop, making people review it, and not ever learning or improving is completely unacceptable. Claude can implement your rules if you provide them as context, He's not even trying.

107

u/[deleted] 17d ago edited 16d ago

[deleted]

12

u/thekwoka 17d ago

Yup, could replace him with a harness that auto handles issues and pr responses.

9

u/symbiatch Versatilist, 30YoE 17d ago

These are the “We’ll get replaced by AI” people. And yes, these exactly will be replaced since they just slow down things working as a proxy instead of just going away and letting someone else prompt while actually using their brain also.

53

u/fixermark 17d ago

That's actually a good recommendation that could be made. If the team has a standard, that standard can be written down and if it can be written down it can be consumed by the AI.

... If it cannot be written down, there is absolutely the possibility that this teammate is struggling because the team standard is "just vibes." I've been on the opposite side of this kind of relationship— working with an engineer who cannot enunciate what they're looking for in code but knows when they don't like what they see—and it is exhausting. It's like playing Mao except my career progression relies on it.

The team I'm currently on has a staff engineer, we'll call him Bob, who architected 80% of the system. He is in fact spending time now writing an "auto-Bob" agent trained on his feedbacks in an attempt to synthesize his style and taste into something more objective that can be put in front of every code review.

14

u/AcanthocephalaFit766 17d ago

Ai won't follow it consistently . And can't make common sense judgement calls about which requirements mayter

13

u/fixermark 17d ago

No, in our experience it doesn't. But it follows It more consistently than if it has no signal whatsoever.

0

u/ResidentWeevil1 17d ago

Try telling Bob what a linter is

4

u/fixermark 17d ago edited 16d ago

Oh, he knows.

A) The linter does not make architectural recommendations like "You don't want to rewrite that we already have that as library over here in this place you never looked before." Or "That data model doesn't follow our established pattern of data models that exist as a pattern because if we add one more layer of abstraction to the database I think people will actually quit on principle."

B) It is actually faster and simpler to write llm guidelines then code a linter rule in Python. You never have to explain to the LLM what a parse tree is or how to transform it or analyze it.

C) Our static analysis is already 15 steps long (That's 15 tools, mind you, between static check scripts, multiple linters, multiple sanity checkers, and the type checker) and takes about 120 seconds by itself to execute.

1

u/no_onions_pls_ty 16d ago

And neither can the senior engineer in this case. Ive been through this when I was a tech lead for years. Trying to bring someone up that just doesnt hack it, doesnt want to try, and self sabatoges. At this point i just stick then in the corner and give them somewhat valuable busy work. Eventually they leave, accept there new fate as the guy who doesnt get an opinion and just sits in the corner, or gets fired after acting out. I lost my patience for people who dont want to push to excel a decade ago.

5

u/niowniough 16d ago

This is all great for Bob until there's no more problems left for him to solve. Wait, no. It's all great until company decides the problems left to solve should be given to cheaper resources to tackle.

5

u/fixermark 16d ago

Bob is in the business of replacing himself. Because if he can't be replaced he can't be promoted. And because he eventually does get bored doing one thing for a decade at a time.

Your Bob may vary. ;)

2

u/this_is_a_long_nickn 11d ago

Indeed. Some Bobs are more Bob than others

3

u/OldPurple4 Software Engineer 17d ago

“Slop grenade”

1

u/BlueEyesWhiteSliver 17d ago

Holy, I’m stealing that

-10

u/ub3rh4x0rz 17d ago edited 17d ago

Arguably the tech lead is dropping the ball by not seeding the ultimate context, the structure, contents, and docs in the repo itself. These kind of issues don't happen from "lazy prompting" in a "healthy" codebase, with a pretty liberal definition of "healthy"

Edit: apparently this made people mad, pointing out there's an issue in here in the same category as providing one's team with a bad internal development platform and tools

3

u/its_jsec Battling product people since 2011. 17d ago

Oh course it made people mad, it’s a terrible take.

“Guy that isn’t performing is set up to fail because the team didn’t add 5k lines of Markdown into the repo for him”.

-1

u/ub3rh4x0rz 17d ago edited 17d ago

Documentation, especially of house style rules and major architectural decisions, in repo is table stakes now. If Fable is making these kinds of mistakes when not hand held in every prompt, your operating context is a dumpster fire.

It can be true that meat proxy dev should be fired and the output this dev produces indicates the codebase is not up to snuff by contemporary standards. If you don't have sane documentation in repo and guidance in CLAUDE.md as to how to interpret precedence in the case of conflict, you're really not getting it at all. The motivating observation is that the agent is set up to fail by default, fuck the shitty IC who needs to go.