Friday, June 30, 2017

Tales from HCI PhD -> Data Scientist job searching, part 2: negotiating

Before you read this post, read Patrick MacKenzie's negotiation advice.

Ok, great. You're 95% of the way there. Here are a few more details and a couple twists and turns I came across.

Still don't name the first number.

If I had, I would have lowballed myself pretty much everywhere. Surprise - your market value is way higher than you think, you free-food-noshing grad student you.

Use Glassdoor - but it's not gospel.

Want to know what a (job x) at (company y) makes? Glassdoor can tell you. But a few caveats:
It's more useful at a common job at a bigger company. There are a ton of Google software engineer posts, but fewer Stitch Fix data scientists.
Salaries go up over time. Glassdoor estimates may be low. If you want to use it to ballpark results and name a number (though don't name the first number), go for something that's about 1.3-1.5*Glassdoor price.

Don't name the first number*.

* I actually did name the first number once, when talking with (Company B) and (Company C) after Stitch Fix gave me an offer. I knew Stitch Fix's offer was very high on base salary, so I just told it to Companies B and C. They both revised way upward, but couldn't match it - this is a good sign, I didn't shoot too low. (Probably. Maybe I did!)
Stitch Fix's equity offer was pretty standard, though, so I didn't tell that to companies B or C. (and Company C's equity offer was about double Stitch Fix's, so it's good I didn't name the first number there.)
If you don't know if it's very high, or you're not 100% sure that it's very high, don't name the first number.

Mid-sized companies don't do bonuses, it seems.

At Google, my salary was like X + ~15% of X for a once-a-year bonus. At all 3 companies I got offers from here, they just had higher base salary and no bonus. I like this; bonuses are dumb.

Equity in pre-IPO companies is way harder to value.

I have no idea what any of my equity will be worth. Maybe $0! You need a "liquidity event" to sell your shares/options; this can be an IPO, or an acquisition, or a buyback (and probably some other things too). Who knows if this will ever happen. Also, if you have options, and you leave the company before a liquidity event, you have to exercise the options (buy the shares) if you want to keep them. This can be expensive, and has tax implications that I don't understand yet. For these reason, I like salary. Your risk tolerance may vary.
Side note: at Stitch Fix, they wouldn't tell me what percent of the company I was getting or what the strike price was, instead telling me the potential value if the company is valued at $X billion. This was weird, but you can reverse-engineer the percent and the strike price. Ask me if you want to know how to figure this out.

If there's a minor perk difference, price it out

Stitch Fix, for one, doesn't offer lunch. Eh, ok! Say I'll spend $10 a day on lunch, times 200 work days a year = $2000 after tax ~= $3000 pre-tax. I subtracted $3k from their offer and I'm still happy with it.

Don't name the first number.

Did I mention this yet? They will try all kind of tricks to make you name the first number. Kindly, politely refuse.

This was all moot in the case of Stitch Fix, because they didn't allow negotiation.

This was awesome. They gave me a very high offer, and wouldn't budge on it. Their (correct) reasoning is that negotiation opens the door for inequality (e.g. between men and women) based on who negotiates more. So I didn't have to do this whole stupid dance with them! I was very impressed. I hope this becomes a trend.

If some of your offers are negotiable (and they probably will be), you need to negotiate; in that case, you have to play the game and help everyone save face.

Company C would not give me an offer until I told them the details of Stitch Fix's offer. This led to an awkward confrontation, which maybe I didn't handle great:
C: Can you tell me the details of the equity in the other company?
Me: I'd rather not, if you don't mind.
C: But it would really help.
Me: Nah, I'd prefer to keep that private.
C: I just need something to go on, in order to give you the best offer.
Me: I don't see how this could possibly help me, though.
C: Sure it can; I'm trying to work with you here.
Me: No, you're trying to get me to sign for the lowest salary. I'm trying to get the highest salary. Giving you this information can only hurt me.
C: That is not what I'm doing at all.
Me: Err... aren't you? What are you doing, then? Why not just get the best offer you can and we'll talk again then?
(some more back and forth)
C: I'm really taken aback; I don't think I've ever had a call like this. I think the best thing to do is to end the call.
Me: Oh. I... I'm sorry! I can see that I've offended you, and I really apologize. Yes, if you want to end the call, we can do that, and I'll talk to you again soon.
Later, when talking with some managers, I was mildly reprimanded - like "we wanted to clear this up and make sure it was just a misunderstanding, because this seemed like a bit of a red flag to us" etc.

I was trying to just "take the cover off the game" and talk honestly. I didn't want to muck around with "well, because of reason X, maybe you can throw in some more salary" or whatever - but there is a maximum and minimum price you're willing to hire me at, let's try to get the maximum.
She... did not appreciate that. I think it made us both sound like greedy money-grubbers. Instead, I guess we've got to use the language of "working together to find a mutually beneficial deal", "make the pie bigger", "well because of my excellent qualifications blahblah", "I'm hoping to get a salary that allows me to focus on doing great work and not worrying about money", etc.

Welp!

Here's a way it could have gone better (props to my friend Stu):
C: Can you tell me the details of the equity in the other company?
Me: I'd rather not, if you don't mind.
C: But it would really help.
Me: Nah, I'm sorry, that information is private.
C: I just need something to go on, in order to give you the best offer.
Me: Can I ask why you need to know?
C: (some BS thing)
Me: Ah, ok. Well, like I said, sorry, that's private. When do you think you can get together an offer?
C: After you tell me the other offer details!
Me: Well, unfortunately, that information is private. So, how about if you just put together the strongest offer you can and we'll talk about it then?
C: I really need to know the details of your other offer.
Me: Well, imagine I hadn't gotten that offer yet; what offer would you get me then?
C: But you did get that offer.
Me: But like I said, unfortunately, it's private. Do you mean you can't make an offer without knowing the details of my other offer?
C: Well, no...*
Me: Ok, great! Then I look forward to hearing the details. When do you think you can get it to me?

* I'm like 90% sure she legally has to say no here (in CA at least). But if she says yes, then I guess, decide how much hardball you want to play and how much you want this offer :-/

This would still be somewhat confrontational, but that's on her. This conversation is more polite and we can still maintain this facade of "we're working on the same team." If it helps, imagine that the other company who'd given you the offer hadn't told it to you yet, or that you were legally not allowed to say it for whatever reasons. ("sorry, I'd so love to get you that information! it's just, gosh darn it, it happens to be private. oh well.")

Use your people!

It was very helpful to me to go on Facebook after this difficult interaction and ask "uhh... did I do something really wrong?" and hear "eh, probably nah." The Companies will try all kinds of tricks to make you feel bad for asking for more money, etc. They are capital, you are labor, and 99% of the time you're working together but in this 1% you are somewhat at odds. They do this every day; you are a newbie. Don't get taken.

Reach out to me if you ever want some help. Not that I'm an expert, but I'm happy to help friends and family :) I've worked with 2 people now, plus myself, who were scared to negotiate at all, and we got a little extra money each time, anyway - maybe not optimal, but pretty good for standing on one foot and reciting poetry for 15 minutes!

