I've got three main lessons rather that just one:
1. Don't give people what they ask for, give them what they need.
Very often you'll receive requests from people who are non technical asking for a particular implementation. I've often found that the implementation they are asking for doesn't really solve their problems, they just think it does based on their own misconception about the system. So always ask people what their real objective is and then try to figure out what solution would work best for them. It may sound like common sense, but I've seen way too many teams delivering what the client asked for only to find later that they've delivered a lemon because neither party had taken the time to understand what the right solution really is.
2. No matter where you are on the pecking order of a team or project, you CAN make a difference.
The pulse of a project aligns itself around the people who make things happen at all levels. So be proactive and take responsibility for making sure the project or team does the right thing, rather than just writing it off as lack of omniscience on the part of management. Things can get better.
3. It's more important to manage people's perception of the problem than it is to fix it.
I've found many times that if I provide a clear explanation of a problem or an issue and people grok the implications or consequences or even just the current status, they are almost always willing to make allowances in terms of schedule or resources. And in some cases, I've even been told that they'll live it with it and that it's not worth my time fixing it.