Wednesday, November 5, 2008

Fundamental vocations

I've taken tests before that purport to help you find a career. I thought they were useless because they didn't ask the right question. It recently occurred to me that there are certain fundamental aspects of jobs that exist over all fields and specific jobs. These come down to the fundamental roles that exist in varying degrees in different jobs, and that have varying degrees of appeal to different people. Thus far, I've identified (hoping they don't sound too AD&D or like the Hindu Trinity):


  • Arbitrator/Judge

  • Artist

  • Builder

  • Caretaker

  • Checker

  • Destroyer

  • Discoverer

  • Fighter

  • Fixer

  • Guardian

  • Leader/Motivator/Coach

  • Negotiator/Deal-maker

  • Organizer (of people)

  • Persuader

  • Teacher

  • Thinker



A software developer is 3 parts Builder, 5 parts Fixer, 1 part Discoverer, and 1 part Artist (all depending on the particular job, of course). An accountant is a mix of Checker, Custodian, and Guardian, with a forensic accountant also adding a shot of Discoverer to the mix. A plumber is mostly a Fixer and partly a Builder, and, on a bad day, Discoverer. A nurse or doctor is Caretaker, Checker, Fixer, and occasionally Discoverer. A police officer is an Arbitrator/Judge, a Fighter, a Guardian, a Persuader.

I'm sure I'm missing a few fundamental roles. I'm also not completely satisfied with the ones that I have. Leader/Motivator/Coach either is poorly named or is asking to be split up. How does that role square with Organizer and Persuader, not to mention Negotiator/Deal-maker?

Labels: ,

Wednesday, October 1, 2008

Getting a Good Job in Software, Part II: Beginning the Process

As night follows day, so Part II follows Part I (eventually). So you've decided you want a new job, huh? By this time, you should have a rough idea of what you're looking for and what's out there. The first thing you should do is update your list. Your list might have entries on it a year old. Companies go out of business, get acquired, shift markets, etc. Make sure you have current information.

The next step is to filter your list of candidates more rigorously. I said before that you shouldn't be selective when getting your list of names. Well, now is the time to be picky. Now you're looking for reasons to take a company off your list. Map them to find out how far they are. Try to find out how big they are.

Go through that list. See who's hiring. Research their business. Look for news articles about your target company. Try your local newspaper, your local Business Journal, national newspapers, Infoworld, CNet, and the like. Look especially for information about deals, funding, product launches, and hiring. You want to get a feel for the company, and how it is running.

Find out not just how much money they make, but how they do it. Do they get a recurring fee for service? Do they get money from people who aren't their primary users, like in advertising? Do they get a big check up front for shelfware? These models have a pervasive effect on the culture and incentives in a company. Don't expect to find out all these things. You can't get a complete picture of the company, so don't try. What you're doing is trying to save yourself effort later on. If a company is a bad match, you want to find out sooner rather than later.

Look at the job listings they have. Are there jobs you want to do? Would anyone realistically hire you for them? Don't waste employers' time by applying to a job you're not qualified for, even if you're a fast learner. Maybe you can do the job. They have no way of distinguishing between you and someone who is just blowing smoke. If there's a must-have skill that you don't have, forget it and move on. If you can't offer evidence on your resume that you can do the job, skip it.

Contact the independent recruiters that you know. See what they have, what they're working on. Ask them about the companies on your target list. They're probably not working for any of them, but they might be. They'll also often be privy to industry gossip, and can tell you things you wouldn't learn otherwise. If you've been keeping in touch with them, they'll be happy to talk to you, especially if you're willing to talk about one of their prospects.

Use Linkedin to find out if you know anyone at your target. That's good for research, such as when a friend of mine vouched for two of the people at one company. It's also good for making contact, as when I discovered that an acquaintance of mine from years back had become a recruiter for one of my target companies. It's useful even when you don't know anyone there. By looking at the histories and profiles of people who work there, you can get a good idea for their styles and skills.

All of this should be used to narrow down your list. Your goal is to end up with 5-10 currently open positions at your target companies. If you can only come up with a couple, maybe you need to loosen your standards. Or maybe your current situation is tolerable, and you can stick with it. If you have more than 10, you need to prune your list, or at least prioritize it. Go ahead and be as frivolous as you have to in order to get that number down. A good job is not a commodity; different jobs will fit you in different ways, so you should focus on finding a good match.

