It's very important to have a detailed job posting, this will help candidates know what to expect of your workplace and help you to filter out unsuitable candidates as they will not even apply if the job doesn't suit them. A great example in detailed listings is Basecamp's listings, take a look at their Head of Marketing example.
After some screening for communication alignment and HR screening
This would be a simple coding challenge based on a real problem we face at our workplace; preferably solved in a language/framework we use but not mandatory, it should ideally be doable within 2 hours but I'd give you a whole week because sometimes we as humans get stuck on the silliest matters no matter how long we've been doing something, perhaps you'd like some time to learn the basics of the framework/language we use and try to solve it in it, and because you probably have other priorities.
Hiring is something that's hard to get right and I think most of the methodologies we currently use are quire flawed. We look too much at what someone has done in the past and almost never look at what they want to do now. I believe Microsoft's new process is a huge step towards the right direction, give someone a chance to work with you using the same information you have. Solve a real problem together, do actual work. The only way to know if someone is a fit or not is to work with them and have all the different teams work with them.
I realize that's expensive and few places can afford that, but that's my ideal scenario, I've never gotten to do this before but I think it would yield much better results.
Degrees are great, but I wouldn't discredit someone because they don't have one. The gap between what you learn at university and what the market needs is growing a lot, especially in developing countries. As I said above the only solution is to work together for a bit.
As I described in How I Want to Work, being able to communicate in the same language and in the same style is extremely important. I once tried to build a culture of asynchronous communication based primarily on written communication, but I hired people whose stronger communication points aren't aligned with that and it didn't work out so well. In future hiring I must make sure that our style of communication works well for both parties.
HackerRank's 2019 Developer Skills Report shows that the number one reason to lose candidates is unclear roles, and I've often been put in that situation as well. You join in as a backend developer and you're suddenly asked to do everything (DevOps, sysadmin, dba, native iOS and Android development, Angular, React, Laravel, Kubernetes, etc.), this is all too common in developing countries where specialization is still rare. I've also sadly hired people with unclear expectations in the past and it's something I do not wish on anyone. I would do everything in my power to explain everything a certain role requires and make sure it remains so.
I have been seeing a lot of people saying that candidates should be paid for the work they do during hiring processes, and I think that is a fair point, especially with the idea of letting you work with us on a real problem. If the place I'm hiring for can afford it, this would happen. If not, I would do my best to try and make it happen.