Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: Please help a frustrated Mid-Career (?) Developer!
77 points by jiboo on July 14, 2010 | hide | past | favorite | 31 comments
I've been a software developer for 5 years. It has been a good career from an outside perspective - great names, high salaries, chance to live abroad, responsibility beyond my years etc.

All is not well on the inside though. I'm experiencing a bit of a career low and crisis of confidence, which is why I turn to the smart people at HN!

I'll give a brief history for context -

My first few years as a developer were great. I learnt a ton about software and all things tech. Combined with a bit of business awareness I shot up the ranks and ended up in 'senior' developer roles (in practice if not in title). I worked on some fairly low level high performance stuff and off of this built a bit of a name for myself in some niche technical communities. I was proud of what I achieved and felt I was learning every day and delivering good stuff.

The last few years though, this has really stopped. I first had a bad year in one of my roles where issues outside of my control left me fighting fires for a year rather than coding. I left and then spent six months in a contract role that just involved hacking HTML and Javascript together at short notice for demos. I've now moved back into a permie role, but seem to be really struggling to get to grips with the code-base. The bits of code I have contributed have in retrospect turned out to be buggy or poorly designed in the context of the code base. I'm not covering myself in glory there at all. I don't have a single achievement yet after 6 months on the job.

I'm fortunate in that my CV and interview technique is getting me into very well paid development roles, but every day I am feeling like more like someone who can talk a good game and live off past accomplishments, but not deliver. It's really eating me up as I want to excel in my job and earn the respect of my team.

I guess I feel like I've gone backwards over the last few years. A few reasons for this:-

- I never just sit there and crank out code anymore - I must have read 1000 lines of code for each one I've written over the last 2 or 3 years.

- I never get the opportunity to properly engineer something and learn from what works well and what doesn't work well as a result of my own design decisions. My last few jobs have been weighted towards maintenance.

- I struggle a lot more with low level algorithms and data structures nowadays. I used to be pretty good at this but have lost the edge as I've drifted up to middle tier business and CRUD coding.

- I have lost the art of elegant code - everything I write seems forced and fragile, too much repetition, too inflexible. I look at other peoples code and algorithms and it just looks unattainable to me even though I was doing that 2 years ago.

- I've developed a few concentration issues - I drift off and surf the interwebs more than I used to.

- The learning has stopped - I learn new tools and languages but rarely take away a new idea from them which makes me better in the day job.

After this essay, I guess the question is, how do I get my mojo back and get that level of technical excellence back?

And did this happen to any of you guys part way into your careers, or did you have a pretty linear improvement over the years?

Any help appreciated!




...how do I get my mojo back and get that level of technical excellence back?

You decouple your day job from your need for technical excellence.

You do something on the side. Maybe a pet project. Perhaps a little service work for customers you find. Contribute to an open source project. Or best of all, start your own business.

This is what I did and it changed everything. I have never complained about the lack of stimulation of any day job I have had (well maybe just a little). Better yet, I have used to crappiness I encountered during the day to push myself to "never do that" at night.

The day job is comprised of quality right in the middle of the bell curve and it's good enough to pay the bills. The side work gives me a chance to push all the way out to the right hand side of the bell curve with cool stuff.

The ultimate plan is for the side work to take over and make working on someone else's crap during the day unnecessary. Give it a shot.


It sounds to me like he has a lot of room to grow in his day job, if he wants to be a software developer.

If he doesn't want to be a software developer, then sure, he can duck the issues of maintenance, legacy code, low-level code, and all that. He can hobby-code his own projects and avoid other people's code. That means finding another career, though. If he wants to revive his programming career, he needs to face up to his weaknesses, which is exactly what his current job is pushing him to do, if only he'll commit to it.


>> My last few jobs have been weighted towards maintenance.

There is your problem. I had the exact same frustrations in my previous job. Now I am with a team doing development projects and it feels a lot different now.

Maintenance projects are good in a sense that you get to learn a lot by looking at other people code, but that in itself is not a good argument to stick with those type of projects. Every new development project, even if it is small, will have hard problems to solve. You will have to apply your knowledge of algorithms and data-structures more often than you imagined. In contrast, a maintenance project may give you a hard and difficult to debug problem which finally turns out to be caused by the previous developer forgetting to compare all the 7 properties of an object in the equals method. It is cute to have those problems once in a while, but there is not much chance of learning and innovation.


