Career Advice and Salary Negotiations: Move Early and Move Often


Context

This following are hard-earned experience for advancing a career quickly. It applies exclusively to tech hubs, in particular London, the Silicon Valley and New York.

Your mileage may vary, especially depending on your location, your experience and your skill.

Disclaimer: I’m seriously biased toward good performers. There are people who can fizz buzz and people who landed on that blog by accident.

Introduction

The fastest way to advance your career is to move early and move often, especially when you’re young.

It’s a lot about money. The only way to get substantial raises is to leave your company. This is especially true when you just start out and/or you’re seriously undervalued (pick any combination: young, first job, naive, didn’t negotiate, just came from abroad, etc…).

It’s also about long-term savings. Not negotiating your jobs will cost you millions over your lifetime. You want to get to a decent level as quickly as possible, you’ll get to stay there for your future jobs.

It’s also about opening your eyes and widening your horizons. You learn the most when you change company, put in a completely different environment. Also, having had a lot of jobs gives you points of comparison to know whether you’re in a good place or not.


Disclaimer: This article will be about getting offers while threatening to quit your job. In business words, that’s call negotiating.

Lesson #1: ALWAYS negotiate.

Lesson #2: Negotiations are based on leverage.

Having a job and having competing offers are your leverage.


Chapter 1) Ground Rules

We’ll start with some ground rules and some myth busting.

Rules #1: You will NOT resign from your current job UNTIL you have a SIGNED contract with a new company.

(I’d put that as text size 20, bold, in flickering red if that blog allowed to do text formatting).

Rules #2: You already have a job.

Having a job is the stronger leverage you have. If a prospective employer doesn’t give you the terms you want, you stay where you are, you’ve not nothing to lose.

Rules #3: Leverage.

Leverage, leverage and more leverage!!! A negotiation is all about leverage. The person with the most leverage gets what he wants.

Rules #4: No one cares. No one is gonna get hurt.

The HR/manager is hiring 10 guys a week, he’s seeing and negotiating all day along, every day, he’ll have forgotten your name by the time you leave the room or hang the phone.

Rules #5: NEVER underwrite yourself. NEVER talk yourself down. NEVER give away your positions.

Ever heard sentences like “It’s pathetic to pay so little because you know I have a family to feed and I don’t have a choice” or “I would like xxx$…


… but I’m willing to negotiate [down]

“.

You’re actively playing against yourself when you talk like that. Don’t do it!

Tip: Whenever this sort of non sense comes to your mind, slap yourself very hard in the face. Over time, your brain will learn to think better. (I am a strong believer in Positive Punishment).

(Also works if you think hard about slapping yourself, without actually slapping yourself).

Rules #6: Paper is real. Talk is cheap.

The only thing that matters is official papers with a signature on them. Talking doesn’t engage anyone into anything. If all you’ve got is a verbal promise then you’ve got nothing.

Corollary: Assume everything you’ll ever hear from a recruiter/HR/manager is a straight lie. (But what about the 20% bonus I’ve been promised? Ahah. Never existed!)

Rules #7: Be relentless, inflexible and never give up.

As one mentor taught me once, the secret to negotiations is to “be an asshole” [1]. In essence, that means to be relentless and inflexible.

Think about it for a minute. A sales person’s only goal is to close sales, a HR’s role is to hire people. They’re the same thing. If one is talking to you and is really close to getting  the sale (i.e. you) but not getting it, it’s a very frustrating position for him to be in. Remember, he HAS to sell. Eventually he’ll give up some slack to close the deal.

When you never lower your standards, you’ll never get less than your standards. But what if the negotiations goes wrong and everything is ruined? A negotiation cannot go wrong, at worst, you just call back the sales guy to accept the terms that he wanted to give you in the first place (and he’ll happily reply back because it’s closing a deal and that’s his job, he’s measured on that).

[1] Then he went on to negotiate $4M more in stock grants, while most of the employees had peanuts. It was a significant learning experience!

Rules #8: ALWAYS stay polite and courteous, no matter the circumstances.

When you receive an email that’s killing you. You write a response email that really puts that guy back in his place, then you go have a walk and take a breath. When you come back, you delete it and write the email you’re actually gonna send.

When I suggest to you stand up in an interview and leave the room (Who doesn’t love a dramatic exit?). In practice, it’s concluding in the middle of the 4th interview round that “We are not a fit for each other. Let’s stop the interview there and save both our afternoons, shall we?“, then standing up, saying goodbye to your interviewer(s) and asking politely the way to the exit.

Rules #9: Getting massive raises is fairly easy and common.

And the secret to achieve it is to start incredibly low. It’s really nothing to brag about.

Look around you for a minute. Let’s say you’re an American working at a typical tech company. Chances are that there are people earning $80k a year next to people earning $120k a year next to people earning $160k a year, for a similar position.

How does the former quickly become the later? That is definitely not by being nice and waiting patiently for a raise. One can only progress quickly by being good and being bold. Meaning, move early and move often.

Chapter 2) Be Goal Driven

Your single and only goal during a job search is to get offers, as in paper offers.

A contract is the guarantee that there is a job for you, at this place, at this moment, at this price, at these conditions. It’s both leverage and knowledge for YOU. You’re ready to go work at C company for £XX, assuming you sign.

If it’s satisfactory, you can sign and go there right away. (Once in a while, there’s a good offer on the first try). Otherwise, you can keep it in your offer letters collection. Who knows, maybe things will change in a year and you’ll reopen the conversation.

Whenever an interview process is stopped before the contract stage, it’s wasted time for everyone. You don’t know whether it would get real. You have incomplete information. You can’t sign it and work there. You can’t show it to other prospective employers.