Wednesday, June 28, 2017

Tales from HCI PhD -> SF Data Scientist Job Searching, part 1: Interviews

Ok, so you want to be a Data Scientist. The best prep would be to have interned as a Data Scientist. I hadn't done that. Here are some things I have learned about interviewing for this job.

Interview structure

As I mentioned last post, you will probably have some of the following:

  • Programming
    • this is the good old quick-programming-puzzle interview, as in software engineer interviews. Usually whiteboard, but sometimes they let you use a computer, which is nice. You might get this for a phone screen.
  • SQL
    • "Here's a database structure (on a whiteboard), how would you write these queries?" A couple places let me do this on a computer, that was nice. You might get this for a phone screen too.
  • Experimental design/metrics
    • "We want to change our UI from this old UI to this new UI, how would we do it?" and then talk about metrics to measure, how to evaluate success, how to sample users, how many users and how long to run the study (use a power calculation!), what your conclusions would be if you got this certain kinds of answers.
  • Big-picture thinking/metrics
    • "We want to expand to selling cars too, how would we do it?" - and then we talk about high-level what kind of metrics we'd measure, how we'd evaluate success, how we'd trade off risk, etc. This was rarer, but happened a couple times. I think I wasn't necessarily supposed to know how to do this, so I could wing it a bit. This interview was different from the experimental design one because it was a little higher-level - your 6-12-month vision instead of the single Next Experiment you're running.
  • Machine learning/modeling
    • "Here's a big CSV of our hypothetical users' behavior; what leads to them buying our product?" This might be a homework problem or an in-person interview.
  • Data modeling
    • I know I just said "modeling." A couple "modeling" interviews, though, were something different - more like "here's how this part of our business works - how would you design the database for it?" Which tables would you have, which fields on each, etc.
  • Collaborating with other people/teams, stories of projects you've done
    • This is vaguer, talky. I could usually come up with these on the spot, but it doesn't hurt to have a few in your pocket.
  • Lunch
    • These are usually "off the record" - use them to refuel, and try to absorb stuff about the company or your future coworkers here.