Once you've narrowed down your list, you need to start thinking about specific openings. You were looking at companies before; now you're ready to take action on specific jobs. Work on your resume. There are lots of guides out there on how to write a resume; I'm not sure they're good, but I'm also not sure I'd be any better. I can just point to what seems to have worked for me.

Come up with a canonical, complete resume that describes every significant aspect of your work experience. Ignore the standard advice about length; you are not going to send this version to anyone. List your experience, skills, education, portfolio of work, and so forth. Leave out hobbies and side interests unless you can directly connect them to the job, or if your read of the company suggests they like that kind of thing (very fuzzy, I know). Spell check, grammar check, etc. Have someone else read it. You don't want to let any stupid errors slip through.

Once you have this resume, shaping it for specific jobs becomes easy. Remove or minimize the less relevant things. The travel web site won't care about your experience with card processors. Remove that section, or at least condense it. The programming tools vendor has no interest in your database experience. The company writing software for Windows won't care that you're a whiz at shell scripting. Use boldface to emphasize points of alignment; if the job posting says "Spring," and you have Spring on your resume, put it in bold. That can apply to inexact matches, too; if the job wants TopLink, and you know Hibernate, emphasis that.

Some job postings emphasize business skills, so leave in the section about how you worked with product marketing to develop business requirements. Put that in bold, too. Other jobs are more about heads-down coding, so you can leave that out. If you can't find a number of places where your job overlaps with the opening, maybe the job isn't for you. This isn't just an exercise in adapting your resume; it's also about double-checking the match. Make sure you save the job posting you're applying to; you'll want that for later so you can confirm what you're getting into, and you can't cont on it to remain where you found it.

This should go without saying, but your resume must be completely true and accurate. Besides being the right thing to do, anything and everything on your resume is fair game for questions in an interview. If it's been a while since you worked with a particular tool, and your skills are rusty, you can leave it in the experience section, but exclude it from the current skills section.

Once you've got a resume customized to a particular job, figure out how you're going to make contact. It's always good to go through someone you know, but I've had surprisingly good results just contacting them cold. I figure if a company is posting a job on their web site, they probably have someone paying attention. In my recent experience, I contacted 6 companies. I knew the recruiter at one of them. Another one came up due to a recruiter contacting me. The rest of them were cold contacts. Two were via their web site, one was via a Craig's List posting, and the last was directly to a specific recruiter whose contact information I'd gotten from a third party. I heard back from all of them.

I'm assuming your contact is via email. Does anyone do anything else these days, at least in software? You must include a message with your resume. It doesn't have to be anything elaborate. Aim for something between 1 and 4 paragraphs. The basic points to cover are who you are, where you heard about the company, what job you're applying for, why you like the job, and a brief justification for why they should consider you. You can often do that in 100 well-chosen words. Sometimes that's all you need. If you are particularly interested in this job or company, you should say that. That indicates you've done your research. A company would rather hire someone particularly interested in them than someone who's looking for a generic job.

Your resume should be an attachment. Don't include it in the main part of the message because your introductory message serves a distinct purpose. Use whatever file format that the ad calls for. If it doesn't say, you'll have to pick one. Word files are common, but there's a proliferation of versions. Text always works, but it's ugly. On my recent search, I sent out all my resumes as PDF. That seemed like the safest attractive option, and it seemed to work.

Once you contact a company, you should expect it to take up to 2 weeks for them to get back to you. It's unfortunate, but it's true; for a number of reasons beyond your control, companies can be slow. There's nothing you can do about it. Often, companies don't even acknowledge that you've contacted them. It's rude, but again, there's nothing you can do about it. It is acceptable to send a single follow-up message if you don't hear anything, but I would only do that if you have reason to believe that your email was lost. Otherwise, give up on them and move on.

It is perfectly acceptable to talk to multiple companies at once. In fact, it's desirable. It gives you better perspective on your options, while also mitigating the frustration of the glacial pace of the process. Let's not forget that this is a financial transaction. You want to establish a positive relationship built on trust and mutual respect, but you're also looking out for number one. Balancing those can be tricky, but nobody worth working for should question you examining all of your options.

