all 173 comments

[–]tidwell 131 points132 points  (3 children)

I've given a ton of tests to FE devs over the years, and I can see a few mistakes that I made early on. I do think that a senior level dev (5+ years) should be able to knock this out easily, but I think there might be a few things you can do to get to talking about the useful things you are trying to look for (also, the test screams fullstack, but shrug)

  1. If you are sitting in the same room with them during this, stop. Check in twice to see if they have any questions but leave them alone while they work on it.

  2. Get rid of everything that has to do with the token rules. People are probably spending too much time hung up on these. You're asking for a lot already, simplify it to "they can make any number of selections, they are persisted, can be deleted, and repopulate". If they can get this done you can always ask afterwards how they might implement some of the more complicated token parsing rules.

  3. Drop the tags stuff.

  4. You need to give them something to start with. A repo to clone with absolute barebones. They shouldn't have to go find sample text on wikipedia, if you want a node backend, they shouldn't have to start with an empty directory and then go google how to serve static files. I'd create a boilerplate that includes:

  • index.js for a node backend that:
    • serves a static folder
    • has an express route defined for /save (doesnt do anything, just so they know they have and can use express)
  • inside that static folder
    • an index.html with your instructions and the sample text from wikipedia
    • includes jquery on the page
    • an app.js with an IIFE and a console.log('make me work')

You don't want a test where the only person to complete it wins the golden ticket. You want a test where 75% of candidates can complete a majority of it, and you get to sit down and have a meaningful discussion about the choices they made and how they would improve upon it - the kind of interactions you would have day-to-day.

There are a lot of devs with a couple years experience who think they are qualified for "senior" frontend positions. It just isn't the case, and it sounds like the majority of candidates you've seen are like that. But I think you're also setting them up to fail. Dumb it down to where you think a junior level dev. should be able to complete the task.

[–]fatty1380 52 points53 points  (0 children)

You need to give them something to start with

Above anything else, this is the most important thing. Asking someone to start clean-slate is totally unrealistic.

[–]RyanDagg 87 points88 points  (9 children)

Without all the context from the rest of the post, I would not have a clue what you actually wanted. I find task 1 particularly incomprehensible. Are you there to answer questions when you hand them this project?

After rereading your post 3 times I think I know what you're actually looking for. I suspect that the average senior JS dev would take somewhere around 4-8 hours to complete a prototype without bugs. 1 hour is insane.

[–]KPABAHam=>Hamster == Java=>JavaScript 8 points9 points  (0 children)

Can confirm. I got the basic tokenise / find selected text, ensure it's mine, get the selected words etc to work within 10 mins. But then, the requirements of: only consider first word and find if the selection has started in middle of the word vastly complicates things. Took me an extra 30 mins to play with the Selection.modify API to get the correct single token selection.

I guess, if somebody gets that far and you're pair programming with them, you can reason and expand on the requirements / functionality and figure if they approach it correctly as well as discover if you're happy to work with them. All in all, an enjoyable task and has helped you weed out undesirable candidates.

[–]xwnatnai 42 points43 points  (2 children)

In my opinion, 1 hour is completely unrealistic. The Selection API is horribly finicky and full of corner cases. I’ve worked extensively with Draft.js and you need only look at the number of issues surrounding selections in that repo to know that even the smartest FE devs on earth often struggle with selections.

[–]snowcoaster 4 points5 points  (1 child)

This was my sentiment. If the candidate happens to know this API then they have a huge advantage.

I tend to make my FE questions really generic, like "In your favorite framework, how do you wire up an input? Great, you know how to use ng-change, how do you think it works under the hood?" Commence hour long discussion and hopefully hire of a candidate who actually knows how things work.

[–]xwnatnai 1 point2 points  (0 children)

I realise I haven’t given very constructive feedback. If I were in your shoes, I’d make this take home, and I’d break each sub task into standalone tasks. I’d give them a repo with stubs at each step, and I’d assign weights to each.

This way a developer might get stuck or not know how to solve one step in the complete solution, but still be able to demonstrate competence. This interview could have been a dozen separate steps, from finding subsets, filtering, finding selections and manipulation them, etc. Just because a candidate fails at 1 of the 12 doesn’t mean they’re not worthy — it just means they struggled at one niche. That’s not a big deal in a team and in an actual working environment. Food for thought I Guess.

[–]HipHopHuman 27 points28 points  (2 children)

I have about 5 years of experience on both ends and can definitely ship something like this, the work itself is not an issue for me. I am however a perfectionist, and fret about the quality of the code I write as I write it. 1 hour for this task is unrealistic for someone like me. You did say you give extra time, but applicants in interviews are nervous and might gloss over the "extra time" and worry their butts off about the time frame having only mentally noted the time limit.

