I'm a freelancer developer. I've been in sort of the technical lead position for my one client's project. I have a couple of guys who work part time for me. My client has a few people who work full-time for him. One of his programmers in particular--who is currently his most-senior on-staff programmer--is bad. He's the sort of programmer who can make the code work, eventually, for the right set of inputs. But there is zero emphasis on memory (doesn't dispose IDisposable), error handling (every parameter is stored in a System.Object, later to be ToString'd, then to be Convert.ToInteger'd or whatever the original type was before it got boxed in Object), performance (database calls in loops, O(n^2) algorithms when much better exist in the standard library), or safety (just found a ton of SQL injection vulnerabilities because he thinks he doesn't have to use the ORM for everything). And I've counseled him on this and I've told his boss about it. His boss just says, "well, not everyone can be as good as you". I don't want him to be "as good as me". I just want him to use the flipping ORM, which handles the vast majority of all cases where he has these problems! Do I try to counsel him again? Do I tell my client again? Do I shut up and just fix his shit for him? Or do I just quit? EDIT: slightly more context: I've been working for this client for 3 years. In that time, I've seen 5 other developers come and go in a company of only about 50 people. None of their staff programmers have been there over a year now.