My approach to avoid this is to not have a development or staging server. Just a live site. That's what I work on at the beginning. It's always out there, so there are no excuses. And it keeps your focus on the user experience.
I'm sure this sounds crazy to some, but I wanted to add we do something similar.
Every commit goes live as soon as the tests pass. We do have a staging server, but it's running the same code as in production. We use it for manual putzing around (so we don't mess up production data or clutter production logs), and we eventually added feature toggles so that a feature can appear only on staging.
That means we're releasing every few hours, which a) means we get feedback as soon as possible, and b) production bugs are pretty easy to run down, because you know just where to look.
Every commit goes live as soon as the tests pass. We do have a staging server, but it's running the same code as in production. We use it for manual putzing around (so we don't mess up production data or clutter production logs), and we eventually added feature toggles so that a feature can appear only on staging.
That means we're releasing every few hours, which a) means we get feedback as soon as possible, and b) production bugs are pretty easy to run down, because you know just where to look.