A fellow Programmer asked:
A lot of bad practices were being committed at the beginning of a project, and I recognized them and fought against all of them. Since I didn’t pick and choose my battles, my boss now assumes anything out of my mouth is an over complicated response, and spends a lot of time defending himself personally, instead of looking out for the best interest of the project.
How do I push the team in the right direction, without waiting four months for everyone to come to the consensus I was trying to get in place all along, or scarring my reputation on the team as a difficult know-it-all?
Be enthusiastic, not bitter. Be prepared to carefully, cheerfully explain your position far more often than you’d like. Count your wins, and be prepared for others resisting your ideas. Always keep in mind, that other people’s view points, while not your own, may in fact still be right. In time, you can achieve your goals if you are prepared to work with people.
I wondered if the author of this question had a little bit of a twinge when he wrote “since I don’t pick and choose my battles” … it seems like a bit of a red flag to me. If you get a few early wins, people will think of you as “that developer that had that great idea last month”, not “that jerk that thinks he’s smarter than everyone else”.
Change takes time. Udi Dahan has an excellent article that touches on what the author is asking, and I really agree with his thoughts here.
This is a repost of an answer I wrote at programmers.stackexchange.com.