In debouncing you generally have two options: a hardware fix, or a software fix. Depending on the application either could be preferable.
The fewer inputs that need debouncing the more a software fix becomes preferable, particularly on low powered micro controllers. A software fix would be to use interrupts that run whenever the input state changes and then have some sort of variable keep track of when the last state change or 'bounce' occurred. If it's in the single digit millisecond then it's probably a bounce, and you would want to reject that value. A lot of it will be trial and error to see what's an acceptable time between presses, but 100ms is a good starting point because it's highly unlikely a human can press a button faster than 10 times per second and it's even less likely that that was their intention, and it's almost impossible that a button bounce could happen in over 100ms unless it's disfunctional.
As for a hardware fix, this can add to the amount of circuit elements your board will have to use so there's that drawback. But if you're limited by the power of the microcontroller you're using and you need a lot of debounced switches it might be the only feasible option. But if you can manage to tune and solder the right RC circuit to your input you can have 'smoothing' circuit that will reject quick changes to your input signal before it is sent to the micro controller input.