10 Questions Every Developer Should Ask In Their Next Interview

With the market for developers so fierce, we can afford to be a little more careful about where we work.

Over the years, I’ve interviewed at several companies. Whenever we got to the part of the interview where they asked what questions I had for them, I had plenty of stuff to ask about their tech stack, but not as much to ask about their working environment. Here are 10 questions I wish I’d asked at every interview:

1. How many hours a day do you require from your developers?

You’d be surprised how many places expect more than 40 hours. If they want you to work 45 or 50 hours a week, it’s best to know that up front, so you can negotiate an appropriate salary.

2. Do you allow working from home? How many of your developers work from home at least once a week?

A lot of companies will say they allow working from home. If they’re actually committed to it, though, they’ll be at least one or two developers taking advantage. If no one works from home, it’s because it’s discouraged by management, or they don’t really have the infrastructure (VPN, etc) in place.

3. What is the timetable for getting vested in shares?

A critical question for startups. They’ll usually ask you to take a lower salary in exchange for shares. But if those shares take 5 years to become vested, you’re looking at a long wait for a risky payoff. Do you really want to sacrifice money in the bank for that long? Best to make an informed choice.

4. Do you have “office hours” you like your developers to keep? What are those?

Most places are flexible, but have some sort of core hours they want you to keep. These may not fit your natural schedule (I’m personally a morning person, but I know a lot of developers that prefer to code at night).

5. What’s your leave policy? Are Vacation and Sick Days lumped together? How many do you give a year?

Several startups are offering unlimited leave these days. It makes sense; if you’re a salaried employee, paid per year to get a job done, does it matter how many sick days you took?

If they won’t go unlimited, consider bargaining for increased vacation instead of a higher salary. You’ll thank yourself later.

6. What’s your process for changing internal tools – e.g., if you were to change version control systems, how would you go about that?

Over the life of any piece of software, your tools are going to change. Is this dev team ready to handle that?

7. Do you allow developers any time to work on open source projects, or just projects of their own for the company?

You’re going to want to spend time on your own stuff, whether to try out a new language or keep your skills up to snuff. You’ll probably want at least some of that to be open source work, so you can show future employers your coding prowess without violating NDAs. If your new job won’t let you invest in yourself, will they pay for training or conferences to compensate?

8. What’s your employee review process? How often do you do employee reviews?

Ideal would be reviews after 30, 60, and 90 days for new employees, with everyone else getting evaluated every 6 months. You need the feedback an employee review can give, and they should want to hear from you.

9. Do you do code reviews? How often? What’s the process?

Feedback, feedback, feedback. One of the fastest ways to grow as a developer is to have other people read and comment on your code. Frequent code reviews mean the team is committed to getting better.

10. Do you do project reviews? What’s the process? Alternate: How is the performance of the dev team as a whole measured?

Another feedback question. Again, you’re trying to see if the team is serious about getting better.

These questions won’t cover everything, but they’re areas we developers often forget to check when looking for a new job.

How To: Sync Last Read Page Between Nook for Android and iPad

Both Amazon and Barnes and Noble claim their ereaders will sync where you are in your books between the different devices (iPad, Android phone, PC or Mac) you might be reading on. Amazon’s works in the background, without a hitch, but Barnes and Noble’s (Nook) takes some finesse to get working.

I nearly pulled my hair out in frustration trying to figure out why the last read page in my books wasn’t syncing between the Nook software on my iPad and the Nook software on my Android phone. I looked in the Settings for both devices, trying to find something that said “sync” and might have been turned off, but no luck.

Here’s how to get them to sync:

  1. Whenever you finish reading on one device, instead of just closing out the software (or putting your device to sleep), go back to your “Home” or “Library”.
  2. Look in the upper-right-hand corner of your Library screen. You should see a pair of curved arrows. Touch those arrows to force your device to upload its information (last read page, new bookmarks, etc) to B&N’s servers.
  3. When you open your second device, make sure you start out on your Home/Library screen, and hit the same arrows. This will force the device to pull the latest information from B&N’s servers (including the last read page you just uploaded).
  4. Open the book on your second device. It should jump to the last read page from the first device.

That’s it! Hope this helps, and let me know if you encounter any other weirdness while using the Nook ereader software.

Short Review of the Pangolin Performance

Ever since I gave away my trusty Macbook, I’ve been pining for a new computer. The iPad purchase helped, but let’s face it: I’m not going to be able to do any programming on that thing.

I knew I was going to install Linux on whatever I bought, so I thought I’d cut out the middle man and buy one direct from System76. They’ve been making laptops and desktops with Ubuntu pre-installed for a few years now, and their reviews have been positive. So I swallowed my trepidation at buying a laptop without test-driving it in the store first and ordered one of their Pangolin Performance machines.

