I'm currently working in a project with 3 other developers. One of them isn't really experienced with one of the technologies we are using (an ORM), but he is higher in the hierarchy and doesn't take criticism well, specially from those below him in the ranks (like myself).
He is unhappy with how the technology is supposed to work and is setting up all kinds of workarounds to not use the tool the way it's meant to be used.
I can see how those workarounds are going to be harmful to the project in the long term, I have already told him, but he simply disagreed, said I'm wrong and continued on doing it.
I have thought about just waiting for him to push the code to the repository and then changing it anyway, but I don't want to go around him like that. I have considered going to the manager and telling him what's happening, but I don't want to be that guy. In all honesty, I am currently thinking about doing something I hate -- saving the chat logs to prove I objected and letting things take its course. I know it's going to harm the project, but all other options seem to harm me.
What is worse? To be unprofessional and let the project be negatively affected or to be professional and be hated by my colleague(s)? He is going to hate me if I either change what he did (after he explicitly rejected my corrections) or tell the manager on him.
Edit: Some people are skeptical, apparently. Dude's using an ORM (Doctrine2), which has a few limitations concerning multi-level inheritance. All 'leafs' have to be in the top-most class DiscriminatorMap, and therefore their IDs are FKs that points to the top-most class in the hierarchy, not to the class' imediate parents. He figured it's more important to have leafs pointing to their parents and keep the mapping wrong (he doesn't agree that an ORM's job is to handle the database, he wants to do it manually -- "no, this way the database will be wrong"). Obviously, having a broken mapping broke some of Doctrine's repositories native functions (such as
findOneBy). His solution was to keep the broken mapping and override Doctrine's native functions to "fix" the issue. This is absolutely insane.