Ask HN: Underperforming, feeling stuck
One possibility is that I'm not as good as I think I am -- but I have had lots of validation. In the recent past (5 years) I've succeeded at some of the hardest interview processes in the world. I've written things that I'm proud of. I can speak as intelligently about code as any HNer.
Despite all this every time I sit down to code my brain turns to mush, somehow, and nothing gets done. I can always give my managers an intelligent explanation of why progress is so slow, but the thing is, progress is still slow. Lately I find myself making more and more beginner mistakes.
The weird thing is, I don't even feel burned out or depressed. I couldn't be happier with my current job. I'm just… stuck.
If something about this sounds familiar, feel free to offer advice. While psychological diagnoses may be right, at this point though I feel like there's something wrong in my practices.
I need some sort of professional help that doesn't exist. Someone to sit next to me all day and tell me what it is I'm doing that's burning up 8 hours a day without actually achieving anything.
134 comments
[ 1.4 ms ] story [ 240 ms ] threadAre you happy with your job - or just the salary that you get paid? Take some time and think about your motives for staying where you are.
Maybe you can look for advancement (challenge) that will help you to be renewed in your current job; maybe you simply need a change. If you do decide to move on to something new, I highly advise taking an extended break between the old and new... reset, refresh and revitalize.
You have to know what the problems are before you can solve them. Seems simple, but it's surprisingly common to overlook this one simple truth. Just ask yourself - what do you like about your current job?
Luckily I still have a reputation earned from some years ago. Plus, I interview well. People still give me jobs.
Managers don't seem to have a response here. In my experience most managers only have one bit of information devoted to programmer ability (ROCKSTAR xor SUCKS). They have alternately told me to try harder, or threatened then fired me.
I had felt like I was deceiving employers so I took a nine month break and did an artistic project. However even with a whole day to do nothing but that, I wasn't able to achieve much. I worked with a small number of people and lef that project, and it got done, but not very well, even though it was my "full time" job. Still, I felt that I had had enough of a sabbatical, and also had made some progress in psychotherapy, so I returned to the workforce, only to run into the same problems I had before. I now think the psychotherapy was not addressing the right problems -- it's more about what I do than how I feel. And it's clear my attempt at a sabbatical didn't clear up the fundamental issues.
I have friends that are able to learn programming languages on the side or take blacksmithing courses and otherwise have full and exciting lives. In other words they have reserve energy. I am so behind on just the basic requirements for my project, I feel I can't do any of this. I schedule more and more and more and more time for work and yet still nothing gets done.
As for happiness with work; I have a pattern of working with codebases that are in great need of refactoring and I am feeling a great need to stretch out and do something more original. So that is a problem.
That said, the guy who sits next to me has enough energy to actually satisfy those needs both at work (gets managers to agree to major refactorings) and also code up some great things in his spare time. Whereas I'm perenially playing catch-up and my code is ugly.
Working with existing code that someone else wrote is harder than a new project. I've only really gotten into heavy testing in the last year or two, but having tests also improves confidence that your changes are not bringing down the entire system.
Finally, what I would say is you need to get into a habit of mentally stimulating yourself after work. I found that when I was in a rut, I thought that I was burnt out and needed to "veg out" more, but I later felt that vegging out only bred more laziness and more procrastination. Once I started to get my brain stimulated in any way, whether it was reading a book, or trying something to learn something new, the effects would carry over.
Summary, laziness breeds more laziness, and stimulation actually recharges you.
Personally I'm pretty prone to burn out. I work as a developer and have lots of programming side projects I work on. My advantage is that I can sense the burn out and when it happens I stop all side projects and try to do mostly administrivia at work.
I did stay in one programming job while burned out for over 2 years (this was before I realized what was it was). I produced practically nothing in that time but the act of sitting there trying to force my way through made the burn out get gradually worse. I stepped completely away from programming for about 30 months to get over it.
Another thing that made my burnout worse at that company was that the environment was so incredibly awful. Are you sure you're actually happy where you are, or do you say that because you fear being fired again? I would have said (and if fact did tell someone) that I loved my job during those dark two years, but it was because I felt worthless and unable to get anything better. I wasn't trying to trick the person that I told, I was trying to trick myself into believing it.
And I feel that there are people who could be a bit better at what I do now: people with very very good memory. Maintaining a huge illogical mess needs very good memory and nothing else. I don't have very good memory. That's why I love logical and conciese solutions which have 'philosophy' behind them.
http://jacquesmattheij.com/Are+you+suffering+from+burn-out
1. get yourself checked out for ADD. I'm not saying this is the problem, but it's easy to check for, and if it is the problem, there are drugs that can at least temporarily make the problem just go away. Now if this is something you've never experienced until just now, it's probably not ADD. But if you've had these sorts of problems on and off forever, (I know for me, my performance falls off a cliff after I've had a job for about a year.) ADD is something to check out.
2. Try pair programming. It works really well for me.
3. Move into management. Even if your organizational skills are not great, having the knowledge of the field gives you a pretty good leg up. If you manage your own company, you can hire people specifically to take care of the things you are no good at or hate. You can get a CS student to watch you code and kick your chair when you stop for under ten bucks an hour.
Really? That's news to me. How do they check?
> Move into management
+1. The tech world needs more managers who actually know tech.
Typically diagnosis is made after an interview (about an hour) and questionnaires. If there's some doubt about the diagnosis you may need to bring in old school reports. It's also possible to diagnose using brain scans now (e.g http://www.sydneydevelopmentalclinic.com.au/brain_scanning.h...), and medication can be trialled and selected on the basis of an individual response to the medication (shown with another brain scan, or using testing, e.g http://www.sydneydevelopmentalclinic.com.au/medication_testi...).
1. The doctor will interview you and ask you about your history, all the way back to childhood. If you haven't had problems focusing, concentrating, etc. throughout your whole life (even as a child), the doctor might be skeptical.
2. They'll test you to make sure you're not having seizures.
3. They'll also test your focus, concentration and short term memory with a computer test called CPT (continuous performance test).
Assuming you have a history of ADHD symptoms, you currently have symptoms that are interfering with your life, and you do poorly on the computer test, the doctor will probably start some kind of treatment, probably using prescription stimulants.
That said, I'm sure there are a lot of other medical conditions that cause symptoms similar to ADHD's. You might end up learning you have some other problem entirely.
The first doctor I tried wanted to have me see a shrink to get tested. The first visit cost me a $50 copay and then I had to have another visit to do the actual test, costing another $50 copay. I skipped that second visit and went to another doctor. (The shrink seemed like a quack anyhow).
My new doctor whipped out a giant book and started reading a battery of questions from the back of it. Based on the answers to those questions he determined I "met the requirements for treatment." Seemed a bit weak, but I didn't ask any questions since I knew I had already been through all the typical tests before. having been diagnosed as a child.
TLDR: YMMV. Just talk to the doc and see what he says.
It's an interview process. But really, as far as I can tell, the check is "do the drugs make you hyper or do they make you focused" The only definition of ADD that I've heard that differs appreciably from simply being lazy sometimes is that people with ADD respond differently to stimulants. Jack up my nervous system enough and I'll actually lay down for a nap.
It's like a very boring 10 minute video game. You click a button when a certain stimulus is presented on screen, but not when a different stimulus is presented. It measures your reaction times and your errors (click when you shouldn't, don't click when you should). Then the program does some statistical comparisons and prints out a report.
At least, that's what was done in 1993. Could be different now.
Combine that with a history. I imagine it's a lot easier to diagnose in adults, because so much more data is available. And the doctor doesn't have the pressure of diagnosing ADHD for a little kid whose parents are worried he'll get less out of school. As an adult, that damage is already done. ;^)
Do NOT let this relatively easily solvable problem destroy your career. I made this mistake early on in my career and paid for it with a lost job. I'm glad things ended up the way they did, but it would have been better if I left there on good terms.
Even if medication is a temporary fix, it might be what this situation calls for. Often in life we have to chose the best of two evils, and your career is not something to put on the line. I know that I am way happier working 40 hours a week steady than I was when I would binge hack for 120 hours straight while riding a motivation wave.
If you can get yourself back into the groove and being productive, try to figure out what gives you motivation and try to work your way into a position that continuously feeds you these things. That's what I'm working towards.
Holy crap, you just described my life. There's no way I'm an extreme case, but maybe I really do have a little ADHD going on...?
I think that the lack of drive and focus is a symptom of something, in rare cases perhaps ADD/ADHD. However from personal experience I usually discover a core problem that was causing these symptoms. Resolving that problem takes care of the lack of motivation and focus.
Perhaps the specific work environment isn't for you. One job I worked directly out of university crushed my soul as a developer. As an intern I had vast responsibility and did a lot of interesting projects. Once I joined on fulltime, they were going through a restructuring period and I ended up doing trivial work putting out fires. Luckily they downsized a third of the company a few months later and I was fired - a blessing in disguise there. A week later I was running a small team doing innovative new projects at a large corp.
Often it can be outside factors in life that strangle your productivity. When my father was very sick and hospitalized, my work drastically suffered. I'd like to consider myself a strong individual whose outlook on life would allow me to deal with such events with ease. However, in the situation without knowing it at the time it was impacting my life. Instead of taking a few weeks off and dealing with the issues at hand, I threw myself into my work while my progress continued slowing exponentially. Eventually I was working 16 hours a day and writing 0 lines of code. I ended up quitting that job, and taking time to deal with my life.
Anyways, the moral of the story was stepping back and discovering the root cause of these symptoms can be very beneficial. Don't block it out with meds unless that is really the cause.
If the meds fix the problem, and they have proven fairly safe, why not use them? (I mean, they aren't absolutely safe, but they are very safe compared to, say, driving to work every day.)
It's not a lifetime choice, either. You can decide that you need some help, and get it for the next six months, then stop and work on your personal issues. This is actually what I'm doing now (though, I'm nearing the end of my rest... it's time to get some work done.)
"frequent shifts in conversation, not listening to others, not keeping one's mind on conversations"
I can have "black out" episodes where I impulsively and immediately walk away from conversations without finishing them, often with a little amnesia. I've asked my girlfriend a question, essentially immediately forgotten that I did so, and turned up the radio volume.
http://www.addforums.com/
Excellent idea.
I found that morning meetings with the other devs on the project, where we are all publicly assigned stories to complete in the day also helps - you don't want the rest of the team feeling like you're slacking off, so you push on through the distractions. But of course, you need the whole team to be on board, and indeed, you need a team!
As I often work alone, the Agile methodology that helps me the most is TDD. It helps me keep focused on what I need to do next. Conceptually it's similar to a TODO list, as suggested in other posts, but it has the advantage that you can't allow the tool itself to be a distraction (I've tried TODO lists, and I end up playing more with the list than with the work). With TDD, either you're writing tests, or you're writing the product code, but either way you are creating an artifact that is useful to the project.
Another good strategy is to break everything down to small tasks. Tasks you can do in 30 minutes or less. Watching the list getting shorter makes you feel like you're doing something. I think this is part of the agile approach.
Part of me is itching to strike out on my own but if I don't have the discipline to even do halfway well at a job like this, how am I going to deal with a startup?
I think there are two pieces to being effective at programming. If you have a clear idea of what you are trying to achieve, you can just bang out the code. Unfortunately, most of the time you are understanding the problem while you code it due to very ambiguous specs, so you just can't code as efficiently.
Last, but not least, tweak and tweak away. Write some code, take a walk, come back and take a look at it again. Review your own code thinking about where you are making mistakes, it'll give you a map of what to watch out for.
Helped me get something done.
I remind myself though, that what you see in others around you is the polished exterior surface of their lives, which many times hide the tangled mess of cabling and crap inside. My point is you are comparing your messy insides to another person's polished exterior - hardly a fair comparison for you.
Best of luck
I've been doing most of that lately, though I can get into a dream state quite a bit where I want to make something really awesome that will slow things down a bit too far.
I don't get a lot of friends and associates asking about my progress, but I always make sure to reach out to them every so often to see how they are doing and offer myself as a resource if they need it for anything.
Little things like inconsistent return conventions or code disagreeing with documentation comment blocks.
People are referring me to classic coder texts like Code Complete. Okay, maybe I do need a review but I fucking read that book in the 90s. It's incredibly galling.
Maybe something similar would work for you.
http://www.washingtonpost.com/wp-dyn/content/story/2009/01/1...
And then I try it, but it doesn't work because I still didn't understand the existing code. Rinse, repeat.
However, just the other week I decided somehow to FIGURE OUT HOW IT ALL WORKS, DAMMIT. I actually kept a glass of ice cubes next to my desk and pressed one to my head if I felt I was drifting, which worked surprisingly well. I realized that this codebase always had a lot of the functionality I had always wanted, hidden away in a particular method. I'd been staring right at it for months and it didn't click in my head.
I felt ashamed.
Personally I would only try to understand the parts I currently need.
Yes, in theory it would be nice to understand everything before you start. It would also be nice to understand quantum physics, and all sorts of other things. In real life, though, sometimes you have to compromise.
I've had the same experience with specifications, btw. Yes, I'll read the whole document before starting. But usually I only really understand it once I start implementing the details. (I am also not convinced that specs of several hundred pages are any use at all).
> Luckily I still have a reputation earned from some years ago.
You've been capable of doing good work in the past, but you're deeply critical of your current work:
> I felt ashamed. ... and my code is ugly.
When you try to work, do you start on an approach but then doubt it and lose momentum?
It could be anxiety. Here are some thoughts:
1. Remember that programming is difficult and takes time. Adjust your expectations to accept slow progress.
2. Refuse to churn, even if it means writing crap code. Consider everything you write at the outset of the project/day/feature to be a rough draft. You will return to revise it, so the rough draft can be utter crap.
3. Keep your focus on a small corner of the project. Seeing the big picture can help you design a higher quality system, but considering the big picture for too long or too often allows your mind to despair. Todo lists help, but the attitude of ignoring everything but the current task helps more.
Pay attention to what you're thinking about when your mind fuzzes out. Are you worrying about something? Learn to recognize the beginning of your focus dropping away.
You said this:
> it's more about what I do than how I feel ... at this point though I feel like there's something wrong in my practices.
I think you're wrong. You knew what to do in the past (you told us so) yet you fail at similar tasks today. Your "brain turns to mush" and you think it's practice that's lacking? Not doing TDD? Too many templates? Not knowing the latest design pattern?
It's in your mind.
1. Tim Ferriss's 4HWW suggestion to focus on one or two things a day and when you're doing one of those things, do it in one shot. Don't take any breaks, ready any news, or get lunch before you're done with it.
2. Scrum. The daily meetings and sprint demos have highly motivated to show what I've done. It's also hard to explain away bad performance when the burndown chart is falling behind because of you.
3. GTD tip: What's the next action? It feels great to boil big projects down to a next action. Sometimes great enough to actually start doing it. :)
4. Listen to some music. Sometimes this boosts my mood and motivates me to delve into a project. The trick is turning off the music once you get to the first problem that requires some deep thought.
What helps me personally is having a notepad where I jolt down TODO items, to the most atomic level if possible. To give an idea what's on it here now:
I.e. tiny bits of work that do not present much challenge separately, yet are actual, necessary things to be done. No deadlines, priorities, long descriptions, etc. No grand items like "add feature X" or "do complete test coverage". They are easy enough that I can complete at least one (but usually a bunch) in the day, and strike it out. Each time you do that, there is a modest tingle of gratification, so it helps to maintain working mood. Also, looking back at the list of completed items is reassuring.If I need to add a feature, I just come up with first obvious things that have to be done, and expand it as the problem works out or new circumstances arise. E.g. I had to add a protocol support (Modbus TCP & UDP) to the product, the list ended up like this (editorializing a bit):
Perhaps everyone has at least some ideas what you should do when you begin on chunk of work X, so you just write them down, no matter how trivial.I not only felt accountable to myself, but as I work alone, friends or family visiting me would ensure my checklist was being ticked off and ask questions on specific points ("why haven't you done that?" "because XYZ is taking longer than expected" etc...)
The list makes you answer questions about how you'll tackle the problem, it also allows you to think without staring at a screen which is beneficial.
So yes you can train yourself to be a wonderful cog in somebody else's machine. But consider the other advice here: find a better project. You have never actually been in charge of your career until you took a job that paid Less, because the project was better.
Try doing the easiest things first. That motivates you to do the next and the one after that. It also helps get you into some rhythm
Also, Try taking a break :). It helps
1. There is something else which is pre-occupying your subconscious mind. Probably something which you are trying to sideline as not a big deal, but subconsciously it is a big deal. Find out what that is and take care of it head-on. This will fix itself after that.
2. You might not see yourself being 'successfull' in this job over a longer term. For example, you want to do a startup and even though you need this job for the money, you still understand that your longer term interests are better served by quitting right now and doing a startup. It could be something else but essentialy what could be happenning is that your subconsious realizes that you doing this work is not getting you any closer to your longer term goals and hence it is revolting.
Do not seek to change yourself or your circumstances right now. Only seek to understand yourself - once you have done that these things will go away by themselves.
And forget about this ADD crap. You are absolutely normal living thinking person.