
Lessons from a Silicon Valley job search - padolsey
http://robertheaton.com/2014/03/07/lessons-from-a-silicon-valley-job-search/
======
petenixey
(sorry for sidetracking the excellent piece but...)

When I examine the ~13,000 hours I've spent programming I find it hilarious
that interviews should centre around algorithmic problems. I've been guilty of
it myself and failing FizzBuzz is definitely a true negative but it's so
little of a true positive it's not even funny.

What I would really love to know about you as a candidate is:

\- do you know how to actually name functions and variables well (unbelievably
important)

\- do you know your chosen languages and frameworks well enough to avoid cack-
handedly reinventing them on paid time

\- do you understand how to code an application that someone else (possibly
just you) will quickly understand on coming to it cold in 18 months time

\- do you understand the trade-offs between features and maintenance, the
technical debt that features, designs and toys incur and when to invest in
them and when to avoid them

\- are you diligent and careful and do you check and re-check your code or
just chuck it in the mix for other people to fix

\- do you actually do real work for at least four hours each day

\- do you take the time to write up the things you've done and share decisions
and architecture with the rest of the team

\- does your addition to the team on average make your team mates become
better or worse coders

\- do you understand the exquisite balance between too much testing and too
little

In 13,000 hours I have had to wrestle with the consequences of O(n) complexity
or binary tree search algorithms approximately NO TIMES.

I did not mean to sidetrack Rob's excellent, excellent piece on finding a job
in Silicon Valley however I did want to take the opportunity to state the
things that I have empirically found as a professional developer to actually
matter.

~~~
temuze
I think most interviews don't focus enough on systems. I expect every software
engineer to know:

\- How virtual memory works

\- How threads work

\- How TCP works

\- How ports work

\- How ethernet works

\- How DNS works

\- How a web server works.

And so on. A lot of these things are more important than theory (but I think
theory is important, too!).

~~~
petenixey
This is purely anecdotal however I've been doing Rails dev (and prior to that
Javascript, PHP and even Matlab) for 14 years and I have only a vague grasp
how most of that list works.

That's not because I'm lazy or scared or even disinterested. I've exhaustively
learned everything about anything that what I do involves and how most of what
it touches works as well. However the simple truth for me has been that I've
never worked on things that needed to know about the things you're talking
about.

I constantly do need to know more about the fundamentals of the systems I
actually work with - Rails, Angular, HTML, caching, Node etc. I'm sure there
will come a point when I need to know more about some of those things too.

However there is a tonne that I don't know even about the things that I need
to know about and I will always invest my time in learning those things.
That's why I would always focus interviews on the languages and frameworks
that someone actually uses. Those may be the ones you describe but for plenty
of developers may well not.

~~~
MichaelGG
Maybe you've been lucky? Being forced down the stack seems to happen either
when you need more performance, or when stuff blows up.

I only drill into a framework or language when someone writes that they're an
expert on it. Otherwise, learning a new framework or language might be bumpy
but if they have skill then it shouldn't be a problem.

~~~
mattmanser
That's not the stuff that typically goes wrong.

TCP? DNS?

More like persistent cache misses in SQL or some weird edge case caused by an
errant vertical tab or a filename getting too long or some limit in array
length causing your compiler to do weird stuff.

Knowing how any of that list works is more for sysadmins than programmers.

------
steven2012
How is your H1B still valid after you lost(?) your job and left the country?
H1B is tied to an employer and a specific job, so I don't know how it's still
active. Are you sure that your H1B hasn't expired yet? If you try to enter on
an expired H1B, you might get banned from entering for 10 years (this happened
to my friend 6 months ago) so make sure your immigration status is rock solid.

~~~
ark15
H1B Transfers don't count against the H1B quota. If you still have time left
on your H1B (i.e. approved I797 petiton) and have not violated the 'leave
immediately if out of job' rule, it is possible to have a new employer file a
petition for transfer of the I797 (H1B)

In fact, in such cases, you don't even need a new visa stamp for the
transferred H1B. As long old H1B stamp has not expired, you can present this
H1B along with the approved transfer petition and they will let you in.

This is just my understanding of the process and does not constitute legal
advice. I am not an immigration attorney or any such. Just a technology guy
-:)

~~~
steven2012
This doesn't appear to be an H1B transfer.

Even if it were some sort of H1B transfer, I believe by leaving the US he
might have abandoned his H1B. So I think the OP better get his immigration
status verified by his new employer, because the last thing he wants to do is
get a 10 year ban at the border.

~~~
pbiggar
There isn't a H1B transfer, but people often refer to it as a transfer,
including immigration lawyers.