Things that are good to know


  • How to do quick programming puzzles fluently. HackerRank's Python, Algorithms, and Data Structures tracks are probably pretty good. You don't have to get to the "Hard" level - if you can do the "Medium"s, you're probably good.
  • SQL. If you haven't used SQL, or haven't used any actually difficult SQL, in a while, take an online tutorial all the way through. PostgreSQL Exercises is the best I think; Mode Analytics's one is good too. Particularly learn:
    • how to do a GROUP BY and an aggregate (like "tell me the total sales in each state")
    • when to use WHERE vs HAVING (HAVING is after the groupby/aggregate)
    • how to do JOINs, including the difference between types of joins
    • how to do subqueries, and when you would
    • Some of this is just a feel thing, which is why I say work through a whole SQL course. I'm getting more fluent in SQL, even if sometimes I can't quite articulate, for example, when you would use a subquery.
    • how to work with dates is a nice bonus
    • window functions would be good. Here's one example. This is kinda in the "bonus points" - when a question came up where it'd be appropriate, I always would say "uhh I guess I'd use window functions but I don't know how to," and I still got jobs.
    • oh, one more tip: when I'm trying to do complicated things with joins or subqueries, I'd often draw out what the end table is that I'm SELECTing from. So like, if I'm joining A to B, just write down what the "A JOIN B" table looks like, even though of course it's not actually done like that.
  • The formula to calculate a binomial confidence interval. p +/- z*sqrt(p(1-p)/n). I don't know many stats formulas, but I had remembered this one, and it came in handy so many times. (Useful in A/B tests - if you test it on 1000 people, and 7% of them click, what's your 95% CI for the real click-through rate? 0.07 +/- 1.96 * sqrt(0.07*0.93/1000) = 0.07 +/- 0.015
  • How you pick which model to use - tradeoffs of logistic regression, decision trees/random forests, SVMs, neural networks, etc. Which ones are good/bad if your classes are unbalanced, or your data's very sparse, or whatever. And how to pick stuff around this - like how do you pick training/test set, how do you normalize your data, etc.
  • How Ridge and Lasso regression work, and more generally what regularization is. I missed this a lot :-P
  • How to quickly load in a data set and make a simple classification/regression model and/or charts, in Python/Pandas or R. Then use whichever of those you feel more comfortable with in the interview.
  • A story of a project where you used machine learning.
  • A story of how you communicated some finding to some other people who weren't as data-nerdy as you.
  • A story of a project where you had to change your plans, maybe. Other kinds of soft-skills stories are nice.

Boot Camps

It might be that you don't think you have the practical skills yet. If that is the case, you might do a boot camp - a couple-month program. Insight Data Science is probably the best boot camp, because it's aimed at exactly you. A lot of my soon-to-be-coworkers did this, coming from a diverse set of PhD backgrounds.

More Strategy


  • If you can, interview first with companies you're less excited about. I learned a lot about this process through doing it - my first few interviews ended at the phone screen or homework stage, and as I did more of them, I ended up getting farther through the process.
  • If you can be local, that probably helps. If you know you want to move to SF, say, then plan a couple week trip out here and tell them you'll be in town on these certain days. That way they don't have to worry about flying you out. Most good companies probably don't care, but I dunno, maybe they do.
  • I had one company ask me for one or two references. Like, your advisor would be fine, or someone you interned with. This was after they gave me a verbal offer, so it probably wouldn't make or break it, unless you're secretly a serial killer (or, realistically, completely unsuited for the job).
  • No suits. This is nice.
  • I'm sure there are more things I'm forgetting. Ask me some questions.

