I read every program I can get my hands on. I read Show and Go a couple of times. I read Todd Bumgardners recent 12-deadlift program (I'd love to read the program Mike Ranfone just wrote for Todd too). 5/3/1, Juggernaut, Smolov, Westside, Vertical Jump Bible; I read them all. As I read I ask myself "Why is the coach using this exercise? This rep scheme? What adaptation is he going after?"
I can then, hopefully, turn around and use that information when I write a program. I've written a ton of programs. Some have been scratched into a sheet of paper and handed off; most are kept on my laptop. I have a folder full of dozens of programs that I've written for different friends and clients. They range anywhere from 2 days a week to 5 days a week and from a 4 week program to a 4 month program. Out of these several dozen programs I've written, maybe 10 total have been executed to completion. This, frankly, sucks the Big D. I could have written the best program in the world, but I'll never know if someone doesn't complete it. The ones that have been finished have all had pretty good results so far; 20-30 pounds of weight loss and tons of strength gains. I've got a few programs out right now that I know will get finished, so I'm excited to see the results.
Programming Jedi Masters like Eric Cressey, Tony Gentilcore, Mike Robertson, Rudy Nielsen and Dean Somerset could teach you a lot more about programming than I can, but I still have some tidbits to share with you.
1) Know who you are writing for. This is the biggest lesson I've learned. Like I said before, you can write the best program in the world but if no one finishes it then it's not worth shit. I've written a lot of good programs for people that I should've known would never complete it. Be honest with yourself; if theres not a chance in hell that they will lift 4 days per week, then don't write a 4 day program. A two-day program executed perfectly is worth more than a four-day program performed half-assed.
2) Get all the info you can. Especially when you write for friends or for e-clients, you need to know everything you can. I don't mean health history and movement dysfunctions, though. I'm talking about how long they can spend at the gym and what kind of equipment they have available. Programming safety squat bar good mornings doesn't do any good if theres no safety squat bar. Prowler pushes are amazing conditioning, but it doesn't work if they don't have access to a Prowler. If you write a workout that takes 90 minutes, but your trainee can only spend 45 minutes in the gym, you won't get the results. Make sure the client has access to all of the equipment necessary, or else don't use those exercises.
3) Understand the person. Cluster sets may be an amazing way to get strong, but if the person you're writing for doesn't have the mental strength to get through a set of those then it won't do them any good. A 10x10 workout of squats/chinups may be an amazing way to build hypertrophy, but if your client is going to bail after set 5 then it doesn't work. Use techniques that the client will actually be capable of performing, and you'll get better results.
4) Make it enjoyable. As trainers, we may know that the stuff that is best for you is usually uncomfortable and unpleasant. Unfortunately when most people are faced with the prospect of doing something really unpleasant, they are going to skip it. Front squats with a 5 second eccentric and a pause at the bottom may be really good for you, but they are also really brutal. A lot of gen-pop people will end up skipping the tempo and doing something different, which may not achieve the adaptation you desire. If you try to make the program enjoyable (or at least not totally miserable) the trainee will have a higher chance of actually doing all the work you want them to do.
Have a great day, and go lift some heavy shit!