Weekly LinkedList #4

September 3rd, 2010

I’m sorry I’ve been MIA from the blog for a week as I’ve been under the plague, or something like that.  Here’s a quick rundown of the past week:

If you’re interested in tech startups or going behind the scenes of Code Anthem, I’ve started blogging about it here:
Monkey-Read, Monkey-Do Entrepreneurship

Manifesto for Half-Arsed Agile Software Development
Working software over comprehensive documentation … as long as that software is comprehensively documented

How I learned to love the new axis of evil
I think Oracle taking over Sun and acting stupid is actually a GOOD THING.

An example of what Code Anthem is NOT
Please choose valid options with reference to the code below. Compile time error as both printStuff methods have the same erasure …

Code like a girl
I can’t believe how much you tweak and perfect your code to make it “attractive”. We call it that “girl code”.

I have some great stuff lined up for next week including the first ever Code Anthem Blog interview and giveaway.  Stay tuned!


A Lesson Learned from Private Beta

August 25th, 2010

How can you really piss off good developers?  Tell them they suck.

You know I’m not afraid to call people out when they do something stupid, even when it’s myself…

So I opened up the Code Anthem private beta a few weeks ago.  Thankfully, I had some really helpful early adopters willing to come in and try it out. I basically told them that they sucked by giving them low scores.

Here’s how it happened: Code Anthem works by ranking developers against each other on a scale of 0.0 to 10.0. If you got a 5.0 then you performed at the average level of all developers.  If you got a 2.0 then you performed better than 20% of all developers.

The problem comes in that at the time of opening private beta, virtually no developers had taken the questions yet. This means that we essentially had to guess the difficulty of each question (not ideal, I know).  And, well, we guessed high.

Then to aggravate the situation, there were typical private beta things like bugs in some questions, confusion about what libraries could be used, etc, that caused good developers to perform worse than their actual ability.  So the first order of business was fixing all of that before recalibrating the questions.

Now we’ve gotten to a reasonably stable point and have done a recalibration. The old average of scores was actually around 2.5, clearly not the original intent.  Now that we’ve done a calibration, the new average of scores is … 5, of course!

So the lesson is: don’t piss off good developers by telling them they suck.  It’s probably a pretty obvious lesson but even in retrospect, a difficult problem to avoid without having the sample from a private beta already. And had I made the questions easier, I would have risked backlash when the calibration eventually lowered their scores.

So, really, the lesson for the future is: give a lot of information and also more warning that the scores will likely be off while we are in private beta. And I expect that the calibration will continue to weight scores up or down until our sample size grows to a considerable size.  So this is something to continue working on while Code Anthem is still in beta.


Thank you thank you thank you to my wonderful beta testers! You’ve given me so much feedback that will make Code Anthem a million times better.  You’ve energized me and built a small but passionate community all on your own.  I’m so grateful.

As mentioned above, the scores have been calibrated so you can check your profile page to see what your scores are now.  In case you forgot, the URL is http://www.codeanthem.com/member/YourUserName

I’m constantly making changes: adding features from the feedback forums, fixing bugs you report, adding better descriptions to our FAQ page and test taking pages.  Code Anthem is going to be awesome and you have helped make it that way.

Thank you.


How to Hire from the Bottom of the Barrel

August 23rd, 2010

I recently read an article, Fifteen ways to kill your job interview, which included an interviewer’s top list of annoyances that ruin the candidates chances in an interview.  Things like “Speak ill of anyone, especially past employers” make sense and are a red flag in an interview.

Reading through the full list, I was struck by how self-centered the post was to employers. Employers and hiring managers seem to think programmers are just desperate for a job.  We have to jump through numerous hoops that are pointless and have nothing to do with doing a good job AND smile while doing it.

Here are a few ways to “kill” your job interview that had me rolling my eyes: “Be unprepared”, “Shake hands like a fish”, “wear a suit”, “Appear desperate”. Keep in mind that each of these was not just “things to avoid”, but is considered something that would “kill” the candidates chances of the job entirely.

Do you have so many brilliant programmers walking through your door that you can’t deal with a weak handshake? Or wearing slacks and a shirt instead of a suit? Anyone who eliminates candidates for every single one of these (irrelevant of technical skill, mind you) will end up with a team of fake, sales-ey, over-groomed and under-talented people who can’t code their way out of a paper bag.

