This is a mobile version, full one is here.
29 October 2014
How Much Do You Cost?
I'm getting a few emails every day from programmers interested in working with Zerocracy remotely. The first question I usually ask is "what is your rate?" (we pay by the hour) What surprises me is how often people incorrectly estimate themselves, in both directions.
I hear very different numbers, from $5 to $500 per hour. I never say no, but usually come up with my own hourly rate estimate. This article explains what factors I do and don't take into account. These are my personal criteria; don't take them as an industry standard. I do find them objective and logical, though—so let me explain.
Open Source Contribution
This is the first and the most important characteristic of a software developer. Do you contribute to open source projects? Do you have your own open source libraries that are used by some community? Do you write code that is publicly available and used?
If you have nothing to show here, I see three possible causes.
First, you're too shy to share your code because it's crap. Obviously, this is not a good sign. Not because your code could be bad, but because you're not brave enough to face this fact and improve. In our teams we pay a lot of attention to the quality of code and most of our new team members get surprised by just how high our quality bar is. You will also be surprised. The question is whether you will be able to adapt and improve or if you will give up and quit. If you didn't share your code before and have never dealt with negative feedback, you won't feel comfortable in our projects, where quality requirements are very high.
The second possible cause is that you work from nine till five, for food, without passion. Actually, nobody manifests it that way. Instead, I often hear something like "my company doesn't pay me for open source contribution and at home I want to spend time with my family." In modern software development, most of the code we're working with is open source—libraries, frameworks, tools, instruments, etc. Almost everything you're using in your commercial projects is open source. By paying your salary your employer does already invest in open source products, because you're an active user of them. The problem is that you are not interested in becoming more active in that contribution. I see this as a lack of passion and self-motivation. Will you be an effective developer in our projects? Not at all, because our entire management model relies on self-motivation.
The last possible cause is that you don't know what to write and where to contribute, which means lack of creativity. As I mentioned above, almost everything we're using now is open source, and these tools are full of bugs and not-yet-implemented features. At the same time, you don't see any areas for improvement? You don't know what can be done better? You're not able to at least find, report and fix one bug in some open source product you're using every day? This means that you won't be able to find areas of improvement in our projects either, while we rely on your ability to discover problems creatively.
Thus, if your GitHub account is empty and your CV doesn't position you as "an active contributor to Linux kernel" (yeah, why not?), I immediately lose interest. On the other hand, when I see a 100+ stars project in your GitHub account, I get excited and ready to offer a higher rate.
It is a common practice to pay higher rates to those who live in more expensive countries. When I'm getting resumes from San Francisco programmers, their rates are $70+ per hour. The same skills and experience cost $15-20 in Karachi. The reason here is the cost of living—it is much higher in the US than in Pakistan.
However, this reason doesn't sound logical to me. If you're driving a more expensive car, we have to pay you a higher salary? The same with the place to stay. You've chosen the country that you live in. You're using all the benefits of a well-developed country and you're paying for them. It's your choice. You decided to spend more money for the quality of your life—what does it have to do with me?
Want to pay $30 for a lunch? Become a better engineer. Until then, buy a hot dog for a few bucks. Just saying that "I'm already here and my lunch costs $30" is not an argument.
Thus, the more expensive the place you live, the less money stays in your pocket. For us this means that $100 will motivate a programmer from Karachi much stronger than the same $100 will motivate the same person, if she lives in San Francisco. Thus, we prefer to work with people whose expenses are lower. Our money will simply work better.
We all know what StackOverflow has but very few people (surprisingly few!) actively contributing to it. If your profile there is empty (or you don't have one) I realize that you 1) don't have any questions to ask and 2) you have nothing to answer.
First, if you're not asking anything there, you are not growing. Your education process stopped some time ago, probably right after you got an office job. Or maybe you're too shy to ask? Or you can't describe your questions in an accurate and precise format? Or maybe all your questions already have answers? In any case, it's sad.
Second, if you're not answering, you simply have nothing to say. In most cases, this means that you're not solving complex and unique problems. You're simply wiring together well-known components and collecting your paychecks.
Very often I hear people saying that they solve most of their problems by asking their colleagues sitting next to them in the office. They say they simply don't need StackOverflow (or similar resources, if they exist) because their team is so great that any questions can be answered internally. That's good for the team and bad for you. Why? You don't have a very important skill—finding an answer in a public Internet. In our projects we discourage any horizontal communications between programmers, and you won't be able to get any help from anyone. You will be on your own and you will fail, because you are used to be patronized by someone senior, in your office.
StackOverflow is not just an indicator of how smart you are and how many upvotes you got for the "best programming joke." It is proof that you can find answers to your questions by communicating with people you don't know. It is a very important skill.
Years of Experience
"I've written Java for 10 years!"—so what? This number means only one thing to me—you managed to survive in some office for ten years. Or maybe in a few offices. You managed to convince someone that he has to pay you for ten years of sitting in his building. Does it mean that you were writing something useful? Does it mean that your code was perfect? It doesn't mean any of that.
Years of experience is a false indicator. It actually may play against you, in combination with other indicators mentioned above. If your CV says that you just started to program two years ago and your GitHub and StackOverflow accounts are empty—there is still a chance you will improve. You're just in the beginning of your career. However, if your CV says that you're a "10-year seasoned architect" with zero open source contribution—this means that you're either lying about that ten years or you're absolutely useless as an architect.
My point is that the "years of experience" argument should be used very carefully. Play this card only if you have other merits. Otherwise, keep it to yourself.
Oracle, Zend, Amazon, IBM, MySQL, etc.—I'm talking about these certifications. In order to get them you should pass an exam. Not an easy one and not online. It is a real exam taken in a certification center, where you're sitting in front of a computer for a few hours, without any books or Internet access, answering questions. Rather humiliating activity for a respected software developer? Indeed. And there is a high probability of failure, which is also rather embarrassing.
It is a very good sign, if you managed to go through this. If you've done it a few times, even better. However, if you've earned no certifications in your entire career, it is for one of the following reasons:
First, you're afraid to lose. A serious certification may cost a few hundred dollars (I paid over $700 for SCEA) and you will not get a refund if you fail. If you're afraid to lose, you're afraid to fight. This means you'll chicken out in a real-life situation, where a complex problem will need to be solved.
Second, you don't invest in your profile. This most probably means that you don't want to change companies and prefer to find a peaceful office, where you can stay forever. I remember I once said to a friend of mine—"you will greatly improve your CV if you pass this certification." He answered with a smile—"I hope I won't need a CV any more, I like this company." This attitude is very beneficial for the company you're working for, but it definitely works against you.
In my experience, the best team players are those who work for themselves. Healthy individualism is a key success factor. If your primary objective is to earn for yourself (money, reputation, skills, or knowledge)—you will be very effective in our projects. Certifications in your profile is an indicator of that healthy individualism we're looking for.
The more technologies or programming languages you know, the less you cost. I'm not saying that it's not possible to be an expert in many things at the same time—that's entirely possible. But let me give you a pragmatic reason why you shouldn't—competition. There are thousands of "Java7 programmers" on the market—we can easily choose whoever we need. But there are not so many "Hadoop programmers" or "XSLT designers."
If you focus on some specific area and become an expert there, your chances of finding a job are lower, but the payout will be bigger. We usually end up paying more to narrow-skilled specialists, mostly because we have no choice. If a project we're working on needs a Lucene expert, we'll find the right person and do our best to get him/her on board. Doing our best means increasing the price, in most cases.
Thus, when I hear that you're "experienced in MySQL, PostgreSQL, Oracle and SQLite" I realize that you know very little about databases.
Talks and Publications
I think it is obvious that having a blog (about programming, not about your favorite cat) is a positive factor. Even better is to be an occasional speaker at conferences or meetups. When it is a blog, I pay attention to the amount of comments people leave for your articles. If it is a conference, the most important criteria is how difficult it was to get to the list of speakers.
Both blog articles and conference presentations make you much more valuable as a specialist. Mostly because these things demonstrate that some people already reviewed your work and your talent. And it was not just a single employer, but a group of other programmers and engineers. This means that we also can rely on your opinions.
Besides that, if you write and present regularly, you have a very important skill/talent—you can present your ideas in a "digestible" way. In our projects we discourage informal communications and use ticketing systems instead. In those tickets you will have to explain your ideas, questions or concerns so that everybody can understand you. Without enough presentation skills, you won't survive in your projects.
BTW, some software developers even file patents in their names—why can't you do this? Or maybe even publish a book. Why not?
I usually don't pay much attention to this section of your CV. Our management model is so different from anything you can see anywhere else that it doesn't really matter how many times you were fired before and how senior of a position you have/had with your full-time employer. Even if your title is "CTO of Twitter"—it doesn't mean anything to me.
My experience tells me that the bigger the company and the higher the position in it—the further away you stay from the source code and from real technical decisions. VPs and CTOs spend most of their time on management meetings and internal politics.
I'm much more interested in what you've done over the last few years than in where you've done it and what they called you while you were doing it.
BSc, MSc, PhD... do we care? Not really. Education is very similar to the "previous employment" mentioned above. It doesn't really matter where exactly you've spent those five years after school. What matters is what have you done during that time. If you have nothing to say about your activity in the university than what will the name of it tell me?
Well, of course, if it is Stanford or MIT, this will make a difference. In this case I can see that you managed to pass their graduation standards and managed to find money to study there. This is a good sign and will definitely increase your hourly rate. But if it is some mambo-jambo university from nowhere (like the one I graduated from), keep this information to yourself.
$100+ per hour we gladly pay to an expert who owns a few popular open source products; has a StackOverflow score above 20K; has certifications, articles, presentations, and maybe even patents.
$50+ per hour we pay to a professional programmer who has open source projects on his own or is an active contributor; has a StackOverflow score over 5K; is writing about software development; possesses a few certifications.
$30+ per hour we pay to a programmer who regularly contributes to open source code; is present in StackOverflow; has some certifications.
$15 per hour we pay to everybody else.
Don't get me wrong and don't take these numbers personally. The rate you're getting is a measurable metric of your professional level, not of you as a person. Besides, the level is not static, it is changing every day, and it's entirely in your hands.
I wrote this article mostly in order to motivate you to grow.
All these criteria are applicable to new members of our teams. Once you start writing some code, we measure your performance and you may get completely different numbers, see How Hourly Rate Is Calculated
BTW, illustrations you see above are created by Andreea Mironiuc.