Assuming you get a positive response you should expect the process to take at least 3 weeks from initial contact to an offer, unless of course you or the company declines to continue. Usually it will take 4-6 weeks, though in some cases it may be as much as 12 weeks. 3 months is totally not cool, but it can happen. It can be a frustrating experience because you'll have bursts of activity where you're making rapid progress, followed by days or weeks of stasis. That's where it can help to be talking to multiple companies at once. Hopefully, you'll be making progress with at least one company every couple of days. There's a lot that's outside your control, though, so you should know what to expect. These are important decisions, so you should expect it to take a while.

Next time I'll write about what to do when they respond.

Labels: , ,

Tech company benefits

Employers can be short-sighted and stingy with benefits. In the back of my mind, I've always kept the ambition that some day I would start my own software business. I'd like to think I'd be more enlightened. It's not about generosity in and of itself; I think that generous benefits can be a significant competitive advantage in the marketplace for talent. That makes it easier to get the best people and make sure they stick around. So far, I've come up with a list of ideal benefits I'd like to see:


  • 4 weeks of vacation per year at start, with 6 weeks available for those who have been around for a while.

  • 2 weeks of personal/sick time per year.

  • Fully paid health insurance premiums for employee and spouse.

  • 401(k) contribution of 5% no matter what the employee does, with matching of another 5%

  • A severance fund created the moment an employee starts. This fund would have 2 months of salary in it. If the employee is terminated without cause, such as in a layoff, they get the whole thing. If the employee is terminated with cause, they get 2 weeks. I don't know what to do in the case of the employee leaving by choice; I'm wavering between giving half and giving nothing. The important thing is that the money would be funded (using, say, TIPS) as soon as the employee started. That way, no matter what happened to the company, the employee wouldn't be left in the lurch.

  • 3 months fully paid paternity leave - it would be half pay for 3 months, with the balance paid out after the employee has been back on the job for a while, perhaps 9-12 months. If the employee quits before then, he doesn't get it. I've seen too many people take excessive advantage of this kind of benefit.

  • 4 months fully paid maternity leave - same conditions.

  • 4 day work weeks (maybe)



I have only a rough idea what this would cost. I think the vacation, sick time, and shortened work week would be free. People would be at work less, but more effective when they were around. The severance fund is less pricey than it looks; severance is normal, and this only differs in the quantity and the timing of the funding. The parental benefits would be expensive, but would only apply to some of the employees some of the time. I expect this would add 25%-40% to payroll costs on an annual basis. My hope is that these benefits would drastically reduce turnover and make hiring much easier. Vacancies are expensive, as is filling them. I haven't run the numbers, but my gut says it's the right thing to do. Hopefully, one day I'll get the chance to test this, and I'll end up being right.

Labels: ,

Thursday, August 28, 2008

Getting a Good Job in Software, Part I: Before you're actually looking

I've spent a lot of time looking for jobs, talking to prospective employers, interviewing, etc. I am much more effective at finding jobs than I was when I first got out of college. I'd like to think I've learned a few things that may be useful for others. There are some for whom what I've learned will not be useful, some for whom I don't want it to be useful.

If you're in software for the money, this is not for you. If you're just looking for any acceptable job, this is not for you. If doing a professional job is not important to you, this is not for you. If you're not interested in constantly learning new things, this is not for you. If you're in software because you like it, because you want to make cool things that do something interesting, then we can talk.

You should start looking well before you're actually looking. You have to prepare. Even if you're happy with your job now, you may not be forever. Your employers may be happy with you, but their opinion may change. They may go out of business. The company may get acquired. Things change. It would be foolish not to have a backup plan. You don't want to have the world change around you and have to start looking for a new job with nothing. Use the time you have now to get ready, even if you know you won't be looking for years.

Start off by compiling a list of candidate employers in your area. Do not be too picky. Do not research them thoroughly. Just accumulate names, keeping in mind that not all companies that do software are software companies. You do need to eliminate companies you know you won't work for. Check their jobs page to see if they use languages and technologies you know or want to use. Get a little bit of a feel for the company. Save their URLs. del.icio.us is good for this, as is a personal wiki. As an indicator, I had a list of about 90 Austin companies after doing this for about a year.

I assume you just kind of come across software companies in your daily readings and listenings. If you need more sources of info, the local newspaper can be helpful. So is Business Journal. Start-up Warrior claims to map startups around the world; they're worth a shot. Find venture capital firms, and look at their portfolios of companies. Also keep track of postings on Craig's List. Usually the ads don't include the company name, but some do. Add those to the list. Use the other ads to give you an idea of what skills are in demand. Set up a job alert on Indeed. Do searches from time to time to see who's hiring for what roles.

