Engineers suck at finding the right jobs
matt.aimonetti.net
matt.aimonetti.net
Early in my career Steve Bourne gave me useful advice, he said the difference between junior engineers and senior engineers was that senior engineers had an agenda. More specifically they had an execution goal (like write a new file system, or create a product that solves problem 'X') and they worked toward it.
This is a both a hugely motivating and hugely scary thing, its motivating because you don't have to ask "what do I do now?" the direction just falls out of where you are vs where you are trying to go. It is scary because you can find you're goal isn't compatible with any of the company's goals. When you discover that what you want to do can't be done at the company you are working at, you either have to change goals or leave. But its not a 'feel bad about it' leaving it is 'hmm, this isn't going to work out here so lets go somewhere that it could'.
The alternative to having an agenda is "Goofing off and waiting for someone to give you a task." There are a lot of engineers who operate in that mode, do their assigned tasks at an acceptable quality level and without too much schedule slip. They are great to have around because people with agendas and use them to move the agenda forward, but they don't make for very good 'senior' people because they really don't care what they work on, its not their main focus.
It is important to note that you can't "fail" if you're just goofing off, as one of my kids put it, "It isn't procrastination if you don't have anything you need to do." You can however rationalize your low work output by the fact that your management really hasn't given you all that much to do, so whose fault is that? Whereas if you have an agenda, a goal, a destination, you can fail to make it to that destination. "You said you were going to build a game that could crush Farmville, you failed." Reading the blog post from Speck about Glitch shutting down, "we failed to develop an audience." They had a goal, they didn't get there.
Matt's advice that if you don't know what you want, you can't choose reasonably is solid. Start by deciding what you want to do, and pick something that will take a while as early goal achievement has its own problems.
You have the goof-offs that you described who have (b) but not (a), and the self-executive types who have (a) but not (b). The people who seem to have (a) and (b) just have different career agendas. They want to entrench themselves and gain social power. Often, they're psychopaths. They're a lot more ruinous to companies than the outspoken and self-executive types that dinosaurs call "prima donnas".
I was recently pointed towards Principles[1] by Ray Dalio by someone here on HN, and I highly recommend it. He talks about getting what you want out of life, and how that starts by figuring out what you want. He then lays out a process to get you there. If you're thinking about your career path, give it a read. It's long, and somewhat tedious prose, but it provided me a lot of insight as I'm figuring out what I want to do post-graduation.
[1]http://www.bwater.com/Uploads/FileManager/Principles/Bridgew...
Personally I wouldn't feel right with a title including "senior" until I've got at least 10y experience, generated millions in revenue and lead a team of >10. And I'd still prefer not having a title. Unless the only way to increase a salary is by taking the title, which seems to be the problem.
The long answer is maturity. Then the author goes to explain what maturity brings to the discipline of software engineering.
Where do I begin?
- Drilling down multiple levels for greater understanding. Being the "anti-poser" by knowing what's really going on under the hood. Sharing this insight with others. Amazing what a difference maker this often is.
- Subject matter expertise. Can you stay two steps ahead of your customers by getting behind their eyes and seeing what they need before they do?
- Continuous improvement. (I know, a B.S. term if there ever was one, but it's true...): "Good enough" is never good enough any more. Get better or someone will eventually eat your lunch.
- Communication skills. We all suck at them so much that this is often a bigger speedbump than technical shortcomings. We have much to learn from ants.
- Vision. Another nebulous term, but one that often makes a difference between arithmetric and geometric growth.
- Determining priorities. (Are we really working on the best thing?)
I can go on and on, but you kinda get the idea.
Thank you, this is a good set of points.
To many times have I seen mediocre programmers negotiating themselves into a BIG title simple because the employer didn't want to give that person a pay rise (titles are free you see). Once they get the title, they sit on sit for a few months and then they fuck off to work for another company. This way they keep their title AND get a pay rise and all while being mediocre.
That's the only reason I am using senior in title. Because I do not agree that all 20-something devs bring same value to the team.
I know several hundred Vice Presidents at JP Morgan Chase.
And really, if your business card tells me that you're a Programmer/Analyst 3, then you're either doing something wrong, or you're a robot, and you probably work between Programmer/Analysts 2 and 4.
> Here is a great article on what it means to be a Senior engineer: http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engi...
> The long answer is maturity. Then the author goes to explain what maturity brings to the discipline of software engineering.
Either way, that article really made me re-consider the 'Senior' in front of my title. Very well written.
When I was first starting out, I was the first hire under the "Director of Software Engineering". He was the only one in his department for over 3 years. The company had only a handful of people. Shortly thereafter I found just how bad the situation was. After 3 years for what was essentially an enterprise data entry application there was not one production line of code written, but he had a great title! I had a painful experience working there, but I'm better because of it.
I've never cared much for titles though. They seem pretty meaningless to me.
Some ideas, possibly an answer: http://michaelochurch.wordpress.com/2012/01/26/the-trajector...
What companies tend to call "Senior" is usually around 1.4-1.6 in terms of responsibility. That said, most companies don't give you 1.4-level work until you're 1.7-1.8 in ability.
"Senior" is a title inflation at this point. I wouldn't join a startup (or any company for less than 0.9 times what I can make in finance) for less than a VP-level title, even though I'd be perfectly happy to code full-time and have no reports.
Intern
Software Engineer
Senior Software Engineer
Staff Engineer
Senior Staff Engineer
Principal Engineer
Distinguished Engineer
Fellow
All of a sudden, "senior" doesn't feel very far up the totem pole.CEO
President
Vice President of ___
Director of ____ _____
Coordinator of ____ and _____
SDE intern SDE Sr. SDE Principal Engineer Sr. Pr. Eng. Distinguished Engineer (VP level, ex: Peter Vosshall)
So it's more like 'stockholder', in that it's a title of objective value: this person owns a portion of the firm.
I sometimes suspect that software engineers should operate more like lawyers, in that firms don't generally hire lawyers internally.
It looks, as in the government, the VP is merely there if something happens to the President, instead of being an important position with a well defined set of tasks.
Director looks a better title
In banks, it's different. VP is a middling level and not necessarily managerial, while Managing Director is usually the highest.
I think the idea is that VP is equivalent to VP in a regular company, while MD is comparable to a C-level title, but because banks can't have as many C*O's as they have Managing Directors, they use a different title. Whether the rest of the world agrees with the banks on this title-equivalence is open for debate.
I heard one of my PMs say that "Senior SWE" at Google is roughly equivalent to "Director" at Oracle (which also suffers from massive title inflation). He was, I think, the youngest Director at Oracle before he came to Google (he got that title when he was 27).
TLing is a completely different skillset from engineering anyway - it's much more interrupt-driven, people-focused, and basically involves being a mentor, teacher, and shit umbrella. When I've TLed projects, I usually find myself spending about 30% of my time coding and 70% communicating with other departments, debugging obscure bugs, managing up, and making sure all the critical parts are covered. Coworkers that are staff+ and TL larger projects usually find it's 0% coding and 100% dealing with politics & coordination.
That's scary.
One thing I'm finding is that it's really hard to get into a position where you can function at a 1.5+ level. Most companies want reliable mediocrity, not excellence. The reason there are so few 1.5+ engineers is that there's so little 1.5+ work out there. I think that if a few companies had the balls to man up and go to open allocation, we'd see a dramatically higher level of software talent in a few years.
I am sure you could fish up some great job opportunities for anyone who writes you a nice e-mail. But is your own job the job you want from your career?
I mean, being tech lead on a big company is nice and all. But the company is just a coupon distributor, I'm not saying that I work for the sexiest startup in the world, but I'm just saying that 'up' is not always the most satisfactory trajectory for a career.
I don't think I'd be happy for long at a company like LivingSocial, unless you guys are hiding something behind there that makes it a very nice place to work at?
The technology industry has created a vibrant technical recruiting industry that feeds off of it, and it is often an unhealthy relationship. The recruiter (especially contingency recruiter) has a huge financial reward if he/she can convince the engineer to take the job, regardless of whether it is a good career move - the recruiter generally is paid as long as you stay 90 days. The size of the reward in addition to the competitive nature of the business creates some incentives that lead to trust and ethic issues. It is this problem that inspired my article http://jobtipsforgeeks.com/2012/09/17/disrupt/
If you are dealing with a recruiter that talks about the job he/she is trying to fill before asking you about what YOU are looking for in a job, you are probably not talking to someone that is trying to help you make a good career move.
I don't agree with this statement at all, as it's getting harder and harder to find low-level work (e.g., C and *asm) and that's the __only__ kind of programming that I enjoy doing.
I'll start looking for another career when I have to consider putting words like ``full-stack'' or ``cloud'' on my resume in order to find work.
I have in the past. The problem is that I have a BS in Computer Science and most hardware companies hire only Computer Engineers for low-level programming work (among other things).
25
> Do you have the possibility of going back to school?
Yes, I do, but I don't think I'd be able to handle it, especially with a wife and a full-time job. Read more here: http://news.ycombinator.com/item?id=4702350
At least where I went to school they had family student housing for grad students who were married. Going to grad school would likely involve you taking a student loan, but then you'd be able to make more money afterwards.
Keep in mind that while you're under 30 (and assuming you don't yet have kids and a mortgage) you have a lot more room and leeway to take risks than later in life. Don't lock yourself into misery too early in life. :)
I have a computer engineering degree—I will cheerfully work with anybody who can get the job done. EE, CS, physics, you name it. My experience has been that low-level skills are only weakly correlated with degree. You want the person who was writing device drivers in high school.
Is it actually common for CS grads in the states to not have covered that stuff?
Where I see a problem though, and this goes for my former employer, is that the requirements for the jobs often extend beyond just being proficient with low-level development. You say you would like to "find people who even know what a pointer is". However, I read job reqs like the ones from the company rayiner posted require "extensive" experience in some particular niche of low-level coding, in addition to low-level/real-time development in general. That makes me think its easy enough to find people that companies can afford to be picky, even if they have to wait a little while.
So, if it really is that hard to find people, why write reqs and recruit in such a way as to discourage or reject people who have some experience, but not the "right" experience?
Excellent suggestion! Can you list some examples, please?
That doesn't match with my (current job seeking) experience at all, the embedded market is really healthy at the moment. What sort of keywords are you searching on?
Where have you been looking? Are you constrained geographically?
Maryland: in and around Howard County.
> Are you constrained geographically?
Yes, as my wife and I are quite settled in our home.
Now we're talking :D
This is a problem in HR not engineering - whose sole purpose is to find good engineers, pay them well enough so that they stay, make an environment good enough to keep them happy, and put them on the right projects to maximise value.
Guess how you fix this problem? You go Valve style. The problem isn't engineers, it's HR who can't get their act together.
For a sales guy, you can say he brought in $X in revenue that led to $Y in profits, so the value he creates is visible. It's a lot more complex than that, but at least there is a theoretical basis to value his work.
I spent five years working on a non-profit web site that was used by more than 80k people a day. We estimated the site produced $250M a year in value for end users. We also had no real plan for capturing that value or funding it so there wasn't a pie I could claim a piece of at all, just what they said they could pay me.
I've worked at a number of places where the model was spend $X to develop something with Y developers over Z months and maybe we can sell it. These often are fun jobs. This includes a lot of Y Combinator kind of companies but also stodgy companies you'll find in midwestern towns.
I think the median project of this type either (i) doesn't ship a product in the end or (ii) gets revenue that is a small fraction of $X. Again, there's no pie to split.
This of course begs the question. Does working on a project like Colors make you a negative net productivity programmer whatever you do?
I guess in theory a place like this could pay you heavily in equity or bonuses, but with the odds of getting no payout that's really not fair if you have to develop your skills, be highly responsible in so many ways and maybe even support a family.
The companies where the revenue is more obvious are job shops, but these tend to be horrible places to work. Of 5 that I had some involvement with, 4 of them were outright failing businesses because the business plan made no sense or they spent 12 years building web sites with an obscure language that is now eol. The last one is profitable and growing but they had no benefits, low base pay, but they might pay a bonus into your 401k at the end of the year based on "the value of your contributions to the company." Well, the principles of the company never got tried of yakking about the high value of the sales work they do so you know who is #1 and #2 when bonus time comes around at the end of the year.
So in all my years as a pro programmer, I can say I only worked for three months at a place where my work had a clear connection to revenue it was creating and compensation wise it was the worst job I've ever had.
It's very hard to understand what opportunities exist for YOU specifically in the employment market. Seeking out potential jobs is laborious and you can't take the time to talk to every recruiter that calls.
What would be better is if you had a good way to safely broadcast what is interesting to you professionally and indicate the types of opportunities you'd like to hear more about. Safely is the key word here. The system breaks down if it puts your current gig at risk.
Check out http://www.mightyspring.com.
We're working on solving this exact problem. Our goal is to help people stay on top of the employment market and be made aware when a really special opportunity presents itself.
So, if I'm a 'rockstar', its a big hurdle to separate the reality from the marketing pitch of the magic job. What can be used as a signal for filtering good quality jobs from the less desired ones? It's surely not money, because plenty of big companies will pay you ample to make good power points.
I think a startup that can figure out the right mix of signals to indicate the job quality, which may be a combination of challenging problems, team, work-environment will really hit it big.
I think there should be a developer tier at 250kish (valley prices)
If you can justify that, we'll call you a rockstar.
Then we'll give you status to go with it in the company (as you're making more than your boss), sort of how external consultants often get that and get to recommend TONS more stuff than line engineers do.
If a position says rockstar, and doesn't pay a quarter mil, we pan you on the web as lying about needing a really highly paid, super highly skilled position.
It would be nice to get a crowd sourced mechanism that involves employees / ex-employees / vendors who could provide a well rounded view on what is the job really like, and not just some marketing spiel from hiring manager
That works. Give them titles that go with that. "Chair of Computing", "Cross department head of ___" etc, "Technical Architect".
Don't ask for developers if you want people on the 4-5 sigma of ability. Ask for high status positions. Give them board seats. etc.
From the perspective of maximizing compensation, you don't necessarily want to find the jobs that create the most value. You want to find the jobs that create enough value to sustain big salaries, but also where there is a real or perceived incremental advantage to having smarter developers than other people, and where that advantage is perceived and appreciated at the management level.
I get it, it's just idle carping in an HN post but really, it's not a curse.
So pardon me for agreeing with parent that the post sounds like it was written by somebody having a hard time finding good candidates.
Out of curiosity: are there any developers in the Santa Monica office, or is it just sales? I'm in the same building.
That's great. I had the opposite. For some reason my dad was convinced computer programming was on the decline and was 100% against me going into computer science. I did engineering instead of CS and later regretted it. Going back to get my MCS now.
He's a pretty decent guy for the most part, and I believe him when he says he wants to help.
Whether it's a good or bad thing, a writer's reputation (which is often based directly on past actions) does impact how people understand his or her work.
My opinion is that it's important to know such information when reading an article, regardless of whether it can be taken in a positive, neutral, or negative light. It does help the reader get a deeper comprehension of the article's message, and where the writer is coming from.
I'm a .NET developer, and am considering changing to Rails, just to see if that opens up better/different opportunities. But that's a big time investment for me -- having a family leaves me with little time as it is -- and I'm not even sure that will leave me much better off than I am now.
I really could use some direction, but have not been able to nail down a way to find direction. Matt, I may take you up on your offer.
I would also welcome and general thoughts from the HN community.
Obvious answer: A good technical problem can be fun, while such real life things are just tedious and stressful, so you avoid thinking about them.
Great phrase.
http://www.quora.com/Software-Development-Methodologies/What...
Personally, I think it's the only long-term solution to this bilateral matching problem: engineers can't find good work, employers can't find good engineers. The problem is that most software engineers are indeed unskilled (and therefore few companies are willing to start interesting projects that might make use of skill) because high-quality work is so rare. It's a vicious cycle and open-allocation is the only way I can see of breaking it.
If they're intrinsically motivated, engineers are worth millions per year. If companies left them alone and were able to capture even 10% of their true potential, they'd do better than any closed-allocation shop.
There's an indirection that occurs whereby engineers apply to companies-- not specific projects or work sets-- and (until they've been at the company for a while and can change jobs without embarrassment) relinquish their right to choose what they work on. (A certain once-great search giant is notorious for abusing opacity.) They have no control over how they start in the company, and if they're not especially socially skilled, this will determine what kinds of projects and opportunities they get in the future. This indirection gives a lot of power to middle managers, who don't have the vision or inclination to design and allocate work in a way that would enable engineers to have real careers and improvement, and the result is an industry where stagnation, burnout, and middle-age obsolescence are the norm.
One of the misconceptions about open allocation is that it's a "free-for-all". It's not. It's more like an applied research environment where people are free agents to some degree, but still are expected to follow-- to contribute to something sanctioned-- if they aren't ready to lead yet. Open allocation companies still fire people, but it's very rare, because "intrinsic low performers" (as opposed to people who lose motivation due to dysfunctional environments) also turn out to be very rare.
Open allocation doesn't mean, "You show up and do whatever you want." It means, "We expect you to contribute to the business but it's your right to choose how you do so."
My problem with traditional management is that old-style managers aren't really the leaders that the workers themselves would select, but puppet leaders, chosen from above. Also, when companies give managers the right to unilaterally fire people, or to damage their transfer packets through a globally-visible performance review system, they allow managers to turn into extortionists who force people into subordinating to the manager's career goals rather than doing what's best for the employee or the company. Since middle managers also get a lot of pressure from above in these sorts of companies, that's usually exactly what they become, not because they want to be extortionists but because their feet are to the fire as well.
I think that "management" as a cultural institution is archaic. Leadership, communication, and mentorship skills will always be in high demand, but that's not what a manager is. A manager, from the term's roots, is someone hired by an owner of recourses (capital) to maximally exploit them. People often get angry with their bosses when the manager ignores their career goals, but they shouldn't, because that manager is just doing his job. He works for the company, not the employee.
Managed environments lead to localism, by which I mean the extreme trust (e.g. the right to unilaterally fire people) placed in managers allow an environment where the manager's stated goals (which are often neither aligned with the corporate objective or the employee's needs, but the manager's career objectives) take priority. You have lots of indirection and wasted effort and, usually, morale problems as a result.
Open allocation, on the other hand, trusts people to work directly for the company. There are still leaders and followers, but the employees are implicitly trusted in deciding whom to follow.