I did a stint as a maintenance programmer. I was proud of it, then. I'd worked on code written by McArthur geniuses and the worst PHP monkeys -- no matter how complex the code was, no matter what language it was written in, no matter which backend database, I took pride in being able to figure it out, re-architect it if necessary, and fix it.

I didn't feel like I was going to seed; I was learning new (old) languages and systems all the time and I even got the chance to help on a few research projects, work with machine learning experts, etc.

I found, however, that I just got $h1t on by management. I wasn't perceived as being productive, they were always complaining I was too slow and too expensive. And I was slow and expensive because maintenance programming is slow and expensive, particularly if you're the guy who'll clean up any mess, no matter how bad.


Sounds like you take pride in doing a great job. But unfortunately PHBs are too caught up in watching the P&L to even understand the value of you efforts. I did my share of clean-up jobs, but eventually no money would compensate for the pain endured.


Maintenance is an important and necessary job. However if you are a talented developer than you shouldn't accept a job that is only maintenance. Sure there are some exceptions like if you really believe in and want to help the organization, and if you're really appreciated it goes a long way.

But generally if you are good at what you do then you shouldn't have to suffer this. There are simply too many opportunities out there to relegate yourself to a stagnant role. There are plenty of borderline incompetent programmers out there who will do a lot better debugging and maintaining an existing codebase than writing new systems from scratch.

Any self-respecting programmer with a passion for their craft owes it to themselves to at least try to find a job where they are learning and progressing even if it's not perfect.


It's not just you - this happens lots of people, in lots of fields.

It's an obvious suggestion, but a small personal side project seems to help a lot of people - small enough that it doesn't become a big time sink or a chore, personal enough to be fun. A new platform you're unfamiliar with (eg your phone) may increase the novelty factor. Some people like to do a library or similar; I think an end-user toy like a little game is better because you can get feedback from non-coders which will reward you for extreme cleverness, but also requires you to complete rather than offering a half-assed library and calling it a 'foundation' or something.

