Hacker News new | past | comments | ask | show | jobs | submit login
Jobseekers Invited to “Apply Via API” (programmableweb.com)
211 points by apievangelist on Feb 2, 2012 | hide | past | favorite | 108 comments



For the lazy:

    javascript:$('div.code.plain').last().html('<form action=#>name:<input name="name"><br />email:<input name="email"><br />about:<input name="about"><br />urls:<input name="urls"><br /><p id="status"></p><button>submit</button></form>').find('button').click(function(){var f,o={};for (var k in f=$('form').serializeArray()) {o[f[k].name] = f[k].value};o.urls = o.urls.split(',');$.ajax({url:'/jobs/apply',type:"POST",data:JSON.stringify(o),contentType:"application/json; charset=utf-8",dataType:"json",error: function(d,s){$('#status').text(d.status)}});return false;})
Or is that unsporting somehow? Downvotes suggest yes, but on the other hand it'd be pretty silly for someone to expose an API intending people not to write tools that use it.


Another one for the lazy:

curl https://www.parse.com/jobs/apply -d '{"name":"somebody", "email": "me@hotmail.com", "about": "some blurb about me", "urls": ["url1","url2"]}' -H "Content-Type:application/json"

Enjoy


Is this really so hard that it sets the bar higher to the point that it really works as a filter?


I know software developers who wouldn't be able to figure it out.


Sadly "yes". That said, it's not "so hard" in absolute terms, but that is precisely why it works so well as a zero'th order filter.

You wouldn't want to hire based on passing that, but you certainly want to NOT hire based on failing. (Depending on what you're hiring for, of course; I can't see not taking a sales guy to do sales if he couldn't do it.)


Actually if there business is cloud services, and APIs, then it might be a good idea NOT to hire a sales guy if they can't understand the basics.


That was my thought. I curl requests like this all the time. This is like a tire obstacle course, not a high jump bar.


Yeah, that wasn't very nice of you. Now you've basically ruined their low bar filter and made the bar even lower, completely defeating the purpose.


I'm not immune to that concern, but 'ruined' seems like a strong word... it's not like I've injected that code into their page.

Really, I just thought it was a funny little hack worth sharing with the community. I doubt anyone from Parse sees it as hugely threatening to their recruitment strategy.


Well, from a personal point of view, when we did the reddit hiring, it really annoyed us when someone posted their solution to one of the problems, because there were clearly people who were copying the solution to get their cover letter to us. So then we had to read those letter to determine that no, this person isn't actually qualified, and now we wasted our time (and theirs).

So that is where I was saying the harm comes from. It's not hugely threatening, it's just annoying.


That just means that posting public problem to hire people isn't a good idea.


Don't you think that's throwing the baby out with the bath water a little bit?

I agree that it's a problem that people can easily dupe an interview by copying a readymade result, but that doesn't imply that public problems are unilaterally a bad idea.

In fact, I'd liken this to a public announcement of a security exploit. Someone has found an insecurity within the social algorithm of public problem interviews.


To me, there is little correlation between a good hire and someone who solved a public challenge. What does it prove?


Your original claim was that one bad anecdote at reddit was enough evidence to consider "that posting public problem to hire people isn't a good idea."

Do you think that all public interviewing options are unilaterally unable to defend against people divulging public problems?

A public problem is essentially just a contest. Lots of contests are considered good figures of merit. If you win a nobel prize or a fields medal, that's a sort of public problem solving exercise. Would you hire someone who won a nobel prize over someone else, all other things being equal? I certainly would.

Maybe the real issue here is that these interview problems aren't sufficiently challenging or interesting such that the barrier to entry is keeping answer-copiers out.

Unless you're Gregori Perelman, for example, you're likely not going to be taken seriously or given much credit for solving the Poincaré conjecture.

PS. I don't think it was fair to downvote me just because I disagree with the pov. Is that why I was downvoted?


I have extensive recruitment experience and I understand the idea of "let's filter out as much as we can to gain time".

My experience is: it doesn't work, you will have to crawl through resumes, do phone interview and have people come over. You can be clever about what you ask in a resume and how you do your interviews but you will somehow need a list of skills and experience and somehow you will have to talk to the people you want to hire.

