This question already has an answer here:

I am a PHP programmer with 1 year of experience. As I am just starting my career, I am learning a lot of things now. I can say I am a little bit of a perfectionist.

When I am assigned a problem I start off by Googling. Then, even when I find a solution, I keep trying for a better one until I find 2-3 options. Then I start learning it and choose the best performing solution.

Even though I am learning a lot, this process gets me labeled as a low performer.

My questions:

  1. As a novice, should I continue to use this learning process and not worry about my performance?
  2. Should I focus more on my performance and less on how the code performs?

marked as duplicate by gnat, GlenH7, amon, user40980, Robert Harvey Mar 6 '14 at 20:26

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

  • @guiman - this is talking about the performance of the programmer not the program. – ChrisF Feb 3 '11 at 19:36

If you have some experienced people around you, you may want to ask them if they could give you an estimate of how long something should take as I can imagine many things in software having solutions ranging from 2 hours to 2 years and lots of things in between that depending on resources different options may make sense. If someone tells you that something should take a few hours and you've spent a few weeks without getting it done, this could be a sign that you may need more help in getting things done within a reasonable deadline. You may want to read about a "Duct Tape Programmer" as an example of this kind of role model.

If you take your perfectionism too far, it could well sabotage your career. At the same time, if kept in moderation and you do really improve on a regular basis then it isn't a bad strength to have if you can see it that way.


Mmmm.... how about a compromise?

You get a working solution now, look around for better options so that you get aware of them, but use a better one next time.


There are many factors that drive a software project e.g. correctness, flexibility, cost, speed etc. In every project we have to compromise on these factors depending on what is required.

For example the project I am working on right now is driven by speed and not by correctness. That means we can afford a few bugs in the project but need to launch at the earliest. Therefore we don't spend a lot of time writing test cases.

So as a developer we need to master this art of compromising. Sometimes a less better solution done quickly can benefit the project more that 'the best solution'. Sometimes.

In your case I would recommend you meet the projects requirements and in your free time find better solutions to learn. Although you have a nice habit but lets not spend a lot of time learning at the cost of our employer.

Recommended Reading: Rapid Development: Taming Wild Software Schedules by Steve McConnell


The main change to your routine that I would suggest is required is to start trying to understand and develop your own solutions to problems, before you spend age looking for a ready-made solution.

OK, you should not reinvent the wheel unnecessarily, but if you never do any code from scratch, it will hamper your abilities tremendously.

Code correctness in my book is not an option, it is a requisite. Speed is a by-product of experience, it will come.


I understand the wanting to do things right/being a perfectionist, but at some point don't you get the urge to start writing code? Planning is great. Learning new things should always be encouraged (often you have to do it on your own time). Feed the coding urge or consider an MBA (Nothing wrong with it.).


You said that although you were "learning a lot, this process gets you labeled a poor performer."

You are measuring your own performance in one way, and your employers are measuring it in another. Determine the difference, and determine whether or not you care. If you feel like being labeled a poor performer doesn't matter to you compared to your learning, then ignore them. If being labeled a poor performer matters to you, convince them that your learning is a more valuable measure of your performance, or improve via the performance measures they're suggesting.

However, consider this:

Maybe you aren't learning as much as you think you are. Can you produce better code now than you could a year ago? Or are you relying on Google to solve the same problems that you did back then?

The way to get better at anything is to practice doing it, and the process you've described is practice Googling code snippets, not practice programming. Certainly, searching for similarly solved solutions is an aspect of the work of programming, but the core of programming is problem solving by producing code.

Not the answer you're looking for? Browse other questions tagged or ask your own question.