Denouncing and pullups are also possible in the firmware. This is the method I use in the QRP Labs kits like QCX - look at the schematic: no pull-ups, no RC-debounce. Saves 6 components (4 resistors, 2 capacitors). It's not important in a one-off build or modification but in a kit where you are trying to optimise cost every resistor helps! The firmware method also gives you more control over how you do your debounce. I prefer the state-machine approach to rotary encoder handling, it implicitly debounces without involving any time constants.