Chapter 3) How Much Should You Ask For?

The only way to find out is to interview and get offers.

Basically, you need to perform a binary search. When you get an offer, you know that you can get at least that. Then you repeat the process a bit higher.

negotiation diagram
Binary Search applied to job offers

Note: Notice that the process goes on forever. In the real world, you have to stop at one point. Mastery is not achieved by knowing when to play (you’re always playing!) but by knowing when to close a play.

Chapter 4) Compensation Package

The only real thing in the universe is base salary. That’s the only thing you get at the end of the month for sure. That’s the first thing to negotiate.

Then comes the package which includes but is not limited to:

  • Base salary
  • Vacations, Sick days
  • Duration of your commute
  • Healthcare
  • Pension, 401k
  • Working hours
  • Food, Cafeteria
  • Shares, Stock, RSU
  • Bonus
  • Sign-on bonus

Some perks can only be known and guaranteed when in a contract (e.g. vacations). That’s why it’s very important to get to the contract stage. Some are variable and may disappear or worse, been a lie from the start (e.g. bonus, shares), these are very risky take and must be treated with caution.

You should negotiate base salary first, concrete perks (e.g. sign-on bonus, vacations) second, risky perks last (e.g. bonus, shares).

There are entire industries who get candidates by significantly over-promising and under-delivering (e.g. start-ups). To this day, I have never met a company that said they paid X amount of bonus and that amount was actually paid in full.

Usually, companies have a culture. Perhaps they promise 20% yearly bonus but in practice have been giving 10% to everyone for many years, the promise is oversold yet there is a non-negligible number that should be accounted for. The only way to have a clue is to get insider data, most of the time you can’t and you’ll have to take decisions partially blind.

Chapter 5) How Much Can You Charge?

There is no such thing as a “market rate” or a “fair compensation”. All there is are individual companies who run a specific business, generating a variable amount of cash, who’d get a variable gain from your service, with more or less favorable compensation policies.

At any point in time and space, there is always an endless supply of companies willing to hire for cheap. It’s fine when you first start out because your greatest quality is to be cheap and have low standards (we’ve all been there: you go where you can, not where you want).

As you mature and gain experience, you’ll request for more money and decent work conditions, there will be fewer places to work for.

Ultimately, if you’re a top performer and you’ve done your homework, you’ll reach a point where there is only a handful of acceptable companies in the area.

No matter where you are in your career, you should always know where will you send your resume next?

Never bother about the “how much?“. Your only concern should be the “where?”. You need to search, network and stay informed about worthwhile jobs and companies. 

Pick companies and go play binary search with them, it will tell you the how much. If you have no selection criteria (WTF?!), just pick whatever companies are in your area.

Note: The difficulty to get into a company has only a moderate correlation with how much it pays.


When there are 3 start-ups offering from $X to $2X and Goldman Sachs offering $3X. Your rate is $3*X +10% (cuz you negotiated!). It has little to do with an imaginary global tech market ruling the world and all to do with you pulling off your fingers and selling your service to the highest bidder like there’s no tomorrow.

if you want to have more you have to become more for things to improve you have to improve for things to get better you have to get better
One doesn’t get a rate, one makes it happen!

Chapter 6) Where To Work?

You gotta figure that out. Search, network, search some more.

For instance, let’s say I’m doing DevOps, SRE and system engineering for highly-scalable-low-latency-distributed-large-scale-systems.

In London, the easy money is usually in DevOps contracting (not to mention the neat flat tax rate). The hard money is usually in finance (ignoring that you can’t work in t-shirts). The usual big valley tech companies pay poorly (compared to contracting and finance).

For instance, if you hang around in the right pubs at the right time, you can overheard conversations like “A recruiter from Google contacted me to interview with them, I asked what’s their top range and they gave a number 40% less than I’m earning right now… Wow.“. Here in London all Google employees are easy fair pickings (please make sure your LinkedIn is updated!).

In SF/NY, the easy money is usually in big tech companies (Facebook, Google). A lot of the compensation comes from massive stock grant, so you have to negotiate stock hard and get it refreshed every year. (Note that the stock is liquid and publicly traded, it can be sold automatically monthly).

If you hang around on Hacker News for too long, you can find out conversations about Netflix not believing in stock and bonus. If you keep reading between the lines, you can figure out that they paid massive base salary in a big recruitment campaign to poach everyone from everywhere else.

Of course, not everything is about money, you may prefer a place with a shorter commute, less hours, or working from home 1 day a week to take care of your child. You’re considering a mix of compensation, personal criteria, location and qualifications.


Given my experience. There is no compromise to be made on compensation. The great companies are more successful all across the board, they pay more AND they have more money AND they treat their people better AND they have better work conditions AND more interesting projects AND …

Basically, there are the good organizations and the bad organizations, there is little middle ground. Given the choice, you always want to pick a 10x organization.


Chapter 7) Network, Network, Network…

Network in real life. Network online. Network at the pub. Network some more.

Do you know how much your current company pay other people around you? Well, you should!

Do you bring your co-workers one by one at lunch at a nearby pub to talk about secret compensations and office politics? Well, you should!

Do you have a LinkedIn up to date? Well, you should!

Do you have your previous co-workers on LinkedIn to follow-up on them and their new jobs, ready to message or be messaged if an opportunity pops up? Well, you should.

Do you regularly have drinks with your ex co-workers and ex-recruiters to keep up with the market and who’s where? Well, you should!

Chapter 8) Why Are We Doing All That?

We don’t negotiate salary because it’s easy, we negotiate because it’s important. Not negotiating your salary will cost you millions over your lifetime. Negotiate hard while you’re young and growing. It will impact the compensations of all your future jobs.

