I completely get the point of interview homework. You need to assess whether a candidate can actually do the job you're hiring for. Whether they're even viable. And your time is valuable, so you have them do it offline and just show the results. Then you check the results, which is much faster. Once you've decided that they're viable, then you bring them in to have a discussion and start assessing whether they're better than merely viable. That's all good. But, you have to remember that your candidate's time is also valuable. Otherwise, what you're actually doing is screening out good candidates. The ones whose time is valuable, and who don't want or need to spend a lot of it on pointless exercises.
On my last bout of interviews, I got several homework assignments. A couple of them really pushed the bounds of what is an acceptable amount of my time to require be spent on unpaid work. These were in the day to day-and-half range. Personally, I think 2 to 4 hours worth of work is the most that is reasonable, and I had a couple that were in that range, too. But, there was one that was just an egregious abuse of my time. I didn't do it. I planned to do part of it, but then I got another offer and so I just walked away from the first one. I'd like to tell you about this assignment because it's just such an amazing example of what not to make these things into.
First, it wasn't an assignment; it was six of them. No. That is not okay. I will do one thing. You can have multiple requirements, multiple steps, or something along those lines. You cannot require multiple distinct tasks to be completed, unless all but one of them are trivial. Write a unit test for this function? Ok. Resolve this conflicted merge? Sure. Research 3 different and unrelated problem domains and write apps to address each of them? No. Please remember that the candidate is also assessing you. What I've deduced from that is you have no respect for my time or attention, and no appreciation of how long software development takes. I can now safely assume that you don't have a development process so much as you just lurch from one crisis to the next without any plan or goal or breaks, and without devoting enough time, money, or effort to ever solve any of your numerous problems. I don't want to work there.
Second, the assignments were entirely unbounded in their complexity and went way beyond the scope of even my quite broad definition of software engineering. These were research and analysis problems, and the software was secondary. The worst offender was to create a mock app which would model and allow acting on a guitar with arbitrary configuration an tuning. This app would have to at a minimum indicate if two guitars would produce equivalent sounds when strummed. So, I had to know how guitars work. And I had to have at least a tentative grasp of music theory. As in, probably enough to pass the first test in a freshman level music theory class. As I do not already have this education, I would guess it would have taken at least 40 hours to learn. Pass. Then I would have had to do the actual programming assignment, which would have taken multiple days. Pass. In this case, what I learned about them is that they do not appreciate that a deep understanding of a problem is necessary in order to solve it with software. This is because we are inventing the solutions. And this is why software is built by teams, because the research and discovery and invention is itself a hard problem. This is why UX designers and business analysts and software architects exist. This assignment was requiring me to do all of those jobs, and to be a software engineer. And all for zero pay. I didn't do that assignment.
Another of these assignments was to create some data visualizations. Not any specific visualizations. This was not a test of whether I could make use of a visualization library. It was to have an encyclopedic knowledge of dataviz strategies and then divine based on a couple sentences of requirements what kind of visualizations would be desirable to them, and then to build those. On a data set that didn't exist and which I was required to produce on my own. What!? That is so far afield from the job I applied for that I don't even know where to begin to assess it. I'm not even sure if I learned anything. Maybe that not only do they not know what they're doing, they also don't know what I'm doing. In any case, pass.
I would like to hope that this whole thing was really a trick to screen for people who would stand up for themselves and push back on unreasonable demands. I'll never know, but it seems like a pretty faint hope. Assuming that wasn't the goal, then what they actually did was exclude anyone who already has a job, anyone who has other prospects, and anyone who has other obligations. One thing I know for sure is that I don't want to work on a team that is made up of people who actually completed that work on their own time, for free and without question. And I don't. So maybe the test worked after all.