After two weeks, here’s what I think (in brief):

What’s Good

  • Ubuntu: I didn’t have to do any configuration out of the box, or hunt down any extra drivers. Nice.
  • Speed: Ye gods, is this thing fast. Transferring my entire music collection (a good 20 GB) from my backup drive took just 15 minutes. It’s good to know the i5 processor + solid state drive were worth it.

What’s Bad

  • Keyboard: In a word, terrible. It’s shifted to the left of the center of the screen, so I’m always twisted in my seat if I’m trying to type on it. The keys are more widely spaced than is comfortable, making my fingers work more to type anything. The spacebar also refuses to recognize most key-presses. Altogether it feels cheaply made, and is really frustrating to type on.
  • Customer Service: Not so helpful. I emailed System76 support about my spacebar problem. Their solution? “Press it closer to the center” Well, thanks, guys, but if I can only get a space by hitting a single spot on the space*bar*, it’s not much use to me, is it?
  • General Build: Cheap. The “Ubuntu key” is just a regular key with a tacky sticker on it (placed off-center, no less). The laptop won’t turn on unless you hit the power button at the exact right angle for the exact right amount of time. The whole thing feels shoddy.
  • Wifi: Maddeningly drops connections at random. Had to connect the laptop to ethernet to get reliable internet access. Sort of defeats the purpose of having a laptop, IMHO.

It’s a very frustrating laptop. It runs Ubuntu well, it’s screaming fast, and it didn’t cost me an arm and a leg. Unfortunately, it’s impossible to type on for longer than a few minutes without making me want to throw it across the room, and it’s useless without an ethernet connection.

I’m close to returning it and just buying a Macbook. It might cost more, but at least I’ll know it’s solidly built.

Update 12-15-2010: Finally convinced system76 to let me ship the computer to them for a keyboard replacement. Hopefully this’ll fix the spacebar problem and make the laptop worth keeping.

Update 12-27-2010: They fixed the keyboard! Got the laptop back just before Christmas, and the spacebar works normally (as does the rest of the keyboard). Definitely keeping the laptop now. Thanks to system76 for coming through with hardware support.

iPad: 30 days in

30 days ago, I broke down and bought an iPad.

I know, I’ve ranted and raved against Apple’s unfair closed-source system. And yes, I hated the shopping experience my first time out.

But lugging around my netbook + my Nook so I could read books and check email and read pdfs and read The Economist online started bugging me. Doubly so when I realized there were some ebooks I could only get from the Kindle store (damn you, DRM!), but neither my Nook nor my netbook could read Kindle books (Linux, it so happens, is the one platform Amazon’s Kindle software doesn’t run on). So I had to read Kindle books on my phone (Android), Barnes and Noble books on my Nook, and pdfs (Linux Journal – why do you guys cling to the old pdf format?) on my netbook.

Needless to say, this drove me batshit after a while.

So I trudged down to the Apple store to try out the iPad again.

And guess what? My experience was much better this time. There was plenty of software installed on the demo units for me to try out. The staff answered all my questions, and actually seemed to care about selling me one.

I picked one up, and after 30 days I don’t miss the Nook or the netbook at all.

I can read all my books, from every store. I can push my pdfs into DropBox and read them with GoodReader. I’ve even started jotting down notes for a few short stories in Elements, again using DropBox to sync up the files between my Nook and my desktop.

Oh, and I’ve also picked up a few games. Plants vs Zombies HD is almost worth the price of admission on its own.

Can I program on it? Nope. Is it annoying that iTunes can’t play my .ogg files? Hell, yes.

But you’ll have to pry it from my cold, dead hands before I’ll give it up.

How To: Run Clojure with Clojure-Contrib Library

I recently picked up Programming Clojure and started working through it, trying to wrap my head around this new variant of Lisp.

Installing clojure itself was pretty simple (sudo apt-get install clojure, since I’m using Ubuntu), but I had a hard time figuring out how to make the clojure contrib libraries available from the clojure REPL (I kept getting errors about the clojure-contrib classes not being on the classpath).

Here’s how you do it: start the clojure REPL with an extra argument pointing to where you’ve installed the source files for clojure-contrib. For example:

clojure -cp /home/rontoland/Code/clojure-contrib-1.1.0/src

Since the clojure-contrib libraries are used throughout the book, I put the above code in a small script and saved it in my /usr/local/bin folder as clojure-repl, so I don’t have to remember the longer command.

Click for Links and More Info