If I I go there will be trouble if I stay there will be double
August 31, 2011 2:43 AM   Subscribe

Please help me decide where to go next in my career as a software developer. Warning: long and neurotic.

I've been at my first "real" job for nearly three years. I am working as a software developer at a large software company. It is a fairly secure job with good colleagues, a supportive manager, and flexible hours.

The problem is that I have been feeling pretty burned out. A big part of the burnout is that understanding how to make changes to our complex and poorly documented product takes a long time. I rarely have to do anything truly challenging; the main challenge in my work is communicating with developers and IT people until I understand how to do something simple without breaking anything. Compiling and testing take a long time, so we need to really understand what we're doing before we do it. I am more of an experimenter and am not good at asking the kinds of questions that would make me more efficient.

Some of my coworkers thrive in this environment, but it is making me anxious, lazy, and depressed. I've wasted days pursuing the wrong angle on something because I didn't ask enough questions and couldn't find reliable documentation. I procrastinate starting on projects because I feel anxious that I'll end up falling down another timewasting rabbithole of stupid mistakes and unexpected errors. I've been warned repeatedly about my inability to predict how long anything will take me. I rarely feel confident about the choices I am making for the work I am doing. My manager told me that my code was solid at my last review, but I'm aware that it's only a part of being a good worker.

I'm getting to know our product well, but I'm getting really rusty on general developer skills like design, architecture, data structures, and algorithms. I try to work on my own coding projects, but they often get neglected. I'm alternately fearful that I'll lose my job and fearful that I'll work there so long that I won't be suited for anything else. I look at our non-management senior developers and see that they either spend all day being interrupted by people with questions or work really odd hours to avoid people. I am not sure that I want to be like them in ten years.

I used to do LAMP stack and Python programming (simple stuff for a part-time job and an internship, nothing with a userbase of >10 people). I enjoyed it. I did the work and research for my master's thesis on my own, so I am capable of working independently. I am young and willing to move. I have no debt, am a workaholic when it comes to projects I like, and don't care about getting a big salary. All of that seems to point to joining some kind of small internet company or startup. For example, I would love to work for etsy or Netflix. Or a library. Or at a nonprofit doing things that are Good For The Internet.

However, I'm rusty and out of touch with what's current today. My confidence is pretty shaken; if I'm not great at a big company, why would I be any better at a smaller, higher pressure company? I look at github, stackoverflow and 37signals and feel both excited and overwhelmed by the amount of catching up I need to do.

All this is to ask: Would it be better to stick it out at my current company, or find a job with a smaller one?

If the former, how do I change my attitude? Are my fears about losing my edge legitimate? Am I just being a baby about the normal growing pains every developer goes through?

If the latter, how do I make myself more qualified for these smaller companies while holding a full time job that has very little to do with web development? If I need to work on more projects independently, would it be worth it to quit to give myself more time? I have a year's expenses saved up.

Thanks in advance for your advice. Apologies for the length and meandering nature of the question. Memail me if you want further details.
posted by sockomatic to Work & Money (13 answers total) 6 users marked this as a favorite
 
FWIW I think working at a company with a vast and poorly documented code base does qualify you to work at Etsy, etc. Etsy has written about their code base; it's a clusterfuck. Twitter has written about their codebase; it's a clusterfuck. I am tangentially familiar with Netflix' codebase; it's a clusterfuck. I don't really consider any of those to be "small" either in terms of staff numbers or code maturity.

You are in a great position to shop your resume around and go interview. You should do that.
posted by DarlingBri at 2:57 AM on August 31, 2011


Apply to startups, move, go. It sounds like the only thing you don't have that they will want is self-confidence. Realize that you do have valuable skills! Especially right now, there is a huge demand for software engineers in nyc and the valley.
posted by wooh at 3:22 AM on August 31, 2011


Best answer: I've been warned repeatedly about my inability to predict how long anything will take me.

Your development process (and therefore your manager) is at fault, not you. Predictions should be based on data, not guesses. Data comes from measurement of previous performance. Pairing, planning poker, etc. would allow you to share knowledge of the codebase among team members more effectively. Tests would give you confidence that you're not introducing bugs. Retrospectives identify problems without blaming individuals and making them depressed.