Basically, you must get a brand spanking new H1B to start a new job. However,
if you have already recently gotten a H1B, then you can skip the quota, and
get it approved pretty much immediately. This is commonly referred to as a
"transfer" even though it is not technically a transfer.

~~~
cunac
actually it is transfer of visa (and you) to other employer

------
hzay
My age, work experience and expertise are similar to the OP's. I just
interviewed with Google, FB and Amazon, and found myself nodding my head at
several points in the article.

Something I learned after the whole process was that people apparently take a
month or two to prepare intensively and specifically for interviews with these
3 companies. Luckily I came out of the ordeal with an offer, but I wish I had
known that tidbit before.

~~~
gailees
who'd you go with?

~~~
hzay
FB

~~~
nbm
Give me a shout when you're in bootcamp (my unixname is 'nbm'), especially if
you're interested in working in infra and want help finding out about and
choosing between teams.

~~~
hzay
I will! :)

------
MichaelTieso
I never really know what to do during negotiation time. During the first
interview, I'm usually asked how much. I'm told that I should always try to
push it back for the other person to make the first offer. However in matter
how hard I try, they demand that I make the first offer. I don't want to aim
too high or too low in fear that I'd lose out on the opportunity.

~~~
beagle90
Always go for the highest they offer. E.g. If you apply for a job 25,000 -
35,000 go for 35k. My thinking behind this is that it shows you're confident
in your ability. Remember a lot of companies are big enough to incur an extra
5k of salary in order to get the very best candidate.

I'd say the above becomes more true the bigger the company gets... Small
companies <10 employees this theory could well breakdown.

~~~
JabavuAdams
Not good advice. This is a noob mistake. Where did that 25-35k range come
from? From the other side of the negotiation. So, they've just anchored you to
think that 35k is high. What if they would go up to 50? You'd never discover
this unless you start outside their starting range.

------
peter303
Starry eye programmers from outside the Bay Area should be forced to watch the
Office Space movie for an idea of what Silicon Valley is really like: a
gindingly dull suburb.

~~~
trustfundbaby
... ironic since most of that movie was shot in Austin :)

------
osipovas
I'm currently performing the same job search but as a future new graduate from
a Computer Engineering program in Canada.

So far the biggest parallel with your experience is gaining the confidence to
even begin applying for jobs. I came to the conclusion that I have _almost_
nothing to lose by applying for jobs and it's really difficult to burn bridges
by just sending in a resume or a quick email saying I'm interested in your
company.

Some of the interviews so far have been excellent and left me really excited
about following up with a take-home coding exercise. On the other hand some
have left a really bad taste in my mouth. I found it surprising how much I can
get a feel for the type of person a CEO/CTO is over the phone. One of my
biggest complaints is when interviewers want me to do spec work[1] for their
app. That's a big red flag for me.

My biggest successes so far have come from downloading/signing up for the
product or service and spending some time using it. So far interviewers have
really enjoyed that and it has led into great discussions about the product
and how I would improve it. Furthermore, in remote coding interviews, being
honest and saying, "I don't know, could you please show me." is really
appreciated and demonstrates character.