Additionally, you don't want people who just "find solutions to problems", you probably want people who build systems. That's a different skill set, which is why you will not filter out the right type with a teaser.

You will also unreliably assess their skills because you cannot tell how much time it took or if they actually did it.

Have people come over. Evaluate their technical and human skill. Nothing fancy, just straightforward stuff.

If in one day of interview you think they're people you'd like to work with, hire them. If you have any doubt, don't.

Let go the idea of the exam. You're a company not an university.


The sad part is that most people who see this are also able to pass such test.


One of Parse's founders follows the repo for a Ruby script for applying[1]. </reddit_starstruck>

[1] https://github.com/albertovilla/aparse


That's pretty amusing. Perhaps then I was wrong, and it is less annoying to them than it was to me.

> </reddit_starstruck>

I think that gets us both (deservedly) downvoted around these parts. ;)


I don't know. If the candidate can find a code on the net that does what he wants, it's not bad. In some situations, even better than writing the code by himself ;)


It is unsporting. The whole point of the exercise is for job seekers to show their chops and that, for some basic problems, that they can solve it without using Google.

For fun, I posted my info using curl, vi and not one Google search. A web developer with 2-3yrs of experience should reasonably be expected to be able to do this challenge.


Maybe, but personally I'd be pretty weirded out if someone who could figure out the significance and use of the string I posted could not figure out curl.

Is that just me?


Based on personal experience, I'd respectfully say it's just you. I do see your point, though.

I've met plenty of people who could code up a simple web UI but weren't very familiar with the underlying HTTP protocol. I guess my point is that knowledge of the protocol and web infrastructure is more valuable (sometimes) than just being a person who knows how to slap something together.

YMMV.


A lot of devs who only know Visual Studio have never even heard of curl and other unixy utilities.


Hey team, maybe I'm wrong but I don't get the sense that this is a "test" for entry. It says more about who they are and what they're about than it does the applicants.


Agreed - more of a marketing ploy to catch the attention of their target demographic (people who use JSON).


Curl?? Real men use Telnet...


Telnet is not the best thing to use when talking to non-telnet servers since it's not a raw protocol that just passes data back and forth. For example, telnet appends an ASCII NUL to any CR in the stream. Netcat gives a truly raw socket.


Thanks, good to know.


compare:

    $ telnet www.example.com 80
    Trying 192.0.43.10...
    Connected to www.example.com.
    Escape character is '^]'.
    GET / HTTP/1.1
    Host: www.example.com
    
    HTTP/1.0 302 Found
    Location: http://www.iana.org/domains/example/
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0

    ^]
    telnet> quit
    Connection closed.
    $
with:

    $ curl -i www.example.com
    HTTP/1.0 302 Found
    Location: http://www.iana.org/domains/example/
    Server: BigIP
    Connection: Keep-Alive
    Content-Length: 0

    $
- Real men type less and do more.


Of course. Abstraction is important and powerful, and the right tool for the right job etc etc. But that still means there's a certain thrill in submitting HTTP POSTs via magnetized needle.


I've seen job listings embedded in <meta> tags, in HTTP headers, all sorts of odd places. The trick is that some smart person stumbles on it by accident, posts it on their blog, then gets picked up by a major tech site.

It's fantastic publicity.


I doubt I could stand the waiting between implementing something awesome like that and someone actually finding and reporting it.


Then I'm sure you could think of a strategy to discreetly "leak" information about it to get it discovered more quickly.


Are they looking for PR or for that smart person who finds it to apply?


I think that the publicity is worth more, because it says "come work here, we're interesting enough to put job offers in HTTP headers".


Although they still haven't migrated from the X-Job-Offer header to the preferred Job-Offer header. ;)


I don't know if I could apply to a place that doesn't at least wait until that proposal moves from Internet-Draft to a full RFC.


console.log statements


Literally the worst developers I've ever known are the sort that would eat this kind of thing up.

The worst developers in my opinion are those that appear highly proficient and effective until they're asked to actually produce something, then never produce anything of value whatsoever. They're infinitely worse than those who are clearly ineffective from the beginning. They're talented but immature; unwilling to do anything they don't see as a game; unable to see everyday tasks as games.



Probably should be:

PUT http://parse.com/jobs/chrisacky

:-)


There is a billboard around Utah that has a base64 string on it, if you decode it, it reads "head /hi" and if you HEAD their domain/hi it says POST then some params about yourself to /apply.



    $curl -I moneydesktop.com/hi
    HTTP/1.1 301 Moved Permanently
    Server: nginx/1.0.11
    Date: Fri, 03 Feb 2012 00:19:34 GMT
    Content-Type: text/html
    Content-Length: 185
    Connection: keep-alive
    Location: http://moneydesktop.com
    X-Career-API: http://careerapi.moneydesktop.com/docs


That is the correct response. You are not sending the appropriate HTTP request.


Huh? curl -I is a HEAD request, isn't it?



I know, my confusion was at the down vote and correction; clearly that's what they wanted people to see. I'm not sure what mistake people thought I made.


They were probably down-voting the use of an "X-" response header.


Yep that's the one. My startup's office used to be right above them. Cool guys.


neat idea. now if only every employer had the same standard REST api at an agreed upon URI, (like sitemap.xml) so you can mass-apply, mass-update resumes. on their side they can mass-flag, mass filter, prioritize.


"Seeking applicants fluent in spamming tech."


maybe that will take some of the challenge out of it


Make a request to any zappos.com page and look at the response headers. Found this while checking out their site prior to flying out there.

They've got flair.


I should do this more often. Look at the wealth of information returned in the headers:

1) They're using nginx (which is powered by Ponies!) 2) The site is fronted by varnish with a ttl of 1 hour, of which there appear to be at least 4 varnish servers. 3) Links to the various CSS files. Do browsers actually use these headers instead of the <link>s in the html? 4) Drupal is somewhere in the mix. 5) Mention one of the company core values, of which there are at least 8. 6) Anyone geeky enough to be reading this should apply for a job.

  $ lwp-request -e -d  www.zappos.com
  200 OK
  Cache-Control: max-age=2452
  Connection: close
  Connection: Transfer-Encoding
  Date: Thu, 02 Feb 2012 23:53:38 GMT
  Server: nginx/1.1.14
  Content-Type: text/html; charset=utf-8
  Client-Date: Thu, 02 Feb 2012 23:53:39 GMT
  Client-Peer: 203.206.129.48:80
  Client-Response-Num: 1
  Client-Transfer-Encoding: chunked
  Link: </favicon.ico>; rel="shortcut icon"; type="image/ico"
  Link: </styles/main.p.20120201135153.css>; media="screen"; rel="stylesheet"; type="text/css"
  Link: </css/print.20120115152845.css>; media="print"; rel="stylesheet"; type="text/css"
  Link: </styles/home.p.20120201135153.css>; media="screen"; rel="stylesheet"; type="text/css"
  Link: </>; rel="canonical"
  Title: Shoes, Clothing, and More | Zappos.com
  X-Cache-Hits: 117
  X-Core-Value: 8. Do More With Less
  X-Meta-Description: Free shipping BOTH ways on shoes, clothing, and more! 365-day return policy, over 1000 brands, 24/7 friendly customer service. 1-800-927-7671
  X-Meta-Keywords: index, zappos, zeta, clothing, shoes
  X-Powered-By: Ponies!
  X-Recruiting: If you're reading this, maybe you should be working at Zappos instead.  Check out jobs.zappos.com
  X-UUID: 970dff52-4df6-11e1-a3ab-001a645b7cf4
  X-Varnish: 1001890813 1001890584
  X-Varnish-Host: varnish04.zappos.net
  X-Varnish-ID: drupal
  X-Varnish-TTL: 60m


Re: the link headers, see the HTML 4 spec [0] & RFC 5988 [1]. They're only supported by Firefox and Opera at the moment [2] though.

[0] http://www.w3.org/TR/html4/present/styles.html#h-14.6

[1] http://tools.ietf.org/html/rfc5988

[2] http://greenbytes.de/tech/tc/httplink/


No wonder Google added header compression to SPDY.


> X-Core-Value: 8. Do More With Less

That's 1.3K of overhead per request. I call that doing Less with More. Recruiting in HTTP headers may seem like a clever gimmick to some, but I doubt it could possibly warrant the aggregate degradation of performance. If that's what they call doing "More with Less", my reaction is hardly an urge to work with them.


