
Ask HN: Please help a frustrated Mid-Career (?) Developer! - jiboo
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.<p>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!<p>I'll give a brief history for context -<p>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.<p>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.<p>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.<p>I guess I feel like I've gone backwards over the last few years.  A few reasons for this:-<p>- 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.<p>- 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.<p>- 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.<p>- 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.<p>- I've developed a few concentration issues - I drift off and surf the interwebs more than I used to.<p>- 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.<p>After this essay, I guess the question is, how do I get my mojo back and get that level of technical excellence back?<p>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?<p>Any help appreciated!
======
edw519
_...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.

~~~
dkarl
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.

------
niyazpk
>> 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.

~~~
terra_t
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.

~~~
CyberFonic
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.

------
anigbrowl
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)'.

------
ionrock
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.

~~~
CyberFonic
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.

------
angelbob
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.

------
lhorie
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.

------
kevinskii
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!

------
famousactress
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.

------
kls
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.

~~~
dmly
"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.

------
darklajid
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.

------
netmau5
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.

------
Todd
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.

------
honopu
"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

------
canterburry
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.

------
AmberShah
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...](http://www.fluentself.com/blog/stuckification/exit-the-middle/)

------
acangiano
I hope this article of mine may inspire you a little bit:
[http://programmingzen.com/2010/07/04/the-pursuit-of-
excellen...](http://programmingzen.com/2010/07/04/the-pursuit-of-excellence-
in-programming/)

------
lsc
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.)

------
nirav
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!

------
clueless123
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

------
apower
You are still pretty green. Keep working on it.

------
arohann
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.

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

------
ct
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!"

------
known
Programmers: Before you turn 40, get a plan B

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

