BMOW writes about how to program Microchip AVR microcontrollers without using the big standard header:
Programming most AVRs requires a six wire interface, with a clock, serial in, serial out, reset, power, and ground. It’s common to include a 3 x 2 pin 0.1 inch header on any AVR-based board. Typically a keyed box header is used to prevent accidental backwards cable attachment, like the header on the Adafruit breakout board shown above, but sometimes bare 3 x 2 pin 0.1 inch headers are used.
That’s fine for hobbyist work or building a prototype, but when building larger numbers of AVR-based boards, the 3 x 2 pin 0.1 inch header has two significant drawbacks. The first is the component cost and related assembly cost for a header that will only ever be used once, for a few seconds during manufacturing. It’s not a huge cost, but it’s still a factor when trying to minimize the cost per unit – why throw away money? The second drawback is the relatively large physical size of the 3 x 2 pin 0.1 inch connector. For small boards containing mostly surface mounted parts, the ICSP header can complicate layout and routing, or require enlarging the PCB.
Ideally one would want a programming connector with these attributes:
- zero per-unit cost
- small footprint, preferably one-sided
- keyed to prevent backwards cable connections
- holds cable firmly attached to the board
See the full article exploring various alternatives with trade-offs for size, cost, and usefulness on BMOW.