1) I spent 6 hours on it. I didn't do some of the "optional" parts (unit tests specifically) because I felt like 6 hours was enough to "show I can program" i.e. what it was supposed to do worked. Result: I got grilled over why the optional parts weren't there and didn't get an offer.
2) I spent 15 hours on it. I did everything I could think of on it including 50ish unit tests and more than what was asked for. Result: I got and accepted the job. (note: I had laid out my salary requirements before hand).
Is this "great"? I have an active github/open source profile. To me in both cases they basically wanted to waste my time and mental effort, and see if I would do it. That.. can't be ideal.
Oh, you had dinner plans tonight? You want to see your kids before they go to bed? Sorry, our engineering team generally works 11am-8pm. You need to be in the office.
I know many companies don't explicitly require tests, but for them if a candidate submits a take-home challenge without them, its an automatic rejection. Do you think that if you had included tests in that first challenge that you would have gotten an offer?
I get that other developers get paid well to program so a lot of them are put-off by doing their job for "free." However, There's a simple solution of which has already been mentioned: cater the challenge to be completed within a few hours. Time-lock it and urge the applicants to only spend X number of hours on the challenge.
Like I have mentioned in another comment, I've been part of in-person interviews that lasted all day on top of an HR and technical phone interview. If I could cut down the in-person interview to just "personality fit" then that would be my preference.