Meanwhile, the employers don’t have to do anything but ask questions and nod sternly.  Interviewers are often not ready right at the interview time.  They often do not prepare by reading the resume or learning anything about the candidate online.  The interviewer rarely wears a suit or any special clothing.  And many many times interviewers leave their phones on, act uninterested, complain, cut the interview short and every single thing on the list.  So candidates are expected to jump through hoops most of which have nothing to do with the ability to do a good job but employers don’t have to do any of them?

The winning line was “Your interview is all about what you can do for the company, not what they can do for you.”

That is NOT what an interview is about.  An interview is the time for both sides to figure out if this is a good fit. Very few employers are willing to setup another hour-long meeting with the manager and team AFTER they’ve made an offer for the candidate to determine if it’s the right fit.  Even if they are candidates don’t have time to re-visit every employer who made an offer.  And why should they?  An interview goes both ways.

Of course, it’s not just him.  This employer-centric attitude is common in the job industry at large.  Just read any major job board blog to find loads of “helpful” advice about putting aside your individuality and personality, how to dress, hire someone to write your resume and cover letter, fake it till you make it.

On the surface it makes sense.  After all, they have the job and programmers want the job, so they have all the power, right?  Here’s an employer-focused argument that is easy to understand: if you treat candidates like they don’t matter, only the desperate ones will want to work for you.

I’ve spoken a lot on the blog about the difficulty in recruiting and hiring great programmers, but that’s all based on the assumption that you’re interested in that sort of thing.  A self-centered approach to interviewing won’t ever attract the really talented programmers. Even if they easily get past these lists, any self-respecting programmer would be turned off by such a myopic approach to hiring.

And the “me me ME” employers won’t mind (and most likely won’t notice) if their approach turns off all the good programmers who will mysteriously disappear or accept other offers.  The lucky programmers may even notice the demeanor in the job post or early correspondence and bail earlier than that.

The programmers that get hired will be the ones who couldn’t get a job anywhere else. If any good ones slip through, the management style probably matches the self-centered hiring style and they’ll leave soon enough too.

Being a self-centered employer is a great way to laser-focus your hiring to the bottom of the barrel.


The Weekly Linked List #3

August 20th, 2010

An experience working in Ruby, a dynamic language
They had over 300,000 unit tests, totalling 6.5 million lines of code… At first I thought that was pretty amazing, but after working with the unit tests for some time, it became painfully obvious that they were just repeatedly implementing the basic checks that would be performed by the compiler for a static language.

The Deployinator: Continuous Deployment at Etsy
Using Deployinator we’ve brought a typical web push from 3 developers, 1 operations engineer, everyone else on standby and over an hour (when things went smoothly) down to 1 person and under 2 minutes.

This is how you write a job post for programmers
“Musical culture: Complete music studio equipped with drums, P.A., amplifiers, etc…” (check out the drawing)

What is the correct code coverage goal?
“Don’t worry about coverage, just write some good tests… Eighty percent and no less!”

Being Geek
“… if you’ve ever thrown a book providing career advice against the wall, this might be the book for you.”


Perils of Orthodox Programming

August 18th, 2010

For a practice rooted in logic, programming sure has hearty dose of religion thrown in.

There are preachers who lead their congregation and dictate the “right way” to program.  There are missionaries who spread the good word to the savages.  There are programming proverbs and famous passages and even lore.  There are zealots and blasphemers and heretics.  There are devout practitioners, borderline pragmatists and disillusioned nonbelievers.

There are rituals and places of worship and holidays and even pilgrimages.  There are different branches that you can affiliate yourself with.  Switching camps is something that happens rarely, involves personal reflection, and once completed the person often considers themselves “reformed” and denounces their former affiliations.  There is the occasional agnostic.

Programming turns into a religious debate because there are multiple ways to develop software that are ultimately successful. Programmers become attached to the approaches and practices with which they’ve had the most personal success or heard the most anecdotal success.  And we’d hate to think we wasted all that time going down the wrong path.

