Programmers who aren't freelancing are about job stability, and a 3-week contract screams 'unstable'. Yes, there's a normal hiring process after it, but during that time, you haven't provided any measure of stability at all, and so anyone that comes along and promises it is going to be more appealing.
I went through an interview process that had me write a simple CRUD app for free. It wasn't related to their business, and neither of us got anything out of it except qualification for an in-person interview. That is the most I'm willing to stick my neck out for a job, and I wondered if it didn't take a little too much of my time for what it was.