Have you ever asked around only to notice that 2 people performing the same work with the same qualifications have 30% difference in pay? Which one do you want to be?


when you life your life by poor standards you inflict damage on everyone who crosses your path especially those you love
Please negotiate your salary. It’s making the world a better place.

Chapter 9) Start-up Sucks

Disclaimer: I am in my “start-ups suck” phase.

Start-ups are a workaholics’ paradise. You’ll work a lot, for little money, with no healthcare and zero pension. All so you DO NOT make 1 million later because your company went bust, and if it didn’t your shares are worthless anyway.

The era of breaking the bank as a startup employee is long gone. Don’t expect to become a millionaire with that. The VC and the executives get all the returns if there are any, the employees get nothing. (Note that shares can have a negative value, they may cost you money to acquire and/or generate taxes).

Think for a minute about how much pay cut you took? Do you have bonus at all? How much your shares are REALLY worth? What’s your pension and healthcare plans? How often are you on call? How many hours a week do you work? When is the last time you had to work on a week-end?

While these issues are typical of start-ups, they can be found in any companies. Take a minute to think about your current situation and where you want to be (or not be). Would you be better off at a big tech company or a big financial institution?

Chapter 10) How Much Do You Want?

Question: “What salary do you want?”

The only acceptable answer is: “It will take xxx$ base salary to leave my current company.

Question: “What salary do you want?

Answer: “It will take xxx$ base salary to leave my current company.

Question: “What is your current salary?”

Answer: “It will take xxx$ base salary to leave my current company.

Question: “What is your current salary?”

Answer: “It will take $xxx base salary to leave my current company.

The only alternative answer is: “I need to know what kind of perks, hours and pension you have to give you a number? Let’s begin with what pension plans do you have?” [1]

You must figure out what you’re worth and you must ask for it. You won’t know at first, you’ll have no idea what their perks may be, you won’t know what you’ll work on. The entire point of this article is that you need to go get offers to find out. More interviews, more job offers, more binary search!

There is a myth that you should not give a number first, it’s 100% bullshit. If you let an employer gives a number first, he will low ball you every single time. It gets worse from there, the conversation is now anchored to that low number, it will be very difficult to negotiate up.

As a rule of thumb, if an employer says a number, it’s guaranteed 10% under what they were willing to pay without question.

Give a fix number, never give a range. Ranges are evil. Whenever a range comes up, the employer thinks of the bottom, the employee thinks of the top. You’re both pretending to be in agreement while really ignoring each other.

[1] I’m fairly confident I’ve got the best pension in town. I’m fairly confident I’ll reply to their reply with an egregious comment.


What do you have to lose by doing that? Absolutely nothing. Remember rules #1. You already have a job and you ain’t leaving until you get the terms you want written down in a contract. That’s your leverage.

I once had a conversation with an HR person in where he repeated the same question 9 times (the last 4 worded slightly differently). I repeated the same answer 8 times (then I changed the topic). This is a perfect example of being an asshole (read: relentless and inflexible).


Chapter 11) Move Early And Move Often

The average tenure for [young] qualified employees is around a year.

On the one hand, I can’t think of a single manager/HR who cares about keeping their employees. (I can think of many who pretend to care, but none who would actually lift a finger if necessary).

On the other hand, I can’t think of a single manager/HR who wouldn’t poach an employee from somewhere else [1].

The combination makes up for a very aggressive environment. Thus the best advice I can give to youngsters is to move early and move often. Don’t hate the player, hate the game.

[1] I loved that day when I joined a new job, only to find an email in my LinkedIn that evening from a Facebook recruiter inviting me to interview with them. [2]

[2] I loved that day when I interviewed with Facebook, only to get an email from a headhunter that evening to recruit for a recent finance shop in town managed by 2 well known ex-Goldman Sachs partners.


It seems that short tenure is an evolutionary trait of the industry as a whole. There is no sign of it ever getting longer any time soon.

In fast paced companies, a sizeable chunk of work can be done in 6-18 months delivered to millions of customers. It’s very project-oriented, a project is executed, quickly. In fact, even if people would like to stay, it’s not necessarily that simple, they may have to move internally or externally.

Despite the incredible turnover, it’s good enough to deliver and make huge profits. Sure it’s not optimal. A business only needs to be sustainable, not optimal.


Chapter 12) Should I Accept A Counter Offer?

Do you want to stay at your current company? If “YES”, then yes you should accept a counter offer. Otherwise, no.

Should you even bother asking for a counter offer? If you’d like to stay then yes.

Obviously, your life and your decisions depends on you so there is nothing we can say to help you there.

Please don’t trust articles which say that all people who accepted a counter-offer have left short afterwards anyway. These articles are written by recruiters who get a massive $20k-$100k commission only if you leave your company. They will say anything to get you to accept an offer with them, they are not acting in your interest. If you prefer to stay, stay!

Chapter 13) How To Ask For A Counter Offer?

Go to the people in the position of power, usually your manager (but not always, politics can be tricky). Tell him that you have a counter offer for $xxx, you’re fine here and you will stay provided by your compensation is adjusted, it’s only about money, he needs to match and he needs to match NOW because you’ve got the contract from the other company in your email ready to be signed (I love DocuSign) and you’re not gonna wait (I hate waiting).

If you’re a player: Print the half-page of the contract which contains the numbers to be matched, highlighted in bright pink, with the phone numbers written in the corner for your director and people he may want to call.

