Consider the number of hours you actually spend interacting with a candidate during the interview process. If it's 40(!), bring them in for a full week and decide at the end of Friday. If it's closer to 10, bring them in Monday morning and decide by close of business Tuesday.
All the delays are materially the fault of glitches in the hiring organization.
This is a good process to ensure you don’t hire anyone who is currently employed. I would not sign up for this even if I was between jobs unless I was desperate. I don’t mind coding challenges, etc, but the first few weeks at any job is mostly scut work getting things set up, meeting people, etc.
I was sort of being facetious with the 40 hours thing. Nobody really gets 40 hours of interaction of a candidate before hiring. More typical is closer to 5-8, which means they can make a decision in a single day.
Edit: even an intense 6-interview loop including a "sell" dinner can be done in a day if scheduled properly. The multiple weeks thing is entirely poor scheduling on the part of the company.
3 tech interviews, lunch with team or other colleague, followed by general corporate HR interview and a "sell" session all fit neatly into a single business day.
This is great for 1 candidate. Say you have 20 applications at once? Do you pick the one with the best CV and dedicate this week for them. Or try to do a filter stage? Not saying I have the answer, but it is not as simple as chucking all your resources at all the candidates full time.
Yes, a filter should happen first. A 30/60 minute phone screen to determine who to bring in for the full interview set. Then, what companies did back in the 90s was to take a day (say Friday) and blitz through interviews that day. (Do companies still do this?) You will pull people from their normal work to do this, but conversely you don't lose applicants because your process leaves them hanging too long.
All the delays are materially the fault of glitches in the hiring organization.