Look at more specialized job boards: Joel Spolsky, The Daily WTF, 37 Signals, Smashing Magazine, and Ars Technica all have them. No doubt there are more. Remember, you aren't trying to make a perfect decision about a company the first time you see them. What you are looking for is a long list of possibilities.

Talk to recruiters. This is one where you need to be careful. There are some really good and reliable recruiters out there. Then there are the ones who will just blast your resume to any company with a pulse, who will lie about what you can do, poisoning the well before you even start looking.

A good recruiter will talk to you first about each and every opening. They won't present you to a client until they've gotten the OK from you. I've been pleased in my interactions with HireStarter, but I don't think they operate outside of Austin.

A good recruiter is someone you have a relationship with. I first talked to HireStarter in 2005. I've talked to them several times a year since then. Sometimes it was about specific jobs, sometime it was helping them find someone else, and sometimes it was just catching up. A good recruiter will want to get to know you even if you're not looking right now, because one day you will be looking.

Use Linkedin. Knowing what your peers are doing will help you with your list of candidates, plus a decent network can help you later in the process.

You should be developing in your mind your ideal job. You may be happy with your current job, but it probably isn't perfect. Look back on the jobs you've had. Figure out what worked and what didn't. There are two kinds of requirements, the ones that apply to every job seeker, and the ones that matter to you personally.

To some extent, everyone wants the same thing. They want to be paid well. They don't want a boss who yells at them. They don't want to drive 2 hours each way. The company needs to have a useful product. They need to be making money, if not a profit. Some of these requirements can be flexible. How do you define getting paid well? Then there are early stage companies. They often don't have a product yet. In fact, they may not even know exactly what they are going to build, and they're certainly not making any money. In that case, you're going to have make a gut call.

Beyond those requirements are issues of personal taste. Those are the specific things that you need. You can tell it's personal if you can invert it and it still makes sense. Some people like small companies, while other people prefer large ones (or so I infer). On the other hand, everyone wants to work for a company that's solvent; nobody wants to work for one headed down the drain.

When I was recently looking, there were three main things that I was looking for. I wanted something where I had to apply all those algorithms and data structures I learned in school. That excluded many business applications, which was only a good thing. Additionally, it had to be something with flexible hours because of the small children. Finally, I wanted to work on a sharp team. It wasn't enough to have smart immediate co-workers; I also wanted to know that the management team knew what they were doing and had effective development practices. There were more considerations, but that's the gist.

You should also establish things that are not important to you. For me, offices are nice, but I can live with cubicles. The particular industry was also not all that important. I was averse to working for a bank, but I didn't have strong feelings about whether it was telecoms, search, or travel & leisure. I did want it to be something I could relate to, but I can relate to a lot.

Once you have an idea of what types of jobs you want, critically evaluate your skills and knowledge. Your work experience demonstrates only part of what you can do. There may be a gap between what you can prove you can do and what you will need to be able to do for the jobs you want. At the very least, you want to know what those gaps are.

The next step is to learn more about the things you don't know. If those skills aren't compatible with your current job, try to develop some side projects exploring those other skills. It's find if you lack knowledge. It's not ok to be satisfied with that, not if you really want the job. If you can't demonstrate the exact skills necessary, make sure you can demonstrate the ability to learn them.

Next time I'll write about how to narrow down your list of companies and make contact.

Labels: , ,

Saturday, August 16, 2008

Interviewer tips

I have been on the receiving end of a lot of technical interviews, and it surprises me how often companies let their employees do a bad job. I have come up with some suggestions for running such a session based on that experience. I have experienced every one of the problems that the following tips are meant to solve:

Preparation



Read the resume before the interview - you should not be studying it for the first time with the candidate sitting right in front of you. This is one of my biggest pet peeves. Waiting until the interview to learn about the candidate demonstrates a lack of seriousness and professionalism.

Be prepared. You should know in advance what questions you're going to ask, and think about various ways the conversation could go. The candidate is sacrificing a lot to be there, so don't waste the candidate's time while you struggle to think of something to talk about.

Coordinate with other interviewers so you don't make the candidate repeat himself unnecessarily.

Arranging the Interview



Let the candidate know what the schedule is in advance. The candidate should know:

  1. how long will he need to be on site

  2. how his time be divided

  3. who will be meeting the candidate, and what their jobs are (not just titles)

  4. what each part of the interview is meant to accomplish


