Whether you are looking for a contract, or a consulting gig, or a permanent position, the process of finding and cementing the deal is a lot of work. I am in the midst of this right now, and what a whopping pain in the butt it is.
I know several folks who have worked for the same company for most or all of their career, and it's tough to explain how difficult looking is, even when you have lots of potential jobs. Being a sales person is not an inherent skill most programmers have; living on the phone is about as far from what I do best as I can get. Just getting recruiters to send an email instead of calling is tough enough, most of what I get is worthless and it's easier to reject if you can read the description instead of chatting for hours with everyone who calls.
The last week or so I must have gotten 100 calls and emails, out of them maybe 10 were worth following up on. It's also clear that there are a lot of sourcers out there trolling for resumes (a sourcer is basically a recruiter front end person, they are paid for contacts and nothing more). It's funny how many times I get the same job from many different people. In fact every recruiter in my home area looking for Documentum developers contacts me, as my old position at company X (well chronicled in the WTF series) still hasn't been filled even as they have paid someone $120/hr for the last year who is not a developer. So they are stuck being unable to hire someone to do my job, but of course they wouldn't hire me (at $120/hr I'd help them out of course). I get the impression that some jobs (assuming they are real) are just unfillable.
I have learned via experimentation that it works better when recruiters contact you, instead of the other way around. Put your resume on dice.com, for example, and fill out as many skills as you can. Within a few days hordes of recruiters will contact you. Apply to jobs you see on dice (or monster, etc) directly, and you'll get barely a peep of replies. Then a few months after you start working you will get job requests all the time. I've always suspected that posted jobs are actually resume bait.
Of course if you find jobs posted by an actual employer, or by an in-house recruiter, contacting them directly can sometimes be a good strategy depending on the company. The most interesting position I am pursuing came about this way. Of course for many large corporations this is pointless; locally Lockheed (where the F-16 fighter is made) has something like 2.5 million resumes in their database.
The best plan is always to work though someone you know at the company. Almost everyone I know at Lockheed got a job via this method despite the 2.5 million resumes. Using LinkedIn (or Facebook now) to make contacts can work if your contacts are good and they work at places you want to work. I haven't done this very much yet.
Another good thing is geoflexibility (I don't think it's a real word, but it works); if you don't mind working somewhere besides home (or moving) then there are many more opportunities. This is easier for contract or consulting gigs but you can make it work with the right fulltime job as well. I've done this myself and don't mind it. These days even fulltime jobs are more temporary than most employers would like.
After dealing with the first contacts and getting some good ones, you have to deal with the dreaded phone screens, tests, or whatever kind of torture the prospective employer prefers to do. This has changed mightily from my first experiences in the 80's. Everyone assumes your resume is complete fiction, and that you must be a ditch digger looking to advance, so they need to discover if you know anything at all. It's said commentary on this industry and it may be necessary but it's still mighty irritating to have to answer basic programming questions over and over. Even worse are the ones where they want you to supply information from memory that any reasonable programmer would look up in the documentation or let their IDE supply. One interviewer (many years ago) spent 30 minutes asking about the definitions of object oriented programming terms before I begged for mercy and never dealt with that company again.
Sometimes they want you to take a test (like BrainBench) which are usually way out of date and basically memorization tests like something you would take in college. The best system for weeding out unqualified people I've come across was a written test, where on your own time you write sql for a given database schema, write java code with certain requirements, write some XSL to convert given XML data into HTML, describe how to solve a few coding scenarios, etc. This one took me a couple hours or so to do (at home) and clearly showed I could follow and interpret requirements for the areas the company was interested in. Since they weren't simple questions but required some actual work (and thus couldn't just be copied from a website) it gave the employer a good feeling about the employee (in this case me). I've seen these used far to little. The employer admitted a lot of people refused to do the work, and only a few people did a decent job, so it did serve a purpose. I'd rather do a little real work and avoid the OO programming quiz.
Interviews on the phone and in person are always done these days. Today, however, there seems to be way more interviews than people used to do. I went to one interview once where there were 4 gang interviews in a row all with writing code on the board, solving logic puzzles and challenges to everything I said. Afterwards I was ready to start digging ditches (where I wouldn't be asked what is dirt? what is a shovel? why don't you like round shovels?). Google is know for these all day interviews; I might find working in their R&D group interesting (given my search interests) but for the hideous gauntlet interview process.
I once took a contract in California at Remedy in 1994 sight unseen based on my resume and 10 minute phone call, even though I was in Texas at the time. Sadly that kind of simple process is history unless you are a famous programmer. Today it's all about weeding out the hordes of unqualified programmers out there.
My looking for work is always an exercise in look for someone interesting, I hate doing something boring and pedestrian. Of course you can't always find that ideal job so sometimes you have to compromise, or start your own company, or both. Working for yourself is ultimately the most rewarding, until you make no money; then it's the worst job in the world (no one to blame, argh!).
So for now I work the phones, answer irritating questions, fight with armies of recruiters and sourcers, and ultimately whittle down the list to a manageable set of choices. I also keep wishing for a better way, an easier way, a more pleasant way to find a paying gig.
Either that or a foolproof way to win the lottery.