It should only take 3 minutes to expose the situation. Speak slow, speak calm. This is a perfectly normal business request. Businessmen do that all day along, every day of the year. (Don’t worry. You’re NOT doing anything wrong, you’re NOT taking anyone as hostage and you’re NOT hurting anyone by doing that. You’re just being an adult).

Don’t get into a discussion and don’t get into an argument. There isn’t a single thing he says that could matter. An experienced manager will probably have a script for that situation, don’t bother listening. It’s sure not the time to be manipulated into thinking the company has a limited raise pool or whatever he may invent.

Basically, he’s gonna need the day to talk to a few people and take a decision.

If he wants to keep you, he’ll pay. You should have a written salary amendment, signed, by the next day (2 days top). If you don’t get one, they’re not interested in keeping you.

If he doesn’t want to pay, the only two cards in his hands are to stall for time and to make [fake] verbal promises. An experienced bad-ass manager will never tell straight to your face that your request is denied, instead he’ll give excuses and talk about future raises. An alternative simple strategy is to make himself unreachable and unavailable to prevent you to talk any further and to hand your resignation (you can give it to any administrative person if needs be). Watch out for these red flags!

Chapter 14) Counter Offers Will Go Wrong

Disclaimer: I have biased toward good performers.

So far in my life, I have never seen a raise request or a counter offer go well. Or well, to be fair, I have seen a lot of 5-10% raises for a lot of people [1], and a few bigger ones.

There is a sizeable amount of them which are okay. There is also a sizeable amount of them which are for people who are seriously undervalued, who’ve been underpaid for years, still are after that raise, and would get outmatched easily by walking to the other shop across the street.

When you find out your company has undervalued you the whole time, the entire payroll is underrated, and the raise you’ve been given barely puts you on par with the low-end of the first company across the road. You are sure leaving the hell out of here.

Please refrain from sending an inflammatory goodbye email to reveal the true evil nature of your management. Stick to a short goodbye message and make sure to insert your contact info and LinkedIn so people can add you. This job is over, networking just begins!

[1] If you’ve got someone for a steal, ensuring they get a 5-10% yearly raise or a 5-10% one-off bonus is the cheapest way to make them feel appreciated and blind them just enough to the outside world.

herding sheeps
Resignations usually happen in waves.

A Personal Story:

I remember one raise I asked once, a meagre 33% that was perfectly reasonable (quite low as it turned out). They’ve invited me to a meeting with the other managers and it didn’t go as planned, I’ll spare you the details. At one point, my phone rang in the middle of the meeting. Some people barraged the request hard, be it for personal reasons or because it’s allegedly crazy to give a two digits raise to anyone. Everyone left the room in shock and despair.

I checked my phone, the missed call was from another company I interviewed with, to confirm I got the job. I called back to give my name/address and had a contract signed the next day for a substantial raise (plus additional bonus and perks).

My manager came to my office on the next Monday –interrupting me while I was setting up the printer to print my resignation letter– to say everything’s fine and I get half the raise I asked for. I nodded in acknowledgement… only to give him my resignation the next day (the printer was challenging!).

My last action at this job was to publish a job posting for my role at £120k base, which was more than any of us was earning. The rest of the team quit promptly.

gif - plane take off going wrong.gif
Didn’t plan to land a job that way.

That experience taught me 3 valuable lessons:

  1. Always have a backup plan.
  2. Imply only the single person that’s needed to bring the cash. More people can (and will) only cause troubles.
  3. Show a competing offer. Don’t talk and don’t argue. It can only go downhill.
  4. I’d be earning £120k soon.

Disclaimer: I’m looking forward to my 10th job in the industry, in the meantime, I’m just gathering materials for a future blog article: “A Retrospective on 10 Years of Salary Negotiations Gone Wrong: Still Counting“.


Chapter 15) Join The Recruitment Process

Become part of your recruitment process. That’s the best way to learn about recruiting, negotiations and one hundred other things.

For instance, after the 3rd dude in a row who failed to write a program to print number from 1 to 100, you’ll feel less like a fraud. Whereas there’s no such eyes opener as making an offer to a senior engineer who already has a job, only to have him reject you like a complete troll, stand up and leave the room.

Also, if you’re an idealist like me, that’s the only way to improve it: from the inside. And if you’re chaotic neutral idealistic like me, it can be a lot of fun, you get to see plenty of interesting people, while helping them, yourself and your company at the same time. (Chaotic Neutral Fact: Companies are ephemeral but what you learn for yourself is forever).

You’ll get a much better understanding of many things you couldn’t possibly dream of, with plenty of incredible and disastrous stories to tell (and recycle for your future negotiations).


yeah that aint happening
When you’ve been recruiting for a position you’re qualified to for 6 months and that’s the only answer you got, from the only candidate (out of 6) that passed the bar.

Look for the obvious signs, when this sort of things happen, it’s time to either get a raise or jump ship.


Conclusion

If you’re negotiating an offer, the thing that’s critical isn’t to be some kind of super genius. It’s enough to be pretty good, know what the market is paying, and have multiple offers.” — Dan Luu

Always be on the look out for better opportunities. Negotiate. Get competing offers. Get counter offers. Jump ship.

And remember that nothing can go wrong, you’ve already got a job, you’ve got nothing to lose.

the first year I was in London my compensation took 105 percent which really pissed me off because it was just shy of 10 percent a month
Shoot for the moon. Even if you miss, you’ll land among the stars.

References:

Salary Negotiation: Make More Money, Be More Valued, patio11 blog.

Don’t Call Yourself A Programmer, And Other Career Advice, patio11 blog..

Big company vs. startup work and pay, Dan Luu blog.

Developer hiring and the market for lemons, Dan Luu blog.

Salary Negotiation and Job Hunting for Developers, Twilio blog.

