If somebody offered you a job to merely maintain an old, gigantic codebase, I don't think your first thought would be "wow, I'm going to learn so much from this!", and there probably wouldn't be any way you could assess the codebase quality before accepting the offer so you could end up thinking that eventually. This is how things that you want and that could help you grow can be vastly different.
This is why it's so important to grill your interviewers about the reality of working at the company, although I'll admit that I learned which questions to ask from bad experience. Asking those questions also happens to serve as excellent signalling to your technical interviewers, much more effective than being able to solve some silly logic puzzle.
And to be perfectly fair, you do learn so much from working on poorly written projects that are a horror to maintain. Failure teaches you which mistakes to avoid next time.
Would you mind sharing your best, most probing questions-- the one's that proved most useful cutting through corporate posturing and BS?
As a recent grad who has been fired from two jobs, I would be afraid to join a poorly written project because I would worry that I would fail and then be fired.
Learning how to be successful is pretty important and teaches you things you cannot learn from lurching from failure to failure.
Good code is surrounded by good processes. Ask about the processes that lead to good code. This not only susses out what the situation is on the ground, but also demonstrates your own quality.
Development from scratch means much more ... "sales" overhead. Meetings and (ultimately) disposable documentation.
Most developers wouldn't. There's a stigma against maintenance. Most developers want to be Software Architects! (Said with the pigs in space voice).
1) reading a pile of code and trying to figure out how it works and being constrained by someone else's solutions is considerably less fun for most developers than writing something new and making decisions about how the system will be put together
2) It's much harder to point to what you did or talk up your accomplishments. Particularly to management.
Re 2. This is very true.
2: write reams of documentation for every function and module and service you decode, check them off on a checklist, and point out how you generated x pages of new docs and analyzed y% of a previously mysterious codebase. Then when you refactor, you get to point out how many thousands of lines of obsolete PL/SQL code you replaced with 10 lines of Ruby.
I would not touch with a ten foot pole the code churned out by AgileSprints(TM) held by computer-illiterate management to hit some arbitrary deadline.
The stigma is on shoddy code, which, alas, seems the norm in large swaths of our industry.
Sure its no as nice as getting to architect a whole application from the ground up. But the database seems well designed, so it shouldn't bee to much problem to make it faster and prettier and cleaner code.
Similarly, there's only short period of overlapping of the work you want to do and the work doing which you would grow. I see too often programmers jumping around abandoning their half-written application or library once it is somewhat working, never learning what semantic versioning is about, what it takes to write good documentation, or how architecture works.
I've seen people proud of having an opportunity to maintain (note: not to develop, just to maintain) big products. Such product was doing amazing things and was well-written, of course, but would you think you could take pride of maintaining somebody else's work?