Your Résumé Won't Get You Hired
I've been actively involved in the hiring process at work for over two years now. Résumé screens, phone interviews, coding phone interviews, lunch interviews, and technical in-person interviews, I get to do it all. Sometimes it's a minor annoyance that keeps me from coding, other times it's a nice break in the middle of a busy day.
But recently I've become more and more frustrated with one section of the process, the résumé screens. The problem has to do with cover letters, or the lack thereof.
In our system, a résumé screen has seven different criteria, five of which must be met for the applicant to move on to the next stage. (Four is sometimes accepted, but only for obviously exceptional candidates who might not fit within the strict interpretation of the system.) Generally, a résumé can only satisfy three of those seven criteria. Sometimes we can stretch it and infer one or two more, but it's rare. So when an applicant doesn't send along a cover letter, I've got to work harder just to give them a fighting chance; it doesn't endear them to me.
On the other hand, a good cover letter can show me that the applicant meets four of the five required criteria. Not only do they increase their odds in raw numbers, they also make my job easier, which can only help them.
But not just any cover letter will do. It doesn't seem like it would be that obvious, but I can usually identify a "Dear [Company Name]," cover letter within a few seconds of opening it. It's better than no cover letter at all, but it almost automatically loses on two of the four criteria, meaning that the applicant has to nail the five remaining. They make my job harder, and the raw odds of them getting in are lowered.
So what makes a good cover letter? There are a lot of resources out there, but for me it comes down to two simple things: tell me why you want to work at my company and tell me why you want to do the job you are applying for. Bonus points for showing me those two things. That's the generic advice. Specifically for programmers, show me your previous work, your outside projects, the blog you wrote from scratch, etc.
Take the time. You can still share a lot of the cover letter between companies. But make sure the company knows you care by writing a paragraph about what draws you to the company. Be specific, words like "interesting" and "exciting" don't add anything.
And try to make my job easier.
Posted July 1, 2009 - 17 Comments
Fixing jQuery's Opacity in Firefox
I think jQuery has uncovered a flaw in Firefox's rendering:
This is a screenshot of Postbox's website mid-transition. (Actually, I used Firebug to manually set opacity to 50%.) They're using $.fadeOut() and $.fadeIn() to transition between tabs on their features page. For some reason, Firefox has a lot of trouble with this, and ends up displaying strange green artifacts where there should be partially transparent text. (I'm completely guessing, but it looks to me like it might be related to ClearType.)
Fortunately, it's easy to fix. The problem only occurs when the element being faded out or set to partial opacity has a transparent background, set explicitly via background: transparent; or implicitly by not having a background defined at all. To fix, you just have to specify an appropriate background, often background: white;. In this case:
background: white url(http://postbox-inc.com/-/img/bg-content.png) bottom center repeat-x;
Does the trick:
Much better.
Update: Seems as if Safari 4 on Windows has the same problem, which is also fixed by setting the background. Chrome and, surprisingly, IE don't seem to have this problem.
Posted June 2, 2009 - Comments
My Language Features Are Your Libraries
Today at lunch, a few of my colleagues got into a discussion of the merits of some of the new language features in the .Net family. Unfortunately, I was at the wrong end of the table to participate in the discussion, but it has spawned an article that I want to respond to. Go take a look at it, then come on back.
To distill Ben's thesis, he's "annoyed that many of these 'cool' language features in C# are nothing more than libraries in Smalltalk". I can understand his annoyance. C# is being touted for having new, innovative language features while languages like Smalltalk get relatively little attention despite having similar features (though usually as a part of a library) for years.
Ben goes on to show how C#'s ?? operator (which returns the left expression if that expression is not null, and otherwise returns the right expression) can be added very easily to Smalltalk.
I guess this is why, despite all of its faults, I have a lot of trouble giving up on Smalltalk. C#’s a good language, and .NET’s a good framework; but I cannot help but feel that this isn’t an issue of reinventing the wheel, as much as forgetting that we can provide programmers the tools to make their own types of locomotion.
Unfortunately, I think he is missing the bigger point. I do not disagree that giving programmers the ability to "make their own locomotion" is important. It is, in fact, completely necessary if you want a language to have useful libraries. But it is also a virtue when languages make it unnecessary to create a new five wheeled vehicle.
And we've been there before. There was a time when language designers seemed to think that a good language implemented a minimal set of features. And from that mentality we got languages like C++, which couldn't even go as far as implementing a native string type. In fact, there are so many that people have created comparison pages to help you figure out which one to use.
So while I can understand his frustration that Smalltalk hasn't gotten the same attention as .Net for features that are trivially implemented, I feel that his argument is analogous to saying that I should not be excited about Python having a built in string type because C++ has always had the ability to implement one.
Posted May 20, 2009 - Eight Comments
That's a Wrap
Last day of the year. Must be time for a looking back/looking forward post.
Photography
2008
The major theme of the year has been photography. I started in 2007, but I feel that 2008 was the year I improved past being just a guy with a camera to a real photographer. I shot my first wedding, got my first real photo job, got published in a national magazine and started a daily photo blog. I've acquired the equipment to shoot just about anything I'd like.
2009
I would like to continue improving my skills and building my own brand of photography. I want to shoot at least two weddings this year (hopefully paid), and start selling prints of my artistic work. I would also like to continue shooting fashion and see if I can get myself published again.
Personal Projects
2008
The center of my personal projects in 2008 was the eBay Toolbar. I started it at Stanford for a d.school class and then let languish for almost a full year before reviving it. Though the core functionality has not really changed, the internals have been completely refactored to make it comply with Mozilla's quality standards and make it easier to maintain. I tried getting it added to addons.mozilla.org, but it's still an "experimental" plug-in. Maybe I need more reviews (hint, hint) to get it promoted.
I also participated, with Benjamin, in the DjangoDash, which our "Mercurial-based Code Review" tool won. Hopefully, you should be hearing more about that in the coming months.
2009
UPDATE: Sent an email to the editors this morning, now it is approved! Guess I should have made some noise earlier. (link)
Priority #2 #1 is to release a second project that I've been working on for a while. The back end is pretty much complete, it's the front end that needs a lot of work. I hope to be announcing this by Easter.
I would also like to spend more time on open source projects. I released the iTunes to Rhythmbox script in 2007; since then a few bugs have been reported that I never fixed because I'm back on Windows. Now that I have the new computer, I might make the laptop dual-boot with Ubuntu again and get that fixed.
Work
2008
I'm still working on Copilot, which I am still enjoying. We started off the year by (finally) releasing free weekends. Over the summer, the four of us on Copilot (plus an intern) got turfed to a temporary office in the new building to make space for the summer interns. Joel gave us some rope and we used the time to help find and define Copilot's identity as the company within a company. That helped us shift our workflow and get Copilot OneClick out the door. Now we're back with the rest of the company and working hard to get another product out.
2009
We have a few ideas for Copilot that need to be implemented. We'll do a pretty big refactoring to make maintenance easier and offer new products. After that, it's unclear what we'll be working on. We have a few ideas in the pipeline, some based on Copilot, some not, and we very well might end up working on both.
Social
2008
This year I've found myself becoming more introverted, I think largely as a consequence of living in New York. More and more, I'm finding large groups to be overwhelming; I'd much rather small gatherings of people. As a result, I've not been going out as much to see what this city has to offer.
2009
One of my big goals is to get out more. It'll require that I work on finding a balance between soothing my introvertedness and having my day consist of more than my apartment and work. There are photography exhibits I want to see, restaurants I want to try, and parts of New York that I still haven't been to.
Exercise
2008
I was not as active as I would have liked this year, but I did not do badly either. For a period, Iris and I were going to the gym together at least once a week. I also joined two soccer teams, one indoor, one outdoor. I'd forgotten how much fun I have playing soccer.
2009
I would like to get back into endurance sports and complete at least one long distance race, preferably a triathlon. Really that means I just need to find one online, sign up, and train. I'll post back when I do that.
Finances
2008
Like everyone, my 401k is hurting, but I've been able to save some money and start investing it as well. I'm hoping that in a few years, the stock prices we see now will be looking like good deals.
2009
More of the same, hopefully. I'd like to find a way to spend less on rent each month and I would like future photography purchases to be funded by photography-generated income, but everything else is pretty good right now.
Travel
2008
This year I went to Florida with Iris, Italy with my family and Iris, Boston and Waterloo for work, and back home a couple of times.
2009
I want to do more skiing this year, which plans are in the works for. I'd also like to do another big trip this summer, maybe Asia or Oceania. I need to figure out a way to make travel photography pay for travel...
That's about it; at least what I'll write about here. It's been a good year, even despite the recent meltdown, and I think 2009 will also be a good year. Happy New Year!
Posted December 31, 2008 - One Comment
Why QA is Important
This is a diagram of most of the code bases within Copilot. Of the sixteen nodes displayed, we actively maintain fifteen. Of those, four integrate with other Fog Creek products, like FogBugz. In our most recent product release, Copilot OneClick, we heavily modified nine components and added two. It was the most complex release in Copilot history, yet it was the smoothest.
Often when we've released new software, it happens in starts and fits. We would push something out only to realize that we'd forgotten a crucial config setting or had left in an extra bit of logging. Sometimes two new components would conflict with each other. To fix it, we would roll back to the previous working version, make our fixes, test them out on the staging server, and roll it back out.
It sounds like we were being irresponsible, like we were pushing new code with many substantial bugs. The reality was that it was always something small and easy to overlook, which got amplified into a much larger problem by the complexity of the many interacting systems. Forget to put a default on a column in a new table and five different components could simultaneously crash.
The problem was that Ben and I were too close too the code. With only two of us working on the project, there was never any way for us to test code without having worked on it, and that made us bad testers. We knew too much about how the application was supposed to work, which made it easy to overlook small but important details. But a couple of those small mistakes would quickly turn into an outright crisis.
We had an outside QA analyst at the time who helped test Copilot's user experience. Her input spurred changes that made Copilot much more intuitive and sleek. But she was usually testing individual components on internal servers, not the end-to-end system on production servers, except for the largest releases.
Then in March our QA superstar, Alison, came on to the Copilot project. For the first time in three years we had a full-time, dedicated tester with enough time to do both targeted component testing as well as end-to-end system tests.
At first I felt a little internal resistance to her feedback. I knew I wasn't writing perfect code, but I didn't really like someone else pointing it out to me. It took a little while to understand that she was not trying to prove me wrong, that our goals were actually identical. Soon, I began enjoying getting assigned cases from her. They were detailed reproductions of the bugs, making them easy – and fun – to fix.
Soon we got into a nice pattern: I would typically work a couple hours later and kick off a build before I went home. Then, in the morning before I got in, she would start testing the new build. By the time I got in, I would have a list of things to fix, which helped me focus my time, making me a more efficient coder. As we got closer to releasing, we would push builds to the staging servers, and in a matter of hours before we knew, for sure, whether the build was ready to go to production.
So did she find all of the bugs before we pushed to production? Not quite. We released OneClick with one significant bug: the installer could not be downloaded from Internet Explorer because IIS injects extra HTTP headers into HTTPS connections, which IE then has trouble understanding. She caught it on the production servers a little after we rolled out. The funny thing is, it's a bug we've fixed before, just one line fix in ASP.Net:
Response.ClearHeaders();
So why did we miss it before going live? Because our staging server doesn't use HTTPS; it's not close enough to the production server. It wasn't possible for her to find that given the testing environment. But that was it. Really. Nine components significantly modified, two new, and only one line needed to be changed in all of it. We didn't even need to cut a new build, we just pushed out one patched file and all was fixed.
Instead of the panic and worry that we'd experienced before, now pushing new code is a calm, steady process. We can be confident in the quality of the code. They key was to get another pair of eyes on the product, someone who could ask the questions that we didn't think of while coding.
Cross-posted at http://blog.copilot.com/.
Posted November 24, 2008 - Comments
This is how Crazy the Market is Today
From my dad:
If you had purchased $1000 of Delta Air Lines stock one year ago, you would have $49 left. With Fannie Mae, you'd have $2.50 left of the original $1000. With AIG, you'd have less than $15 left. But if you had purchased $1000 worth of beer one year ago, drunk all the beer, then turned in the cans for the recycling refund, you'd have $214 cash. Based on the above, the best current investment advice is to drink heavily. It reduces anxiety too. Even better to buy in a state without a deposit and then return them into a state with a deposit refund.
I think he might be on to something...
Posted November 21, 2008 - One Comment
Pay It Forward
A while back, Gillian posted a Pay It Forward chain on her blog after receiving a box of delicious looking caramels. Just as the rules stipulated, she payed the favor forward to the first three people to comment on the post. I was the first. On Friday, my treats arrived:

In the paper are were three large, soft, wonderful chocolate chip cookies from the New York Times recipe, and in the jar a stack of Martha Stewart's Thin & Crisp® chocolate chip cookies. It was a wonderful surprise and a great way to start my weekend!
So now it's my turn. The official rules are:
I agree to send something fun, cute, and nice to the first 3 blog owners who post a comment on this entry. In turn, those three will post this information and pick 3 people they want to send something to and so on.
Unfortunately, due to postage costs, I can only pay it forward within the United States.If you are interested in participating, be one of the first 3 blog owners to leave a comment!You have to promise that you will then post about this on your blog, link to me, and then send something to the first three people who comment on your blog so that this continues. When the first three have commented I will email you a request for your shipping address and I will send out something that I hope will make you smile!
Good luck!
Posted November 17, 2008 - Four Comments
Photo Blog
I just finished putting together my new photoblog, check it out! I'm planning on publishing 1 photo per day. I also will be adding an option to buy prints or downloads.
Enjoy!