H1B Salary Data, base salaries are public for all H1B visa, at all companies, in all USA cities.

Rffffff
Advertisements

How to present a GitHub project for your resume


Introduction

Companies ask for a GitHub profile. Recruiters ask for a GitHub profile. The question “Do you contribute to open-source?” is now one of the most common questions asked in phone screens.

If people want a GitHub, we shall give them a GitHub. This article will explain how to present a GitHub project for use in a resume.

The given advice can be red from two point of views. As a candidate, it is what to write to introduce and present a software (not necessary on GitHub). As an interviewer (or a fellow developer), it is what to look for to judge the experience of the developer(s) and the quality of a software.

submit application form with a github link
When having a GitHub is mandatory, just like having a name.

Link to a specific project

Put a link to your GitHub in your resume and every application forms you have to fill.

That link must send directly to a project. Never link to the root of your GitHub profile, it doesn’t show anything useful and it’s hard to navigate from there.

It means that you must have ONE project to show. A single demonstration project is enough, don’t need more.

This project will be the “landing page” in web buzzword. This is the first page the employer will see. They will rarely go past it (and they shouldn’t have to) so the page should be a good enough by itself. If they go past it, it’s only because the page grabbed their interests and they wanted to see more.

We’ll write the project page to give a good first impression and show off skills as a software engineer.

Project Structure

A software project can be judged in 5 seconds by looking at the directory structure.

An inexperienced developer is easy to spot. His project doesn’t have any structure. Files are either in unpredictable places or all in the top directory.

There is one project structure to rule them all. There MUST be separate directories for source, test, libraries, compiled binaries, etc…

Whether the naming convention will be “doc” or “docs” is an unimportant detail. For example, here are Simple Folder Structure Conventions for GitHub projects:

.
├── build                   # Compiled files (alternatively `dist`)
├── docs                    # Documentation files (alternatively `doc`)
├── src                     # Source files (alternatively `lib` or `app`)
├── test                    # Automated tests (alternatively `spec` or `tests`)
├── tools                   # Tools and utilities
├── LICENSE
└── README.md
software project structure
A well-organized project

Have a README

Have a README to:

  • Describe the purpose of the project
  • Screenshots/videos
  • Usage
  • Link to the installer/webpage

Have screenshots in the readme

A picture is worth a thousand words.

People are not going to install the application just to see it. Give them screenshots.

Have videos in the readme

A picture is worth a thousand words. A video is worth a thousand pictures.

There is nothing better than a video when it comes to giving a demonstration or showing off an application.

snake game preview animated gif
Great demo from a random snake project on GitHub

Note: GitHub does not allow to embed video files in the readme, use animated gif instead.

Link to a website or an installer

Link to the site if it’s a web application project. Of course, a web application should be running somewhere and publicly accessible, that’s the point of web applications.

Link to the installer if it’s a desktop application project. It’s unlikely that the user will install it but that looks professional, that’s how desktop applications are distributed after all.

Integrate GitHub tools

GitHub has a rich ecosystem of free tools for building, packaging, testing and much more. All these tools are mandatory for professional software development.

It used to be hell to setup the tooling but now everything is readily available for free through GitHub and the setup is dead simple. There is no excuse to not use the tooling.

github-integration-icons

This one is a sample C++ project for a Connect Four. From left to right:

  1. Build on Linux (Travis CI)
  2. Build on Windows (AppVeyor)
  3. Unit tests and coverage analysis (Coveralls)

What about the source code?

Nobody cares about your code. It was quite a shocking moment when I learned this in my programming career. I would take great care in polishing my code only to find out nobody actually cares. It’s not the code that counts, it’s the product. ” — Source

A paragraph to explain the purpose of the application is 10 times faster than guessing it. A quick start video of an [non-trivial] application is 100 times faster than figuring it out. A design diagram is 1000 times faster than reverse engineering the application. All of these could be achieved by reading the source code, at the cost of orders of magnitude more time and headache. It’s extremely slow and difficult to read code (or should we say to decode code). It should only ever be a last resort.

Lesson #1: Noone cares about your source code. Noone is gonna read it.

Lesson #2: Don’t expect people to read it. Don’t force them to.

What if I don’t have big projects to show?

Good. Smaller projects are easier to show, easier to explain and easier to understand for the interviewer. For instance, everyone can grasp a good old Connect Four.

It is not a trivial project despite what it looks like at first. Write a decent UI, put some colors, allow a two players option, add a “hint” to show the best next move, add an AI to play against.

While the game is conceptually simple there is a lot of work to turn it into a good and polished software. That leaves plenty of depth to talk about in a face-to-face interview.

Did you know that the first player in a connect four game always wins? [if playing perfectly] Did you know that the second player can always draw the game, if the first player doesn’t take the middle position as his first move?

Source: A Knowledge-based Approach of Connect-Four, The Game is Solved: White Wins, Victor Allis

Do interviewers really look at GitHub?

As a matter of fact: No, they don’t.

github traffic statistics
GitHub Traffic Statistics

We’ve done the tests. Here are the statistics after sending a bunch of resumes. The 3 views are from myself, I accessed the project while writing this article, without being authenticated to GitHub. Oops, my bad.

From personal experience from the last time I looked for a job. After a dozen of phone interviews (1 dev per call) and a couple of on-sites (4 to 7 devs per on-site), there was only 1 visit to my profile.

Conclusion: Noone cares about GitHub. Noone is gonna read it. Everyone is gonna ask for it nonetheless, cause it’s hype.

Bonus: Since noone will check the link they’re given, you too can refuse to participate in the GitHub masquerade by only linking to the ultimate hello world repository. (Worst case scenario: Just talk about this blog if the interviewers spot the trickery. They love candidates who read blogs).