School (eg a part-time master's degree) also increases your value, may be financed by an employer, and may push you to think deeper into problems rather than being in maintenance mode as you describe.

Finally, ask yourself if you're getting put into maintenance mode because they don't know where else to put you? If you say 'what do you need?' to your boss, any supervisor will first think that it would be nice to make an existing problem go away. If you want to be an architect, you need to come up with alternatives to the status quo and then sell them - not just in terms of 'this will be better than what we have now, please give me permission' but rather 'rising maintenance costs will bury us if we don't act, getting ahead of (our competition) will require a team of 5 and a $$$$ budget - but will allow us to capture (quantified market share)'.


Sorry, but that is the majority of softare development. While you may believe all your previous accomplishments were really great, there is most likely someone looking at your code thinking how frustrating it is to work on the codebase. I think it is way easier to start from scratch than take an existing project and move it forward. When you start over, you can build a ton of momentum. You can hold all the complexities in your head. You rarely have the same problems existing solutions have because existing solutions have users that have learned the system and have a set of expectations.

I'm not trying to belittle your previous work, while at the same time you should realize that your frustration with maintenance is somewhat belittling as well. It is simply a different kind of problem that takes a different set of skills and talents to do well. If you consider maintenance in this way, it can be just as rewarding and help further your learning. Likewise, if you are doing maintenance, you are working on software that had some level of success. No one will ever ask you to change a codebase no one uses. You can learn a ton from a codebase that has been around for a while. You see the parts that were bolted on and how that impacts the future, but also how the tradeoff of a more flexible design was actually not necessary.

I'm not trying to be negative, but rather challenge you to change your mindset. I maintain a huge amount of code and it is a huge pain in the neck at times. That said, I also realize that my ability to continually dive into new parts of the code has become easier through time. Even if I do have to read the 1000 lines of code, I'm finding that the process of reading code and making guesses where to read next has become more efficient. Likewise, I've tooled my environment to help me search for leads when solving problems with the code. My perspective on writing new code is radically different because there is a very clear understanding of how I could do a better job for the developer that looks at the code in the future.

In short it can be really frustrating to maintain code, but at the same time it is something that needs to be done. I also believe it can be something done very well. If you see it as a healthy challenge I think you'll find the feelings of burnout will subside and you can take pride in changing that one line that ended up helping save people massive amounts of time and money.


The bigger the company, the more software development is turd polishing and brown nosing managers. You have to ask yourself whether the status and money of working for XXXX Corp is what you want or whether you want to respect yourself for the great work you do. If it is the latter, then find a new job with a small, dynamic, with-it company that values your abilities and motivation. If it is the former, then suck it up.

If you can't make up your mind, then take a holiday to recharge your batteries and get away from the day to day battles.


My career had a huge dip like this. Take a big step back, maybe a day or two off, and try to remember what you loved about coding. Then get the hell out of the tar pit you're in and figure out how to spend more of your time doing that.

I build tools and frameworks. I do a lot of other stuff incidental to that, and often the "incidentals" are what other people hire and pay me for. But what I truly love is building the thick layer of infrastructure and interface upon which a veneer of app and decoration is added. I want to build Back End Code, for any of several fun definitions of that. I especially love building stuff that enables other developers.

I also want to use Good Tools that make me feel good, and that build results that feel solid when I use them.

There are a lot of other factors -- algorithms, platforms, languages, performance. And while they're important to get the rest done, they're not what motivates me. Those two things are pretty much what motivates me, and the rest is done for the love of those.

Your two (or more) things are probably nothing like mine. But you really, really need to figure out what they are. Then stop "doing what a software developer does". Go do what you do.


Seems similar to what I've been experiencing.

Things that I've been doing:

- work on side-projects

- take up new activities that require commitment. Nothing is always pleasant and if you feel like you're constantly procrastinating/putting unpleasant tasks aside, then actually doing something because you have to helps shift the "I can do it later" mentality to a "let's just do it while we're at it" mentality. I'm doing martial arts

- cut back on reading news. If you need a "daily fix" of news, you'll probably notice that this addiction impacts your ability to focus.

- take time away from the computer. It helps organize ideas in your head. I walk.

- forget the idea of a "learning ladder", i.e. the idea that what you must accomplish next must be harder than what you've learned previously. Particularly, get rid of the notion that your next learning milestone should be programming related. Instead, research a real-world problem. You'll find a whole new industry worth of code to explore and it'll open doors.


I suspect that your inability to concentrate is at the root of everything. Judging from the responses here, it seems to be a common phase for software engineers to go through.

I went through it myself recently, and it lasted for several months. At first I attributed it to stresses from homebuying, marriage, etc. But eventually the excuses ran out, yet I still found myself spending a lot of time surfing the net and cruising on my past accomplishments. I tried schmacking myself across the face. I tried changing the position of my monitor to make it easier for others to spot my laziness. Nothing seemed to work. I had gone from being a top producer to a worthless slouch, and I couldn't get seem to get out of my rut.

Then I finally realized the bleeping obvious: I simply no longer had any interest in what I had been working on. What started off as challenging work had turned into an endless stream of moderate enhancements and inane customer support issues.

I was very fortunate to be in a position where I could transfer ownership of the project and move on to different things. The effect was immediate. As soon as the work became challenging again, my productivity immediately shot back up. Hopefully you're in a position to do the same. Good luck!


Been there. Join a company who's challenges are technical. That's an oddly rare venture as a software developer... most devs spent careers shoving data into and out of a database, and the grand challenge at most software shops is social.. it's designing software that user's interact with nicely. If you feel like you're losing your technical edge, look for a company that's doing something that's technically hard. Makes all the difference.


Don't worry it happens to the best of us. I had a similar situation and it lasted for quite some time. Actually it lasted until I left the employer I was at. There are a lot of below the surface issues that can affect your ability to develop optimally, language, platform, the code base can all have an effect, even office politics can have an effect on your code quality.

In some ways we are like athletes, where better skills separate the superstar from the average and the superstars really shine. But just like athletes we have our slumps, which you are probably in. Averaged out over a career though they are brief even if they last a couple of years.

To me if I had to play 1000 ft view arm chair psychologist, I would say it is most likely your job, their is no passion and without it there is no dedication to producing quality work. Over time this has a compounding effect. I personally got to the point where I did not want to learn new technologies which, if you knew me is a very strange turn of events. I tinker with everything, trucks, computers, low tech camping and wilderness tech, solar / clean energy, bio-diesel, you name it and I tinker with it.

Anyway point being it can drag you that low, where you loose passion for the basis that got you here. That is when it becomes dangerous and when it required immediate action.

So lets get to the important part, how did I break the spell? by doing exactly what I did not want to do, on nights and weekends I started coding my own side project, it was like pulling nails at first but then things started to spark again.

Planning and design started to occupy my mind again, efficiency of code and modularity dominated my curiosity. The wheel started turning again and I got sharper, my code quality went up and I was happier even in my private life. That project ended up pulling me out of that job and out on my own

When I stated it I subconsciously agree to my self that even if it was a flop I was doing this for therapy. I also agreed amongst myself to never tell myself that again because I needed the belief that this was going to carry me somewhere else. That prepared me for the fact that it could fail and would soften it with the fact that I achieved the goal of rehabilitating myself. While also providing the hope that it could turn into something that will change my life. It did on both accounts.

I have been there, if you need someone to talk to my email is in my profile. I can help you with ideas for projects and help you with what I did to navigate certain mental demons in that situation (e.g procrastination, lack of motivation). It's tough and it is a form of depression, the sooner you break the cycle the easier it will be to recover.


"I would say it is most likely your job" -> I would agree so. Quit your damn that makes you feel miserable. But please find an offer before doing that! Money is still the factor to survive here.


"Actually it lasted until I left the employer I was at."

Key takeaway.


I feel with you, man.

Unfortunately I cannot offer words of advice, I'm in the same mood and a similar position right now (and it starts to influence my private life a lot, which sucks. Explain to your SO this kind of "I'm feeling that I don't accomplish anything so we're fighting regularly, sorry").

Story's, as I said, similar, but with some key differences: I'm senior in title and in practice, but not in payment. My job's in a niche (OCR/DMS) as well, where basically people just jump between competitors if anything bothers them. I don't want to follow this practice. I might leave, but this inbred culture leads to lots of problems.

Coworkers are mostly converts from VB times and stopped caring about self education after they were forced to learn C# 1.1 (it still works. Nvm that 4 is out). I lobby for a (company provided, I use git personally) version control system for 5 years. The company handles projects in the 5-6 digits range and didn't manage to support this request for the most basic of tools yet.

To add insult to injury we're divided into two divisions, one is doing projects for the customer, one is developing the platform. The latter is elite and you won't get a job there. I'm sure they don't even earn much more, but they do the interesting thing. Design new features, research new possibilities. We (as I said, I'm "senior", but still) are just code monkeys.

Sorry for hijacking the thread, but this crushes me, right now. I'm seriously unable to get up, unable even to turn on any machine. There's so much I want to learn and do, but the mere thought of my day job currently stuns me. I constantly find me wandering off, I even think the Net is boring and I've seen it all by now.

(Queue the "Quit the job" responses.. Currently searching for better alternatives, but I've a family to support - and maybe I just abuse that as an excuse to hide my fear for something new).

Long post, in huge parts offtopic - sorry for that. Let me finish with "Yes, you're not alone". And the best of luck to you, this is for me the writers block in programming - and it sucks.


Whenever I'm feeling low, I go to lunch with friends who work at a big enterprise software company, preferably in the financial or health sectors. Those guys make me feel like my job is a dayspa.

I've also found that constantly coming up with new ideas and suggestions for your company's core product, even if they never get executed, is very fulfilling. When you are doing so, you are often checking out new technologies or processes and the learning experience leads to the sparks that ignite my creativity and passion.

Side projects are nice and all, but it sounds like you want social acceptance for l33t hacks as well. I think you may just have to accept the fact that many developers are treated like factory workers and their managers are the ones rewarded with respect (and cash) on behalf of their best works.


You may be experiencing a mild case of burnout. Career capabilities and recognition often undulate based on many factors. Even when you think you're doing everything right, it may be harder to do what you used to be able to do easily. I think that's a natural part of being human. Over the long haul, though, you will continue on an upward trajectory--assuming you continue to absorb new information and practice new skills.

If it really is burnout, there are many resources for how to approach that. An important part, though, is taking a break. Surfing the Net doesn't help. You need time away. You'll know you're at least partway through it when you begin itching to try something new.

Like many here, I went though similar periods in my career. You do get through it and you can definitely become a better developer over time, despite age. Assuming you like what you're doing and you want to improve, then the question is, "what to do?"

Decide on something new that you want to learn. A new language, development environment, operating system, tool set, or whatever. Then pick a problem and work on it. Do it at home in your spare time, so there is no pressure and no expectations. You may not notice any immediate benefit, but you will be growing and improving. This is what makes the difference long term.

Best of luck.


"I never get the opportunity to properly engineer something and learn from what works well and what doesn't work well as a result of my own design decisions."

Sure you do, it is called what you spend your free time on. In your case, you aren't devoting any of it toward what you loathe you aren't doing. That's fine, but everyone is equal in the fact that they get 24 hours per day, what they do with it is up to them.

-Scott


New development and maintenance are two very different development tasks in my opinion. Maybe you are discouraged because you are going through a brand new learning curve which you thought you had mastered and are now proven otherwise?

I definitely agree with everyone here recommending to take on side project and work on things in your spare time. Every job I ever got was because of skills/tech I gained on side projects (because I could do stuff with tech I though would become relevant...and it often did).

Relying on your job to teach you all you need to know is a sure way of becoming technologically irrelevant in 5-10 years. Your job will primarily tech your organizational stuff like working in teams, consistency, timeliness, playing politics etc. Even if they send you to any sort of training, those classes are usually a joke.

Learning your trade you really have to do in your own spare time. I easily (easily!) spend 20+ hours a week on my own stuff which I hope will land me the next position.


I experienced this and I chose to learn a new (programming) language and get a job using it. You mention learning new languages but are you actually switching over to that language? Rather than working in your main language and dabbling at night, use the new languages and tools in your day job. It's generally within reach to either convince people to let you do that where you are or to find a new job.

Usually learning is engaging, so if that's not doing it for you, it makes me think 1) you aren't going deep enough and challenging yourself enough or 2) you truly aren't interested in coding anymore. I tend to think it's the former but only you know for sure.

I read this article from my RSS reader today and think it's applicable to your situation: http://www.fluentself.com/blog/stuckification/exit-the-middl...


I hope this article of mine may inspire you a little bit: http://programmingzen.com/2010/07/04/the-pursuit-of-excellen...


I've had a multi-year 'maintenance mode' slump where I didn't get very much done. I learned a lot about propping up crap code, which is a really useful skill (as someone else said, this really is the majority of software development work to be had.) but you are right, it's not very satisfying, and i didn't really feel like my career was moving forward.

For me, the answer was a side project that grew into my full-time job. (I had a few false starts, and had to get a few other dayjobs... but I did quit my maintenance job to focus on my own company, and that was the first, and a necessary, step.)


Ah, another eager, frustrated dev with 5 years of experience. As much as I can relate to your experience and mindset, I gotta tell you that I'm happy to not be alone.

I have a very simple advice that I got from someone far back, do one thing that will make you feel that you accomplished something. It could be anything, an android/iphone app, a usable web app or a game (in HTML5 may be?) or just patches to your favorite open source project.

The joy of building something which people use is unprecedented. It helped me a lot and I'm pretty confident it will help you too!


Good question, I think you touch a nerve on a lot of us here.. The world we live in is stressfull by nature, it changes rapidly and it is difficult to compete against new comers fresh, full of mojo, with a clean slate and ready to learn and do.

I recommend you three things: 0. Keep the day job & the money flowing.. it is not everything but having it gives you lots of options.

1. Pick up a hobby that has nothing to do with software development

2. If you want to understand why your are feeling the way you do, read "Flow" by Mihaly Csikszentmihalyi


You are still pretty green. Keep working on it.


I think you're worrying too much. Sounds pretty normal to me. Try to keep learning, practice coding problems if you're so inclined or get a hobby. Get out more. Spend more time with your family. Teach a few courses if thats possible. In this context, I don't think there is any such thing as linear improvement.


Retire, relax, enjoy your family. It is just a phone. Not worth it.


Find a small idea/project to work on that isn't work related that you'd like to code up and then like my friend at a shoe company says, "JUST DO IT!"


Programmers: Before you turn 40, get a plan B

http://news.ycombinator.com/item?id=650437




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: