Every software development methodology is flawed. Waterfall, Unified Process, Scrum, eXtreme Programming, Kanban, et al — they are all flawed.
Each has a place but it’s tough to know which one fits a particular situation best. There are many aspects to consider — company culture, team size and experience, problem complexity and scope, solution type, corporate policies, developer personalities — you get the idea. There is simply no way for one approach to work for everyone.
There are many examples of people who have successfully used a particular approach at a company. Yet, they moved to a different environment and the approach failed.
It may seem paradoxical but it’s not. Individual, team, and corporate differences require that the chosen approach be customized. You have to fine tune your techniques to align with the entrenched behaviors — at least at the start.
So, when you decide to apply agile principles in a non-agile environment, take some time to understand the culture, the people and the policies. Fine tune your preferred methodology to make it blend with the situation.
This will likely mean using techniques that make you less agile. This may seem counter productive but it improves your chances of winning people over and being successful. Once you’ve demonstrated some success, you’ll be able to make more changes and be more agile.