A majority of my projects to date have used DIP package Attiny85, 84, and Atmega328. These are usually programmed beforehand using a ISP shield on an Arduino, or afterwards using the ISP header. My first PCB design, was in fact, a shield which could be used to program the variety of AVR chips I was using. Breadboarding up an Arduino-as-ISP circuit time every time I needed one was error-prone and frustrating.
Programming via ISP header using Pogo Pins
My Making has progressed to the point that I have started doing SMT, mainly because I've been doing wearables and like the idea of having a coin cell battery on one side and the microcontroller on the other in a nice tidy package. The SOIC package is hand solderable, and using pads for the ISP header instead of through holes helps maintain the advantage of going SMT. Making a good connection to pads using a 2x3 pin header was a hit-and-miss proposition, so I was happy to find Nick Sayer's ISP Pogo Adapter.
SOIC to DIP adapter installed in a ZIF socket: Turtles all the way down . . ..
It occurred to me that since not all projects have ISP headers, there should be some way to program the chips prior to installation. With a little googling, I found SOIC to DIP adapters which can be used to mate up with a DIP ZIF fixture. A SOIC 20 allows me to program the AVR 8-pin, 14-pin, and 20-pin packages!
EIAJ Flavor SOIC. Datasheets are your friend . . .
The one cavat here is to be aware that there are two types of SOIC package, a wider EIAJ version that AVR supplies, and a narrower JEDEC version (oh, why do they do this to us?). My first ebay adapter purchase was the narrow version, and this problem has bit me with PCB footprints as well. A word to the wise . . .