There are solutions to your problems out there, but you're not being exposed to them. My advice is to move. Lots. Jump ship every 6 or 12 months (or join a consultancy). Gain as much experience of as many development processes as possible. Try to find places where you're the most junior member of the team - those are the places where you'll learn. Code is code wherever you go but process varies wildly, and learning what works and what doesn't at the process level is far far more effective than learning another programming language.

What's not going to change is that "challenging" (by which I assume you mean the fun gnarly problems) work doesn't come along very often. It's mostly going to be drudge work, wherever and whoever you are. That's the bit they don't tell you an university, I'm afraid - most of us spend most of our time being maintenance programmers.
posted by Leon at 3:52 AM on August 31, 2011 [2 favorites]


i second what the above post is saying. Three years out of school now and I too have moved around a lot - taking up all kinds of contract works across all sizes of projects. In big companies i learnt how to cope with bureaucracy and broken development process, while in small start-ups i learn to accept that i was the most junior in the team. I'm now back in grad school. You sound like you need to get more exposures from what you're currently doing.

Don't fret too much about your ability to give a good effort estimate, that's a skill that would come with more experience. If i were you now, I'd start looking for a smaller place where everybody knows anybody else in the company on a first name basis. That would be the place that gives you a totally different exposure from what you're doing now.
posted by joewandy at 4:18 AM on August 31, 2011


Best answer: It sounds like your job is depressing you. You are tied down to the idea that there is something better for you out there, but you're not sure if you want to pursue something new because you're not sure if you're being unreasonable or not. And it sounds like this indecision is what's depressing you.

You don't have to love certain aspects of your job simply because it's the norm to love them. Don't force yourself into loving a "fairly secure job" with "good colleagues" and a decent salary especially if those things aren't really important to you. If you like pushing the boundaries, seeking out challenges, and working for a small start-up, then you should pursue those things since they are more meaningful to you.

And hey, if you decide to get a job at a start-up, and it turns out that you don't like your new job, you can always change your mind again. It's still a win-win experience because not only did you get to try something you've always wanted to try, but the experience you gain at your new job will give you a better idea of what you like in a job. This will make picking your next job even easier.

You're young. If job security and a salary aren't things you're after right now, then go and explore the world.
posted by nikkorizz at 5:18 AM on August 31, 2011


I'd definitely look at moving. I doubt you're as out of date as you think - it sounds like you are doing all the right things in terms of trying to stay abreast of what's going on. Your experience fitting things into a large and poorly documented codebase will stand you in good stead in a lot of places. It's nice to do greenfield development or to be able to fit things into beautifully modular framework, but tricky maintenance problems are going to come up in pretty much any work environment.
posted by crocomancer at 5:30 AM on August 31, 2011


Best answer: There are two kinds of developer jobs, and two kinds of developers.

Some developers like working on version 1 of new products. You're inventing it as you go along, there are a lot of design and architecture decisions to make, and there's room to experiment and try new things without disrupting life for a large number of existing users.