Actually, before you tell the candidate all of that, you should make sure you yourself know all of that.

If two people will be sharing a time slot, they need to coordinate their questions so they both get the information they need without conflict.

Don't put a candidate with more than 2 interviewers at a time. For some, it may be intimidating, and it also poses a bit of a coordination challenge to get everyone's questions out of the way.

Minimize the number of on-site visits necessary. For local candidates, you can ask for two visits before making an offer. For candidates traveling more than 40 minutes, find a way to do everything in one visit. If you can't get all the necessary people squeezed in, reschedule, or redefine "necessary." Be mindful of rush hour and other timing concerns. If the candidate travels more than 100 miles, you need to compensate him for expenses. It is fine if you need the candidate to come on-site to sign offer paperwork, and the candidate can come back to if he wants to discuss an offer in person.

Consider weekend interviews. It's less convenient for your interviewers, but chances are the best candidates are very busy people. Being flexible is worth it. You can always offer your interviewing employees an extra day off to make up for it.

When setting up the interview, make sure the candidate has an immediate contact number in case they run into last-minute problems like a flat tire, getting lost, or the like.

Logistics



Someone needs to take charge of basic logistics: greeting the candidate, getting beverages and/or snacks, getting interviewers to the interview room at the right time, arranging breaks, and showing the candidate out at the end. This can be a recruiter, a hiring manager, or one of the potential co-workers, depending on who is available.

Consider recording interviews. That way, interviewers who aren't in the room for that particular session can still assess the candidate. Of course, you should get permission, and don't penalize candidates who are reluctant to be recorded.

Reserve a clean, quiet room with a whiteboard, a table, lots of paper and pens, enough chairs, and whatever supporting equipment is necessary, before the candidate shows up.

If you're going to keep the candidate in a single room for the duration, pick one with a window.

If you are going to have the candidate write code on a computer, find out in advance what their preferred editor is: emacs, eclipse, vim, netbeans, etc. If it's a common one, have it set up for them. If it's an uncommon one, ask them to bring a USB memory key with the appropriate environment already set up.

Attitude



Pay attention to the candidate, even if it's a pair interview and the other person is talking. No Blackberries allowed.

Remember that this is a personal interaction like any other, so don't be rude. It is not your opportunity to pontificate on your opinions. Don't be dismissive of what the candidate says.

Be sure to introduce yourself properly; don't just dive in.

Do not bad mouth your company, other companies, former employees, management, the recruiters who work for you, XYZ technology, or really, anything at all.

Questions



The candidate should write code. On a whiteboard is acceptable, but some things may be better done on a computer.

It is acceptable to assign "homework," some programming problem that the candidate should do on their own time. Aim for something that would take a good candidate between 45 and 90 minutes. Anything that takes more than 3 hours is too much to ask; anything that takes less than a half hour may be too easy to be useful. In my experience, these problems are usually posed with a blank slate for an answer. I suggest you consider instead giving the candidate existing code and ask them to extend it in some fashion. It is rare in the real world that you write fresh, new code, so your questions should reflect that.

Avoid brain teaser type questions. Too many of them rely on a trick, and it can often seem like you're giving a candidate a hard time just because.

Along with that, make sure it is apparent how a question relates to the qualifications and responsibilities of the job. If it's not apparent, explain the connection.

Do not ask the following:

  1. What was a project that you worked on that posed a particular challenge?

  2. Where do you see yourself in 5 years?

  3. Why do you want to work here?

  4. Rate yourself in X



Instead of the first one, ask about specific challenges posed by specific items on the resume (you read the resume, right?). Instead of the middle two, ask what the candidate wants to do. The last one is your job.

Don't ask questions that give you no useful information. For example, "what do you do when you have a technical disagreement with a co-worker?" There is only one right answer, and everyone knows what it is. The information content of any answer is zero.

The best questions are open-ended. That does not mean vague. If the candidate doesn't get your meaning, explain yourself using different words, and describe the sort of answer you are looking for.

Have more questions than your candidate has time to answer. Sometimes they've heard your questions before (perhaps even the day before), and you don't want to be caught flat-footed.

In some cases you want to spend the whole time going over just one problem. Choose a deep and subtle problem. That way you see if your candidate thinks deeply and subtly. You don't get as much information as you think from a variety of questions that you only explore shallowly. Nevertheless, as in #24, make sure you have backup questions, as if your candidate for some reason can't get over the initial hump, you may be spending a very awkward 45 minutes (or however long).