Huh? How is this 1.3K? Looks like 34B to me...


I believe Mr. Username was talking about the entire header block (1322B).

(I still think he's wrong, however.)


Yes, I measured the size of the HTTP headers. It's not a subjective measurement. It's not 1322 bytes; it's 1275 bytes. 1322 looks like you forgot to remove the indentation that was added above for code formatting. 1275 bytes == 1.3K.


  $ lwp-request -e -d  www.zappos.com |wc
     29     128    1299
Where do you get 1275? In any case, you can't consider all of this waste. Some of it is necessary (the connection headers, content-type, some of it is a performance improvement for a subset of clients (the link headers, etc.) and a small percent is waste (X-Recruiting etc.)


I measured the headers in ajtaylor's above post. Zappos delivers different headers each time, and currently they're only giving me 599 bytes, including zero Link headers.

I agree of course that you can't consider all of it a waste. My point was just that their HTTP overhead is exceptionally large, and their superfluous headers adversely affect all of their users despite the fact that almost none of their users will ever read them.

The fact that their X-Core-Value in ajtaylor's example was "8. Do More With Less" makes them seem clueless about the real impact of HTTP overhead.


> Links to the various CSS files

I'm glad you asked that because I had a momentary panic attack over whether I've been doing this correctly...


curl --head http://www.zappos.com/

It's worth doing yourself because they give different messages with each request in fields like X-Core-Value but here's an example for the lazy:

    HTTP/1.1 200 OK
    Server: nginx/1.1.14
    Content-Type: text/html; charset=utf-8
    X-Powered-By: Ponies!
    X-Varnish-TTL: 60m
    X-Varnish: 1001887650 1001881441
    X-Cache-Hits: 2832
    X-Varnish-Host: varnish04.zappos.net
    X-Varnish-ID: drupal
    X-Core-Value: 4. Be Adventurous, Creative, and Open-Minded
    X-Recruiting: If you're reading this, maybe you should be working at Zappos instead.  Check out jobs.zappos.com
    X-UUID: c687de54-4df3-11e1-b455-00215e22da70
    Cache-Control: max-age=583
    Date: Fri, 03 Feb 2012 00:05:21 GMT
    Connection: keep-alive


The first site I heard of putting fun stuff in the HTTP headers was Slashdot (randomly-selected Futurama quotes).

Back when I was using usenet I'd insert some X-headers of my own.


- This seems to almost invite abuse.

- Surely a better challenge would be to publish a brief but involved spec, then say "implement this API that returns your job application details." Then they can retrieve the job application from the applicants. Ideally, applicants also publish the source code somewhere, so they can see how you code.

- Oh wait, this is #1 on HN and getting tons of views. It has already worked out perfectly for them, and I should stop criticising. :)


> Surely a better challenge would be to publish a brief but involved spec, then say "implement this API that returns your job application details."

I would personally interpret this as intolerably arrogant and lazy. "Dance, code monkey, dance!"

They require me to spend a few hours coding instead of them looking at my resume and projects for a few minutes.


That's fair enough. Then again, some companies do similar things, like Dropbox with the Dropbox Challenge: http://www.dropbox.com/jobs/challenges


I can imagine a time when this practice becomes so common that spambots start mass-applying, and then employers need to use a CAPTCHA to ensure that only humans are using their API.

CAPTCHAs on an API. Never thought I'd see the day...


More useful: We'll put our qualifications up using JSON at our own websites and they will crawl them with a bot.


> CAPTCHAs on an API. Never thought I'd see the day...

You could argue that this is essentially accomplished through API keys/secrets and rate limiting.


Not on public APIs but I doubt we'll 'see the day' in any case.


It's already here. Think of Google search as a public API. They put captchas up if they think you're a spammer.


Actually, I specced this out for Delicious around 2007. I wanted to have the API be able to reply with "break this CAPTCHA/challenge/etc to continue" before actually applying the write/read/etc. (Delicious was very aggressively spammed.)


We've been doing this at EDITD for a while too:

http://editd.com/jobs/senior-engineer/

(for example)


I like your zmqrpc idea. I had a very similar RPC/MQ-combination running for a while, using RabbitMQ instead of 0mq, Ruby instead of Python and JSON instead of BSON (switched to bencode later for better binary data support). But other than that it was pretty much the same mechanism.

edit: Your "Join the Team" page has an opening titled "Internships: Fashion Design, Journalism, Software & Statistics" but then in the description it's unfortunately only for "Fashion Design, Graphic Design, Statistics or Journalism".


Kudos to whoever set up this box, by the way. I ran nmap against it a few different ways and the correct port number was not listed.


The reason (as pointed out by zeraholladay) is that nmap scans per default only about ~1000 ports. If the service is running on a non standard port it will not show up in the default scan


I ran it with the widest port range possible.


[deleted]


Noooo! Don't give away the keys to the kingdom. :)

Instead, maybe say "no ping scan".

On the other hand, if you're aware of nmap and know how to use it to get past the first hurdle, you're probably more than capable of solving the actual challenge.


Sorry, my bad. Deleted the post.


Really? (I'm being slightly sarcastic...)

I spent a couple of hours on this late one evening a few months ago, delightedly fired off my details, and - never heard anything back.

I'm still pleased that I actually jumped through all the hoops, but the utter silence from the other end? Not sporting at all.


Strange. No email in your profile, drop me one at geoff@editd.com and I'll see what happened.


This is great. I'll be keeping this entire thread in mind if I find myself looking for a job.


Is the purpose mainly just to prevent spam / completely unqualified candidates? Its rather trivial to do the post for anyone with dev experience so I can't imagine its much use to actually gauge their skills


That's what we thought too - this was the definite first pass, and we always intended to have a challenge/response type question for extra credit.

But we didn't need it - it turns out the kind of people that are intrigued enough to apply, and have enough ability to install a few libraries are likely great people.


awesome, well I plan on searching for companies that advertise jobs this way, seems like a great way then to get their attention


FizzBuzz is trivial, but there's a reason why it is used so often; the half-foot high fence keeps out 100% of people too stupid to step over it.


I thought employers generally gave FizzBuzz during an in-person interview. Surely a 5 minute phone call from a halfway technical interviewer could provide a way better filter than FizzBuzz, and avoid wasted time by having woefully unqualified people come into the office.


There are lots of filters, if I ever end up in a hiring role I intend to make use of several. Someone may be able to talk the jargon well enough during a 5 minute phone call but I think they should always be asked to write code at the in-person interview stage, and if they can't do FizzBuzz when they're being hired to program it doesn't matter what magic they weaved during the call.


I've done a fair amount of resume screening and it's definitely useful to be able to filter out the obviously unqualified or uninterested candidates.

I checked out the EDITD test and it's a little more involved than Parse's.


I have no idea what port "EDITD" is. Is that supposed to be trivial?


There is a hint on the page - IA is the standard HTTP port


OK, thanks. I got it now (though personally I don't find it very interesting).


How has it been working for you? Has it increased the overall quality of your applicants?


Incredibly - applicants through this vector are about 99% quality.


They could take it a bit further and provide full recruitment process and the employment itself via api.


That's pretty cool; a variation of the FizzBuzz theme

I need to come up with some more of these; FizzBuzz equivalents in various knowledge areas.


The first thing which sprang to mind was an ASCII art profile photo in the about string


Should have to make a request to get the resources that you can post to.


Right, the bar should be much, much higher for a programming job. Since there's no challenge in it, no weeding of applicants is performed.

To me, though, it's self-defeating to simultaneously accept resumes via email -- it shows there's nothing actually at stake. Don't they want only the smartest, most persistent candidates? It doesn't seem so to me.


Shouldn't their jobs site return a 204 instead of an empty 200 response?


I would argue that 202 is the most appropriate response. They might get to it, they might not.

"Don't call us..."


And if you miss one of the lines in your submission: 308 Resume Incomplete.


I think it's brilliant!

It shows creativity and maybe they will attract less applicants, but for sure applicants who are a fit to their company, their culture and someone with the right set of skills.


There are also a bunch of Chrome and Firefox add-ons which would make this very easy.


Is the page down?? Anyone? I am getting a 406 network error!




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: