From Michael Feathers' outstanding Working Effectively with Legacy Code:
The main thing that distinguishes legacy code from non-legacy code is tests, or rather a lack of tests.
In other words, if you’re still writing code without tests, you’re still writing legacy code.