Test your questions on co-workers to make sure they're neither too hard nor too easy. It will also help your delivery; often, candidates will be unable to answer a question not because they're dumb, but because the interviewer asked it badly. In interviews, like anything else, practice is beneficial.

You should always give the candidate the opportunity to ask you questions, but don't use that as an excuse to avoid your duty to inform as well as evaluate. Anticipate common questions and answer those pre-emptively. Some of these are about the company and only need to be mentioned once. Others are per person, and each interviewer should discuss them. Imagine every candidate asks the following questions:

  1. How big is the company?

  2. What is the breakdown of employees?

  3. How does the company earn its money? e.g., advertising, subscriptions, licensing fees, etc.

  4. What has growth been like?

  5. What exactly is your role?

  6. How long have you been there?

  7. What do you like about working there?

  8. What don't you like?

  9. Where did you work before?



After the Interview



Hiring decisions should be unanimous. If someone's opinion isn't important enough to block the hire, that person doesn't need to be interviewing. I had hiring manager willing to override his team to hire me a few years back. That is flattering, but I don't think I'd want to work for him.

Always always always contact the candidate after. Never leave anyone hanging. You also want to find out how well your company presented itself. If a candidate is leaving with a bad impression, you want to know it so you can fix it.

Let the candidate know within a week what the next step is. You don't have to commit to an offer, but you do need to let him that progress has been made. A week is the maximum; try to respond within 2 business days.

Labels: ,

Friday, August 15, 2008

Leisure is Work

I gave my 2 weeks notice today. It was time. I'd been looking casually for over a year. It got a little more serious this summer. Due to a few organizational changes, the low-key start-up I joined was getting more and more assimilated into the bank, with the dysfunction that came with it. It was by no means intolerable, but things were getting worse, with no sign of improvement ahead.

That's not to say I was looking for an exit. I like my co-workers. We have a useful product. The benefits are pretty decent, with good insurance, 401(k) matching, flexible hours, and 4 weeks of vacation per year. The situation was more than tolerable, but unpleasant and often asinine bank actions were intruding. I noticed a real degradation in the environment from before my paternity leave until after. I didn't have to think very hard, and the problems that I had to solve had far more to do with banking procedures and bizarre external mainframe systems than any kind of computing. Plus, I was really starting to dislike our application. It may be wonderful for accountants at Fortune 500 companies, but I've gotten pretty sick of it.

You can probably skip to the end if you don't want to read a lot of boring stuff. I need to give a little bit of background to explain what happened next. I've never had much luck with finding jobs. I had 2 offers coming out of college. You can guess what my success rate was in 2001 and 2002 after getting laid off from Motive. For my job search in 2004, I contacted something like 8 companies. That resulted in 2 in-person interviews and 1 offer. My search in 2005 was much the same, which yielded the job I have for the next 2 weeks.

Last summer, I talked to about 4 companies. 2 progressed to the in-person interview stage, and I received no offers. One of them, a well-known Internet company, jerked me around for 3 months before I heard a no. I felt almost aggressively rejected in those cases. It seemed like companies liked me until they actually met me. It was not a happy experience. That was also the case with a company that I talked to towards the end of 2007.

That was what set my expectations of what kind of response to expect this time around, and how quickly. I had been accumulating a list of Austin software companies for the last year using del.icio.us. My list was up to about 90. I made a first pass and came up with about 10 companies. I narrowed that down to 3 companies that seemed really interesting.

One, let's call it Iota (names changed to protect the guilty, plus for a little suspense), was involved in a search vertical. Samba produced a tool assisting in what I consider an important but neglected software development practice. Finally, Rhubarb was a large but still rapidly-growing Internet company that had a small subsidiary that looked like it was working on interesting cloud computing things.

To those three I added three more. Kilroy I added because I happened to see their ad on Craig's List that day. Blazer I took a stab at because I happened to see on Linkedin that someone I knew had just gotten a job there. Finally, I'd been talking with an independent recruiting firm off and on for the last 3 years, and they wanted me to talk to Harmonica.

So I had a list of 6 companies to whom I sent out feelers. I figured I'd hear back from 2 of them and maybe get an offer from one. That was my experience. That's what I expected.

