Every couple years my switches wear to the point where my mouse's switches stop working properly. This is caused by the mouse only using the NO contact of the switch, relying on delays to debounce instead of connecting the NC contact to a second input and using a set-reset type debouncing.
So this last time I got a bit fed up with it, and decided to mod in some hardware debouncing:
I went with option 1, because I had a quad opamp on hand, and was only going to do the 3 main buttons. If you want to mod more than 4 buttons, I'd suggest using a buffer instead of opamp. Fewer pins to solder, and you don't have to worry about the threshold voltage. I used 3.3v because my mouse already had that rail for the sensor, but you can use a resistor divider to get any threshold voltage you want. As long as it's between the microcontroller's VCC and ground it should work. You also want to drive the high side of the switches and opamp/buffer from the same voltage the microcontroller uses.
To implement it first I had to score the PCB to cut through the existing switch traces and ground plane(both top and bottom), then rewired the switches manually. I also had to carefully scrape the solder mask away from part of the original traces and solder a wire to it from the output of the opamp. If you haven't done this kind of modification before, practice on something you are willing to destroy. While I had it open I also replaced the switches and mouse wheel encoder(which was starting to lose pulses).
In the photos, blue is a switch's common contact, white is connected to the original switch trace to the microcontroller, and yellow is the threshold voltage. First photo is partway done, second photo is done.
P.S: Is it possible to modify the firmware on a CM Storm Spawn to completely get rid of the software debounce delay?