I wanted to ask for career advice from fellow professionals. I am sure similar questions must have been asked before but still.. I am a software developer with a Bachelors in Computer Science in a product based Semiconductor company having spent eight years here. This is my first company. I was considered amongst the best in programming in my class. Most of the projects I have worked on have either closed down because the group I worked for changed focus or it was taking too long on my part. (most the work I have asked to do has been solo) As a result I have very little confidence in my abilities. I also lose focus quite often - surfing the net or thinking about non work related stuff .

Recently I was made part of a team for a embedded system product. Others in the team have been working on these kind of products for quite a while and one of them is actually a guru. Here also it was taking me too long for me to do my allocated work - first because it was new to me and secondly because my confidence and focus is low. Everything I do is very tentative . Ironically because I have general s/w experience others expect me to do much better. Even thinking up relatively simple stuff is becoming too difficult what to talk about innovation and excellence. I just stare blankly at the screen .

I can't quit because I have lots of financial commitments to family etc. Joining another company will not be so easy as they would expect more from me as befitting my 8 years experience. Most of my job performance evaluations have been just adequate.

What do I do to get out of this mess?


Best book on the subject is "What is the color of your parachute?".

Also, it is normal to feel incompetent sometimes. This is part of learning:

  1. unconscious incompetence
  2. conscious incompetence
  3. conscious competence
  4. unconscious competence

Right now, you are in phase 2. This may sound artificial or theoretical but I believe instead quite real.

Sometimes, it take a while to find one's path.


I can't give you any guarantees because I don't know you personally, but there are two things that come to mind:

1) Rekindle your passion. It sounds like development has become a painful experience for you. You probably dread going into the office every morning and feel depressed because of what you perceive to be your poor performance, so the first thing you need to do is prove to yourself that you still have it. This isn't an easy task. You mentioned that you have a family, in fact, and that makes it even harder, because families are so important and such a time sink. I'd encourage you to carve out at least one or two hours every night, though, to start working on a personal project. You need to write something, just for yourself, to remind yourself that you do know how. Talk it over with your SO and let them know (if they don't already) that this is important for both of your futures.

It'll be hard, but remembering something that you've lost over the years, like this, usually is.

2) Surround yourself with others who share the passion. You've taken an important first step with your post on this community board. On StackOverflow, you'll find hundreds, if not thousands, of people who are passionate about software development. If you find one or two particular friends at the office who really care, you've found one or two people who will be your ally and help you get over these creative humps in your work. Once again, the trickiest part will be time management with the family.

There are a couple of other things that I'd like to note, too:

Don't let "adequate" performance reviews damage your developer ego. If you're not working in an exclusively software shop, your software development skills will have a surprisingly small effect on this rating. In my experience, managers will naturally rate what they value, and they value administrative skill (obviously, it's what they do! :)), so if you have good administrative skills, even if you're a below average developer, I believe that you're much more likely to get above-average performance reviews. If you're a developer who excels at software but isn't quite as good at writing your manager's docs for him, you may end up with an "adequate" rating.


You are probably holding yourself back .. the reasons for doing so don't really matter when you're already in a job (please read the whole answer). I do the same thing, I have a deadline to meet and here I am answering your question. I have had NUMEROUS people tell me that I horribly underestimate my own skills, yet when I'm working on something that I actually want to do and do it well, I'm the first to show all of my friends.

I had to uninstall that pesky 'stumble' button in my browser just to get work done. I had to adjust my NAT to keep me from getting off track when looking up some library API reference. I have a thousand great ideas and yet, I still have to pay rent.

I got lucky, I managed to find a way to support myself with every project being as much research as it is programming.

Here's a short and boring story:

About five years ago, I got so sick of being in a cube farm that I could not stand it. One day, I just stopped showing up, that's how bad it was. I was so stressed out that I was literally afraid to call in and quit. So, I thought to myself:

"SELF! Lots of people work from home, go do that!"

Which is exactly what I did. I found someone who needed the skills that I had to offer (cheaper than market rate) .. went to work, life was good. Then just a few months later, life was again far too structured. Ironically, I'm the one who structured it.

I took all of the money that I had, flew from the US to one of the poorest countries in SE Asia (where it could last) and committed myself to improving what I thought were sub standard skills. I've been here since then, but now I teach, I work on a multitude of free software projects with code review provided by thousands of people and I managed to forget my ego.

Do I want to go back to a cube farm? Nah, I like going to work in my shorts and being picky regarding who I deal with.. but I could go back, in fact, I would do rather well.

What changed between now and then? Nothing, as you see, I'm under a deadline and answering questions on SO :) But .. when I realized that people were dipping into their savings accounts to pay me, I found a new meaning to the word accountability. I'll pull through on my deadline, I just needed to think about something else for a while.

So the real difference? I'm aware of what I'm doing and why .. and I realize that everyone doubts themselves. If I had enough money, I'd buy a castle somewhere and hire demonstrated thinkers to think, drift, wander and sabotage themselves to their heart's content. Unfortunately, the world just does not work that way.

In short, realize that your shooting yourself in the foot and begin to wonder why .. don't fly to the other side of the world in order to find out :) But, as I said, the reasons really don't matter, especially when you try to explain them during your review.


I don't know if you like Rush or not, but try this.


Have you considered talking to your peers. For example that guru, did you tell him that it is taking more time relatively for you to complete things? Or you find some areas difficult to comprehend.

There is a good chance they are like StackOverflow: eager to help.


You need to "debug your brain" a little bit, maybe use some REBT or other techniques.

  • "I also lose focus quite often"
  • "I have very little confidence in my abilities"

You lack confidence because you are not succeeding at your job. You are not succeeding because you are unfocused. You are unfocused because you are bored and ready for a change.

Unfortunatly, your lack of confidence is keeping you in your seat, a bit of a catch 22!

  • "I can't quit"
  • "Joining another company will not be so easy"

Change the way you think about yourself and your present situation. I am not talking about psyching yourself up - scruitinize your thoughts, lay them out on paper and challenge the thoughts that are limiting you.


This is my solemn advice to you:

GET. OUT. OF. SOFTWARE. ENGINEERING. I say that in the nicest possible way.

You ended up here by mistake. You've confused something you have an interest in, and something that would be a good hobby for you, with a career. SEng is not the career for you. That doesn't mean you can't do your own software / engineering projects - but do it on your own time, as a hobby, in a way that you can get passionate about. You would enjoy it as a craft. You clearly do NOT enjoy it in a corporate environment where sheer productivity always trumps art and craft every single time.

I would also bet that you are a generalist, and not a specialist. You will therefore have the tendency to waste your employers' time. Do them a favour and ask for a role where your generalist, thinking habits are put to better use.

You probably daydream a lot, right? It means you are hankering to do new / different / creative things. You are probably more of an 'imagineer' than an 'engineer'. Do yourself and everyone a favour by finding a role that uses more of the former and less of the latter. YOU HAVE TO CHANGE ROLES BY ANY MEANS NECESSARY. You might have to create such a role from nothing and SELL IT to your employer or someone else. Or yourself, if you wish to be self-employed (which, by the way, should be your long term goal - you're not really employee fodder, and the sooner you realise that, the better for you).

Our culture was neither designed for, nor interested in, helping 'imagineers' such as yourself succeed. You will have to carve your own path for yourself, and it will be the hardest thing you will ever do. You will be plagued by self-doubt, and you will have to throw away whatever accultured notions of 'success' you've been brought up with, and invent some of your own.

Your level of self-awareness is pretty good. Just carry on being honest with yourself and NEVER APOLOGIZE FOR BEING THE WAY YOU ARE. EVER. But you must also accept the consequences of how you are. They go hand in hand. :-)


I guess you should allocate less time to thinking of how incompetent you are and more time to becoming more competent. Just stop these harmful thinking and do your best to become competent in the new field.


Fail, at least once. You'll be glad you did.


I can relate to your problem with concentration--it's not fun, but I think it happens to all of us at some point. I also know how discouraging it can be to feel like your inferior to the rest of the team--especially if you're use to excelling at what you do. I can offer you some advice that has helped me in the past.

0: Software Development is very large field that isn't static--you're going to have to get comfortable with the fact that you'll only be 'adequate' in most of its domains.

1: I think that problem with focus can be partly attributed to a loss in confidence. To restore your confidence I would recommend studying aspects of this project where you are the weakest even if it is on your own time. Read the code that others on the team have written and learn from them. Ask the team for advice and ask questions. Socialize with the team members during lunch if possible and casually talk about development--you can learn a lot from this and it also helps you build a rapport with the team.

You'll get through this. You've already shown the motivation needed by asking a question here on stackoverflow. Good luck.


I have a couple thoughts and hopefully I will not ramble too much, but I think it is a bit harsh to say that you shouldn't be in the field.

1) In regards to low self-confidence and lack of focus. This can usually be due to one of several things, namely, trying to do something you don't have the talent for, trying to do something that is over your head, feeling stressed about something, and simply not getting enough positive reinforcement.