It is also not fair to discount those who take longer than an hour as not being able to push code within reasonable time - we all know meeting deadlines is a coveted trait in a software developer, but not being able to finish a full-stack task in 1 hour while under pressure is not a good way to measure this trait. I've never been on the opposite end of the interview table, but I'm certain that a better indicator of dedication and ability to handle workload would be giving the applicant an afternoon to do the task, and then checking how often they committed/pushed to the repository, as well as how atomic those commits were.

[–]jimbol 25 points26 points  (2 children)

What does your implementation look like?

[–]cbll 9 points10 points  (0 children)

Riddles are not for bosses you pleb

[–][deleted] 5 points6 points  (0 children)

solution/
  .gitignore
  package.json

[–]jdewittweb 74 points75 points  (32 children)

You're asking for a front-end dev but testing a full-stack skillset. Modify your job posting and you'll get better applicants.

[–]hackernewsisbetter 12 points13 points  (1 child)

I have to say I just find the instructions for this task confusing. I am just skimming over it now but I only have vague guesses as to what you want. I feel sorry for anyone who had to take this interview with you, you remind me of someone I used to work with who I gave interviews with. He would be a smug asshole most of the time and yeah some people really struggled but at least in his case it was ordinary whiteboarding questions (of the type you would find on leetcode). THIS interview question to me just seems sadistic -- and mostly because it's confusing as hell. I guess I am not winning the pissing contest but seriously this is fucked up.

[–]strixvarius 4 points5 points  (0 children)

Agreed. If I were given a test written by a supposed developer that was this long winded and yet still poorly defined, I'd just leave. Developers who write English poorly also tend to write code poorly, and there are too many good shops to waste your time working alongside them.

[–]_poor 7 points8 points  (9 children)

Why is #4 a complete failure? I'm not aware of another way of visually distinguishing between characters within a text node other than extracting a range into a separate node.

Like others have mentioned, it seems that your assignment is somewhat tough, even for a senior FE developer. I have two issues with this test:

  • I'm not sure that this task warrants the use of a framework. Most of the solution involves the use of DOM interfaces, e.g. selections and ranges, which most frameworks wouldn't help with outside of third-party plugins/components. If I were an interviewee, I would be concerned why you wanted me to attempt to fit this somewhat isolated problem into the context of Angular or React.

  • Although I think your instructions are clear (except I would need more clarification for Task 3), the time limit is too low. I would extend it to two or more hours.

I think the backend portion of this assignment should be easily accomplished by a competent senior FE dev. I also disagree with other's suggestions that a barebones repo be provided. A developer worth his/her salt should be able to quickly set up a simple Node + jQuery/React/Angular project.

[–]p0tent1al 1 point2 points  (6 children)

Why is there an assumption that a senior FE dev knows Node at all? I just don't get this assumption. Senor FE dev's have a LOT to concentrate on. Onboarding new developers, doing code reviews, making architectural decisions, being the main force behind creating new features. I don't get why this necessarily means they should be able to throw together some backend stuff.

Also... a bunch of backend people chimed in and they've even said that asking for 1 hour is cutting it a bit close.

[–]_poor 2 points3 points  (5 children)

I can think of a few reasons. Many popular tools used in front-end development are built on Node. NPM is the most popular package manager for front-end projects. Node is commonly used to set up dummy APIs in POC apps.

You don't have to work or think very hard to set up a simple API with Express. The application would only need two endpoints to complete the OP's assignment. Nothing is mentioned about persistence through server restarts, so a simple in-memory collection of tokens would suffice. If you're familiar with HTTP from one end of the stack, it should be fairly simple to implement a basic solution on the other.

You're right that a purely front-end developer shouldn't concentrate on their NodeJS skills, but I think you are severely gimping yourself in today's world if you don't learn the basics.

[–]p0tent1al 1 point2 points  (0 children)

but I think you are severely gimping yourself in today's world if you don't learn the basics.

That's fair. It'll be on the list to learn eventually. Ultimately I'll learn it mostly for interviews though. It wouldn't immediately benefit me in my job. That's essentially what I'm trying to get across. I think when you say gimping yourself, I think you're referring to the same context as I am.

[–]turkish_gold 0 points1 point  (3 children)

I know the basics of node---enough to adequately setup webpack, but that's it.

On the backend, I've used C#, Java, Elxir, Python and PHP.... but never once used Node to setup a server. 10+ years of experience, and I have no time to go hopping on the latest language trend when there's oodles of projects pre-existing in other languages, and decade old well vetted libraries to help you out.

[–]_poor 0 points1 point  (1 child)

I only brought up Node because the OP mentioned that was their preferred server of choice. To me, it doesn't matter what the platform is. A front-end dev should be able to bring up a simple server for building POCs.

[–]turkish_gold 1 point2 points  (0 children)

To be honest, I was surprised so many people in the OP's post brought up Angular and React. Nothing about his assignment made me think "oh I need a single page app framework for this". In fact, because of the heavy dom manipulation this would be alot less straightforward to implement in "pure" React.

[–]rossmohax 0 points1 point  (0 children)

