Accept that software is not a meritocracy. Not even close. The politics are as vicious as in any other industry. You want to know why that idiot is calling technical shots while you're downwind of the complexity that he imposes? Because he played the game, and you didn't.
Now, the good news is that most software companies are running at about 5% efficiency. Most of the code they have exists to serve dipshit requirements that aren't necessary and make no sense. It's junk complexity that no one would miss if it were gone. Why is this relevant? Because if you're putting 8 hours per day into order-following grunt work, you're an idiot. Do that, and of course you'll have no time to work on interesting stuff. The way you get a better job is to spend at least half your day learning the skills that you'll need to get where you want to go.
Treat it as an optimization problem. You want not to get fired. That's one constraint, but not a tight one because a lot of people keep their jobs for years while doing very little. Your objective: you want a better job in a year. Are you going to get a better job within the same company, doing more interesting work? Or are you going to leave for an external promotion as soon as it's viable? No one is going to know if you put side-project accomplishments on your resume, so you should.
Most people only "look for work" when they're in shitty situations. The rest of the time, they either (a) coast, or (b) put their all into their assigned work because they "really believe in the company". Both of these extremes are ridiculous. Always keep an eye open for something better, and start your search process when things are going well, not when they've gone to shit, politics have turned against you-- note, 95% of firings are about politics, not "performance"; that's an attempt to use middle-class guilt to prevent a fired employee from seeking legal recourse-- and you've lost your confidence.
You need to be selfish, because no one will look out for your advancement. Treat well the people who treat you well. Find ways to read machine learning books at work. (Don't open a book at your desk; that's political suicide. Get an e-reader or PDF.) One thing: don't write any code that you care about owning using company resources or "working time". If you want to turn a side project into something salable, get up at 5:00 or dedicate your weekends. It's not worth the risk.
So yes, the disgusting truth is that 90% of the work you'll be assigned will actually hurt your career. This is why, in most jobs, you should be putting just enough into your assigned work to get by, and using the surplus for your own advancement.
By the way, most of the work going on in the corporate "big guys" is junk as well. Yes, there are people at Google and Amazon who get to work on cutting-edge machine learning algorithms, but most people at those companies don't, you'll almost certainly not get such work in your first year, and the politics you have to navigate to get onto those projects will disgust you and, if you succeed, make you a worse person.
One solution would be only to work at open-allocation companies like Valve, but in 2012 there aren't that many of those yet. There will be more in the future, as they outshine the closed-allocation dinosaurs and starve them of talent, but that will probably take 10-20 years.
For the mean time, you have to learn to fight. One of the problems with most career advice sites is that they give AFC advice instead of teaching Game. The people who get to work on the good projects are those who figure out how to control the division of labor. They found a way to make people trust them "prematurely" and gained enough influence over the division of labor to have a niche. It's not a trivial thing to do. You'll have to go far out of your comfort zone, learn some social skills you might have been weak in, and it will take years. Right now, though, I don't see any other option.
> software is not a meritocracy [...] The politics are vicious [...] why that idiot is calling technical shots [...]? Because he played the game, and you didn't.
Dilbert-style ass-licking and treachery is one way to play the game; being indispensable because you solve unsolvable problems is another. It is, by definition, the hacker's way.
It's tricky indeed because it requires a healthy dose of insubordination. A healthy company is a company which can be operated by real, i.e. mostly average, people. Big companies are optimized not to depend on individual genius, although they sometimes pathetically pretend the opposite. If you want to impose your better but non-standard solutions, you'll have to build them stealthy, them shove them down the middle management's throat when they painted themselves in a corner with the standard ones. Your way _might_ solve the problem, and it _will_ get you disliked by anal-retentive and insecure managers; move away from them, or make sure that you become indispensable faster than you become irritating to them. If you pull it off, they'll help you move away from them anyway.
"being indispensable because you solve unsolvable problems is another. It is, by definition, the hacker's way."
Those problems are 'near' insolvable often because clueless people were in charge making decisions they shouldn't have been allowed to make. By rescuing orgs like that, you run the real risk of being relegated to perpetual clean up guy, and you bolster the decisions.
Rough example: System X was built so badly because of bad directives, that it's taking 3 hours for a report, and you need 10 reports per day, but you can only do 8 (8x3=24 hours). Every current employee and 2 outside consultants all say "this can't be fixed", not because it can not under any circumstance be fixed, but the cost/benefit doesn't even come close - it's a crappy bandage at best.
You, being "indispensable super dev" work overtime for 3 weeks to 'fix' things, and reports are now 15 minutes (like they should have been). Great - you just 'solved the unsolvable'. Whoop. You've perpetuated the bad decision making process, and it will be months or years before there can be real change in the org now.
Being 'indispensable' also usually means you're tied to crap projects and will never get moved out of that department/division in an upward capacity - you'll have to quit that company to get any real advancement.
> By rescuing orgs like that, you run the real risk of being relegated to perpetual clean up guy
You're right, it's a serious risk and you have to address it. Again, being a good, "straight A student" who does what he's told when and where he's told will harm you. You have to know to be bad at what you don't want to do, and at doing stuff a way you consider broken. There's a delicate balance to find between being recognized as valuable, remaining manageable, and not being threaded on. You need to be bad enough that people will try to avoid giving you that sort of shlep in the future, but it must not come off as insulting, and it must not be mistaken for incompetence.
The key point to keep in mind that dumb submission might save you a lot of flak, but will get you neither consideration from anyone, nor better work conditions. Know when to break the rules, and how much breaking you can get away with. You can't hack software in a company if you can't hack the company itself.
"being indispensable because you solve unsolvable problems is another."
More likely, in most non-technical companies, indispensable IT people are good people to replace at the earliest opportunity because they are "non-core" and could become problematic later. Non-technical companies want good, replaceable cogs using technology that are supported by many consulting companies.
Dilbert-style ass-licking and treachery is one way to play the game
That's not what I'm advocating. You can get ahead without being sycophantic and treacherous, but you also need to know that other people will be, and you need to do whatever it takes to get enough credibility to defend yourself.
Acquire credibility. This doesn't mean "kiss ass" or "screw the other guy". That shit blows up as often as it works. It means that your job, when you start a new job, is to figure out what makes some people credible and others not, and either (a) to do what is required to be in the first set, or (b) to leave. I prefer option (b) over being slimy and sycophantic.
being indispensable because you solve unsolvable problems is another.
No one is indispensable. No one. Never forget that. I've seen companies fire their best people, losing millions of dollars, over inane political bullshit. Ego trumps money, which is just one way of keeping score to most people. Some people are more painful to part with than others, but there is no such thing as an irreplaceable employee.
> [being sycophantic and treacherous] is not what I'm advocating.
Indeed; I was just outlining a third option, between dumb submission and preparedness for job hopping.
> No one is indispensable. No one.
Replace "being indispensable" with "being perceived by your hierarchy as indispensable". Which, as you outline, can be two very different things, usually to the detriment of the delusional company.
I used to think this was applicable for tech jobs at non-tech companies (of which I've had two thus far), but now that I'm at job #3, a software engineer at a tech company, I think it's universal.
It's absolutely right that no one will look out for your career other than you, because it's no one else's job to help you advance. It's completely politics - not that it has to be cut-throat, but you have to own your own work destiny.
Of course, not wanting to advance is fine. Many of the techies-turned-managers I've worked for hated the advancement because it removed them from the actual tech. A few even made "lateral" moves to get back to the tech. Likewise, many of the engineers I've worked with are perfectly happy writing code, and just want a merit increase annually.
Someone once told me "dress for the job you want, not the one you have." It's basically that. If you want a better job, do your current job better. It will get noticed, and that's how you advance.
> If you want a better job, do your current job better. It will get noticed, and that's how you advance.
This has not been my experience. If it were true, I'd be the lead architect. I think politics are more important. It's not simply good enough to do your job well - you have to make sure everyone sees you doing your job well. In fact, you don't even need to do your job well to get ahead, you just have to step out a few critical times and make sure people see you doing a good thing. Hoping that you get noticed is, in my experience, the worst advice you can give.
Of course, not wanting to advance is fine. Many of the techies-turned-managers I've worked for hated the advancement because it removed them from the actual tech.
Advancement doesn't require becoming a manager. (If it does, in your company, then change companies yesterday.) It means working on more interesting, higher-impact projects.
Most engineers that I know only become managers because there is no other way to control the division of labor and get quality work. (Of course, in reality, managers don't get to do the decent work either because they spend all day in meetings.)
What you really need is enough control over the division of labor to continually have high-quality projects to work on. One solution would be only to work for open-allocation companies.
Totally, and I didn't mean to suggest it is. The lateral moves I mentioned were to technical architect roles, which aren't daily coders, but also aren't management. However, that's not the path some people want to take, either.
When I interviewed for my current position, I was very upfront with the interviewers that I was not interested in any kind of management position that takes me away from coding. I let them know that if they were looking for an engineer to groom for management that they needed to look elsewhere. Coding is my passion, and I don't want anything that takes my main focus away from that. Now I'm the technical lead for multiple projects, where I do about 75% coding vs 25% other stuff, and I'm very happy at this level.
Just to back up the OP's claim for him/her: I've worked in unskilled labour, defence, engineering and finance professions, finally settling on financial software.
They're all just as packed with a shit-ton of politics as each other.
The worst thing I did was making pizzas while at college. That was asslicking and backstabbing central.
Well, I've worked in finance and the politics, while a negative, weren't any worse than in typical software companies. In fact, I think the ethics are better in finance than in these fly-by-night VC-istan concerns.
Software politics are especially nasty, because the industry tries hard to believe that it's a meritocracy, but work where there's potential for excellence is so rare that it's allocated as a political favor. Most software engineers are assigned work that hurts their career, and have to figure out how to navigate this. The winning strategy seems to be to sneak away time and resources to learn what you really want, while creating the appearance of full dedication to the assigned work. It feels dirty and it takes a while before people are comfortable with it because, hey, everyone does it.
The best way to understand closed-allocation software politics is to watch a film about an unrelated industry: Glengarry Glenn Ross. The characters are sleazy salesmen in the 1980s, but it's really about Work and, specifically, the emasculating state of affairs that exists when high-quality work (the Glengarry leads) is inaccessible or allocated politically, leaving the rest to fail (with low quality work) in a game that looks like a meritocracy. When the film opens, you're led to believe that they're losers. They're being yelled at by their boss's friend (played by Alec Baldwin) in a performance that's truly epic. What becomes clear toward the end is that they are talented (if scummy) salesman, who have been set up to fail, because the leads given to them actually are useless. (One is a nutty old couple with no financial resources; they "just like talking to salesmen.") That's like software. The industry turns people into mediocrities and failures, but that's because the no-vision morons who call the shots at the tops of these companies are only giving them low-quality work, and they stop learning.
As a full commission sales person for a large part of my life, in my view they were crappy salespeople. In sales you quickly learn to get your own leads. I have never seen a company supplied lead that was worth a pinch of poo.
Now, the good news is that most software companies are running at about 5% efficiency. Most of the code they have exists to serve dipshit requirements that aren't necessary and make no sense. It's junk complexity that no one would miss if it were gone. Why is this relevant? Because if you're putting 8 hours per day into order-following grunt work, you're an idiot. Do that, and of course you'll have no time to work on interesting stuff. The way you get a better job is to spend at least half your day learning the skills that you'll need to get where you want to go.
Treat it as an optimization problem. You want not to get fired. That's one constraint, but not a tight one because a lot of people keep their jobs for years while doing very little. Your objective: you want a better job in a year. Are you going to get a better job within the same company, doing more interesting work? Or are you going to leave for an external promotion as soon as it's viable? No one is going to know if you put side-project accomplishments on your resume, so you should.
Most people only "look for work" when they're in shitty situations. The rest of the time, they either (a) coast, or (b) put their all into their assigned work because they "really believe in the company". Both of these extremes are ridiculous. Always keep an eye open for something better, and start your search process when things are going well, not when they've gone to shit, politics have turned against you-- note, 95% of firings are about politics, not "performance"; that's an attempt to use middle-class guilt to prevent a fired employee from seeking legal recourse-- and you've lost your confidence.
You need to be selfish, because no one will look out for your advancement. Treat well the people who treat you well. Find ways to read machine learning books at work. (Don't open a book at your desk; that's political suicide. Get an e-reader or PDF.) One thing: don't write any code that you care about owning using company resources or "working time". If you want to turn a side project into something salable, get up at 5:00 or dedicate your weekends. It's not worth the risk.
So yes, the disgusting truth is that 90% of the work you'll be assigned will actually hurt your career. This is why, in most jobs, you should be putting just enough into your assigned work to get by, and using the surplus for your own advancement.
By the way, most of the work going on in the corporate "big guys" is junk as well. Yes, there are people at Google and Amazon who get to work on cutting-edge machine learning algorithms, but most people at those companies don't, you'll almost certainly not get such work in your first year, and the politics you have to navigate to get onto those projects will disgust you and, if you succeed, make you a worse person.
One solution would be only to work at open-allocation companies like Valve, but in 2012 there aren't that many of those yet. There will be more in the future, as they outshine the closed-allocation dinosaurs and starve them of talent, but that will probably take 10-20 years.
For the mean time, you have to learn to fight. One of the problems with most career advice sites is that they give AFC advice instead of teaching Game. The people who get to work on the good projects are those who figure out how to control the division of labor. They found a way to make people trust them "prematurely" and gained enough influence over the division of labor to have a niche. It's not a trivial thing to do. You'll have to go far out of your comfort zone, learn some social skills you might have been weak in, and it will take years. Right now, though, I don't see any other option.