I just finished reading Facts and Fallacies of Software Engineering, by Robert L. Glass. It is a good book. I particularly liked Glass' claim that maintenance on an existing code base is more difficult than writing something from scratch. I like that because this is something I've been telling people for years.
Unfortunately, most software engineers think building something new by themselves is more fun and more satisfying than working on maintenance and improvements on an existing system that someone else has built before them. (And I'm afraid I am one of those people.) The problem is: what can we do about it? Because, as Glass correctly points out, succesful projects tend to need more maintenance. After all, as a happy user I want more and more features built in a good system, while as an unhappy user I wouldn't want to touch a bad system with a stick. Unless it's a very, very long stick, with something explosive attached to the other end.
Fortunately, at my company we have built lots of systems for which users demand many new features. This means we spend twice as much time on improving existing systems than we spend on building new ones. But it also means we seek developers who like working with existing material and bending old code in new directions. I would claim that writing code in our company is much more complex than in many other environments. So if you fancy a real challenge, let me know!