Need more I/O's on your microcontroller? You need an MCP23017 port expander chip!
It uses two i2c pins (which can be shared with other devices if required) and in exchange gives your microcontroller another 16 GPIO's! Each I/O pin can be configured as an in input, output or input with a pullup.
The chip can also be configured for interrupts for when an input changes, so you don't need to keep polling the chip!
This one comes in a DIP package, so it's great for breadboarding! You can also set the i2c address for up to 8 unique chips on the same i2c bus, which means you can daisy-chain these IC's to give you up to 128 I/O's!