As a summary, this post outlines some good-to-know things for any Canadian software developer thinking about moving to the US to work.

Pretty bizarre tutorial no?  But after going through this experience (just shy of 2 months ago) I realized that there are a lot of things I wish I had done / known before.  A recent visit from a friend from Toronto had me thinking that others may benefit from a post like this.  This info is specific to San Francisco, however I am sure it applies to many other cities.  I have to thank @bentlegen and @shazow for the advice I got while moving in, I intend to pass the baton.  For a great post on how to decide where to work (if you are fortunate enough to have options), checkout @shazow’s post on: A check list while considering offers.  This post outlines all sorts of issues I ran into, feel free to skip ahead to the parts you might find useful.  I will cover things like: getting a visa, finding a place to live, and how to efficiently spend your first week in the city.  As a disclaimer for all the immigration advice, this is just through my experience.  I am not an immigration lawyer and if you have specific questions, I suggest you consult one.

Preparing for your work VISA
[You just got your job offer]
Congrats!  Hopefully the job you got is sponsoring you for a VISA, otherwise you can stop reading this post and start looking for another job.  The company may or may not help you actually get the VISA (ie immigration lawyers etc).   I applied for a TN1 VISA, you may be applying to that or something similar.  You will need:

  • Your original University Diploma (out of frame).  Yes this is a pain in the ass, but that over-sized piece of paper is actually the only proof you graduated.
  • An official copy of your transcript.  For CS grads, this is the only proof you actually took computer science.
  • Birth certificate + (drivers license) + passport, to prove you are Canadian
  • An offer letter with a start date, to prove you have a job (provided by the company)
  • A specific summary of your job duties, to prove you are an Engineer (provided by the company)
  • Information fact sheet about the company, to prove it is real (provided by the company)
  • Signed and filled out VISA sponsorship paperwork (provided by the company)
  • (And if your company’s lawyer is really sharp) A copy of an old letter circa 1996 from an immigration judge confirming Software Engineer == Engineer

I’d suggest getting the official paperwork from your University as soon as possible, because you don’t want to be waiting on them right before you move!

Finding a temporary/permanent place to live
[You committed to move, and now need a place to live]
As per the excellent advice from @shazow, I needed to spend some time in the city to get an idea of where I wanted to live.  Signing a 1 year lease then later finding out you live in cracktown would suck.  There are a lot of temp housing options (perhaps offered by your company).  Might I suggest using AirBNB?  I used it, and it was fantastic. When it came to finding a permanent place, I used craigslist, saw like 15 apartments and it worked out well.  Take note that since you have no credit history and no SSN, you might have a hard time.  The best solution is carrying a copy of your offer letter + your salary agreement to your house visits.  You may also have to pay an inflated down payment, which is reasonable.  You will likely have to create an account with PG&E, to pay for your heat and electricity, but this was probably the most painless process of it all.

Have a reasonable amount of liquid cash available in America
Since your Social Security Number won’t arrive for weeks, don’t expect to get paid for at least a month.  If you move into an apartment, you will need a down payment and first months rent (and maybe more, since you have no credit).  You need to have a plan on how you are going to move your funds from your Canadian account to your American account.  Your landlord will NOT take a personal Canadian cheque.  Your bank will not cash a personal cheque, and if they do, you will need to wait weeks if not longer for it to clear.  Make sure you have a way to get your money to an American account as soon as possible.  I did a wire from my Canadian account to my American account.  So before you leave Canada, ensure that you have ALL the wire info needed and that they will do the transaction without you in the physical branch (most banks do not).  If that isn’t an option, transfer funds to your siblings/parents account before you leave.  That way they can do the wire for you once your American bank account has been created.

Applying for the VISA itself
[All your paperwork is ready, and you are ready to make the move]
I got my VISA and paperwork at the airport YYZ.  I arrived 3 hours before my flight which gave me ample time.  I went through regular immigration, and told them I was applying for a TN1 work VISA.  They directed me to the additional screening room where I was interviewed for about 20 minutes.  You’ll need to pay about $50 USD for the VISA itself, they take cash, so have that handy.  Many friends have suggested driving to the border before hand and getting the paperwork done there.  That isn’t a bad idea.  I was pretty certain I had all my papers in place, and chose to just get it right before my flight, your call.

Convincing yourself (and US immigration) that you are an Engineer

[You are walking into the US immigration office]
Note:  you are probably applying as a NAFTA Engineer, however some enter as a Computer Systems Analyst, this section still applies.  Forget about all that time we spent in College bashing engineers, US immigration has a short white list of professions that they let through the border.  You are now an engineer.  To all the “actual” engineers reading this (and I don’t mean P.Eng I mean people who studied engineering) you still need to convince the immigrations officer you are NOT a code monkey.  You will need 2 main things to get past this part.  Your transcript should make it clear that what you studied is related to your responsibilities.  On mine, even though I studied Computer Science, my transcript read – Computer Science: Software Engineering Specialist.  I also took a course labeled CSC301: Intro to software engineering.  Seems silly, but the officer glanced through my transcript, saw the “software engineer” keyword and moved on.   Hopefully your new employer sent you a list of job responsibilities.  If they know what they are doing, you will notice that “writing code” or “programming” is not really highlighted, even if that is what you think you are going to be doing.  Memorize this script, and job duties because they will ask you.  Don’t ad lib.  The second you say something like: “I don’t know, I guess I’ll be writing code or programming stuff”  the CODE MONKEY alarms go off and a net will drop down from above you and they will take you away.  Maybe you aren’t a code monkey, but to reiterate almost every NAFTA/Immigration help website I’ve seen:

“COMPUTER PROGRAMMERS do NOT qualify for a TN-1 visa”.

Stick to the script (hopefully provided to you).  Assume the officer you are talking to doesn’t know anything about computer science / computer engineering, but also assume that they are trained to flag certain keywords like: programming, coding.  Your official job duties should include things like: “Using mathematical models to predict and analyze performance and stability”, and things like: “Applying concepts in theoretical computer science to improve and enhance existing software systems.”  Which is all technically true.  If you are working for a larger company, they have the word-smithing down to a science.  If it is a smaller company, and you are the first Canadian employee, then maybe not.  If you see something like: “Writing frontend code in Ruby/HTML to add new features to the website.” don’t be afraid to confirm with HR/your contact that it is OK.  Don’t confuse this with the original job post you applied for, your official job responsibilities will likely be more (intentionally) esoteric when you get your official job offer.

Lastly, don’t lie.  “So… will you be writing code?”.  “Yes, I will likely write some code … to predict and analyze the performance and stability of the system using mathematical models..”.   It’s like when your girlfriend asks you “Who is that girl you were with?” And you say, “That wasn’t a girl, that was a man with long hair….”.  If you say no, or lie about anything, they will catch you in the lie and turn you down.  It happened to the gentlemen in front of me, it was quite unsettling.


Get your Social Security Number

[You made it into the country, now what?]
Without this, you wont be able to get credit, get paid, get healthcare.  Get this as soon as possible.  I personally ran into A LOT of problems here so hopefully I can offer some advice.  The office suggests that you wait 10 days after entering the country before you apply, I did not and got screwed.  Here is how it works:  You apply for a VISA at the border, they give it to you and staple it to your passport.  They then (at some point in time) manually enter your VISA information into a computer.  That record (at some point) appears in the system for the SSN offices to see.  These offices are disjoint, and the 10 day wait is seemingly a “it should be done by now” buffer.  Since I went early, it took them about 3 weeks to realize that my papers hadn’t been processed at the time of my original application.  Hopefully the same doesn’t happen to you, but since they give you no feedback, I only found out when I went back in to see what the hold up was.  Print off the SSN application form located here, perhaps leave the mailing address as your office, since you probably don’t have a place to live yet.  Find your local SS office, in San Francisco there is one at 7th and Mission, which is utterly terrifying but conveniently close to downtown.  Bring in that form with your passport, VISA (which should be attached to your passport) and birth certificate / driver’s license.  Wait as long as 10 days after you enter the country for the reason above, I wish there was a hard number but it seems really soft, and I got screwed.  After you drop off the paperwork, if all goes well, your SSN will be mailed to you within 2-3 weeks.  I HIGHLY recommend going in again after 1-2 weeks just to check the status, they might give you the number on the spot, or they might tell you that there was a problem they forgot to tell you about.

Open a Bank Account
[You are tired of incurring heavy transaction fees every time you need money]
May I suggest opening a bank account as soon as possible?  As early as the day you arrive in America?  Bank of America was seemingly the only bank that allowed me to create an account without a Social Security Number.  So do that, it takes like 20 minutes and they give you a credit card, which is mandatory for a phone/internet/cable.  Lastly, once this is done you can transfer over all your Canadian money and start writing cheques from your American account.

Get an American phone plan/number
[You realize that no of the real-estate people will email you back]
Guess what? You have no credit or SSN! So be prepared to pay a $500 deposit if you choose to go with AT&T.  This is not negotiable.  Having a call back local phone number is pretty damned important as your try to find a nice place to live.  Do this as soon as you can.

Welcome to the United States of America
[You are happily settled into your new job and home]
I hope you found some part of this post useful.  If you made it through the border safely and are living up in San Francisco, please give me a shout and I’ll buy you a drink and be your one man welcoming party.  This city needs more Canadians so we can setup the very first Beaver tail shop in California.