Cheat Sheet

  1. Structure the project
  2. Have a README
  3. Write a paragraph to explain the purpose of the project
  4. Put screenshots and videos
  5. Distribute an installer (desktop app) or give the website (web app)
  6. Integrate development tools (CI, unit test, packager, etc…)

That’s good practices for software projects. It’s not limited to GitHub.

HackerRank Testing: A glimpse at the company side


HackerRank is an online coding platform. It provides coding tests and questions for companies to screen candidates.

We remember the first time we had to do a test (before joining the company), unsure what were the expectations. Later, we were designing new tests (after joining the company), unsure what to expect from candidates.

We decided to release some insights on our experience, full disclosure. How good people are doing? How the test is evaluated?

Hopefully, that will give everyone a better understanding of what is going on.

Statistics

hr funnel
Last month – 79 candidates

Do or not do, there is no try

We invited 79 people to do the test in the last month… 29% of them never tried.

On the bright side, the more candidates who kick themselves out, the more time we can dedicate to the remaining ones.

You can be a top 71% performer by simply trying! =D

Details

We inaugurated a new test last week and 5 candidates did it over the weekend. They happen to be a representative sample:

  1. Didn’t attempt any of the coding exercises
  2. Answered all coding exercises with “return true” or equivalent algorithm.
  3. Answered exercises not with code but with comments about the train’s Wi-Fi being terrible, especially after the train started moving
  4. Had trouble to solve the SSH-to-our-server exercise without sudo, until he hacked the webserver with a fresh 0-day to elevated his privileges.
  5. Answered all simple questions with simple algorithms, didn’t finish the hard one.

Three failed and two passed. It’s self-evident who is who.

Highest bang for the buck

There is no other form of screening that can scale as well as HackerRank. It is also the fairest interview process since it never discriminates on age, race, years of experience, school or anything.

Designing the test takes a few day.

We pay $5 per invitation and the correction takes 5-15 minutes.

Hall of Shame

Internet is required to complete the test

One candidate tried to do the test on a laptop, in a moving train, over the train’s Wi-Fi. It didn’t go well and he sent us a long email to complaint right after the test.

On the bright side, he wrote long comments in English. On the dark side, he didn’t code any of the simple things (not requiring internet or any documentation) and all the writings prove the internet connection was not that bad.

We considered about giving him a second chance and then we just dropped the case after much confusion and more emails.

Did he think that internet is unnecessary to access http://www.hackerrank.com? Is the connectivity usually good in train? Does he do the same thing for Skype interviews? We don’t know and we’ll never know. We are still puzzled to this day.

We’ve added a note to our introductory email to clarify: “Internet access is required, for the whole duration of the test“.

“return true” is NOT the ultimate answer to everything

We are seeing a lot of stupid answers. Probably just to grab some points.

Class Solution {
    // str : firstname|lastname|phonenumber|address|zipcode|country
    bool filter(String str) {
        return true;
    }
}
int max(int array[], int size) {
    return array[0];
}

Booleans are about 50-50 by the law of probability, integers can get lucky with 0 or -1, arrays with the first or last element.

Passing 50% of tests is good value for the time invested but it won’t survive a code review. (Not to mention that 80% of the point could be on the harder test cases).

Tip and tricks for candidates

Complexity

As a candidate, you cannot see the unit tests content, the edge cases or the complexity expected.

The question gives bounds on the input size. The title and tags gives a hint about the expected solution (e.g. dynamic programming). Read that wisely.

64 bits integer

Many questions require 64 bits integers but it’s NEVER mentioned. Go for 64 bits integers as default whenever there is an array with thousands of integers and some additions (e.g. all trading-like and number-crunching questions).

Unit Tests

The unit tests are NOT ordered in ascending difficulty and they may have limited variety.

For instance, if there are 8 tests (excluding examples), that could be 4 tests with 64 bits results + 6 tests with 50 MB of input data + 1 test with a single number.

A slight difference in complexity or an unhandled edge case may turn around many tests.

Timeouts

A test case has between 1 and 5 seconds to be run (depending on the language). A “timeout error” on a test means that it didn’t finish in the given time and was terminated. Gotta write faster code.

All your code is reviewed

On the recruiter interface, we can see the code that was submitted, we have the input and the output of all test cases. Including errors and partial output.

We review everything, we evaluate algorithms, we evaluate complexity, we read comments, we consider special hacks/tricks, we check edge cases.

Points

HackerRank gives points per question and per unit test successful. We get a general sense of completion when we open the review windows “x/300 points” but ultimately the decision comes down to the code review.

Time Spent

We have an overview of the time spent on the test.

hr test time report
1-4: MCQ question, 5-8: coding exercise, total: 60 minutes

HackerRank is simple

Whatever a test contains, the candidate will usually advance to the next round if he can answer some of the coding exercises.

A developer should be able to code some solutions to some [simple] problems. That’s exactly what HackerRank is testing.

HackerRank is good for everyone

Once in a while there is a company with a crazy impossible test that is rejecting everyone. The company would do the same thing if it were face-to-face. You just avoided an awkward 4h on-site interview.

Sample Test

There is only one important thing to do before attempting a test. Try the the sample test  to familiarize yourself with the platform and ensure everything is working.

Conclusion

Recruiting takes a huge amount of effort on everyone involved. HackerRank’s purpose is to save a lot of time and effort by weeding out people earlier [especially utterly unqualified people]. Most of these would fail in the same way in a phone or face-to-face interview.

It’s good and it’s extremely effective. It can replace the initial phone screen.

 

