Our office building's elevators recently went through an "upgrade" process. All the elevator mechanisms were replaced, and then they replaced the management system.
The new management system decides which elevator you'll be using when you push the button. It has a nice big arrow above the lift door that lights up while you're waiting, and then starts flashing when the elevator arrives, so the moment you push the button you know which elevator to go stand in front of. Only sometimes the system realises that the particular elevator is in use between other floors, and then switches to another.
At ground floor level they've installed a set of buttons for each floor in the building, and the system then lets you know which elevator will stop on your floor. The problem here is that most people don't even bother looking, and just storm into the first elevator that arrives. You just have to wait for the first stop before you can push your floor button again to make the elevator stop there.
I have no idea how the system calculates which elevator to use, but what I do know is that the average wait time has gone from 30 seconds to about 3 minutes. Surely the developers of the management system should have tested and timed the new system in a real building, preferably their own. Why try to predict which elevator to use if you can just stop the first one that comes past going in the right direction.
The insides of the new elevators look very nice, but they're still just as shaky as what they used to be. The only improvement I can really see here is that you can now switch off buttons that were pressed by mistake.
What I'm getting to here, is that, hopefully, when you get a brilliant idea for your system as the developer, you actually do some homework on the usability of the feature before implementing the changes into your production environment. I've seen many users hampered by a design decision a developer took, because it would be cool to design, instead of thinking what would benefit the users.