As the heavy-handed foreshadowing has already made clear, that is not what happened. I heard back from all 6. I passed all 6 phone screens. Kilroy I met in person first over lunch, and then never heard from again. I met Rhubarb next. They were disappointing. Their interview was disorganized, and one of the interviewers (and potential co-workers) was rude and antagonistic. I didn't need that. When the recruiter called me back, I said thanks, but no thanks. I can get abuse for free.

Things went a little better with Samba. They told me up front that the opening I had seen had already been filled, but they'd still like to talk to me in person just in case I was awesome. Yeah right. I didn't embarrass myself, though.

I had an interview with Blazer the next week. I thought it went pretty well. I certainly was impressed by the people I met. I heard back in a couple of days that they wanted me to meet a few of their executives. I had set up an interview with Iota for the next Thursday, so I set up the Blazer meeting Friday afternoon. That same week, I talked to the hiring manager from Harmonica. I figured it wouldn't hurt, since my other opportunities would collapse once they actually, you know, met me. They sounded pretty interesting, so I planned on talking to them further.

The Iota interview felt like it went well. They also seemed smart, and they had a lot of interesting things to work on. A friend of mine vouched for the head of development. I hadn't been perfect, though, so I made sure to do the homework with alacrity. The next day, I met the head of products and marketing at Blazer as well as the CFO. It wasn't much of an interview, more of a conversation to get to know each other. I was feeling pretty good about hearing from them.

When I got home, I got word from Iota: they were prepared to make an offer. I felt pretty good about that. I felt slightly less good when I saw the money. It was an improvement, but I wasn't sure it was enough improvement to justify the risks and costs of switching. They had an aggressive bonus program, but I don't think of bonuses as being real money. I told them I needed a little time, figuring I'd see what Blazer came up with.

I also noticed that an email from Samba had gotten stuck in my spam folder. They said they liked me, but since the position was filled, they wanted to know if I'd be willing to wait till the end of the year. Things were looking up, and Blazer didn't disappoint. Come Monday, they made their own offer. It was nearly identical to Iota's. That's what comes of disclosing your salary. They must use the same formulas. I had some thinking to do. They were both good companies with smart people. They each provided a service that was useful and profitable, which is a surprisingly rare combination. Plus, they were both just 3 miles away from my house.

I told both companies about the choice I was facing. I also had set up an in-person interview with Harmonica before I received either offer. The day before that interview, I talked with Iota and tried to get a little more money. I did it very badly, and consequently achieved nothing. However, the morning of my Harmonica interview, the VP of Engineering at Blazer came out of nowhere and bumped their offer by 8% to near the middle of the bonus range offered by Iota. That got my attention. Later that same morning, I had a talk with Iota. I mentioned the bump in the other offer, but mainly I just wanted to discuss how their development team worked. It was a fruitful conversation, further convincing me that they were an excellent organization.

Faced with two pretty decent offers, I was considering canceling the Harmonica interview. It just didn't seem fair to them since I was highly likely to take either Iota or Blazer. I called the independent recruiter who'd set me up with them to work through the right thing to do. She wasn't there. I figured I might as well go.

Harmonica came with two strikes against them. They were down south, a 15 mile drive compared to the 3 miles for the other guys. Plus they were already up to several hundred people. Still, they had sounded intriguing on the phone, and I foolishly thought that wasting their time was better than bailing out. So I went. And wow... Those guys were smart. They had it together. It was astonishing, considering that what they did seemed pretty unsophisticated on the surface. I felt pretty good. On my way out, I told the hiring manager my situation. I hated the idea of putting anyone under pressure, but I had a deadline.

The next day, I heard from the Harmonica recruiter. Things sounded good. At her invitation, I met the Harmonica team again at a coffee shop where they were having an off-site work day. It sounded like they were moving towards an offer, but it was Friday, and my deadline for both Blazer and Iota was Monday. My coffee shop appointment reaffirmed my reaction from the day before. They were good eggs.

Something in my conversation with Iota the previous day must have jogged something loose, because I got a call. This time, it was the CEO and co-founder. I'd met the other co-founder already, but the CEO was based in another part of the country. To my amazement, he asked me what it would take for me to commit. What? I was so surprised that all I could do was say what Blazer's raised offer was, which he immediately said he'd match, and resist his attempts to persuade me to commit right them.