Tuesday, June 27, 2017

Tales from an HCI PhD Industry Job Search, part 0: Which job?

Ok, so this is for a very focused crowd, I guess, but I know a lot of people who will be in my shoes, and I feel like I learned something, so I want to write about it.

I guess first we have to do the "industry or academia???" question. This one is simple. If your answer is "Academia, hell yes, 100% for sure", do academia; otherwise, do industry.

Ok, so you're doing industry. Here's the first question you might want to ask yourself: what kind of industry job? Here are some options:

Research Scientist

This is an increasingly rare job, showing up only at some of the megacorps like Microsoft Research, FXPAL, and somehow Yahoo. Do this if you actually wish you were in academia. At MSR, it'll be close to academia; at other companies, it'll be farther, but you can still make up new things. I interviewed for one of these; it involved me giving a talk about my research and then talking with 4 research scientists/engineers on the team one by one. At the end, I realized I didn't know enough machine learning to work with this team (the Machine Learning and Vision team).

User Experience Researcher

These people do research with people all the time. Interviews and surveys are very common, but you might also do focus groups, workshops, intercepts, usability studies, and some stats. You also have to have some skills in communicating, and you probably have to not mind convincing people that your work is real. I interviewed for a few of these, and they usually involved me giving a talk about some research I've done, then I talked with 5-7 people one by one. At one of them, they gave me a short problem, something like "You work at (hypothetical company X), and they have this new broad question. How would you narrow it down into a research plan?" and I had an hour to think about it and then give a 20-min presentation. I don't really know how these interviews are evaluated.

Software Engineer

You like writing code in a team. You were frustrated at all the terrible code you wrote throughout grad school. You like organizing things. If you think you want to be a SWE, you probably shouldn't go to grad school, but if you graduate and find that that's what you want to do, then by all means do it! You will always have a well-paying job and be treated like a minor royalty. Especially if you're good.

UI or UX Designer

If you know you like to do this kind of thing, go for this job! I don't know anything about it, really.

Project Manager

Do you like to have 500 tabs open and communicate with everyone all the time? And, like, deal with stuff blowing up and figuring out how to coordinate a bunch of screaming cats to get their stuff together to actually get a product out the door? Do you think grad school was too slow and quiet? PMing is for you! God bless you. I could never handle this job.

Data Scientist

This... can mean a lot of things. But most of them are in demand! It can mean:
  • Product analytics person - answer questions about your product
  • Quantitative UX person - answer questions about your users
  • Machine learning engineer - building "data products" (where "data products" means roughly anything where you are doing any ML)
  • The first person at your startup who works with data for more than one-off things
  • Some combination of the above
  • Probably something else too
These were most of my interviews. They usually started with 1-3 phone screens, then sometimes a "homework assignment", then a daylong interview with 5-6 people, which were some combination of:
  • Programming
  • SQL
  • Experimental design
  • Big-picture thinking (~ "we want to do X with our website, how would we do it?")
  • Machine learning or modeling
  • Collaborating with other people/teams
  • Lunch

Friday, June 23, 2017

A job search, visualized


Each row is my series of interactions with a given company. This chart is not at all in chronological order.

