In my 13+ years of software development career, I have done both. So which one do I prefer? This is a bit like asking my daughter: who do you like more, mommy or daddy? (I will reveal my daughter’s answer at the end.)
I think both are interesting work, and both could be challenging. If you ask me pick one, I will probably pick the new development, as most developers like to work on new things: from new technologies to new features, new project/product. But from time to time, I have worked on some bug fixing work that is not only interesting, but also challenging and rewarding (mentally not financially, as I worked for companies all these years). I recall 6, 7 years ago, when I was working for CAD software company, we had two bugs to fix, the first one is actually not too bad, essentially it’s a tolerance problem. In other words, I just need to make sure when it checks whether the X, Y, Z axis is orthogonal to each other, I gave some tolerance. I did cross products of vectors, borrowing from similar experience I learned at work.
The second one, is a bit daunting, to say the least. Essentially we have about 2 weeks to fix a nasty problem in a CAD translator, and we don’t have any clue why the results is wrong. By working with 3rd party, and looking carefully at the problem, some teamwork, I was able to solve the mystery when I was working remotely at Shanghai. I recall I could not fall asleep that night, as I knew that’s a tough problem and will help the sales team greatly to sell into a top Europe car maker.
I had similar experience most recently, although it’s a totally different problem, and we as developers also work in much different world: with stackoverflow.com, and google search (blogs).
So back to my daughter’s answer to my silly question: most of times she will say mommy and daddy; sometimes she will say “don’t ask silly questions”.
PS: in some places bug fixing is also called as maintenance. Just like the car maintenance, software also needs regular check-up and fix 🙂