Cracking the HackerRank Test: 100% score made easy


Foreword

It’s well known that most programmers wannabes can’t code their way out of a paper bag. As a consequence, the tech industry is pushing for longer, harder and evermore extreme screening.

The whiteboard interview has been the standard for a while, followed by puzzles [now abandoned], then FizzBuzz.

The latest fad is HackerRank. It’s introducing automated programming tests to be done by the candidate before he’s allowed to talk to anyone in the company.

A lot of very good companies are using HackerRank as a pre-screening tool. If we can’t avoid it, we gotta embrace it.

What to find in a HackerRank test?

There are 3 types of questions to be encountered in a test:

  • Multiple Choice Questions: “What is the time complexity to find an element in a red and black tree?” -A- -B- -C- -D-
  • Coding Exercise: “<Long description of a problem to be solved>, <input data format>, <output data format>.” Start coding a solution.
  • SudoRank Exercise: “Your ssh credentials are tester:QWERTUIOP@123.98.45.76 <long description of what’s wrong with that server>.” SSH to the server and start fixing.

Any amount of any question can be put together, in any order, to make a complete test. A company should give some indications on what to expect in its test.

HackerRank provides a library of hundreds of questions and exercises ready to use. It’s also possible for a company to write their own (and recommended).

Defeating Multiple Choice Question

The majority of the multiple choice questions can be solved by an appropriate Google search. Usually on the title, sometimes on a few select words from the text.

hr question dropping privileges
Select Text => Right Click => Quick Search
hr google dropping privileges
Google has spoken! => all in favour of setuid()

Defeating Coding Exercises

Searching for a 10 lines long paragraph in Google is not an acceptable option. Not to mention that the HackerRank website disables copy/paste in the description area.

The workaround is to search for the title of the exercise. A title uniquely identifies a question on HackerRank. It will be mentioned in related solutions and blog posts. Perfect for being indexed by Google.

hr question lonely integer
Select Text => Right Click => Quick Search
hr google lonely integer.png
Touché!

The first result is the question, the second result is the solution. Well, that was easy.

Bonus: That google solution is actually wrong… yet it gives all the points.

// [boilerplate omitted]
int main() {
    int N;
    cin >> N;
    int tmp, result = 0;
    for (int i = 0; i < N; i++) {         cin >> tmp;
        result ^= tmp;
    }
    cout << result;
    return 0;
}

This solution is only correct if duplicated numbers are in pairs. All the HackerRank unit tests happen to fit this criteria by pure coincidence [cf. Addendum].

Originally, we put this simple question at the beginning of a test for warm-up. We received that answer from a candidate in our first batch of applicants. It was quite puzzling, what are the odds that someone would come up with an algorithm that convoluted if given only the text from the question? A quick investigation quickly revealed the source.


Addendum:

The “Lonely Integer” question is worded slightly differently in the public HackerRank site and the private HackerRank library but the input, output and unit tests are the same. Hence why the solution is off but works. HackerRank is obviously copying questions from the community into the professional library. That’s another copy-cat busted!


Recruiter Insights: Cheating brought to the next level

We have a lot of candidates coming from recruiters. How are they comparing to candidates from other sources?

Let’s see the statistics on a hard question [i.e. dynamic programming trading algorithm].

hr insights stock maximize distribution
Distribution over all attempts, by all companies (log scale). 1234 zero vs 303 full score.

Most candidates get 0 points: ran out of time, unable to answer, wrong algorithm, or incomplete/partial solutions (i.e. good start but not enough to pass any unit test yet).

We wanted to show the same distribution over our pool of candidates but HackerRank doesn’t provide that graph anymore. It used to.

Anyway, we remember approximate numbers. The distribution for our candidates is about 50/50% on each extreme. That’s significantly better than the 75/17% from the general population. We can correlate that number with the time spent on the question and a visual code review.

The result is that candidates coming from recruiters perform better, especially on hard exercises. In fact it is unbelievable how much better they perform! (Special kudos to the guys who are able to solve a problem -with a perfectly optimized solution- in less time than it would take to actually read it =D).

The conclusion is plain and simple: Our recruiters give away the test to the candidates.

everybody does it, it's just that nobody talkes about it
Do recruiters give away your questions? Of course!

Lesson learnt:

  • For candidates: Remember to ask the recruiter for support before the test.
  • For recruiters: Remember to coach the candidate for the test and instruct him to write down changes (if any).
  • For companies: Beware high-score candidates coming from recruiters! In particular, don’t calibrate scoring based on extremes scores from a few cheaters.

Challenge: How long does it take you to solve a trading challenge? [dynamic programming, medium difficulty].

Custom HackerRank Tests

Companies can write custom exercises and they should. It’s hard and it requires particular skills but it is definitely worthwhile.

It is the only effective solution against Google, if done carefully. (It’s actually surprisingly  difficult to make exercises that are both simple AND not easily found with Google on 1000 tutorials and coding forums).

Sadly, it won’t help against recruiters. (Excluding the first batch of candidates who will be sacrificed as scouts).

Conclusion

Did we just ruin HackerRank pre-screening? Of course not! There is a never-ending supply of bozos unable to tell the difference between Internet and Internet Explorer.

We could write a book teaching the answers to 90% of programming interviews problems, yet 99% of job seekers would never read it. Hell, it’s been written for a while and it had no impact whatsoever.

Only the handful of devs following blogs/news or searching for “What is HackerRank?” will be able to come better prepared.

If anything, this article makes HackerRank better and more relevant. Now a test is about looking for help on Google and fixing subtly broken snippets of unindented code written in the wrong language.

HackerRank is finally screening for capabilities relevant to the job!