It would be nice if I could profess the antidote to this as looking at overarching  statistics or research, but the reality is that most of the available numbers are inconclusive at best.  It just takes a quick look at some of the survey questions or the audience to realize that the results are heavily  biased.

The problem with programming as a religion is that programmers pin their professional integrity to a side. Logic has little hope of swaying them and experimentation is frowned upon.  Even with certain movements with similar beliefs, there is infighting.

As an online discussion grows longer, the probability of a comparison involving Nazis or Hitler approaches – Godwin’s Law

Personally, I prefer to use automated testing with moderate coverage.  TDD or code coverage Nazi’s (see above quote) would consider me a horrible coder – not fit to touch a keyboard.  Meanwhile, those who don’t or rarely use automated testing consider me an extremist [insert judging eyebrow-raise here].

I’ve tried working at either extreme, and always found myself converging back on the middle where I’m most comfortable with my productivity and code quality.  As a professional with a decent track record, I’d expect acceptance from my peers that this way works for me.  Instead, the best I could hope for is a patronizing acceptance that since I am stupider than them, my poor choices will be begrudgingly excused.

I submit that we in the programmer community actively eschew our “religious” affiliations and focus instead on practical solutions and scientific exploration.  Let’s avoid blame and labels and embrace experimentation.  To dive into the concrete, what can you do today to dive into the other side of the pool?

If you don’t know everything, is there something for you to learn over there?  If your methods aren’t perfect, is there a way there to improve them?

If you assume for just a minute that the other guys aren’t idiots, aren’t you curious to know why they do what they do?


Let’s All Hire Awesome Programmers

August 16th, 2010

Unsurprisingly, there were a lot of reactions to my recent article that sounded like:

“Arrogant, condescending and otherwise mean programmers are NOT good hires even if they can code.  I concede that ability to code well is also vital, but you cannot settle on either point.”

And, I agree.

But the fact is that most companies do settle.  The superstar programmer who codes well, is highly productive and gets along with everyone is extremely rare.  And even if you happen to find him, he’s also extremely expensive.  It’s safe to assume that you are not hiring programmers who are both highly skilled and highly personable.

Good or Bad Egg Detector from Willy Wonka

In fact, if you’re a company that’s not well known and paying at-market or below, you’re actually getting the worst programmers.  It’s the ugly reality that most hiring managers would rather ignore than face.  And when you ignore a risk, you cannot mitigate it.

So what are your options?  The most obvious options are to require strong technical skill but settle on less-than-ideal soft skills, or to hire a great culture fit who can’t code well.  It’s not a black and white option, but a spectrum in which most people fall in the middle.

I’d recommend hiring on the side of “codes well” every single time but that’s not what companies do. Instead, they screen for the ability to write buzzwords and communicate in the cover letter and resume.  And then they screen for culture fit and background fit in the phone screen.  And then they screen for culture fit in the interview.  And then they ask a few open-ended technical questions and call it a day.

In depth verification of technical skill is extremely rare and is usually implied from past experience. The hiring process is setup to allow in programmers who are a good culture fit but who cannot write code.

There is another option of hiring a promising bright CS grad and grow them into a superstar which is used by most of the big software players.  The downside of this approach is that takes a great deal of time and money to identify them, recruit them, train them and then keep them once they’re extremely valuable on the market.  The majority of companies cannot pull this off.

The very last option is to wait and hire no one until that perfect someone comes along even if that means postponing work.  It’s what most programmers claim they would do, but it’s not what they actually do as managers.

And as a manager, it makes sense.  You’ve got work to do.  Deadlines to meet.  Hiring requisitions to fill.  Impending hiring freezes to beat.  When you’re in the hot seat, there is pressure to hire and not making a hire can appear like a failure on your part. Unless the organization is setting incredibly high standards from the top, you will appear unreasonable and will likely be superseded.

If you want to wait for the perfect fit, I applaud your stand, for however long you get to keep it.

If you want to build an expensive programmer garden to grow your own, go for it.

If you want to only hire for well known companies and ones that pay out the wazoo, you may not experience this problem (but don’t count on it).

But if you’re like most hiring managers, your pool of candidates, your hiring time line, the work they will do and their salary range are all fixed, known quantities over which you have little control.  What you can do is structure your hiring process so that it favors programmers’ technical skill over culture fit.  What you can do is hire programmers who can write good code.