That made for an anxious weekend. I had two very good offers. Iota had a clear edge over Blazer. Blazer's product was good, while Iota's was great, a real market changer. Plus, Iota had matched Blazer's base salary, plus they had an aggressive bonus program. On the other hand, Blazer had 4 weeks of vacation plus additional sick time, while Iota just had 15 days personal time off encompassing both. Then there was the big unknown with Harmonica. I didn't know what was going to happen.

I put together an elaborate spreadsheet. It had all the obvious things on it, like salary, insurance costs, etc. I also added other things, like vacation time and commute distance, trying to quantify as much as I could. I didn't know if Harmonica was going to offer, but they knew what I already had been offered, so I figured they'd match that if they offered anything. Iota had a clear edge over Blazer, but Harmonica was the big unknown. I put together an extensive list of attributes. Harmonica won almost half of the categories, while Iota won the rest. Clearly, this approach wasn't working.

Jessica realized it before I did. I was trying to find a way to make Harmonica the objective right choice. I really liked them. The people were smart and likable, the technology was interesting, and the company was exciting. But I had no idea if they were going to offer, or what. And my excessive analysis indicated that Iota would probably be better for my career in the long run. Harmonica's technology was solid, but Iota's was more on the cutting edge, and they were certainly likable enough. It was a tough decision.

See, I couldn't just go with the people I liked best. There were too many questions. I'm the sole income for a family of four, which meant the money mattered a lot more than it would have otherwise. I needed to be around as a father, which meant that an extra 45 minutes of commuting each day was actually significant. And, while I was leaning towards Harmonica, Iota was still a terrific company. Blazer was pretty good, too, but they were out of the running by now. In any other circumstances, I would have been happy to take any one of them. The problem was I could only take one. I wasn't anxious about making a mistake, because none of my choices was a bad one. What was keeping me up at night was the possibility of walking away from a fantastic opportunity.

Monday came (4 days ago) and with it, an offer from Harmonica. They made it hard for me; their offer was nearly identical to Iota's, when normalized for various factors. I went over it and over it all day. Finally, I decided to go with my gut. Iota was good. I liked them. But I liked Harmonica better. I called them up and accepted.

That wasn't the end of it. Apparently, Blazer and Iota wanted to be absolutely sure that I was absolutely sure. I heard from the VP at Blazer and the co-founder of Iota one more time. It was unreal. I was happy to explain my decision to them, but, even though it had been close, I was not going to change it. I just liked those guys too much, and I had made my commitment.

I don't tell all of this to brag (OK, maybe a little). I was massively surprised. I expected maybe one offer from the six. This was unreal. Also, I had previously thought that this was a good position to be in. That's what the few people clued in to my situation said, and no doubt you are thinking it too. No way. It was agonizing. I had trouble sleeping the whole weekend. No matter what, I was going to have to disappoint some people I'd gotten to know and like. That was not a happy prospect. If I could have cloned myself and taken all three, I would have. If I could have only talked to one of them, I would have, but my previous experience told me that would have yielded nothing.

I'm not going to reveal here who is behind the code names except for one. I don't think a gentleman tells, at least not to the whole world. I will reveal Harmonica. Go ahead, read that. Process it. I know what you're thinking. Here's the thing: the market may seem unsophisticated. It's not search. It's not heavy computing. It's not developer tools. It's even targeted at non-techies. Didn't I say that my current job wasn't a challenge? Listen: that's just your superficial impression. It's ok. It was mine as well.

Here's the thing: the technical team behind HomeAway is one of the sharpest I've ever met. Heck, we talked about tries in the interview, based on something that one of the developers had written just a short time before. These guys do software the way it should be done. Unit tests, code reviews, short iterations... It's a long list of things they do right. They do things I've read about, but I've never done before. If you're curious, look at my new job description. They operate globally, which means some serious scale. And they're seriously ambitious.

The market also is exciting for its own sake. It's a potentially huge market in the exotic field of travel. The business is strong in spite of an economic slowdown, simply because the market is so huge, and they have such potential for making it bigger. My work will be other people's leisure. It's a great opportunity, and I'm really looking forward to it.

Update: I realized I might have made it sound like I did not like the people at Iota, Blazer, and Samba. That's not at all accurate. Both Blazer and Samba had good people and appealing cultures. It was a little harder for me to get a bead on Iota's culture, but there were particular individuals there that I very much liked. In an ideal world, I would have gotten to know Iota a little bit better, but I had a limited time to make my decision, and my positive reaction to HomeAway was an immediate one.

Labels: ,