Smart & Gets Things Done by Joel Spolsky

These are my personal notes that I have taken while reading Smart & Gets Things Done by Joel Spolsky that I wanted to remember for future reference. This isn’t meant to be a Cliff Notes version or a substitute for reading the book. I picked this book up after hearing Rob Mallery mention it on Rocketship.fm #67.

Additional notes I’ve taken while reading other books can be found here.

Hitting the high notes

In some industries, cheap is more important than good. Wal-Mart grew to be the biggest corporation on earth by selling cheap products, not good products. If Wal-Mart tried to sell high-quality goods, their costs would go up, and their whole cheap advantage would be lost.

Productivity

It’s usually hard to measure productivity because it’s rare two programmers are working on the exact same task.

Using data from Professor Stanley Eisenstat’s CS 323 class at Yale where all students have the exact same set of assignments, the fastest students finished three to four times faster than the average student and as much as ten times faster than the slowest students.

Did those who finished faster do a sloppier job? No. There was no discernible correlation between time and score.

There’s More

Brooks’ Law: “Adding manpower to a late software project makes it later”

A single good programmer working on a single task has no coordination or communication overhead. Five programmers working on the same task must coordinate and communicate. That takes a lot of time. There are added benefits to using the smallest team possible; the man-month really is mythical.

Mediocre talent just never hits the high notes like the top talent can.

Two Examples

The iPod doesn’t have a replaceable battery. That would have marred the perfectly smooth and seamless back surface with an unsightly battery cover and latches.

Apple spent extra money putting a speaker in the iPod itself so that the thumb wheel sounds would come from the thumbwheel, instead of just through the headphones.

Finding Great Developers

Great developers, like great people in every industry, are simply never on the market. The corollary is that bad people (e.g. the seriously unqualified) are frequently on the market.

Three Methods

  1. Go to the mountain
  2. Internships
  3. Build your own community

To the mountain

Where do the people you want to hire hang out? What conferences do they go to? Where do they live? What organizations do they belong to? What websites do they read?

Instead of casting a wide net - e.g. job listings on JoelOnSoftware.com vs a Monster.com listing.

Internships

Snag great people who are never on the job market because you get to them before they realize there is even a job market.

Joel Spolsky sends letters to a couple hundred CS departments and writes a personal letter to every single CS major he can find.

Fog Creek interns always work on production code.

Mitigating Risk

There’s always risk someone won’t work out. Fog Creek has already auditioned kids and knows there’s no risk they won’t be great. They know what they can do. This gives them more information than any other employer who has only interviewed one of their interns. This better information allows Fog Creek to pay more than other employers without that information.

A Field Guide to Developers

When a candidate comes to visit your office, they are envisioning themselves working there.

How are programmers treated within the organization?

Do they fly first class? Stars fly first class - get used to it. Does a limo pick them up at the airport?

Developers are going to prefer an organization that treats them like stars.

No Politics

Programmers have a well honed senses of justice. Code either works, or it doesn’t. There’s no sense in arguing whether a bug exists, since you can test the code and find out.

Let developers pick their own project to work on.

Let developers use new technologies unnecessarily. Is there any reason your internal tools or less critical new applications can’t be written in an exciting new language as a learning project?

Sorting Resumes

  1. Be selective where you advertise jobs to limit the noise in your resume pile.
  2. Don’t hire based on resumes. Only use them to screen out people you don’t want to interview.
  3. Use an objective system to review and score resumes, so there’s some sense of being fair and consistent.

Passion

Pickiness

Fog Creek wants to see a coherent argument about why the candidate has thought and concluded Fog Creek is the place they want to work.

English

Programmers who can communicate their ideas clearly are going to be far, far more effective than programmers who can only communicate with the compiler. It’s crucial for documenting code, writing spec and meetings where you discuss how to do something best.

Look for neatness and orderliness of their resume.

Selectivity

Somewhere, someone judged you using some kind of selection process and decided that you were pretty smart - e.g. schools that accept less than 30% of applicants or a company known for having a difficult application process.

Hard-Core

There are certain technologies that are more hard core than others (because they are harder to do well than others).