Legend:
Computer monitor: an online application
Thumbs up: a friend (or friend of friend) saying I'm cool
Phone: phone screen (green if it's a "non-screen" call where I'm not "on." Eh, details; I'm always "on.")
Mail: an email (blue if "cold"/unsolicited/I just thought they were cool so I tried to contact em.)
Pencil: take-home work assignment
Two people shaking hands: an in-person conversation (also blue if unsolicited - like my friend works somewhere cool so I try to see if they're hiring)
Three people around a table: in-person interview
N: when they gave me the official big "nope"
Trophy: an offer

What did I learn? (and all these are limited to SF tech job searching)

  • don't bother contacting them if they don't have a job listing
  • if you get to an on-site, you're really in the home stretch. Someone told me 1/5 on-sites become offers; in my case it was 1/2; either way, do a handful of on-sites, and you should get something.
  • the usual cycle seems to be: 1. online app, 2. your friend gives you a thumbs up, 3. phone screen or two, 4. onsite interview
  • I dislike it when companies never respond. At least a form letter response would be nice.
  • A friend's thumbs-up or a conversation with someone you know gets you in the door.  In interactions without a thumbs-up or friend-convo, 1 went farther to phone screen at least (and it led to an offer) and 8 didn't; in interactions with a thumbs-up or friend-convo, 13 went farther and 13 didn't. But that includes the "cold" ones - in "warm" interactions with a thumbs-up or friend-convo, 13 went farther (4 to offer) and 8 didn't.
  • by the way, LinkedIn is a good way to get that thumbs-up or friend-convo. Pick a company, you can see your friends-of-friends who work there. Your friends will often make an introduction.
  • that one offer without a thumbs-up came from A-List, which is from AngelList, but they send you an invite if you're in the "top 1%" of applicants. I don't know what that means, but apparently CMU PhD + Google gets you into that "top 1%." Seems like a good way to access smaller-company jobs. Regular AngelList is good too.
  • so, like, if I'm in the "top 1%", and relatively well connected, usually the process is much harder than this! woof!

Which one was Stitch Fix, which I accepted? Fourth from the bottom.

Oh by the way: I'm starting at Stitch Fix at the end of July. Wooo!

But but but I want to know more! Don't worry, this is job search post 1 of many.

Monday, June 19, 2017

Credit card churning, level 2

Ok, here the main game is:
- get a card with a sweet bonus
- meet the Minimum Spend
- get some bonus points
- downgrade it at the end of your first year
Who can do this? Anyone who can get approved for sweet credit cards. (if you can't get approved, then get some less-prestigious credit cards with no fees, use them for a while, always pay them off, and eventually your credit rating will be better and you'll get approved.
You might not want to do this if you're buying a house soon - it'll ding your credit just a bit. But that wears off.

1. Get a card with a sweet bonus.
You're looking for, ideally, 30-50k points/miles, and annual fee waived for the first year. Some of these that I've done include:
Barclay AAdvantage Aviator Red
Barclaycard Arrival Plus
Capital One Visa Signature
Chase Sapphire Preferred
Chase IHG Rewards Club
Chase MileagePlus Explorer
Citi ThankYou Premier
Citi American Airlines AAdvantage Platinum Select

Maybe check r/churning to see what's popular now. Sometimes there are particularly good deals (like the MileagePlus Explorer is usually 30k miles but sometimes 50k), so try to jump on those. The Chase Sapphire Reserved was even 100,000 miles when it first came out! 100k deals usually don't last long, though. If I see a 100k I'll jump on it; and usually a 50k is worth it too.
Note that, to me, hotel miles are worth about half of airline miles. So if you're looking at a hotel card, try cutting those values in half.

Ideally this will be in an airline/hotel you want to use, or use often, or a convertible rewards program. For example, Tati and I had our wedding planned at an IHG hotel in Pittsburgh, so I used the IHG points I got from this thing to book us some free rooms. And I fly United a lot, so those miles will get used.
Convertible rewards programs are stuff like Chase Ultimate Rewards or Citi ThankYou. These are points that you can convert into specific airline/hotel miles, or sometimes use them for other things too.

2. Meet the Minimum Spend
All these deals will have some kind of minimum spend to get the big bonus, like "50,000 bonus miles after you spend $3000 in the first 3 months." Just start using the card for everything. If you wouldn't end up spending that much in 3 months, there are ways to spend a small fee to "buy" points - just look up "manufactured spend" on r/churning. For this reason, I usually don't churn more than one card at a time - it can be hard to meet the MS on all of them.

3. Get the points
They'll usually automatically post with little fanfare, and it's not usually as soon as you meet the minimum spend, so you might have to check on it a little bit.

4. Downgrade at 1 year
The CC companies are trying to get you to start paying the annual fee (after they waive it for the first year). You just have to remember to "downgrade" your card - roughly, trade it in for a "lesser" card with no annual fee. Like, I traded an AAdvantage Platinum Select ($90ish fee) for an AAdvantage Bronze (no fee). Course, the AAdvantage Bronze has no big perks... but that's ok, because at this point, you stick it in a drawer and don't really use it for anything.

To do this, just call them, at the number on the card or wherever. Ask them to downgrade this account to a no-fee card. They are usually more than happy to help. They'll often have a bunch of different ones - it doesn't matter which one you pick, because you're not going to use it anyway. You can usually do this a little after the 1 year mark; then they'll refund your annual fee. Sometimes they'll let you do it before 1 year.

An added benefit of this is you now have more credit available to you, which improves your credit score. If they won't downgrade your card, you could always just close the account. But I think I've only had that happen once.

Total benefit: ~50k points, up to 3-4 times a year. 1 point is worth roughly $0.01, so we're talking ~$500 each time.
Total cost: $0.
Total effort: well, nonzero. But it's not terribly a lot of work.

Monday, June 12, 2017

Credit card churning, level 0 and 1

Sometimes I play the credit cards game, to get a little bit of bonuses without paying money. I'm a pretty-inactive member of reddit.com/r/churning. Many friends have asked me "if I don't want to think about it and just get a decent bit of credit card rewards what should I get?" Basically, what's the 80/20?

I tried to check /r/churning, but it's an insane mess, I think mostly because this question is complicated, because obviously that's the CC companies' game. Nobody will just make a card that is Strictly The Best, because they're all grabbing the tiny percent of edge from people who aren't quite using their cards to the max potential. So, everyone in /r/churning is trying to figure out how they particularly can get a tiny percent of edge because they always fly Delta or buy a lot of groceries or something. And it's the kind of nerds who love to get a tiny bit of edge.

So for me, there are a lot of answers, and I feel like I should have a good canned one. It depends on a lot. Let me tell you a few of your options, depending on how much you want to spend:
- Level 0: 40/1/$0. 40% of the benefits for 1% of the work and 0 dollars.
- Level 1: 60/1/$100. 60% of the benefits for 1% of the work and $100/year ish.
- Level 2: 80/20/$100. 80% of the benefits for 20% of the work and $100/year ish.
- Level 3 and beyond: beats me. I think I'm at about level 2.

Level 0:

At this level, you basically never want to think about which credit card you have. I think that for you the Chase Freedom Unlimited is the way to go. Click a link here:
https://www.reddit.com/r/churning/comments/5ta38h/official_chase_freedom_unlimited_referral_thread/ (or if it's later than about July 2017, search for the new Freedom Unlimited Referral Thread)
Simple 1.5% cash back on everything, and $150 signup bonus. And Chase's web site is not as terrible as some others.
(I think this because I feel like I've heard about it on forums sometimes. so, confidence about 70%. also, I gave you the /r/churning link, b/c if you click someone's link there, they get $100 referral bonus, which doesn't hurt. I would give you my own referral link but I don't have a Freedom Unlimited so I can't, unfortunately.)

Level 1:

Here, you basically never want to think about which credit card you have but you are willing to spend about $100/year on it. Two options, and they both give you Chase Ultimate Rewards points, which you can redeem for a bunch of different mileage programs, or Amazon or whatever. They are pretty good points. Plus, on either of these, you'll get 50k bonus points after you spend $4k within the first 3 months - so get the card then use it as much as possible within that time frame.

Chase Sapphire Reserved

$450/year, but $300 of travel expenses (planes, hotels, airbnbs, etc) gets automatically refunded. So if you're using it, and you travel, it's effectively $150/year. Gives you a bunch of points and some other travelly benefits (some lounge access, reimbursement for TSA Global Entry).
(More info on this card, and the difference between it and Preferred.) No referral link for this one, but you can get there on that "more info" link.

Chase Sapphire Preferred

$95/year after the first year, gives you almost as many points. Good in-between if you don't want to spend quite $150, or if you don't think you'll spend $300 on travel in a year. Apply here (my personal referral link).

Just get one of these cards and then use it for everything. Then one day you will have a ton of points and you can book a flight or something.
(boy, this sounds like I'm paid by Chase, doesn't it? I mean, I'm not. They just do tend to have the best points for most people. Note that if you have an airline you fly a lot, especially Southwest, you might want to get the card for that airline instead, as long as it has a 30k or more point signup bonus.)

Level 2

I'm gonna leave this part of the guide for another day.