It's not worth programming at factory IMHO unless you have extremely high volume. On a small scale, firmware is the most likely thing you're going to cock up. Between the parts being programmed and arriving, you're one FW revision up potentially. Best to build a programming header into the design and load before packing. You can load test jig firmware in before as well then.
Also some bottom rung assemblers you don't want to trust with your production firmware!
For me, 200 boards:
1. JLCPCB board + parts + assembly service. 2. Final assembly (non placeable parts) yourself. 3. Load firmware in and test via own test/programming jig. 4. Pack and send.