Other developers like maintaining and extending large, complicated software products. The overall architecture is set, and the work is a matter of refining, improving, optimizing the existing processes. (This is not in any way "easier" than the first kind of work -- if anything it's often more difficult, since you have to be able to comprehend a lot of work that predates you, written in idioms that may not be your usual taste, deal with larger datasets, use more care in testing and planning, etc etc.)


The skillsets involved in these two types of developer job are almost completely different. Being good at one type says almost nothing about whether you're good at the other. (A real and common problem for successful new software products is that all the v1 devs who made it great in the first place end up having to transition into the other type as the product matures, and either wind up unhappy or leave to start over somewhere else.)

You are clearly a version 1 type of developer, and you're not going to be happy as a version 2...n developer. Go find yourself a startup or a fledgling product in a larger company.
posted by ook at 5:46 AM on August 31, 2011 [2 favorites]


Your issue is depressingly common.

But when it was me, I concentrated on writing tools to make the gind easier, and I usually found those tools to be challenging and fun to write. - Perhaps there's scope to do that.

Sad fact is that lots of software dev in a business context is like that,

Take shit out of a database, do something with it, and put more shit back in, often using huge poorly engineered, undocumented pieces of shit.

Look to specialise perhaps. Just tossing it out there, but getting into stuff like tibco or sharepoint or dynamix, ms mvc, means you can get exposed to lots of greenfields, and see different stuff, also your focus narrows so it's easier to cope with plus you become more valuable. You're only tree years in, so yeah, start looking around, but try to make the jump strategic so you don't end up stagnating again.
posted by the noob at 5:51 AM on August 31, 2011


Best answer: My canned answer to these questions is to look at jobs in finance, ideally working at a quant hedge fund. These are technology driven companies, where all the old-school stuff like algorithms, performance, time-to-market matter, and there is meaningful bottom-line impact to the company immediately. They tend to be small, 'in the trenches' environments. There is rarely large blocks of legacy code, because the business itself needs to be reinvented every couple years as markets evolve. After years of grinding out web shit, I've never looked back.
posted by H. Roark at 9:24 AM on August 31, 2011 [1 favorite]


An open source project that you're really passionate about may fill the gap. You get to exercise the skills you care about, you're your own boss, and if it does well it's very rewarding. You'll probably never find a job with everything you want, anyway.
posted by jewzilla at 12:56 PM on August 31, 2011


Best answer: the main challenge in my work is communicating with developers and IT people until I understand how to do something simple without breaking anything.

That's an extremely common place to be, when you're starting out as a contributor to a large existing process or code base. Don't undervalue what you're doing here - learning to ask the right questions, communicate well with your colleagues and make small, effective changes is an extraordinarily valuable set of skills in any environment, particularly in software or systems management.

Compiling and testing take a long time, so we need to really understand what we're doing before we do it. I am more of an experimenter and am not good at asking the kinds of questions that would make me more efficient.

You may not need to change jobs to address the reasons you're fed up. What you're talking about here may well be structural problem that you can address at your current position, and maybe even look like a hero for doing it.

Why does it take a long time to compile, if you're making a few small changes? Get better hardware, build a better process. Solve that. Why don't you have a test suite or an anything-goes development environment? That you can't push a button and have your test results back is a serious problem that might need serious you to address properly.

I wager if you actually pinpoint, and then try to solve, the actual problems that are actually making you miserable, you'd not only be a happier person for it, but a better, more productive coder.

Would it be better to stick it out at my current company, or find a job with a smaller one?

Leave this company when you've outgrown it, or when it's shown it doesn't want to grow with you, not when it's bored or defeated you.
posted by mhoye at 6:56 PM on August 31, 2011


You may not need to change jobs to address the reasons you're fed up. What you're talking about here may well be structural problem that you can address at your current position, and maybe even look like a hero for doing it.

I would normally agree with this strategy but the OP is only one job out of school. I think he needs exposure to best practices before doing a tricky guerilla implementation of same.

(Also, on reflection, sockomatic, you shouldn't still be stumbling around the codebase after three years. What's going on there?)
posted by Leon at 1:47 AM on September 1, 2011


Response by poster: Also, on reflection, sockomatic, you shouldn't still be stumbling around the codebase after three years. What's going on there?

Well, I've only been writing code for our area of the product for a year. My first year and a half there was spent learning about our product, learning about our complicated source control management structure, implementing bugfixes, running static analysis tools, understanding our release cycles/bug fixing rules, and learning how to write tests for our test system. Due to the sheer size of our codebase and complexity of our product, I was told when being hired that it would take a few years before I'd really know what I was doing. At the time, I thought of it as paying my dues.

Thank you all for your advice. It's been simultaneously reassuring and a kick in the pants. I know what I'm going to do now.
posted by sockomatic at 12:13 AM on September 2, 2011


« Older Using photographic paper in a pinhole camera   |   "There was a crooked man, who walked a crooked... Newer »
This thread is closed to new comments.