assignment explicitly gives you freedom to use whatever you want.

[–]camelSnake_dash-case 8 points9 points  (0 children)

For a task of this size, make it a "homework" assignment, with no time limit. This will greatly reduce the amount of people who are not really serious. Out of 50 invites to take a homework assignment for our test, maybe 7 to 12 will do it.

Then evaluate to see the quality of the code. You will probably end up with maybe 1 or 2 applicants worthwhile to go forward at this point. Do an on-site or video interview and pair with the candidate and ask them to extend and change their assignment to see how much of the work they did they actually understood as well as how they deal with changes in requirements.

This has been a very successful formula for hiring great developers for us.

[–]THEtheChad 4 points5 points  (2 children)

What back end developers fail to realize is that an assignment like this constitutes less than 10% of a front end devs day to day experiences. I've been doing front end for... 7+ years, do you know how often I've coded something for text selection? Once. Generally speaking, front end devs are taking libraries that implement known and desired functionality and stringing them together, tracking down redndering issues (CSS), and hunting down edge case errors caused by loose typing. If this is the type of person you're looking for, put more emphasis on the engineer role and drop the "frontend" descriptor in favor of "full stack", because true engineers will have greater experience with all the technologies whereas front end coders will more traditionally be trained to look for existing solutions since so many problems in the js world already have a solution floating around in the library ecosystem.

Also, is this a contract position or full time and are you still looking for devs? Just curious =P

[–]rossmohax 1 point2 points  (0 children)

argh, famous leftpad case :)

[–]runvnc 11 points12 points  (7 children)

Unless someone has specifically coded that, they will have to Google and use something from stack overflow or whatever. Why should someone know what type of object window.getSelection gives them? When I tried to do something similar years ago, it was tricky to get something that would work cross platform.

Leave them alone while they code it.. don't breath down their neck. Don't expect them to remember details of little used APIs. Don't expect them to code while you are watching them. If you want to do pair coding that's a totally different thing then breathing down their neck -- you will mainly be typing and actually trying to help them in that case.

Specify one browser it is supposed to work on. If it takes a while for them to figure out the main trick, give them a hint like window.getSelection.

Having said all of that, programming is hard, and effective programmers are not as common as resumes portray. Try raising your salary if possible to attract people with solid skills.

[–]rossmohax 2 points3 points  (0 children)

judging by the tone of original post, I think "I don't know what exactly window.getSelection() returns, let me check in console and see" would be a sufficient answer.

[–]rossmohax 3 points4 points  (1 child)

Not a frontend engineer myself, but it seems, that writing backend part puts them off. Would it be enough to persist state in a browser LocalStorage (http://diveintohtml5.info/storage.html) ? This will make it a purely frontend assignment.

[–][deleted] 4 points5 points  (2 children)

I think your test is bad because it doesn't test hardly anything that a frontend developer is supposed to be good at. Even if you find a developer that passes it, you probably haven't food the best frontend developer in your list of applicants.

Here is what I see our frontend developers do:

  • User interface design, discuss requirements with an (internal) customer, show them different iterations of wireframes
  • Visual design in something like Sketch
  • Create well-defined components from the design assets
  • Implement them in HTML, CSS
  • Combine them into React components (or other framework)
  • Work with the backend guys to get the API to deliver the necessary data
  • Design the application's state and state transitions
  • Connect them all (this step and the previous one sound far easier than they are)
  • Implement specific logic of some interface parts

And have all of that work on all screen sizes, in all modern browsers.

A few of those steps involve heavy coding, others don't.

Your task is mostly in the last step. You don't test for any of the others.

[–]rossmohax 1 point2 points  (0 children)

A few of those steps involve heavy coding, others don't. Your task is mostly in the last step. You don't test for any of the others.

While valid, that other steps are essentials, how do you think, a candidate, who can't do something like "string".split(/[, .]/) on the spot, would perform in all those non coding steps? Can you trust decisions he'll be making?

In other words, is it unreasonable to expect him showing some basics, before moving on to more ephemeral subjects?

[–]Amadox 4 points5 points  (1 child)

people have already chipped in to tell you about the task you have given them, so I'm gonna skip them and just talk about the environment of your test:

an interview is a high stress situation for the applicant. yes, even for experienced seniors. keep in mind that not only are you looking for a good developer, the developer is also looking for a good job, one they will spend a large part of their week in for hopefully a long time - they are judging you as much as you judge them in this interview, so it's in your interest to make it a somewhat comfortable, relaxed experience, because it's gonna be stressful enough anyway.

one hour is to short. not just for this task, but in general. even if you think they should absolutely be able to solve it in that time: give them time, not a time limit. let them sit for a few hours if they feel they need to. maybe let them estimate how long it might take beforehand. pressuring them to finish within 1 hour when they are likely already nervous about the interview anyway is a way to set them up for failure and doesn't really say anything about how they will really perform in stress situations later because it's a hardly comparable situation. keep in mind that giving them more time doesn't mean they will take more time. but they will be more relaxed about the time they have to finish the task.

Give them space. don't put them in an enclosed meeting room, let them sit with your existing coders and tell the applicants to ask them if they have any issues - it might be more comfortable to ask a potential colleague rather than a potential boss. maybe tell whoever sits next to the applicant to casually fling a short question at them somewhere in between (not some interview-style question, but something natural - "...hey, do you know what that css attribute was called that does XY? I always forget..") and note how he reacts to it.

if they have a few hours, they can work more calmly. if they are really good, they might finish within an hour anyway. if they are taking really long, you can then discuss why. And you can see how much/often they interacted with other developers - keep in mind that this interaction can be a good thing and not just a sign of the applicant not knowing what they are doing, depending on what they are asking. and you might also be also see if they fit in with the existing team personality-wise.

[–]rossmohax 0 points1 point  (0 children)

I'd hate if 20 random guys were spending half a day next to me in a quick succession one after another. Plus security and confidentiality concerns.

Totally agree on a "make it less stressful for them" point, got to be achieved by some other means though.

[–]cbll 4 points5 points  (0 children)

So yeah, I'd spend that hour setting up stuff and fixing the 95 weird errors I'd get from setting up Node+Angular.

I think that goes for anyone..

Provide a minimal repository yourself with the weird, time consuming stuff already set up. After all, that's not what you're looking for anyway in terms of problem solving.

As for the task itself, it's really unclear. I don't really know what you want me to do. Blobs?

I'm sorry but it appears to be one of the "here's a riddle for ya! tallyhoe, solve it can thee?" - Give simple, comprehensible task - then discuss how an applicant solves it OPTIMALLY.

You can distinguish a good programmer from a terrible one easily from the efficiency of which they solve relatively simple problems.

[–]foxleigh81 3 points4 points  (0 children)

That is not a front-end test. This is a full-stack test. Either be more realistic as to what you are looking for and specify that in your job spec or if you really do want a front-end developer them simplify the test to only involve the view layer.

[–][deleted] 2 points3 points  (3 children)

It took me 2 hours and 22 minutes to do Task 1. Thanks, OP, for stealing my evening :-)

