In my opinion, the two major reasons I've had success finding good work are:
1. I'm specializing in a popular niche and, backed by my experience, I can claim I'm an expert. This also means I can charge high rates.
2. I've always been a nice person to the people I've worked with and have remained friendly with previous bosses and co-workers. I've developed a reputation as a capable programmer who's easy to get along/work with. (Conan O'Brien, last spring, attributed his success to being passionate about what he does and being a nice guy. I think this is really true.)
I'm still struggling with a couple of things. I basically always get my time estimates way wrong. I have trouble focusing and switching contexts from wheeler-dealer (finding jobs and managing contacts) to h-core coder to my personal life. To that end, I tend to work from my clients' offices quite a bit and I'm considering renting a cube somewhere. Finally, being a nice guy has it's downsides--I almost never get paid promptly and clients often times don't provide as much support as quickly as I need (like when I need to work w/ a client API and I need documentation/time with their engineers to move my work forward).