These are the main reasons why your company should remove the technical challenge step from the hiring process:
1) It's rude.
Requesting people to perform unpaid work in their free time for you is just impolite. Do Not Do That.
2) There is a better way to validate the technical abilities of a candidate: A personal interview.
Talking to candidates not only will help you detect their expertise and knowledge about any technical area but it will also help you detect if that person is a good team player, someone that can work nicely with others. You want to hire people that will get along well with the rest of your coworkers. You don't want to hire divas, no matter how skilled they are.
You can teach people best practices, patterns, technologies.... but you can't teach them manners, attitude, politeness.
3) You will discard good candidates.
Usually the technical challenge is employed as a first filter to remove candidates. Again that is not a good way of doing it. How somebody solves a specific problem is not a very good indicator. Someone that produces a mediocre solution to the challenge may still be a good hiring because they are a good fit for the team (culturally, soft skills...). Maybe the had time constraints and they couldn't deliver the best solution. Probably they are applying to other positions, their current job... Assuming that all candidates can allocate a few hours is just something you should not do.
4) It's them that will change, not you
It doesn't matter how well they organise their code or what standards they use because they will have to adapt and use your company's standards and best practices. You can teach people best practices, patterns, technologies.... but you can't teach them manners, attitude, politeness.
5) That code might not be theirs
People can cheat in the technical challenge but they can't cheat face to face. You never know if that code was actually produced by them or they got help from friends or other sources. When they are in an interview with you there is no way they can cheat.
6) Show them your code.
Instead of asking the candidate to write some code so you can discuss about it, just show them your own code. The same code they will have to work with if they get hired. Ask them about it, what they like, what they don't, what they will change... You will get much more useful insights than reviewing some arbitrary code.
Unless you want to hire robots that work in isolation you probably want to hire people that are skilled, have good technical knowledge but also good attitude, open, friendly and capable of working on a team. The technical challenge can't help you in any of those areas, on the contrary, it will eliminate good potential candidates.