Stack Overflow Survey Results: Money does buy happiness!


Developer Happiness By Salary

money_buys_happiness

The Stack Overflow Survey asks developers around the world about their current situation.

The answers provided by 46,122 respondents this year finally prove that money can buy happiness. In fact, the more money you get, the more happiness you get!

 

money shower
Enjoyable, isn’t it?

Source: Stack Overflow Developer Survey

CV Francais vs UK resume


CV Français

+---------------------------------------------------------------------+
| nom                                                                 |
| ville                                                               |
| age                           photo                            blog |
| nationalité (VISA ?)          photo                       portfolio |
| marié/célibataire             photo                          github |
| permis B                   (optionnel)                stackoverflow |
| téléphone                                                           |
| mail                                                                |
|                                                                     |
|                           === TITRE ===                             |
|                           === TITRE ===                             |
|                           === TITRE ===                             |
|                                                                     |
| === FORMATION                                                       |
|   - 2013, Master <spécialité>, école <nom>                          |
|   - 2009, DUT <spécialité><spécialité>, université <nom>            |
|                                                                     |
| === EXPÉRIENCES PROFESSIONNELLES                                    |
|                                                                     |
|    *** Dates - Société1 - Role1 - Ville ****                        |
|      - lorem ipsum dolor                                            |
|      - sit amet and cookies                                         |
|      = MOTS-CLÉS: latin, langues mortes                             |
|                                                                     |
|    *** Dates - Société2 - Role2 - Ville ****                        |
|      - the quick brown fox                                          |
|      - jumps over the lazy cat                                      |
|      = MOTS-CLÉS: anglais, animaux                                  |
|                                                                     |
| === COMPÉTENCES                                                     |
|   - Latin: Victoriae, mundis, mundis, lacrima                       |
|   - Cuisine: Omelette au fromage                                    |
|                                                                     |
| === INTÉRÊTS ET LANGUES                                             |
|   - Ping-pong                                                       |
|   - Équitation                                                      |
|   - Anglais: bilingue (TOEIC )                                      |
|                                                                     |
|                      === OBJECTIFS ===                              |
|     Je recherche un stage en x de y a z dans la ville v.            |
|                                                                     |
+---------------------------------------------------------------------+

UK Resume

+---------------------------------------------------------------------+
| name                                                           blog |
| city                                                      portfolio |
| nationality (VISA status)                                    github |
| phone                                                 stackoverflow |
| email                                                               |
|                                                                     |
|                           === TITLE ===                             |
|                           === TITLE ===                             |
|                           === TITLE ===                             |
|                                                                     |
| === PROFILE                                                         |
|    Lots of bullshit about how qualified I am.                       |
|    Currently seeking an internship in x from y to z date in c City. |
|                                                                     |
| === PROFESSIONAL EXPERIENCES                                        |
|                                                                     |
|    *** Dates - Company1 - Role1 - City ****                         |
|      - lorem ipsum dolor                                            |
|      - sit amet and cookies                                         |
|      = KEYWORDS: Latin, dead languages                              |
|                                                                     |
|    *** Dates - Company2 - Role2 - City ****                         |
|      - the quick brown fox                                          |
|      - jumps over the lazy cat                                      |
|      = KEYWORDS: English, animals                                   |
|                                                                     |
| === EDUCATION                                                       |
|   - 2013, MEng. <domain>, university <name>                         |
|   - 2010, BEng. <domain>, university <name>                         |
|                                                                     |
| === SKILLS                                                          |
|   - Latin: Victoriae, mundis, mundis, lacrima                       |
|   - Cooking: Omelette au fromage                                    |
|                                                                     |
| === INTERESTS                                                       |
|   - Ping Pong               - Horse Riding                          |
|                                                                     |
| === LANGUAGES                                                       |
|   - French: native          - English: fluent (certifications)      |
|                                                                     |
+---------------------------------------------------------------------+

The Differences

Personal Information

The UK resume have NO age, NO marital status, NO photo. UK has strict anti discrimination law to which companies actually obey. They’re not allowed to ask about those and you should not write them at all. That is a mistake punishable by instant destruction. Luckily for you. Companies used to receiving candidates from abroad, especially in tech, are not too strict on this and may not even know about the law.

The UK only ‘profile’ section

The UK resume ALWAYS begins with a profile section. A few lines to introduce [s]yourself[s] your professional profile and eventually some context (e.g.  Looking for internship in London in x from y to z date). It can be the hardest to find inspiration for. One useful advise is to stay factual and avoid the bullshit. The expectations are not set in stone, your mileage may vary depending on the reader.

Factual: “8 years experience in Project Management and Business Analysis within Finance and Telecommunications, backed by a 1st class degree and MSc.”
Bullshit: “I’m self motivated, able to work in a team and on my own.”

The French only ‘objectifs’ section (aka. ‘goals’)

Usually not present on most French resumes. There is some debate about including it or not. You’re obviously sending a resume because your goal is to find a job, right ? Well, not necessarily any job anywhere anytime. It is worth writing that you’re available from specific dates, for an internship, or in a given city only. If you have such restrictions, this section definitely makes sense and should be included. The British are smart enough that they have a profile section to put these things into.

Is it a CV or a Resume ?

It is called a CV in French (and others Latin languages). In the UK it is either called a CV or a resume, whichever you prefer.

Some people say that one word is British and the other is American, however it is not clear which is which. Some people argue that resume is the 1-2 pages short version and CV is the longer version.

I like to get things right -so does my inner grammar Nazi- and I did some digging. Supposing there ever was a strict difference between those, it doesn’t matter any more. It is long lost and forgotten. Pick whichever you prefer and stick to it.