Hi HN,
I'm a Canadian software developer without any sort of degree. I have been programming since I was 8 and never attended a university, instead choosing to start my career right out of high school. I freelanced for two years before joining a Canadian startup where I worked for an additional 2.5 years.
I have been fairly successful up to this point, with a few widely used open source libraries and am being actively recruited by a number Canadian companies.
Ideally I'd like to join an early stage startup in one of the US hubs. I don't seem to qualify for either TN status or an H1-b visa because I lack the degree.
I'd really appreciate any advice you may have. Thanks!
2) Your best bet would be to gain employment by a company that has offices in both the U.S. and Canada. Then, with the help of your company, you could obtain a transfer visa:
http://www.consular.canada.usembassy.gov/usa_visa.asp#transf...
Many companies with offices in both Canada and the U.S. aren't in the "startup" category. You could either accept working for a larger company or find a (somewhat more difficult) U.S. startup that is willing to start a Canadian branch for you. Opening a U.S. company in a province such as Alberta has a number of advantages beyond just employing someone as talented as you are.
3) Some certs qualify you for a "specialized" degree. Since you didn't go the education route, going the cert route might not be a bad idea if you make a wrong turn anyway. Obtaining a high level cert (even quickly) may be an easy way in.
http://www.consular.canada.usembassy.gov/nafta.asp
Specifically: "Computer Systems Analyst Baccalaureate or Licenciatura degree; or Post-Secondary Diploma or Post Secondary Certificate and three years' experience."
Note the Post Secondary Certificate in there.
4) Contract.
You can "contract" for a U.S. based company, work there for months at a time if required and not put a full-time strain on the startup. Reliable, competent off-site employees and "virtual offices" are the new black in startup life.