I'm coming late to this. I've been through two take-home projects. Both of them resulted in a no-hire, and each has refined what I'm willing to do and what I'm not willing to do.
The first one was a pretty egregious experience, honestly. I never spoke with anyone other than a recruiter. The first was a 2 hour Java test. The next was a take-home that I was supposed to spend 5-7 hours on. I did it and sent it in. I knew it wasn't great, but I put a hard stop at 7 hours. It took almost a month for me to hear back, from the recruiter, "we've decided not to continue with your application at this time..."
For a while, I said never again. However, after refusing (and passing on what might have been good opportunities), I did another. Circumstances were very different. I had two extensive interviews with developers prior to the take-home, and I was interested in the job. Furthermore, they did reply with feedback, though it was through a recruiter.
The feedback was mixed, some things were good, others were bad. Unfortunately, though, it was a hard stop. I didn't get and presumably will never get a chance to defend my choices. Although I understand the company probably doesn't want to open up a debate, they've moved on, it rankles that someone got to say those things about my code and I never got a chance to reply.
So, am I at the point where I'd never do it again? Almost. I think I would insist on an opportunity to defend my code base, at least one back and forth, before calling it quits.
It sounds like this company (mattermark) does this, which is a positive thing. You do get a chance to argue (though maybe they do cut some people off when the project is terrible, and who knows, maybe the people who rejected mine (no connection to mattermark) were just taking it a little easy on me, but were genuinely not interested after seeing it).
I don't actually care about getting paid for the project time, if it's a good opportunity. I have to spend as much time re-studying my data structures and algorithms book for whiteboard interviews anyway, and I actually my learn something from the take-home.
I'll probably talk to a buddy I consider to be a really good programmer who works in this area, and see what his take is on my project, asking him to be pretty brutally honest about his assessment.
I'd probably follow up on talking with your buddy. It's often invaluable to get an outsider's feedback on how others look at our code.
From what you typed, it seems like there wasn't a lot of communication prior to doing the coding exercise. I'm also not aware if you had channels to ask questions or discuss technical design options. If available, those are often "part of the test", to see if you make use of such resources.
When I'm reviewing code in such scenarios I'm often looking for other indicators aside from the code's correctness. Things like: naming conventions, structure of the code, patterns used, how over-engineered it is. Just as important is seeing if the candidate picked up on less explicit instructions or hints in the coding exercise. Finally, I look for code that follows the conventional patterns and standards for that programming language; I expect a candidate to discuss with me the deviation from those standards prior to handing in the code.
Anyways, I wouldn't completely give up. This might be an opportunity to grow and learn, but you'll never know unless you follow through on asking your buddy. Likewise, I've seen people here on HN volunteer to review code and provide feedback.
Your instincts are good here - one cited problem was indeed the departure from standard conventions. I had my reasons, not saying they were good ones, but I didn't get a chance to explain them either.
I'd like to, but it appears I won't get that chance. I gotta say, that is the part of this all I don't really like. It was vastly better than my only previous experience with a take-home project, where I didn't hear back for a month and got a one-line brush off from a recruiter. In this case, I am certain that they looked over the code reasonably carefully - they did provide a short bit of feedback, though it was delivered by a recruiter, and there was no back and forth here. I'm ok with not getting a job, but I would have liked an actual follow-up where we reviewed the code after that level of effort and time invested.
Lastly, the job was fairly senior, so it may have been a high bar, and that wasn't the only problem with the code. Then again, how much are you really supposed to work on a sample project?
Overall? I'd be hesitant to do this again. I might ask in advance what the policy is on a review. Maybe a 30 minute conversation is a requirement for me to do this. Still mulling it over.
The first one was a pretty egregious experience, honestly. I never spoke with anyone other than a recruiter. The first was a 2 hour Java test. The next was a take-home that I was supposed to spend 5-7 hours on. I did it and sent it in. I knew it wasn't great, but I put a hard stop at 7 hours. It took almost a month for me to hear back, from the recruiter, "we've decided not to continue with your application at this time..."
For a while, I said never again. However, after refusing (and passing on what might have been good opportunities), I did another. Circumstances were very different. I had two extensive interviews with developers prior to the take-home, and I was interested in the job. Furthermore, they did reply with feedback, though it was through a recruiter.
The feedback was mixed, some things were good, others were bad. Unfortunately, though, it was a hard stop. I didn't get and presumably will never get a chance to defend my choices. Although I understand the company probably doesn't want to open up a debate, they've moved on, it rankles that someone got to say those things about my code and I never got a chance to reply.
So, am I at the point where I'd never do it again? Almost. I think I would insist on an opportunity to defend my code base, at least one back and forth, before calling it quits.
It sounds like this company (mattermark) does this, which is a positive thing. You do get a chance to argue (though maybe they do cut some people off when the project is terrible, and who knows, maybe the people who rejected mine (no connection to mattermark) were just taking it a little easy on me, but were genuinely not interested after seeing it).
I don't actually care about getting paid for the project time, if it's a good opportunity. I have to spend as much time re-studying my data structures and algorithms book for whiteboard interviews anyway, and I actually my learn something from the take-home.
I'll probably talk to a buddy I consider to be a really good programmer who works in this area, and see what his take is on my project, asking him to be pretty brutally honest about his assessment.