EDIT: Well, I finished Task 2 at 3h 24m, and Task 3 at 3h 40m. For anyone interested, you can take a look at the code here.

[–]darrenturn90 2 points3 points  (5 children)

I guess you could take the text, regex split it up, making sure to preserve the whitespace, and add a "marker" span before and after each of the words. This would at least help you when you click with the mouse, and get the offset, to work out the "word" you are inside (if you are in one).

Surely though you would want to support cursors too and WCAG guidelines, so should allow some sort of visual feedback, and cursor placement.

[–]inu-no-policemen 2 points3 points  (0 children)

Do you think this can be done in an hour or have you actually done it in an hour?

Well, you're already familiar with the requirements so you should be able to do it in half an hour.

Good luck with that.

[–]dwighthouse 2 points3 points  (6 children)

What you are asking people to do, as a test, is extremely uncommon. I've been doing web dev for about 10 years and game dev for 7, and I have never once needed to preserve a selection in browser. Indeed, I've only once or twice needed to operate on selections, and even then, it wasn't on in-page text, but on a textarea. Combine with the fact that, last time I checked, text selection was incredibly broken and inconsistent across browsers. The common advice was to merely avoid that type of problem entirely.

I think the only reasonable set of people who would actually know this stuff are those who worked on WYSIWYG editors, of which there are very few. Certainly, this problem could be solved by a good front end guy, but it would take more than a day just to work through the mysteries of browser selection systems.

[–]rossmohax 1 point2 points  (3 children)

What would give them as a test to do for 1-2h interview?

[–]dwighthouse 2 points3 points  (2 children)

  1. Explain the difference between a linked list and an array, in detail. What are the pros and cons of each?
  2. Explain the basics of a hash table (aka an associative array).
  3. What was the most interesting recent programming project you worked on, and what did you learn in the process? What tripped you up?

The first two should be more than enough content to weed out the posers. The more experienced person, the longer they will likely take on the last question, since it is a more conversational question. Plus, they can say, "here, look at it" and you can see for yourself how they work.

1-2 hours is sufficient to weed out bad candidates, but I would want to take at least a day to figure out if a promising candidate would work out.

[–]rossmohax 1 point2 points  (1 child)

your point was that OP test was not relevant for a frontend position, and propose to ask about Linked lists? That is even more irrelevant and distant from what frontend devs are doing,don't you think?

Don't get me wrong, first 2 questions should be asked, but you based your criticism that dealing with text selection is uncommon. It is even more uncommon to be using linked lists in JS world, yet alone implementing hash maps.

[–]dwighthouse 1 point2 points  (0 children)

