I work on a project-oriented software development team, and we have fairly standard conventions for file organization, naming, code separation, and how to write code in general. These conventions are documented publicly and everyone in the team is aware of them.
In the team, we have a specific peer who is in the same pay grade as myself and others - so, presumably, should show a roughly similar level of performance. Let's call him Bob.
Bob shows very poor quality in any non-functional regard. What he does does work, but it requires significant revisions and upkeep. He has been informed of this by his peers, but he does not act to improve.
Bob does not follow any of the conventions specified, so when someone else has to work on code that he wrote, often more than just the editor's auto-formatting needs to be used: things need to be renamed, files split, and other kinds of housekeeping. Bob has been made aware of this issue by several colleagues, but the behaviour remains.
Similarly, Bob's code quality, in general, is very primitive, but he gets things done*. This means that for management, Bob is completing his assignments, and thus no intervention is necessary.
However, this low quality results in a noticeably higher failure rate for his assignments. If a non-trivial assignment is completed by Bob, eventually someone else will have to revisit the code and do a major refactor of it, either to improve readability, performance or to enable code reuse. In one case, an entire project handled by Bob had to be remade from scratch because it was simply inscrutable and with no documentation.
In almost two years of working with Bob, he fails to improve the situation, even in the relatively low-skill task of keeping the code conventions. This leads me to believe he has no interest in improving himself, which frankly would be fine if this didn't happen at the expense of the project schedules and team's reputation within the organization.
I'm very sorry if this sounded a bit like a rant. I have tried to keep my tone as mild as possible, but a gear only has so many teeth to grind.
Since I'm just a peer, how can I attempt to improve this situation? I'm aware that it is not entirely Bob's fault since the organization does not seem to have support for this kind of situation, as we are a bit "XGH".
What I've tried so far, in no particular order:
Reminding Bob of the conventions when I notice something particularly egregious;
Personally recommending courses that he could take that could help him (the company has a study budget per employee);
Proposed the usage of automated tools for validating conventions (linters) whenever something is put in version control, but this task is buried in the deepest realms of the Backlog-Backlog;
Made available a configuration file to be imported into our editors (everyone uses the same one) that sets up the auto-format rules (wouldn't solve all problems with Bob's work, but he has not imported this file);
Informing management about the issue;
Called up a few pair programming sessions between Bob and the rest of the team each, but these end up being rather unilateral as Bob does not express much interest in them, and thus the sessions devolve into someone programming and Bob watching;
Opening issues on our Jira for everything that needs to be refactored or fixed, so I have data to quantify the rework needed. These just get buried right alongside the linter task;
On a specific project, specifically write all code at "Bob-level", since perhaps this was just an issue of him not being comfortable with the abstractions and language features normally used. He managed to respond with even more dubious code;
On another project, I wrote a framework such as to force every programmer to write in a specific way for code to even work at all. Also failed, because that just puts a fence around the issue and causes inconvenience without improving the situation.