I like to put a header with VCC, GND, SWDIO and SWCLK which is the minimum you need for an ST-LINK debugger.
I also like to put a header with VCC, GND, USART1-TXD, USART1-RXD, RESET and BOOT0 - USART1 gives you a console/debug interface, and also access to the on-board serial bootloader (on some STM32's you can only access the bootloader from USART1). I wrote a little program to automatically load the device serially. Much easier to if you need a customer to update a device in the field than trying to get them to use ST-LINK - you just give them a little USB-Serial adapter configured with the right header connector, driving RESET and BOOT0 from DTR and RTS. It is extra useful if you arrange the header so that you can connect a 3-wire serial and a separate Reset/BOOT button box independently.
Or - if your device has at least one button connected to a GPIO, and you don't mind using active-high for the button, you can parallel BOOT0 with the GPIO the button connects to, and thus holding down the button while reset (or power-on) will activate the serial boot loader. In this case all you need to have is a simple 3-wire serial connection. Since BOOT0 is ignored after reset, the button works normally thereafter.
If you're really short of pins, you can combine a Debug "blinky" LED with a "serial boot" button on a single GPIO pin (plus BOOT0) - you just need a resistor to limit current if you happen to poke the button after you have configured the pin as output.
Dave
PS: To access the serial boot loader (at least on an STM32F103..) you will also need to have PB2/BOOT1 pulled low at reset.
Refer to the ST document on the bootloader for the capabilities and requirements for other devices.