I am a big fan of keyboard shortcuts. If some function or operation doesn't have shortcut I tend to write a little program and attach Ctrl + Alt + [key] shortcut to it.
Yesterday while coding with Visual Studio I started thinking how well they had assigned the shortcuts. There are enormous amounts of commands and still most of them are intuitive and not a single one overlaps with an other, system wide key combination. Only exception is Ctrl + W and it irritates the hell out of me that it doesn't close the active tab by default as it should.
What are the best practices that should be kept in mind while assigning keyboard shortcuts to own programs?
What are so common and "reserved" combinations that should not be used other than specific functionality (e.q. Ctrl + S, Ctrl + W....)
In small applications I believe it's best to use Ctrl as a modifier key, but how about in bigger ones? Should there be two modifier keys (Shift/Alt?) or make like in Visual Studio? Should Shift be used only to reversal functionalities (Ctrl + Shift + Tab, scroll tabs backwards)?
Or how about when program is running minimized in the tray, or doesn't have GUI at all. Should windows-key be used in that combination?