Diversity

Does this person have a different background? Will they bring new ideas and new ways of thinking to the team? Will they challenge the groupthink that is likely to keep us boxed into our own echo-chamber way of thinking about things?

Can’t we just add resume hoops?

When you implement artificial hoops and programming tests and whatnot to just apply, you’re just as likely to scare away good programmers as bad programers.

The Phone Screen

When talking to someone on the phone, it’s easier to focus on the quality of what someone is saying versus external factors not relevant to the job (e.g. appearance or nervousness).

Look for someone who is a problem solver - someone who gets things done.

Look for passion - you want someone who cared about the things they worked on.

Look for stories of how candidates handled challenges in the past - people who got things done in the face of opposition.

Smart people can generally tell if they’re talking to other smart people by having a conversation with them on a difficult or highly technical subject, and the interview question is really just a pretext to have a conversation on a difficult subject so that the interviewer’s judgement can form an opinion on whether this is a smart person or not.

The Guerilla Guide to Interviewing

Always have at least six people interview a candidate - five of which would be peers of that candidate. Have them write immediate feedback after the interview along with a one or two paragraph justification.

You’re looking for two things. People who are:

  1. Smart, and
  2. Get things done

How do you detect smart in an interview?

Create a situation where the candidate can show you how smart they are.

Avoid being the “quiz show interviewer”

Don’t ask things like “what’s the difference between varchar and varchar2 in Oracle 8i?”

There is no possible, imaginable correlation between people who know that piece of trivia and people you want to hire. Plus, the answer can be looked up online in < 15 seconds.

The way to learn about a person is to let them do the talking. Give them open ended questions and problems.

Look for Passion

Smart people are passionate about the projects they have worked on. They are excited to talk about the subject. Being passionately negative can also be just as good of a sign.

Good people can carefully explain things well, at whatever level

“Could you do me a favor, just for the sake of the exercise, could you please explain this in terms my grandmother could understand?”

Speed of thinking

Serge Lang, a math professor at Yale, would give his Calculus students a simple algebra problem on the first day of class - a problem everyone could solve.

The speed at which students solved a simple algebra problem was just as good a predictor of final grades in calculus as a whole semester’s worth of homework, tests, midterms and a final.

If you can't whiz through the easy stuff at 100 mph, you'll never be able to get the advanced stuff.

Conversations while solving a problem on a whiteboard

The goal here is to have a conversation.

A reminder about great people

Remember: Great people are much, much, much more valuable then average people. In programming, they are three to ten times as productive, while costing only 20% or 30% more. And they can hit the high notes like no one else can.

Fixing Suboptimal teams

Firing under-performers doesn’t always hurt morale.

There is a fear that firing people will reduce morale on the team. Often, it can have the opposite effect.

The good performers are tired of having to deal with the lame work of their co-workers. They’re frustrated that incompetence goes unpunished, which implies competence goes unrewarded.

Bad people actually make a negative contribution

Bad programmers take time away from the good programmers by making them debug their code, fix bugs, answer their beginner questions and deal with the repercussions of their bad design decisions.

Three Management Methods

Command and Control

This comes from the military. If people don’t do what you tell them, you yell at them until they do. If they still don’t do what you tell them, you throw them in the brig to teach them a lesson and make them peel onions on the submarine.

Econ 101

The Econ 101 manager assumes everyone is motivated by money, and the best way to get someone to do what you want is to give them financial rewards.

Intrinsic motivation is much stronger than extrinsic motivation (motivation that comes from the outside, like when you’re paid to do something). People work much harder on things they actually want to do.

This leads to the “overjustification effect” - extrinsic motivation displaces intrinsic motivation. Since extrinsic motivation is a much weaker motivation, the net effect is that you’ve reduced someone’s desire to do a good job.

Identity Management

The real trick to management is making people identify with the goals you’re trying to achieve.

The goal is to create a cohesive, gelled team that feels like a family, so people have a sense of commitment and loyalty to their coworkers.

This requires giving people the necessary information to steer the organization in the right direction.

Smart & Gets Things Done by Joel Spolsky Photo taken with VSCOcam