For programming AVR MCUs, I use a USBasp. Initially, I would connect the USBasp header pins to header pins on the breadboard with individual jumper wires, then jumper the appropriate pins on the MCU. Then I noticed a repeating pattern in the pinout of many AVRs. Here’s an example.
Notice the pattern? MOSI, MISO, SCK, & VCC are all in the same order. Then I found this page with instructions on building a programming cable for an Arduino mini. I decided to build a simpler programming cable that would work on a number of AVR MCUs and Pro Minis with a minimum of jumper wires.