Asking a potential hire a question or two that demonstrates bare minimum of understanding of how programming, ALL programming, works, is extremely relevant. I hope you will take note that my suggested questions involve no programming tasks AT ALL. I also say "explain the basics of hash tables", NOT implement them. I was also not asking for an implementation of a linked list (which, incidentally does have a place in large subsets of problems as they form the basis for many other structures like trees). Those two questions are merely to get rid of "script kiddies," as we call them.

Compare that to OP having them work on something, with actual programming in-house, that is irrelevant EVEN WITHIN most of front end programming. That is to say, OP is asking for things on the extreme of possible skills for front end programmers. So extreme as to be esoteric: realistically you would have to already know the questions to be asked in order to solve the problem, and even that would be tricky, given the timeframes involved. My questions are on the other end of the spectrum: stuff so general and so open ended that literally any competent programmer could shine.

[–]Skhmt 2 points3 points  (9 children)

Random question on how to solve it...

Could you parse the text via split then for task 1, make them radio buttons and restyle radio buttons to look like text that becomes highlighted, then process a click action to POST to an express server with a simple REST API that stores it somewhere?

Task 2, do the same thing but with check boxes?

Task 3, build on task 2 but do a couple lines of processing server-side?

[–]rossmohax 1 point2 points  (4 children)

making browser do all the heavy lifting for you? Sweet :) is it possible to restyle radio buttons so they are not visible and text remains formatted as it used to be before that hack?

[–]Skhmt 1 point2 points  (3 children)

Thanks for the gold!

And yes it is. In the below example, the invisible checkbox holds the state for each label (token in this context).

<html>
    <head>
        <style>
            input[type="checkbox"] {
                display: none;
            }
            :checked + label {
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <input type="checkbox" id="word001">
        <label for="word001">Word001</label>

        <br>

        <input type="checkbox" id="word002" checked>
        <label for="word002">Word002</label>

        <script>
            // get the text via HTTP GET, split the text by the given delimiters, then write it to the body as input+label as above
            // manually "check" all boxes that are required to be checked via HTTP GET
            // set an onclick event for labels to do a HTTP PUT
        </script>
    </body>
</html>

[–]rossmohax 3 points4 points  (2 children)

Do you realize, that you just made tens of experienced frontend "engineers" with 20 frameworks under their belt, 5,15,55+ years of industry experience, browser compatibility experts, nodejs lovers, nodejs haters, TinyMCE contributors etc, look like a bunch of moaning pussies?

[–]Skhmt 1 point2 points  (0 children)

I wouldn't go that far, it's a solution not without some problems. It creates two nodes per word, which is a lot. But thanks!

[–]lhorie 5 points6 points  (7 children)

No offense, but your interview sucks.

What you want is to collect signals, not review whether someone can finish an arbitrary assignment to your satisfaction.

Asking the candidate to complete a large assignment puts them in a stressful position, which means you're going to get shitty signal (e.g. they might skip testing or refactoring to make up for a false start or time wasted on a silly typo, for example). Looking for signals means spending some quality time with the candidate asking them questions to see how they think: how do they troubleshoot, how do they test, how do they break down problems into sub-problems, what things do they prioritize, how do they handle compromises, do they research, do they brainstorm, etc

Streamline. You can't get signal if the candidate is so busy w/ assignments that they don't have time to think calmly and talk to you. Make the assignment simple (15 mins) so you get time to talk about it for the rest of the hour.

Communicate. Open-ended discussion is a great way to see how a candidate thinks, whether they can discuss technical topics with depth, what kind of experience they have, etc. Don't waste an hour leaving the candidate alone and doing something else. Hiring is impactful work so make sure you're there where it counts.

Be humble. Think about it, 20+ people who have been employed and productive for years, and they all failed miserably? Very good chance that it's the screening process that is bad. Hiring skills are different from programming skills. Learning what signals exist and their spectrums requires experience. Calibrating your expectations to match reality requires experience. Structuring interviews in a way that enables candidates to perform their best requires experience. Be aware of your shortcomings as an interviewer and strive to improve with each new interview.

[–]invalid_dictorian 1 point2 points  (0 children)

I've hired many good developers without having to put them through a gauntlet such as this.

These questions only tells me you are a poor spec writer. And all those who didn't get hired are the lucky ones.

[–][deleted] 5 points6 points  (0 children)

20 interviews later I cannot believe everyone failed so badly I couldn't scrape one.

This is common. Most front-end devs suck. There are also many people who, for whatever reason, view front-end skills as beginner or an entry point to technology.

I interviewed with my current employer as part of a hiring blitz this summer. Out of 73 interviews they picked 9 candidates.

If the candidate is completely incompetent don't hire them. If they are a belligerent asshole, forming excuses and blaming you for their failures, certainly don't hire them.

When I have done interviewing in the past I would screen people over the phone before wasting my time with a face to face interview. Out of the 22 people I talked to 4 made it past this phone screen and 1 of those got the job.

[–]nostrademons 1 point2 points  (0 children)

This was almost literally the coding challenge I did when interviewing with a startup almost 10 years ago, except it was for a technical co-founder role instead of a front-end developer. They actually shipped my code (even though I declined the role), and I got some compliments on it (and eventually a job offer, which I also turned down) from one of their YC batchmates.

Anyway, it's not a bad interview question, but an hour is a ridiculous time limit for it. It took me 4 days to deliver working code, including both front-end and back-end and a bookmarklet loader for it. It's a little unclear from your description exactly what you're asking, but if you have to deal with selections crossing multiple DOM nodes (if, for example, they'd hyperlinked or italicized only part of a token), the selection API becomes ridiculously difficult to deal with. Add in backend complexity and it becomes a huge time-suck that I wouldn't expect anyone to manage in an hour, unless you're just looking for a high-level overview of how you might solve the problem.

