I have a problem with this part. Basically, being a developer and not making it to a managing position is "getting stuck". I strongly disagree with that. Developers and managers have very different roles, a great developer will not necessarily be a great manager. It's like expecting great athletes to become great coaches, and if they don't they're stuck?
Is becoming a manager really a promotion? I would argue that in such a hot market great developers should be making more money than their own manager.
The problem in many companies is that the positions into which a senior developer may be promoted do not exist. Other positions with greater pay and prestige are on other career tracks. Positions like lead software developer, software architect, technical complexity organizer, software developer supreme (with tomato and sour cream), or historical catastrophe repetition avoider might not be available, or not available to internal hires.
They could exist. Several people here could probably argue a very convincing case for them. But they don't.
And the reason is because certain people still don't see business software resources as anything but costs to be managed down. Just yesterday, a member of my own household wanted to extract an image from a PDF, crop out the whitespace, and post it as a JPEG to a website. This non-technical person could have spent a whole day--or more--figuring this particular problem out. Having a technically knowledgeable person on hand shortened that time considerably. (I could have done it myself in seconds, but I didn't want to assume responsibility for doing that on demand for the rest of my life.)
The sad thing is that I got no credit for the time saved. I instead got grief for not being instantly helpful. I wasted someone else's time, because I didn't anticipate the need, so that SumatraPDF and Paint.NET or GIMP would be installed on their computer already. I wasted someone else's time because I didn't drop what I was doing immediately, so that they wouldn't have to wait for me to finish eating, or, horror of horrors, actually spend a few minutes to try to figure it out on their own.
That's the problem. The whole party complains, "Why didn't you just call on the Eagles again, Gandalf? We could have been done in three days!" And then when Radagast explains about the dearth of giant fish in the magical appropriations budget, no one listens to a word he says.
The people with control of the money don't quite seem to grasp that software is yet another product, among many, where you get what you pay for. No matter how magical it may seem, you have to put more money into it to get more value out of it. People get "stuck" at senior because too many companies have determined that threshold is as much software talent as they need, and that paying for more would be wasteful.
1) does not understand the time value of money 2) does not care about the time value of money
There is no value placed on the reduction of future expenses- for example, not needing to train another new guy when a senior person leaves, or having a simpler, more reasonable codebase that is harder to introduce bugs into.
I think this is because people (both minions and management) switch teams or jobs too quickly for these savings to become apparent, and therefore there is zero incentive to do things right. It's monkey-patch some crap together, keep it running at the absolute bare minimum, and get promoted and someone else has to deal with the problem.
His answer to how to move ahead financially is to specialize. So maybe that is the general advice is to find something to specialize in or you are just seen as a commodity by management. If you are a commodity (e.g. general web developer with X years) then you may not get higher rates.
I disagree with the idea that moving to a management position means that you get "unstuck", especially financially. To me, becoming a manager is pivoting or branching out, not specializing. And as I stated, a manager should not necessarily make more money than the people they manage.
Do all NFL coaches make more money than their players?
I guess this is what bothers me the most. This idea that a manager should make more money than the developers. Salaries are in function of demand/supply and the value that you bring to the table, if it's easier to find a manager than a developer then the developer should make more money.
There are typically only a handful of people with relevant expertise trading [XYZ esoteric product], and when a company wants to enter that new business line, they have no choice but to settle for someone inexperienced or pay up for specialization.
Choosing the proper specialization is a different story...
It's certainly opened my eyes; I'm very much a generalist, but I can see how, to get beyond a certain point, you need to specialize in something where quality really matters over quantity; you want to be able to provide value that two lower-paid people with twice the amount of time can't.
Security sounds like a great specialization, for example: a single great security expert can save a companies hide (which may be worth millions) in ways two average programmers won't.
UI/visual design sounds like another case where that's true. Look at Jon Ive. Having the product look better can mean you reach more people, which amplifies revenue.
I'm sure there are other valuable specialization areas where your expertise can multiply across a large organization.
In fact, one of the things about security is that the benefit is completely constrained by how much you could possibly lose. You can't really create unbounded through security the same way you can through development. And in most scenarios where you are tasked with doing preventative work, it is hard to prove that you're really delivering value when breaches don't happen, or even if they do. The recent industry shift towards detection & response resolves this a bit since you can show all the things you have found on your network. But it's hard to use these metrics correctly (is more malware found a good or a bad thing?).
I've been trying to figure out how to make myself scale as a security expert, and the answer I came to was that I needed to work on software/platforms that could kill classes of bugs at a time, but it turns out it can be very hard to turn experience into software.
You can certainly have a lot of impact on offense as an exceptional IC, as evidenced by the 6+ figure .gov market for exploits, but its less clear to me how to have a big impact on defence (I say this as someone who has never worked defence anywhere, so this might just be my inexperience)
EDIT: Employers also hire for 'tech stack' specialization, even though it's usually not necessary. For example, I'm only really recruited because I have demonstrate-able Rails expertise. In reality, I've also worked in Node.js and Java environments, and I'm pretty much just as productive after a few weeks.
To a new employer, the fact that he "made it through a Google interview" honestly doesn't mean much. Even Google interviews are wildly variable, and more importantly it doesn't in any way indicate that the candidate is a good match for whatever job he/she is interviewing for.
Talking about products and designs he had worked on in the past, at a technical level, though, is crucially important, and the author also pointed out they failed to do that (or at least I think he did?)
Anyway, getting a job at "one of the big employers" honestly doesn't mean much - there are plenty of people that get rejected that probably deserved a hire, and plenty of of people that get hired that aren't up to par. What matters more is what the candidate did while he was there.
It's sort of funny that he points out how broken interviewing & hiring is, but then also says that because he got hired by Google, he should be treated differently.
Still a really interesting article, though, and I think his points about specializing are quite valid. Reminds me of this post, which is worth the read: http://alexgivesup.com/2013/12/23/i-got-fired-last-week-that...
Wow that is so spot on, as a "generic" programmer asking $150K versus a "generic" programmer asking $75K ? Easy choice, we'll get two and double our productivity and halve the sick days! I noted that in the medical profession "General Practitioners" made the least, while specialists made the most. They were all doctors.
Specialist software categories:
Embedded Software - bringing up code without an OS, understanding hardware function and tools.
Graphics Programmer - these days understanding 3D programming with Shaders and other features common in todays GPUs
Kernel programmer - understanding the insides of the kernel and how to write code that works there.
Networking software - understanding all of the intricacies of how packets get from point A to point B, and what interferes with that and what facilitates that.
Security specialist - someone who understands what makes programs and systems break and can program fixes for them or ways to spot attempts at exploiting them.
Storage specialist - someone who understands file systems and disk drives and getting data to and from programs reliably.
Data Analysis
Distributed Computing
High Performance Computing
Modelling and Simulation
Artificial Intelligence
[1] https://www.google.com/about/careers/search#!t=jo&jid=34154
Seriously, FTE is considered "the" way to fo by far too many people. Is it really that hard to manage your own health insurance plan and deduct taxes?
No, but it's hard (for many) to actually find work then negotiate a price. And for certain types of problems that people want to work on, there won't be many non-employe openings. Dealing with large bodies of sensitive data, for example, would be one I'd think it'd be harder to find consultant positions - not impossible, but more difficult.
by working longer hours, i was reducing the value of my time. I was also reducing the value I provided in those hours.
So it ended up giving me more balance than working a salary job.
I'd rather make a little less at a job that has vacation benefits, than make a little more at a job where every day off comes out of my salary- because I recognize that I'm a human with certain hangups, and this is the way I can best optimize quality of life.
I am a generalist. I like being able to solve problems across a wide spectrum of fields. Working at a startup for the last three years has given me plenty of time for that. The flipside is that I have not had much opportunity to specialise. I take pride in being comfortable diving into anything. However this has meant I don't have DEEP knowledge of a specialist.
At a previous job, I was able to dig really deep on Solr and build some expertise. In the intervening years however most of that has become way outdated.
Also I've found (in an admittedly limited sample size of interviews) that jobs seeking "full stack" developers tend to really be seeking someone to fulfill a specialised role but ALSO be comfortable moving up and down the stack as the need arises.
So obviously in my next job I've been looking for more established organizations where my opportunity to specialise in something I enjoy is greater. I think I've found one and am quite excited about it.
It's also not that you know many things, it's that you can learn other things easily and quickly. (without training)
The hard part is finding the right place to work at. Many large corporations are looking for a square peg for a square hole.
He does complain about the whiteboarding during interviews, and would prefer to be taken at his word about his past experience. As an older engineer (much older than the author, I might add), I can understand the feeling; however, in my years of experience, I have seen too many people coast on their former laurels and contribute, basically, nothing to the day-to-day business of the company. They can talk a mean talk, but never deliver anything of value. They sure are quick to jump on a hot idea once it's proven out and take credit, though!
So is whiteboarding the best way to higher people? I don't know; but I think it is a good way to keep the slackers _out_.
Some of the best and most brilliant programmers I've ever met were horrible at writing code on a whiteboard.
To pass my whiteboarding interview, I needed first to review data structures and algorithms. It had been a while, so I went back to the textbook and got to the point where I could write mergesort, quicksort, dfs, and bfs, as well as do various permutations of sets (the sort of thing that you draw on when they ask you, for instance, to print all arrangements of a string), and could do this instantly (not by rote, through understanding, but "memorized" in the sense that I didn't have to reason through it, I could just write them on a whiteboard). Once I had that solid, I bought a copy of "Cracking the Coding Interview" and started working through the exercises. My goal wasn't to memorize, but to get to the point where I could answer medium to difficult level questions accurately on paper or whiteboard (no typing, no compiler) in 45 minutes or less.
I was unable to get to that point in the time I had to prepare. I should have asked for more time - I scheduled my interview for 3.5 weeks away, and I did devote a substantial amount of time to study. However, I lack the ability to get up to speed in that amount of time. You really do need to be razor-sharp at the whiteboard, and I just wasn't there. My guess is that I could get there in 3-6 months, studying about 15-20 hours a week. Others may not find this as difficult.
There was also a point in my life when I could probably have done this more easily. I have two kids, I'm married, I have a full time job, and there are a lot of demands on my time. It's far more difficult for me to shake 15-20 hours loose a week than it used to be.
Honestly, I do think that the ability and willingness to prepare for and pass an exam like this probably is a very strong indicator of success in the kind of environment where these developers will be working. In short, the constraints on my life and my own personal limitations that make it difficult for me to pass this exam would probably have reduced my value to an employer. They either need someone with more talent and an ability to get into this sort of form on shorter notice, or someone with more time who is willing to spend it on this sort of thing. I'm not happy about it, but there you go.
My broken record: companies are generally free to do as they please (within the limits of anti-discirmination laws, and so forth), but they should stop talking about a shortage of developers if this is how they wish to hire.
Generally, if the interviewer relies on other cues _along_ with whiteboarding (like working on the problem with the interviewee in a collaborative manner), then it can be a decent signal.
There are lots of 3D graphics professionals working on video games, which is a notoriously over-worked, under-paid field. To hire 3D graphics professionals:
1. go to a video game hub, like Montreal
2. offer sane working hours
3. there is no step 3.
Notice the complete lack of any mention of salary.
There seems to be a ripe opportunity to make something similar to Amazon RDS, except with automatic scaling. The current version of RDS presents the user with different instance sizes and doesn't automatically scale during high CPU loads.
Oh... irony?
I haven't read "Career Superpowers, but it sounds like Whitaker did almost all of these things - moved between Google/Apple, became a nationally recognized authority, specialized, added a revenue stream (book), and got promoted to VP.
In the end, your salary is roughly proportional to the number of people you impact. Management is an obvious path, since you directly control a group of people. But senior engineers can give technical direction and influence a lot of more junior engineers without having to be formally their boss. Also known as the technical track at companies such as Intel (principal engineer -> fellow).
"I'm teaching myself 3D graphics"
There's more than a hint here. It's not hard to hire competent people and then give them space to grow. As engineers, that is what we want, to grow, challenge yourselves. And it is the only way that experience occurs. If you as a company are not willing to invest in that, don't be surprised when people don't walk in your door and agree to do exactly the same things they've done 5x already, with no opportunity for growth.
I'll take a job that offers great opportunity and a mediocre salary any day. The vice versa not so much.
Consider specialization in say Expert Systems, you get to learn immense amounts about each domain which you are developing expert systems for, but I can understand employers wanting you to have a firm base in expert systems before hiring for you such a job.
The same can be said for 3D graphics, real time simulation software, and most other types of programming you could specialize. Just because you know everything there is to know about making realistic vehicles with 3D graphics does not mean there isn't plenty for you to learn about making realistic 3D dinosaurs and the nuances necessary to make them look amazing. You may not always be given tasks that require you to learn and develop new skills, but if you actually care about challenging yourself and learning you can generally find a way to incorporate challenges and learning new things into your job. You just have to be willing to put in the initiative to avoid forcing problems to be solved with the solutions familiar to you, and put in initiative to try new things learning enough about them to be able to advocate for their use when necessary.
TLDR: Just because the job doesn't force you to learn and be challenged, doesn't mean someone who wants to can't learn and challenge themselves on the job.
There is another option; grossly unpopular, but I have to lay it out: make a career in startups. You'll eventually land with one or two that work out very well. That may not increase your yearly salary, but it increases your overall payout over a decade, because you'll get a windfall or two.
How? As you keep working for startups, some will fail and some will succeed, in different ways. Eventually, you'll learn how to recognize the more promising ones. Are there any guarantees? No. But there are no guarantees in any path.
(Link to my bit more detailed answer on Quora: http://www.quora.com/How-can-I-increase-my-income-as-a-softw...)
[About me: Software Engineer by education and trade. Been in the valley for several years. Early employee at Box, left last year as their Director of Engineering. Now run http://InterviewKickstart.com. We've trained a lot of people on how to prepare for technical interviews, the right way, the no-shortcuts way]
From a company's point of view, it's legit to not offer high salary for individuals with generic skills and experiences. They can always hire 2 at the cost 1 engineer. Then pay thru slower productivity, buggy software, inefficient architecture and so on.
This is clearly true for the author, he can specialize on 3d graphics after 3y web+mobile dev at Google and 3y in a startup, but the assumption that one could start specializing in 3d graphics from 0 imo is wrong.
All great painters were highly specialized, but all of them mastered the "general skills" in painting before taking their art to another level.
No special education (except for the general interest in finance and some math — easier than in computer graphics) is needed, and salaries are quite attractive.
The downside is zero work-life balance and huge stress levels, but everything has its price.