The Weekly Linked List #2

August 13th, 2010

A new weekly series that links to cool articles around the interwebs. Basically, a link roundup with a geekier name. For near real time, you can also follow @codeanthem on Twitter.

Frequently Asked Questions about Code Anthem
“I am a programmer.  What can Code Anthem do for me?  How is Code Anthem different than Top Coder/Stack Overflow Careers?

The Smell of Hell
It’s not code smell. What experience has taught us to pay attention to is the involuntary little cold shiver we get in the presence of evil. It’s gonna be another FORTRAN day.

Cheat Sheets for Developers
“Programming & Scripting Languages, Markup Languages, Query Languages, Libraries & Frameworks, Operating Systems, Version Control, Servers, Databases, ORM, Blogs, Websites, …”

xkcd: Toot


The proof is in the code. That is all.

August 10th, 2010

When hiring a programmer, the only thing that really matters is their ability to write good code. Finding people who can do this are so rare that it’s generally preferable to excuse any personality quirk or deficiency they have.

As soon as I say that, a huge number of people will comment that it’s wrong, wrong, WRONG. Good programmers need to have communication skills and be able to work with others.  There is no I in TEAM! In fact, they would argue that it’s better to compromise your skill requirements in order to find the right culture fit.

It would be nice if we could say: don’t hire until you find someone with both great technical skill AND great culture fit.  Except very few of us have that luxury, except maybe Google, and even they are in a constant state of desperate-to-hire-programmers.  If you decide to wait, expect to wait for a very long for each hire, even while your businesses crashes and burns in need of a programmer.

So, which is it?

Let’s consider the mediocre to poor programmer who is amiable and works hard. His code isn’t good – it doesn’t really do what it’s supposed to do and even when it does, it’s sloppy and hard to maintain.  He struggles with basic functionality and is not able to tackle complex problems at all.  But he does get along with the team and the project tracking tool is always up to date and he gives plenty of butt in seat time.  You’ll be alright for a while because your managers will be happy to see such a smooth-running team.

When releases are slipping and the product is too buggy to use, people will lament that software is just so hard and throw more mild-mannered mediocre programmers at the problem. And we all know how this story ends.

For programmers, there is no amount of nice that makes up for getting things done.  A friendly mediocre programmer can become a business analyst or a technical salesperson or some other thing where he can leverage his friendliness and his bit of technical knowledge.  Working with them may be pleasant but it is a tea party, not a smart way to build good software.

The other option is a programmer who delivers great code and maybe doesn’t get along so well with others or comes in late or whatever. He builds an application that does what it is supposed to do and abstracts complex problems into simpler ones.  The software works and is maintainable enough to change it when needed.

This is the real world and there are plenty of ways that things may still get all screwed up, but at least you have a chance.  Good presentation skills are nice.  Team building is nice.  Employees working long hours for you is nice.  Plenty of businesses don’t do these things and still succeed, but no one succeeds at building great software with crappy programmers.

The proof is in the code. That is all.


The Weekly LinkedList #1

August 6th, 2010

A new weekly series that links to cool articles around the interwebs. Basically, a link roundup with a geekier name. For near real time, you can also follow @codeanthem on Twitter.

The Most Awesome Valedictorian Speech Ever
“I am graduating. I should look at this as a positive experience, especially being at the top of my class. However, in retrospect, I cannot say that I am any more intelligent than my peers. I can attest that I am only the best at doing what I am told and working the system…”

A 404 Page with rainbows and unicorns
“good thing unicorns are magical, try clicking on it… “

How to Avoid Being an Asshole Architect
“Nothing screams “Ivory Tower” like handing down some code you cobbled together to a group of developers to “figure it all out”.”

Should developers have access to production?
“System administrators are generally considered to own the production environment… When developers have direct access to production from what I have seen this control always gets undermined.”

What the fuck is my social media “strategy”?
“Making it up so you don’t have to”


Software In Real Life #4: System Wasn’t Designed For That

August 5th, 2010

A handy response when there’s major bugs in the system…


This is the second installment of our Software In Real Life series, depicting commonplace ideas in the software industry occurring in real life scenarios.  Artwork by ILuisFel.