What a Developer Job Posting Should Look Like
pragprog.com
pragprog.com
A pay pal transaction not completing due to a network outage is an ops issue not a dev issue.
Also, what's the pay? When you talk to actual developers the biggest issue is the problems finding out what the job actually pays. I hate talking to recruiters that won't tell me what it pays. When you don't tell me what it pays that clicking sound you hear is me clicking the back button. It's a job, I go there to get paid, not take shitty pay to hear platitudes about how we're doing what we love.
If I want to take a chunk of my salary to have people go blow smoke up my ass I'd rather see a professional of my choosing.
As far as the gerbil thing is concerned, it's called producer/consumer. You use a message queue (SQS?) to store the work and you use the gerbils to 'consume' it. You store the state of the books in something called a "database" and you store the "master book" encrypted publicly on a CDN. The server puts a message in the queue telling the gerbil how to customize the book along with the URL for the master and the key to decrypt it. For pragmatic programmers they sure go out of there way to obscure that it's a simple producer / consumer model using SVN and a bunch of caches as a message queue / database monstrosity.
As for the coderay thing I'd rather just use the F# syntax parser from F# and decorate the AST as F# is my favorite language and it would take a couple hours to do it that way. As a pragmatic programmer I don't much care to implement a half assed parser in another language.
To be honest, while my inner nerd shudders at this, it makes a little sense as some of the languages in that list (Ruby) have only recently had formal grammars defined.
That said, I think it would take me more than ten minutes to implement a scanner for F#, which I don't know, using Coderay, which I also don't know.
I could probably get it done in about a day, maybe two for debugging and testing.
There is no way in hell I would spend that kind of time on a job application, and as a nerd that has gone into management, I wouldn't ask an applicant to do so either.
What has worked well for me in the past is to ask for either a link to their GitHub repository, a code sample, or have them solve a quick five-minute problem over Skype or IM.
If the interviewee passes that bar, we then do something more in-depth during the interview as a pair, timeboxed to about half an hour.
This has proven effective at weeding out the untalented and unworkable, without asking potential hires to sacrifice a huge amount of their time.
E.g., the language was defined not by a formal specification, but by implementation.
Then again, my memory is known for being incredibly unreliable; I could be wrong on this one.
"Devops" is the way to go these days. Surely they must exist, but I've yet to encounter a <30 person company with a fulltime sysadmin. It's usually "Joe" or "Rackspace". Yes, this is often suboptimal, for sysadmining is hard.
> It's a job, I go there to get paid, not take shitty pay to hear platitudes about how we're doing what we love.
Dude, it's a job opening at PRAGPROG. If that doesn't immediately tickle your fancy, this may not be the job for you.
Admittedly, it probably isn't the job for me either.
The tonal problem I have with this post is that it is about Dave Thomas. Any steps it takes towards being about the candidates it tries to attract are incidental. Roughly measured, it's roughly 50/50 filtering/sales. Better than most job postings! But in this market, not good enough.
Recruiting is sales. If you can grok the articles telling you not to shove signup forms into the faces of first-time visitors, it should be obvious why you don't want to demand a code sample in your first correspondence with a candidate. Lots of hiring managers will think this is entirely reasonable (the average candidate quality for a dev job is indeed poor), but that's an expensive filter applied way too early in the pipeline.
Also, the graf about health insurance is written evasively. Netflix says "we give everyone $10k; they can use it to buy one of our plans, or handle it themselves and pocket the difference". That works. Not having a group plan? That sucks a lot. If we didn't have one, I wouldn't trumpet it in a job ad. If I had to mention it, I wouldn't write it in a way that begged the reader to ask "ok, exactly how much higher than a normal salary are we talking about?".
My cynical internet self assumes "not enough to cover the huge cost of private health insurance".
(And providing your own computer? I hope that's just misworded, and they mean "we'll buy whatever you want". Otherwise, talk about penny-wise pound-foolish...)
I would change "software developer" to "site administrator" given that the first example in a typical day's work deals with resolving web site issues.
With the F# syntax highlighter code required to apply, I'd feel more comfortable if I knew they already had one and this isn't an issue of trying to get free work out of people. Also, requiring it to be implemented a certain way is out of scope and unnecessarily narrows the field by rejecting qualified candidates who aren't going to learn their special tool.
The salary offered should be clearly listed.
And finally, the no health care provided is unacceptable, which seriously will restrict the caliber of candidates interested. If this was a contractor position, which would be reasonable given that it is remote and the contractor is expected to own, use and maintain all their own tools, then that would be perfectly fine, however the rate would of course reflect that of hiring a contractor/consultant. But as an employee, in 2011, there are plenty of software employee jobs that provide benefits and very few serious ones that don't. Because the rate is not quoted I am highly skeptical that the claim that the rate is higher to compensate for lack of benefits is correct.
Agreed, on the health insurance angle, it'd be interesting to see what the compensation is, and if it increases at the rate of health care premiums. Lastly, until 2014 in the US, people with pre-existing conditions may simply not be able to obtain health insurance (one of the only advantages to work pooled health plans).
Conversely I think it's pretty progressive to not have health insurance, and allowing me to choose, but also as a result I can not apply for this position simply because I cannot insure my family outside a work plan until 2014.
I suppose for employers this seems like a great way of saving money. I don't really see not offering basic benefits that are standard in the field as progressive though, but perhaps you were saying so as a sort of joke in which case I agree it's a funny thing to be doing.
The current health care insurance market is a lot of information asymmetry. I personally can not comparison shop for insurance. My employer is generally paying a portion or all of the insurance, so there is heavy incentive to take the insurance to get your best compensation. If I don't take it, my employer will not give me the difference that they are contributing. Using my employer to pay for insurance, it can be done pre-tax (generally, recent legislation may change that).
The lack of choice and information asymmetry is what bothers me, and I applaud and expect this companies model to start becoming more common (hence progressive), but in the short term it would make sense to let the employee decide between a company plan and taking the money.
Lastly, since this is a publishing shop, they may be used to dealing with more freelance employees/contractors which does typically include such a benefit.
If the salary really is higher to compensate, I'd count that as a plus. Having an individual policy not tied to your job is much better.
I currently have a US healthcare plan that covers emergency care only (I live in Japan, so this isn't a big deal). This means it doesn't cover things like 'seeing a doctor' or 'getting antibiotics for a lung infection', which is why I need to cut a check to the urgent care center I visited a few months ago when I was in-country.
Fortunately, the total bill was only about $150.
For this amazing service, I -- pardon the pun -- cough up $120 a month to Blue Cross. For a health care plan that, by and large, does not cover health care.
This is more than the cost of full coverage through the national healthcare system in Japan.
Should I desire a comprable plan, I'm looking at somewhere between $500 and $1000 per month. I'm healthy, thirty years old, don't smoke, am not overweight, and exercise regularly. If I wasn't any of those things, the numbers would be worse.
So, no, healthcare is mandatory for any company I work for in the US.
Wait, what? I'm curious how you can manage to pay $120 for full coverage in Japan. I'm currently unemployed and will have to pay Y45000 (almost U$600) a month for national healthcare. When I was working I had private insurance provided by the company and of course the company paid part of it, but my share was still way over Y10000.
My admittedly unpopular opinion is that that's exactly what health insurance should be. It should protect you from major unexpected expenses, and you should take care of minor expenses yourself. That's how insurance works for everything else: you don't expect your auto policy to cover oil changes or minor dents, or your homeowner's policy to pay if you accidentally break a plate.
If you have an expensive preexisting medical condition that you can't afford to pay for (which unfortunately often includes "being old"), what you need is subsidized care, not "insurance".
As each instance starts, it boots its AMI. That image includes a snapshot of the checked-out eBook repository as of the date the image was created. Each gerbil, as it starts, updates this cache to get the latest version. This involves checking out perhaps 500Mb of data per instance, as new books will have been added and existing books updated since the instance was frozen. As a result, it will often take 30–45 minutes to start 10 instances.
Am I off base here thinking that a fairly obvious solution to address the 30-45 minute cold start is to NOT pull the entire library of book templates from svn at startup? Rather, why not simply update just the template(s) currently stacked up in the job queue? So instead of a 500MB pull your looking at maybe 1 or 2 before you can start processing a job in the queue.
I wonder if this "challenge" is an existing problem or something they've already addressed. Has relying only on "on demand" cache updating been tried already (seems like it would have been since it seems like an obvious possible solution) if so what was the result?
A reasonably experienced team developer [perhaps a dev admin guy as well] will probably know how to issue a 'svn update [url]' to obtain specific files [or directory trees] and avoid pulling the entire 500MB repository just to ensure those files are updated.
Obviously the best solution would be to keep updating the base instance image with new books so it could start up up to date as was suggested in another comment below. But ignoring that possibility what other options can we explore to increase performance? I just genuinely wanted to discuss the problem and find out if its nature was one that got more interesting the harder you looked at it.
* It's really a 'jack of all trades job'
* combined sick & vacation time is a crappy practice.
* No benefits
* Must supply own equipment
I'm sorry, but that's either a consulting gig (with the rates that come with that), or it's a co-founders gig. Or a very young developers game, looking to cut their teeth.
I look at it this way: I like "jack-of-all-trades" jobs. Maybe you don't. That's okay, and not a poor reflection of PragProg. The combined sick/holiday time is okay with me, too, especially since you will be working remotely. I have a very similar arrangement with my employer (though I'm in the office several days a week), and I've never taken a sick day. If I don't feel too hot, I just work from home. Sure, you may get very sick, and take a few days here and there, but little stuff that might keep you out of the office in normal circumstances probably won't keep you from working remotely.
As for the benefits, I echo tptacek's sentiments above: give the vast amount of detail provided for the job itself, glossing over the lack benefits is a bit troubling (especially for someone like myself who is sole benefits provider for his family).
Two important things and one less important:
* job description is more for system admin and not for a developer - your audience will be confused
* if you do not offer either health care or a pension plan, this is then essentially a contracting gig. You probably need to provide exact salary in this case. Probably you need go to hourly rate. In practice, there are only two type of jobs for developers in US: job fully loaded with all benefits and contracting gig. There is very little between.
* less important: too wordy and just too long without exact facts (you know engineers do not like
My job breaks down to something like 25% tech support, 65% fixing other people's bugs, 10% developing new features. Maybe I'm just bad at managing my career or something.
Sadly, that's about the norm in this industry.
There's a reason why the average software engineer burns out after 5 years. The legacy/maintenance burden is a real problem, and it ends a lot of careers.
There's a lot to be learned in maintaining one's own projects, and I think everyone should maintain their own stuff, instead of being "promoted away" from maintenance, but I think maintaining other peoples' code is only a strong learning experience when the code is of very high quality. In that case, it doesn't feel like maintenance.
What happens is that poor maintenance practices lead to more maintenance work in the future, and the norm in the software industry is for maintenance to consume 70-90% of developer time. Sloppy maintenance practices self-perpetuate. With proper practices in place, it should be 30-40% at the worst.
The biggest fuckup in the software industry is that maintenance jobs usually get passed to junior programmers who (a) don't know enough to do them properly, and (b) more relevantly, don't have the power to do maintenance properly. Actually improving the code would require clout in the form of (a) asking people to drop what they're doing and document code they wrote years ago, (b) removing bad functionality from APIs, and (c) having the option of saying, "we need to rewrite this entirely" without risking one's job. The junior developers who get the maintenance projects never have that kind of political power, so the result is that the "maintenance" doesn't achieve lasting code health improvement.
The trick, and very few companies have figured this out, is to create a "maintenance engineer" career track, pay it 30% more so that it's desirable and people have to be turned away from it, and delegate legacy maintenance tasks to people who actually have the relevant skills and can actually (imagine this) improve these legacy modules instead of "maintaining" them indefinitely. The most important thing is to make sure these engineers actually have enough power/clout to do their jobs properly. Which means the maintenance work should go to people who actually have proven skill and can be trusted, not those who draw last.
Agreed. Moreover, maintenance isn't great at teaching anything but maintenance.
> The trick, and very few companies have figured this out, is to create a "maintenance engineer" career track...
That might be a good idea. I think it should be something you're promoted into, rather than out of, after having spent a while writing and maintaining your own code.
Of course someone should fix other people's bugs and someone should do tech support. As well as someone should be a slave, someone should work as a cleaner or keep streets clean, but why you should do this boring stuff ?
By the way, fixing other people's bugs and tech support may not always be quite as boring and demeaning as you make it out to be.
Your disdain for menial work is misguided. There's more to life than your work.
Maintenance isn't so bad except for how it's managed. michaelochurch addressed this well in his reply [http://news.ycombinator.com/item?id=3024752]. I could do with less tech support, but haven't gotten around to automating it away.
Or something less serious. A developer who is pregnant for example is basically uninsurable as an individual except also by state Medicaid, which is available to the poor in the US. What if you have AIDS taking long term drug therapy, or you are a paraplegic developer? You will not be insurable as an individual. A disabled developer, or a pregnant one would not be able to take this job with no benefits. In some cases this sort of no insurance policy can work well as a way of screening out candidates that some software companies may consider undesirable, including women of child bearing age, the disabled, and other groups.
Yes, which is one of many reasons why employer-provided insurance is a horrible system. If individual policies were the norm, most people with expensive chronic conditions would have been covered before developing those conditions, and then wouldn't be trapped in their jobs or completely screwed if they were laid off.
Yes they will IF you don't let your coverage lapse.
How many people don't know about their preexisting conditions? If their preexisting conditions are serious, why are they letting their coverage lapse?
http://en.wikipedia.org/wiki/Health_Insurance_Portability_an...
If you look up the cost of individual medical coverage and the amount of money provided by unemployment insurance, you may find yourself with the answer to that question.
I've not only looked up the cost, I've paid it while being unemployed (and "old"). What's your relevant experience?
Yes, it cost money, but so does housing and other essentials. My "not healthcare" expenses are very low and yet healthcare wasn't what would push me over the edge. I didn't even bother to shop.
I know that you believe that, which is why I posted a link to a description of some relevant (US) federal legislation. (I know that there is other relevant legislation but ....)
As I mentioned, I've paid for individual coverage out of pocket while unemployed (and old). My experience does not match the common stories and I'm pretty sure that I'm not a special snowflake.
I'm glad you were able to obtain coverage on the private market, but when I started my company in 2005, I tried to pay for it for my family and various members of my family were declined from every insurer in Illinois. I have had continuous health care coverage since 1994.
You made allusions to our "willingness to pay for the true cost of our coverage"† (my paraphrase) in our previous conversation, which I assure you has nothing to do with my complaint. We weren't charged extra (though an extra charge would have been unfair, I'd have paid it and gotten on with my life). We were refused any coverage.
The solution to this problem was to set up a group plan at Matasano, which we were able to do because (a) we're large relative to most YC companies and (b) we have a full-time finance/contracts person. That solution does nothing for whoever takes the job this thread is discussing.
† You also asked where the perceived belligerence in my last reply to you came from; implying that I'm complaining that I couldn't get a free lunch is where it came from. The implication is particularly irritating because my complaint isn't that the "food" (to torture the metaphor) was too expensive; it's that the sellers decided to starve us.
I do take bphogan's point, in that it might not be possible to find a single group plan that spans the entire country, or that those nationwide plans cost more than individual plans.
Example: I was recently informed that I'm now one mile outside of their coverage area. Getting them to initiate transfer of coverage to a new insurer is harder than pulling teeth. And they offered to do it. But I've had to spend several hours on the phone with them this week simply trying to find out if they did, in fact, contact the new insurer.
Edit: Of course, they hadn't, but by a cosmic coincidence the paperwork went out yesterday, the third day in a row of escalating frustrations. I think they just got sick (pun intended) of talking to me.
When I land on that page from a link, it is not immediately obvious that I am looking at a job posting.
You should always always always let me know what I'm looking at within 0.5 seconds of me glancing at the page.
The first 3 emails take almost the entire morning. In the 15 minutes before lunch, instead of working on the new delivery feature you and dave specced out, you pull up Hacker News and read an article or two before taking your lunch.
After lunch, more support issues demand your attention. After an hour or so of correspondence and follow-up you manage to get started on the interesting distribution project, having blown off the F# syntax highlighting thing which you won't have time to do tomorrow morning, either. By the end of the day, you've barely started on the distribution project and send an email to Dave with a cautiously optimistic update.
Yes, the job involves keeping stuff running. If you're not interested in making sure stuff keeps working, we're not interested in you. Sorry.
Yes, we already have solutions to the architectural challenge, and we don't currently actually need an F# parser. Both are just exercises.
The combined holiday/sick days? I went with that because I though it was fairer than the standard n weeks vacation plus sick days. If you want to apply and ask for the separate vacation days, it doesn't bother me.
And we don't offer health insurance because no one else on our (small) staff wants it, and we can't start a group scheme with just one person (we checked).
Dave
I think this is a great section. Too many employers lack the confidence and business awareness to encourage the idea of working from home. You don't need someone sitting at a desk next to you so that you can bother them every few minutes. If your requirements are communicated efficiently and documented properly the developer's physical location is completely irrelevant.
I do this all the time. I already have the answer, I just want to see how the prospect would do it.
I'm amazed at how many postings make this hard to find or leave it out entirely.
http://pragprog.com/wikis/wiki/ADesignChallenge
http://shlomoswidler.com/2010/01/creating-consistent-snapsho...
Any particular reason? A lot of US companies are looking further afield because they can't find the talent in the US.
http://en.wikipedia.org/wiki/E-3_visa
Disclaimer: I don't qualify, I come from the land of potatoes, I just live in Sydney and get hounded by US recruiters for my troubles...
I'm thinking tax purposes. When you're a small outfit, the extra paperwork burden that comes from hiring people in other countries, without visas, probably would make it not worth your while.
The information contained is informative but it doesn't even have a decent summary.
If they're looking to weed out unsuitable candidates, TLDR might be a feature rather than a bug.
This is the internet, people don't read walls of text. If that's a weed out feature then you're doing it wrong.
Success in authorship means that you must be a good writer in general. Success in technical authorship means that you must be a good writer, as well as exceptionally good at organizing complex information (like a job description) and expressing it in terms that people can understand.
To answer the question directly: "Why don't they tend to look that?" Because most people can't write nearly as well as Dave Thomas.
With the combined pool, there's no pretense -- take time off when you want to.
Of course, we're assuming that you get a sizable pool for both... four weeks (twenty paid days) is reasonable, although were it my company, I'd offer five. The 'four week notice' policy seems a little high for taking the odd Friday off, and is totally out the window when it comes to sick days, but overall their vacation policy sounds pretty kosher.
Of course, most job postings aren't so brazenly honest. For young readers: the most important skill to hone during your 20s is bait-and-switch detection.