In regards to the first item, there is not much you can do about something if you don't have the talent for it, sadly enough. However, if you are able to write good code, but your just not fast at doing it, that doesn't mean you don't have talent, it just means that you don't write as fast as others.

Trying to do something is over your head is something that happens to everyone at some point. The best thing to do in those situations is to reach out and try and get some help. There are areas in computer science where I know I would need help if I had to work in that area, but eventually you do learn and you can take off on your own. Think back to when you started school and compare it to now - I'm sure you can do things now that you couldn't do then.

In regards to stress, i could be causing you to lose motivation and focus. When was the last time that you had a vacation away from the computer? You may just need to get away and recharge the batteries. Also, it could be you are getting stressed because you don't like your job, you have been there eight years after all.

Finally, in regards to not getting enough positive reinforcement. Pretty much anyone is going to lose some confidence in their skills if they aren't getting any positive reinforcement. The best thing to do in these cases is to have a hobby project that you are working on that will allow you to sit back and say, "I wrote that. "

2) Some other posters have suggested that you are not in the right industry. I disagree with them. In your question you mention that you have been working for the same company the since graduating and have had some of your projects shut down. As such, it could be that you are just not working in the right area in the industry, or for that matter, you might just have a lousy job at your company. The industry is pretty vast and you can run the range from game development to embedded life-safety software. Being in an area of the industry that you don't like would explain the lower performance reports as well there is a difference between writing code that you want to write and code that you have to write.

However, as you mentioned, you are under financial pressure and finding another job would be hard. This may be true, but there shouldn't be anything stopping you from looking while you are still employee. Also, ask around the company and see if you can transfer to an entirely different area. Something that you might want to think about doing is moving to a different area of in the industry as well, most reasonable employers would not expect someone coming from an embedded systems background to hit the ground running if they start doing web development. This is something to consider and would likely be your best bet. Also, in the long run, it will help you actually decide if you do want to keep writing software for a living. If you find a new job with another company doing an entirely different type of development and find you still don't like it, then it may be time to start considering a career change.

3) Finally, personally, to me it sounds like you are just burned out. Even though I can't recall hearing too much about it, programmers do get Writer's Block or Coder's Block


I tend to find that you get as much out of a job as you put into it.

The other truim I'll mention is: What you fear you create.

It seems to me you're now afraid to fail and you're basically shutting down ("staring blankly at the screen" jumped out at me), thus ensuring failure.

You need to find what works best for you. For me, it's focusing on the short-term. Like never look at a problem and say "in 3 months this has to do X". Break it down. Instead try "Today I'll implement feature X".

Joel's seminal work Controlling Your Environment Makes You Happy applies equally well here. Accumulate some small wins to counter those small frustrations that will, without balance, just eat you up.