[1] [http://www.nospec.com/faq](http://www.nospec.com/faq)

------
capkutay
As someone who has both looked for engineering jobs and also staffed engineers
on my team in silicon valley, I'd suggest people to be a little less shallow
about their employers.

Yes, you can work somewhere with free lunches/perks/nerf gun wars. However,
you should always ask yourself 'Will working here make me a better person?'.

This could mean providing more financial stability or a huge boost to your
resume via gaining expertise in a sought-after area. I hate the argument that
'If I work at Google, I'll be more marketable to future employers'. No...as
someone who's hiring, I don't care if you were some guy/girl at google. If you
worked on BigTable, awesome you're probably well-qualified for any job in that
area and will be paid as much as you want. If you're employee number 70,001
and worked on designing icons for 'Google Trends', you shouldn't expect a huge
payout at your next job for being 'Ex-Googler'

~~~
jarjoura
I call bullshit on this one. Having a big-tech company on my resume has done
nothing but send an endless stream of recruiters knocking on my door. Doesn't
make getting a final offer any easier, but it has definitely improved my
chances of getting the interview I want vs. just any old interview.

I always hear "Well if Google/Apple/FB are willing to hire you..."

~~~
capkutay
"Having a big-tech company on my resume has done nothing but send an endless
stream of recruiters knocking on my door"

I know plenty of people who didn't work at a Google/Apple/Facebook with an
endless stream of recruiters chasing them. Maybe you have the type of
background they're being paid to chase after.

"I always hear 'Well if Google/Apple/FB are willing to hire you...'"

If I hired the wrong person, 'well they worked at google' is a poor
explanation for the hiring mistake. I'm sure working at Google can play to
your advantage for higher level career goals and some people have done amazing
things at Google. I just think people are over-estimating it.

------
gregors
"sum of the numbers from 1 to N is O(N^2)"

Maybe I'm misunderstanding you, but no it isn't. it's O(N) if you have to
traverse a list of numbers it's actually constant time if the numbers are
sequential.

~~~
aboveandbeyond
It's actually O(1). It's (N * (N+1))/2

~~~
gregors
that's what I said "constant time"

~~~
Terr_
Your post is missing some required punctuation which would've made that easier
to see.

------
melindajb
I'm not a programmer, but...I would want to work with this programmer in a
heart beat. Smart, respectful, strong boundaries but not a jerk. A lot to
learn from him for everyone on Hacker News, not just the devs.

Congrats to him on the new job and the H1B visa and to Stripe for hiring him.
He seems to really deserve it.

~~~
dopamean
And he's 25. I know that's not super young but he speaks with a tone that
makes me think he is more experienced than his age would let on.

~~~
melindajb
I didn't notice that, but indeed, comes across as mature for his age. Good for
him.

------
baby
> “Design the infrastructure for a link-shortener.”

I'm wondering how to answer that?

* Get a short and memorizable url.

* When you enter an URL hash it, put it in a hash table and use the hash for the link.

> “If I type [https://google.com](https://google.com) into my browser and
> press enter, what happens?”

How would you guys answer this one? I'm not sure I've enough knowledge to do
that. I'd say:

* first TLS handshake thanks to RSA to share a key

* then a GET

* then the server sends a cache version of Google according to location/cookies/etc...

* then the html gets displayed in the client's browser

~~~
danellis
> How would you guys answer this one?

I've had it twice. The first time, with Google, they were genuinely interested
to know how deep I could go, so I talked about DNS, TCP, SSL, HTTP etc, but I
also talked about application event loops and keyboard drivers and interrupt
handlers.

The second time, with Rackspace, I presumed they want the same, but they were
a bit bewildered and wanted to keep it higher level (protocols only).

~~~
RogerL
Can you recommend how to learn this? I don't work with the web or networking,
and would like to shore up that part of my knowledge. Are there any good books
that gives the high-level overview of it all?

~~~
ufmace
I find that the best way to learn it is to start poking at it. Fire up
Wireshark, load google.com, and take a close look at the traffic. You'll see
every packet going back and forth, and can try to figure out what each one of
them is. Set up a proxy that can MITM the SSL connection, and look at the
contents of the packets. Just setting that up will probably tell you a lot
about how it all works, and you'll be in a better position to see the
plaintexts of all of the handshaking traffic.

------
bluejet
I recently went through the same process and didn't have quite the same luck.

Background: London. Comp Sci. from top 10 worldwide college. 2 years C++,
Python, iOS experience in well known company on high profile project.
Internship at start up with VC funding before that. Github profile with open-
source projects, own projects etc. Started blog etc...basically everything
that is recommended.

Studied for 5 months (up to and including interview time) and did projects
whenever I could. Applied to 40 companies in San Francisco. Got 12 straight no
thank you, 2 interviews and the rest ignored.

Started process on Jan 1st 2014. Had interviews at Yahoo! and Palantir.
Former, pulled the plug when the H1-B deadline was looming and they felt it
wouldn't be done in time. They suggested a workaround to work out of London
and try next year and then they pulled that idea a few days later when they
didn't have the team in place to support it. The latter, I did 1 telephone
interview which went fine, then on-site where I was quizzed for 1 hour in
functional programming (never done any before and job is in Java) and had to
code not on paper, or a whiteboard, but the glass conference wall...

Will have to wait another year.

~~~
boothead
Why SF? From what I've seen the London tech scene is really kicking off now.
Some of the better funded start ups here are even starting to compete with
finance jobs salary wise. And on finance: There are loads of jobs that
industry in London, C++ and python make the world go round in hedge funds and
investment banks!

~~~
tharshan09
Could you share what companies you are referring to? Which finance companies
use Python? I am soon to graduate and I would like to find something in London
that is using Python or C/C++.

------
hughdbrown
> If a company is currently worth $10m, options for 0.1% are worth $10k.

This isn't really accurate. The company is not giving you 0.1% of the company.
It is giving you the option to buy the gain on 0.1% of the company above that
value at the time you start. If the company never gains in value, your options
are not worth anything.

~~~
gatehouse
I also think that an individual employee needs to put a discount on options
because you don't have the ability to diversify, your risk profile is vastly
different than the investors, and the founders presumably have effective veto
over exits which allows them to capture more of the value in a middle of the
road outcome like a acquihire.

I personally think that options should just be used to mitigate the career
"risk" of the instability of the company and maybe having to move down-market
into some less valuable skills if that's what the company needs.

------
donretag
"Flying out to interview with a single company is easy - they pay for the
flights and hotel and you use them. Interviewing with 7 companies made for a
surprisingly stressful round of negotiation before I’d even arrived, as I
tried to spread the cost according to who could most afford it and who was
getting the most time with me."

When I last was searching for an out-of-state (albeit not California) job,
every company was adamant about arranging all the flight arrangements. It was
very clear they did not want me to interview at other companies during the
time. Even after I agreed to pay my own way, they still insisted on paying and
have me fly out immediately after the interview. The stress of multiple
flights during my short interview period definitely affected my performance.

~~~
jarjoura
You didn't have to board the return flight and you don't have to board the
last companies' arrival flight. There, problem solved :-).

~~~
2arrs2ells
Not true, unfortunately. If you skip the first leg of a round-trip, airlines
will cancel the return leg.

------
sturadnidge
I built an app for tracking job applications... amazing how many people just
do this on a spreadsheet (as per point 2.3 of the post), which is fine, but I
needed an excuse to build something, so

[http://applyee.com](http://applyee.com)

~~~
auvrw
nice... i recoil at spreadsheets for similar tasks too but must confess that i
usually find a text file with a couple special delimiters sufficient / am lazy
enough to convince myself that such a text file is sufficient. both could just
as well be imported into a database/app later, but i find that text is more
free-form and easier to work with than spreadsheets.

decided not to open source it?

~~~
jarek
Curious what you find wrong about using a spreadsheet for this? I've used it a
couple of times in the past when I had lots of applications and interviews
going and found it worked rather well. It doesn't really use spreadsheet
capabilities (except for adding up number of interviews or success rate maybe)
but I didn't find anything wrong with it.

~~~
auvrw
i don't find it "wrong." i just find it "wrong for me." the real (and very
subjective) answer is that all the spreadsheet uis i'm familiar with are very
clicky (as in you wind up using the mouse a lot). when i'm at a computer
rather than a touchscreen, i prefer to use a tiling wm and programs with
keybindings. perhaps i just haven't taken as much time getting proficient with
spreadsheets as i have with text editors. also, some people prefer using a
mouse, and there's certainly nothing objectively wrong about that.

also, as i said in the previous comment -- and this is more objective, i think
-- text files are more flexible than spreadsheets in that they don't impose
any particular structure on the data you're entering. if you're populating a
relational database, you're going to wind up having to put things in table
format eventually, but perhaps you don't want to have to decide exactly what
data you'll be entering from the moment you start entering it. in that case --
and perhaps this is going back to personal preference again -- i find it
easier to rearrange a text file than a spreadsheet.

------
nappy-doo
_sigh_ Unless your nomenclature is all screwed up, and you're confusing arrays
and lists, finding an element in a sorted list takes O(N) time -- binary
search doesn't work on lists.

I do a lot of interviewing (at my company). Here's other common misconceptions
lots of candidates have:

* Quicksort is O(N^2) -- don't make that mistake.

* There are plenty of "faster than O(NlogN) sorting algorithms, but they're all special cases. (Radix, Merge on multiple processors, etc.)

* Hashing is not a panacea. Collisions are always worth mentioning.

~~~
davidddavidson
I think you are confusing your nomenclature. The term "list" does not
necessarily imply that it is a linked list.

~~~
tbrownaw
Binary search requires random access. Things that support random access can be
used as lists, but not all lists support random access.

~~~
auvrw
first of all, it's all nomenclature, and i don't want to make a whole thing
out of this, but binary search requires that you can randomly go left or right
every time you subdivide the (linear) ordering, not that you can randomly
index to any element.

EDIT also, perhaps against better judgment, i'm going to throw a possibly
inflammatory remark out there and say that the big-O thing is really not that
difficult or important (although i suppose that it's important that it not be
difficult). what i can see taking some skill/experience (which i totally don't
have) is knowing a bunch of algorithms and being able to consider the
time/space tradeoffs of the algorithms you already know quickly. being able to
prove the time-complexity of some new algorithm is good, but, sadly, perhaps,
i don't think most companies hire people to do that.

~~~
auvrw
i wish people would comment when they downvote. i made the final comment
already knowing (and stating!) that it might rub someone the wrong way but
hoping that it might provoke discussion. it's a reasoned and reasonably-
informed comment, not just noise-making or an attempt to troll. downvoting
without comment in that situation doesn't really further the discussion.

~~~
mden
I imagine you were downvoted for being wrong about binary search (it does
require O(1) indexing).

~~~
auvrw
of course, when there are two or three items left, choosing between left and
right is the same as choosing an arbitrary index. that's nomenclature. whether
you follow the rote textbook definition and do that indexing up front or delay
it until you've paired down your possibly-large list into a manageable
(whatever that might mean for the problem domain you're dealing with) size,
it's still pretty much the same algorithm.

and since you're imagining rather than being certain, that means people
continue to downvote without comment, and i continue to cheerily object to
that.

------
mac1175
"Some places like Matasano, Stripe, Github and I’m sure many others are aware
of this and are equally aware that it has the potential to harm their company
a great deal." I actually had the pleasure interviewing with Matasano. I
thought their process was fun and really enlightening in regards to what they
do. Everyone I met during the process were really cool (and extremely smart).

~~~
tptacek
Thank you! But: I'm sure we did some things wrong or sucky. If you can think
of any, I'd love to hear them; you can reply here if you like. :)

~~~
rpicard
Heading out to Mountain View for an on-site interview with Matasano next week.
So far the process has been great for me too. It has been challenging but they
(tptacek and co.) still manage to do a great job of moving things along
quickly.

Hopefully I don't scare them off after they've flown me out (and I've spent 16
hours on planes and in airports).

~~~
tptacek
Hey, I'll be out there next week; I'm in SFBA all of next week.

So: see you there. :)

~~~
rpicard
Oh that's great! I was bummed that I wasn't going to get a chance to meet you
after all of that interviewing.

------
anonymouse64
I actually have an interview with Google in a week or so, and I'm absolutely
terrified. After some reflection, I realized that I'm not afraid of not
getting the job - I like my current job and wouldn't mind staying. I'm
fundamentally afraid of failure - of being unable to do well on the problems
and having the interviewers think I'm stupid. It's so silly, because I'll
likely never see these people again, and I should be confident enough in
myself and my abilities to not let their opinions affect me at all, but there
it is. What if I can't make heads or tails of the weird binary search problem
they give me? What if I get confused (I ALWAYS get confused) trying to
manipulate a linked list? What if I get sent home after the first one or two
interviewers? What if this reflects poorly on the Googler who recommended me?

I feel like a coward for being afraid of this stuff.

Anyways, I just wanted to get that off my chest.

~~~
skolter1
I was in an identical position 3 weeks ago and I shared some of your concerns
as well. I can tell you that it seems scarier than it really is once you're in
it. You shouldn't be worried about getting 'stuck', I did a number of times
and quite often would get hints and directions from the interviewer. Never
give up, even if what you know you don't know the answer right away, let the
interviewer see that you're thinking and try to engage a discussion.

And really just try to take it easy. I was also under a bit of pressure, but
think of it like an experience, even if you end up not passing. It's just
another company and the feedback of 5 random people.

------
alandarev
I haven't noticed anyone expressing their thanks for sharing helpful
information on getting a job in SF.

Your post is directly applicable to my current situation, and has reassured
that I am not "average outsider" and should continue pushing my dreams,
despite of being recent graduate in UK.

Huge thanks for sharing your experience and giving advices to obstacles :)

------
at-fates-hands
>> You want to start negotiating at your strongest point - when they have said
“we love you, let’s make a deal.”

One simple practice is at the end of the interview when you get the, "So
what's the salary range you're looking at?" question, I always give them about
5-10K higher than what I'm currently making with the caveat, "But I'm always
open to negotiating." which keeps the door open for the company/agency to get
creative with incentives or other valuable options to bring you on.

You shouldn't feel bad about asking for extra stuff. 95% of the developers
companies are hiring are just taking what they offer them. If you negotiate,
companies are more likely to give you some additional extras. You just have to
ask for them.

~~~
steven2012
Never, ever, ever pin yourself down with a number. This weakens your ability
to negotiate tremendously. Not giving a number forces the other side to
present what they believe to be a good offer, as opposed to what you already
mentioned as a desired number, which might be a lot lower than what they were
thinking of.

I always say "I'm fine with a market-rate salary. I'm open to a salary cut
from my current salary if the position has a great opportunity."

~~~
randomdata
Given that, as an employee, you are the seller in the relationship, that would
be like Walmart not posting prices on any items and making you suggest what it
is worth at the checkout. It is not usually how business is done.

About the only exception that I can think of is in sales of commodities, where
the buyer typically does make the offer. I'm not sure you want to treat
yourself and career as a commodity, do you?

Wouldn't it be better to state your price alongside your sales material? If
you're not in the ballpark, then you can even save yourself wasting time
talking with the potential client further.

~~~
Terr_
> Given that, as an employee, you are the seller in the relationship

Very serious question: Is that actually true, and why do you believe it?

Is it "I'm not the one with hard cash, therefore I am obligated to negotiate
like a big box retailer"? Don't be fooled into adopting an unhelpful paradigm
or power-relationship just because what you are bartering is harder to
quanitfy.

In many ways your employer is much more like Walmart than you will can be. For
example, they are a larger entity that can amortize risks over lots of
individual interactions. Also. they invest significantly in accounting, data
collection, and have better knowledge of what rate they can accept for a
transaction.

Walk into a negotiation thinking that you "owe" the other guy an advantage,
and you've already given it to them.

~~~
logicallee
>> Given that, as an employee, you are the seller in the relationship

>Very serious question: Is that actually true, and why do you believe it?

Because we don't talk about the "buyer" of USD except in a currency exchange
context - you don't say, "I just bought $100 with my old bike."

~~~
Terr_
You're completely missing the point. Yes, "seller" is a good word, but there
are dozens of other paradigms for selling.

If I have a Rembrandt painting, I am a seller... But do I want to sell like
Walmart, or do I want to sell like Sothesby's?

~~~
logicallee
I'm not missing anything. You quoted literally one line:

">Given that, as an employee, you are the seller in the relationship

Very serious question: Is that actually true, and why do you believe it?"

and asked if it's true. There is no other context in the line you quoted
except that the employee is the seller in that relationship.

------
MichaelDickens
You applied to 25 companies and got responses from 17? That seems like an
extraordinarily high response rate. Your process sounds pretty normal, but my
understanding is that most people who follow a similar process get a much
lower response rate. Why do you think this is?

~~~
robheaton
If I was guessing, I'd say that I very consciously made my CV/cover
letter/blog "intriguing". I'm an OK programmer, but at the moment my strength
is probably that I have a diverse list of fairly wacky and mostly unrelated
other stuff that I've done. I think this meant that a lot of companies who
would otherwise have passed straightaway were at least curious enough about
the guy on the other end of this application to talk.

I should point out that after a Skype or 2, most of said speculative companies
did realise that whilst founding a clothing company that makes sweatshirts
with pictures of fruit on them is cool, it doesn't really help you write
Clojure when you don't have any functional programming experience ;)

Of course, it could just be something boring like the fact that companies
really need Ruby guys at the moment.

------
mathattack
I like the negotiation comments. It is always ok to say, "If you love me, and
I love the firm, I'm sure we'll find a way to make a deal."

The best way to have leverage to have another opportunity in hand. Then you
can say, "I will be fully transparent, and won't play any games with you, but
I do want you know I'm talking to someone else too." That lets them know that
you are valued. You just have to be polite, and not turn it into a multi-stage
bidding war. But it does give you the ability to say, "I love your firm. I
don't want to start a 2 week cycle of bidding, but if you could at least close
2/3 of the gap in offers, I won't have to worry about paying rent."

------
jarjoura
Not to take away from this post but I wanted to share a little bit about my
own job search. Hopefully engineers who regularly interview candidates have
some interesting feedback to share. There was a post I actually just hearted
on Secret this morning where someone equated "hard algorithm" questions to
"hazing." That may be a little dramatic sounding, but I do think there is some
truth to that.

So much of the early 2000s tech interviews were full of brain teasers that
either through sheer luck of the candidate or someone who read the popular
book "How would you move Mt. Fuji?" would ever have a shot at solving them.
Microsoft pioneered it apparently and Google took it to the next level. They
even went so far as to post them on billboards for anyone "clever" enough to
figure them out.

At some point they went out of favor and the new favorites became these multi-
step dynamic programming questions, or quad-trie/kd-tree disguised problems.
The unfortunate truth is, if you want to get a job in the valley beyond your
first out of school job, you're going to need to study and refresh your brain
on those last chapter algorithms. Make sure to practice doing them recursively
as well because with 45-60 min interviews you won't have time to do it
iteratively. Just like the OP mentioned too, it also couldn't hurt to practice
writing code on paper in front of a friend.

The biggest thing I found writing code on a white-board vs. a laptop is that
you lose all the things that make coding in an editor so much faster. You
can't just erase a line if you need to insert something above it. You need to
be extremely thoughtful of your order of operations from line #1. Usually what
I found worked for me was writing a checklist of how to solve the problem in
English, so as not to confuse the interviewer that I'm writing
code/pseudocode. Then I rearrange the steps until I get a solution that works.
From there I can quickly write out the actual code that then becomes the
easiest part of the interview.

So the BIGGEST tip I can add when doing white-board coding, write as polished
as you can. Interviewers always seem to proclaim they won't judge your chicken
scratch, but I've never been in a feedback session where someone joked "his
handwriting was so messy, but I was very impressed." In fact I've always heard
the opposite, "wow, they wrote crap all over the place, even though they
figured it out it was very unorganized, so I dunno, it's a maaayybe from me."

Also, when asked one of these questions, DO NOT take your time trying to be
clever upfront. Get the worst case on the board, 1) it will give you and the
interviewer a chance to to talk about it and 2) they will want to ask you how
to optimize it anyway.

------
jpsim
If you're Mexican/Canadian, a TN Visa might be a better option than H1B since
there's no annual limit.

I'm currently in Silicon Valley from Canada on a 2.5 day trip, with 4
interviews in that timeframe, and it's quite fun yet intense.

I'd also say that if you're a self-taught programmer (I'm an EE), it's
worthwhile to read a book like Intro to Algorithms[1] cover to cover before
you start doing technical interviews. There are just too many CS101 concepts
that you'll never run into even after years of programming.

[1]: [http://www.amazon.com/Introduction-Algorithms-Thomas-H-
Corme...](http://www.amazon.com/Introduction-Algorithms-Thomas-H-
Cormen/dp/0262033844)

~~~
GuiA
I may be wrong, but I believe that interviewing in the US while you're on a
tourist visa/ESTA (presumably your case?) constitutes "seeking immigrant
status" and is unlawful. You may want to avoid posting about it in public
forums where your identity can be easily traced.

~~~
goodcanadian
You are (mostly) wrong. A job interview is a perfectly legitimate activity to
undertake on a B-1 (business) status. I have done it more than once. At
immigration, they ask the purpose of your trip; you say, "job interview;" and
they stamp your passport with B-1 (business) rather than B-2 (tourist). It
really is as simple as that.

------
utnick
Why is summing a list of numbers 1 to N O(N^2) instead of O(N), don't you just
iterate through the set of numbers once?

EDIT: Nevermind, I think it means the value of the sum is on the order of n^2

~~~
gvb
I think he meant factorial rather than sum.

The sum of the numbers is O(1) - you can calculate it algorithmically.

N*(N+1)/2

Ref: [http://www.wikihow.com/Sum-the-Integers-
from-1-to-N](http://www.wikihow.com/Sum-the-Integers-from-1-to-N)

~~~
gregors
[https://math.stackexchange.com/questions/195924/proving-a-
fa...](https://math.stackexchange.com/questions/195924/proving-a-factorial-is-
not-a-certain-complexity)

------
yukichan
> the fact that Hashes have O(1) lookup time is often a great way to speed up
> an algorithm.

In practice I have learned that being CPU bound will turn things around faster
than paging and thus for things that involve a sufficiently high number for n
I prefer to avoid hashes and O(1) "speed ups." The less I store in memory the
better, especially on servers that handle lots of requests simultaneously, at
least for servers that aren't meant to be a memory store like memcache or
redis.

~~~
spenuke
Can you explain more what you mean?

I'd say hashes aren't going to make everything faster, but they will always be
faster than disk lookup. But more to the point that I understand you to be
making - hashes are excellent when you have large amounts of _repeated_
calculations.

For instance, counting word occurrences in a large body of text. Rather than
run through the body N times for N words, you run through it only once and
increment a word's tally every time you come across an occurrence.

Do you mean that a cpu-bound process could improve on this?

To be fair, he refers to the strength of lookup time in the quote you cite,
which is not exactly the property that improves the algorithm I just mentioned
(which is that the use of a hash completely restructures the algorithm). I'm
curious to know more about situations in which you find writing cpu bound code
to work better. Including - what sort of N are you dealing with when you make
this choice?

I can imagine that generating HTML on the fly is a simple enough computation
to outweigh the benefits of caching every possible view - which is to say, the
N of each rendering is small enough not to be truly cpu bound. But even then,
that ignores the fact that we'd be reading from disk anyway, and so I don't
see how that's worse than paging.

These are my thoughts. Not gotchas. I just want to know what I'm missing.

~~~
stephencanon
O(N) brute force algorithms (almost) never beat hashing. O(log(N)) tree-based
algorithms sometimes do, because it’s easier to get good data locality out of
them when the queries have some temporal relation.

------
moapi
One thing that I always see in these threads is how these interviews are not
really a good indicator. I work for a company that does these interviews, and
most of us acknowledge that the interviews result in sizable false negatives,
but the ones that do come through the process are usually very competent ones.

Also, complexity analysis/algorithm questions that are asked in the interview
setting is not rocket science...

------
vladgur
What this doesnt say is whether the salary was on par with BayArea market or
London Market. He did go through the Developer Auction/Hired so that gave him
some idea of what companies offer.

I remember when Buffer "open sourced" their salaries and revealed that they
were below the market rates in the Bay area(for Buffer's bay area employees).

~~~
hostess
I tried Hired and got quite a few offers in this range:

120k-140k 0.10% to .20%

Not really competitive with Google/Apple/FB/Amzn or even a mid-size tech firm.

------
jw2013
Thanks for the great article and congrats on your Stripe offer. Great company
to work for.

Despite the great story of your general interview process, I am quite
interested in the hiring process of Stripe. What is its interview like? What
do you think probably make you got the offer?

~~~
robheaton
Obviously I would say this, but the Stripe process was really enjoyable, rapid
and well thought through. It was clear that everyone really cared about making
sure that you were able to really show your true skills and abilities. The
team is great (and obviously just got 5.8% more great when I joined) and
really happy to answer any and every question you might have.

So I strongly recommend. Although I would say that.

~~~
jw2013
wow, just upvoted your helpful reply. Can I ask what/how to prepare for the
Stripe interview? Looks like cramming algorithm questions is not going to
work. And it looks like, through your and OP's experience, Stripe is looking
for people that are cool to work and hang-out with, self-motivated, and can
write clean code.

I will really appreciate your reply.

~~~
robheaton
That sounds about right! Greg's Quora answer pretty much covers everything,
and I'd say that there's not much you should particularly do to prepare other
than to keep getting better at what it is you do anyway and to chill out. pc
specifically said to me that the primary thing he cared about was that people
were able to show how good they actually are, and that everyone feels they got
a good crack at the whip and didn't get screwed over by a weird question or
not preparing some specific thing or anything like that.

I am actually the OP :), my email address is in my HN profile and feel free to
email me with any more questions!

~~~
jw2013
Again, thanks very much. Hope can get the chance to work for Stripe one day.

(inc kudos)

------
druska
The article mentions to practice code-oriented challenges. Are there are good
resources out there to help with this?

------
kalimatas
Thanks for sharing. Helpful reading.

------
medell
"Funemployment". Love it.

------
weishigoname
it is really a good lesson to learn.

------
crassus
"""Far too many offers come through as:

$Xk/year 10,000 options

This is literally equivalent to:

$Xk/year $100bn in monopoly money and bingly bongly bangly boo"""

It is incredibly dishonest and disrespectful when startups job offers hide
information about the value of their equity. I know some investors are
encouraging this behavior, but please have the courage to stand up to them.
Employees have a right to know the fair market value of the compensation they
will receive for trading away their time and labor.

------
michaelochurch
Getting a job in Silicon Valley, as an outsider, isn't hard. Getting a _good_
job is hard. Many offers will come through at a lower level just because,
whatever you did, you didn't do it in the Valley. That's Cali arrogance for
ya.

Hedge fund interviews are a lot more intense and technically difficult (and
you feel good when you pass) but don't come with the VC-fueled, youthful
arrogance of a proper Valley company. Hedge funds also don't try to lowball
you with insulting junior positions because you're not from California or you
don't know the five 3-year-old technologies in their stack in detail. If you
pass their interviews, the hedgies take you seriously. Most of these VC-funded
companies, on the other hand, don't really respect most of the people they
hire. They sell aggressively, but the options offers turn out to be ridiculous
(sub 0.1%), relocation pay is nonexistent, and, if you're not a Valley
insider, the positions are often pretty terrible, as you discover if you ask
the right questions.

If you can deal with arrogance, you can probably get a good job in the Valley
after enough time. But you'll have plenty of experiences that leave you
thinking, "How is this company alive?"

~~~
steven2012
Every time startups are mentioned, you have a lengthy diatribe over how
Silicon Valley sucks. Yet, you've admitted that you've never worked in Silicon
Valley. I'm sorry you are so butthurt over being screwed over by a NYC
startup, but it's not that bad out here. Every place has assholes and arrogant
pricks, but some of the best team members I've worked with are out here as
well.

~~~
michaelochurch
I've interviewed with plenty of SV startups and know what I'm talking about.

------
void-star
This may very well have been an excellent piece. But, the author lost me no
later than 2 sentences in with his immature and sexist "nerdy girl" analogy. I
just didn't even bother to read the rest. Working in silicon valley myself, I
already waste enough time on people who think this kind of immature male
mindset is okay.

~~~
joshbert
That is a shallow and inaccurate assessment of what's one the best articles
that's been posted in the past month.

~~~
philangist
Sexism is a problem in the tech world, but I think some people also just love
to be offended. Bill Burr calls it being 'professionally outraged'.

~~~
crassus
How do you know sexism is a particular problem in the tech world? Unequal
representation of some particular demographic group is not sufficient evidence
for discrimination.

~~~
GFK_of_xmaspast
How about "by paying attention."