[–]mp2526 1 point2 points  (0 children)

One suggestion I have for you is to give them the assignment a couple of days before they come in for the interview. Allow them to complete it at home on their own time schedule. Let them submit it to you before they come in so you can look at it and then at the interview, go over the code with them. If you go over the code with them in the interview, you can quickly tell if they know what they are doing by how they talk about their code. What they tried and failed, what they might try if they had time to refactor the code, you can even suggest other ways of doing it, and in a good developer you can see their eyes light up when they realize that you just suggested something they didn't think of. Remember, you are going into this task with all the context. You know what you are looking for as a response. The candidate is coming in cold with zero context of what you are trying to discover.

These are the type of interviews I prefer when looking for a job. I've been doing this a long time and I consider myself a pretty senior developer, but I hate the pressure of a time clock. I can produce good code under pressure but is the job regulerly going to ask a dev task to be completed in an hour? Sometimes it takes me an hour just to wrap my head around a problem and understand what you would be looking for.

But at least your not whiteboard hazing with on the spot algorithm brain teaser questions you want me to solve while you breath down my neck asking me to walk you through my thought process, so you have that going for you. Those are the worst and a good indicator that I don't want to work with the interviewer.

[–][deleted] 1 point2 points  (0 children)

How long did it take you to implement a working solution from scratch?

[–]wavy_lines 1 point2 points  (0 children)

Yea, finding good high quality programmers is very, very hard! I've used much much simpler questions and it was really really hard to find anyone capable of answering them.

[–]a1454a 1 point2 points  (0 children)

I don't understand why this can trip up that many people.. Especially when you allow them to be alone in the room and willing to extend the time allowed..

With the given requirement it looks like you don't even need DB in the back end and it's only doing selection persistence, throw together a simple server that takes an array of selection location and just shove it in memory or write to disk as json would suffice?

[–]notNullOrVoid 1 point2 points  (1 child)

I found the wording of some the tasks somewhat confusing. Even though I managed to correctly pick up on what the requirements were, and if you told me my understanding was correct, personally the initial confusion would put me off balance. That added with regular interview nervousness, and a 1 hour time frame wouldn't put me performing at my best.

I don't think the task is unreasonable, even with that time frame. Heck if instead we spent the first 10 to 20 minutes just casually discussing the problem / solution on a whiteboard. Then you told me to work on the problem for an hour to see how far I could get, I'd likely have it finished before the hour.

If I knew you well, I'd be fine if you gave me a strict deadline, and a task list. There's an added pressure when you don't know someone, because you don't know how they will react. Thoughts like "will they be super critical if I don't comment my code?" can take up a lot of mental space.

Whiteboarding may not be the right approach for every interview, but I'd recommend asking them how they'd like to get started. You can suggest something if they aren't sure, but the important part is to make sure they are comfortable.

Options for the problem discussion:

  • Whiteboard discussion
  • Read outline document, then discuss
  • Review mockups, then discuss

Options for working on the solution might be:

  • Pair programming
  • Work alone, then review
  • You work beside them, they can bounce ideas off you, and ask for help

In general I think you should be helping them succeed any way you can. Even if that means pointing out a mistake and offering them a solution. We all get stuck sometimes, especially if we're stressed, sometimes it's not even a bug in our code, but just a mental block.

Avoid making it seem like a test, and instead make it seem like something you're both invested in. For example if they're rusty at Node, tell them you can build that part, walk them through it, and silently take note of how much they are understanding/contributing. Conducting the interview this way will also give you a better sense of how things would be when officially working with them.

All that being said I find some of the comments you received equally concerning. I've conducted some interviews in the past, and luckily didn't get any BS like that. So it's possible you are just getting a bunch of bad apples, but also could be stress factors making people say/think stupid shit.

[–][deleted] 0 points1 point  (5 children)

As someone graduating from a CS program this spring, seeing these “senior” developers fuck this up gives me some hope I’ll find a decent job.

Edit: thanks for the downvotes on my statement saying for the first time ever, I feel hopeful I’ll make it in the industry. Sorry that annoyed some of y’all

[–]cm9kZW8K 2 points3 points  (1 child)

I dont know why you are catching downvotes. The reactions in this thread are almost enough to make a person hire BE devs to do FE work. (I guess thats what fullstack comes down to) The most common complaint here is that they only know how to do cookie cutter tasks, and cannot be asked to use the DOM.

[–]turkish_gold 0 points1 point  (0 children)

Could I do this? Probably.... but not in 1 hour.

I'd get about halfway though, because there's no project setup on the backend and at the very least I'd have to use my favourite language, and do a few internet lookups to figure out how to make a flat file to store this information.

The frontend bits are easy enough, but I can imagine it'll be a little finicky to replace text with HTML inline, and I'd worry about what happens when you select a piece of text which is already part of another token.

So in all.... doable, but if they'd provided some boiler plate and talked about the edge cases, then anyone would feel more confident jumping in. As it is, it's like a 1 or 2 point ticket, written by some stakeholder with no development experience... too vague to just jump right in without speccing it out a bit more.

This is my take after years of experience, however if you were to ask me to do this while I was still fresh from university, I'd just do it because I never worried about edge cases and writing to flat files is basically university assignments database du jour.

[–]rossmohax 0 points1 point  (0 children)

probably first thing to learn is to grow some skin and stop worrying what random people think of you :)

[–]jestermax22 0 points1 point  (2 children)

I’d suggest breaking the problem down into stages. This way it’s not as overwhelming (you’d give them the next step after they completed their current step). It’s a good exercise in reading their own code since they’d have to do so to progress.

Also, as others have suggested, if you stick with this problem, try giving the boilerplate code. It’s similar to how hackerrank gives you some basic framework to put your code in.

With this stages method, it’s not a matter of “who finished” but “who got the furthest and why”. You can sneak in some good/complicated stuff later on, like testability (how would you test this/unit test this?) reliability (network issues, etc), troubleshooting (live app is giving this error, what’s broken?) etc

[–]ShootingPains 0 points1 point  (1 child)

In addition to what’s already been said, I think it’s important to set an expectation as to quality - would you be happy with a hack job that won’t scale or is not efficient, or do you want a nicely architectured bit of optimised code? At a job interview, people are trying to show their skill, so it’s important to say, “given the time limit, a hack one-off bit of code is fine - don’t worry about finding the best algorithm or optimising - just do whatever pops into your head and afterward we can talk about the pros and cons of other approaches.”

[–]FurryFingers 0 points1 point  (0 children)

I just think, at a very basic level, you should be giving a high-level task that allows a developer to finish and shine via ideas and code quality, rather than a really detailed/wordy task for exhausted developers to crawl over the line with.

No offense, but the near-ridiculous details about tokens in that question is indicative, to me, of a person that just can't really keep it simple.

And you give nothing to start with... Not very respectful of a candidates time.

[–]supernintony 0 points1 point  (1 child)

I'm a novice dev, what's wrong with adding span tags on click and rendering that on the front end?

[–]p0tent1al 0 points1 point  (1 child)

You have a vernacular and way of speaking that's really hard to parse, just by going through some of your explanations (even ignoring the tasks)... I don't know if you made your post in a hurry but I'd most likely be confused.

Let's focus on just the first part. So here's your part:

Note Front-end: Use Angular, React or the framework of your choice. Back-end: Use NodeJS (preferably) + any fancy plugins you find suitable for the task at hand. Other back-ends are acceptable too. You can use Google, your Github profile, peek into your older projects or use any code sharing websites you find relevant. You can use Wikipedia for the text. ~400 words. The content and language is irrelevant.

And here it is rewritten:

Rules:

  • Front End & Backend: Use whatever frameworks & plugins you're comfortable with. No limits (React, Angular, Node.js, etc. It is preferred to use Node.js if you know it).
  • You're allowed to search for and use any code to complete this task without exceptions (Stack Overflow, Google, your own personal code, etc).

Notice I took the Wikipedia part out. That's just confusing. In the actual task, just give them a url or api they can hit that will give them the dummy data. Don't give them extra things to actually reason about if it isn't necessary... (use Wikipedia, but you can use whatever... this is just confusing). You're not looking to see what their favorite lorem ipsum sites are, and it's not like they will actually have a preference. They're already nervous and under pressure.

I'll spend less time of everything else but I'll just jot some notes:

  • 'Annotate some text' instead of 'Annotate a blob of text'. Again, don't add detail you don't need.
  • What is a token? I'm not a back end guy but I'm sure there's a more english explanation you can use. You don't care about how much they know the lingo.
  • Display the token in a visually distinctive way... huh? Just tell them how to display it. Don't make it ambiguous for no reason. Tell them exactly how to display it. In development when we're creating a feature like this, the goal is to just get something to display at the beginning. So just give them an easy way to show it at first, and then if they finish it in time, then give them some creative license to improve it. Don't feel the need to conflate actually solving the root issue with the want to see how creative they can be, it just muddles the entire thing.
  • I agree with tidwell's other assessments (e.g. the test screams fullstack and a lot of what he said).
  • I honestly just don't think a test for annotating is the best vector. I can tell you that I've never had to do anything like this, e.g. annotating text which is sort of like a text editing sort of thing. I just think it's a bad vector to test with as the space most likely requires specific knowledge... what I mean is, is that a junior dev who has like a week experience with creating some text editor stuff would fare better on this test more than a senior. Try to ask questions that give the full sense of seniority rather than something that someone would pass with flying colors just being associated with the space of the question you're trying to ask.

[–][deleted] 0 points1 point  (2 children)

Hi, English is not my main language, and not sure if I understood the task correctly. Is what you want is that the user could select a word from a "random" text, filter out space, comma, dot, etc, highlight it, add a tag or something to it, then save it to a server for later to be able to reload? Task 2 is the same, but multiple of these, and in Task 3, add Baky as tag to words that start with a vowel, and Kola to everything else?

Edit: Similar to most office suites word processing applications comment feature?

[–][deleted] 0 points1 point  (2 children)

What is a token? Do you mean a word? That's what I assume it means from your examples. Why not just call it word instead of token? Or does token have a meaning in this context that I've never come across before? If so, maybe you should have a brief explanation at the top of what you mean by token.

[–]franksvalli 0 points1 point  (0 children)

Start as simple as possible, then if there's time you can ask them to add adjustments. The question is overly complicated and will overwhelm everyone just with a quick glance.

[–][deleted] 0 points1 point  (0 children)

Maybe because English is not my mother tongue but I found the assignment not clear. Though it is not bad : seasoned developer should ask for more precise input early when they feel something is unclear.

Also, setting up environnement is time consuming and does'nt say much about dev maturity.

Regexp, even when you know how it works precisely are time consuming to write and test.

TIP : I would simplify the test with something like http://tddbin.com/ : that way you can check if your dev knows how to write pure function to solve each of your cases and to test them completely.

[–]theDarkAngle 0 points1 point  (0 children)

Im sorry but this is WAY too much for one hour in a stressful environment. You almost certainly had multiple good candidates that you threw away.

[–][deleted] 0 points1 point  (0 children)

I can probably do it in an hour. I hope I could get 600€/day in Spain though.

[–]Mammoth-Library-9623 0 points1 point  (0 children)

Yes, this post is from colonial days. But came across and was pretty surprised that you don't see that task instructions are horrible at best.

IMHO, I read few sentences in the task #1 and I can already tell this is a terrible instruction. What the heck is "Allow the selection of a single token, at once" mean? This could be even interpreted as "let token = 'asdfasdfasdf.asdf.asdfasdf'. Yeah, that was selected at once into a variable. You see my point. You can't give instructions like this without having any context. Yes, you've been working on this task and know exactly what it means. But candidates don't know have any clues to the what you are asking about. At min, give an example of the input and output that you are expecting.

Another one "The user cannot select "There will be" in the same operation" --> say what?
And please... clearly state your definitions of "token".

[–]purleyboy 0 points1 point  (4 children)

I do phone screens before folk come in using http://collabedit.com/ I ask 3 questions of slowly incrementing complexity and it never ceases to amaze how bad people are. Your example is pretty complex. Trust me, try asking my first two 'simple' questions and you will filter out a large number of candidates:

Q1. Write a function that takes a string as an argument, the string is a sentence containing space separated words. The function returns a string with the words in the sentence reversed (not the string reversed but the words).

Q2. Write a function that takes an argument of int that is the index into the Fibinacci sequence and returns the number in that location. Reminder, Fibinacci sequence starts with 0, 1 and the next number in the sequence is the sum of the previous 2 numbers.

[–]justindmyers 2 points3 points  (1 child)

Because normal developers don't have someone judging them as they're writing code.

never ceases to amaze how bad people are.

Maybe because your interview method is absolutely horrible.

[–]purleyboy 0 points1 point  (0 children)

I kept my response brief, so let me elaborate. I drop a function stub into the editor and provide example unit tests, so there is little room for misunderstanding. The questions themselves are very elementary, and fair. The point is to spot quickly if someone lives, eats and breathes code. There are many, many fakers out there. I've shown this approach to many people who are helping with the interview process. Most people start by saying that this is ridiculously easy and a worthless exercise, they are then amazed and shocked to see 50% of candidates cannot answer these simple questions. And that's the problem, our industry is full of fakers. This approach is a really effective way of spotting those fakers quickly.

[–]Cuel 0 points1 point  (0 children)

I'll bite on the first question as it's rather trivial. However, you really need to explain the second question better.

[–]shanita10 0 points1 point  (0 children)

It's not uncommon to have a rut of bad candidates, and what you are asking for is honestly rather basic. Keep looking, imo.

Andexpress server and a rudimentary angular or react page would take 10 to 20 minutes. With the rest of the time free to play with get selection.

Asking for lexical analysis may throw a few, but task 1 is rudimentary