I suppose that can happen when you're being quick or you've got a team.
I mostly code for myself, or with a friend, so I don't have many hands in the pot. I also make it a point to update my code regularly. I update function names if their function changes. I don't wait. It saves me a lot of time in the long run.
Early on I ran with it and didn't make those changes. Now I do. Because of that, I can still go back to code that I wrote months ago and understand, with little effort, what I was doing.
I also design my codeas much as possibleto keep everything in one place so that I have to make as few changes as possible. I mostly write in PHP, so a lot of the stuff is multiple small functions in my library that are called by one main function. The main code on my pages refers back to the main function in the library. It's highly unlikely that those names will change, so I really only have to make changes in one place. Find and replace makes that easy (and TextWrangler supports PCRE if it gets hairy so there's never a problem).
For instance, I might have a function called display_movie() on a page. display_movie() would instantiate my db class, grab the movie's information, then it might call a helper function to put a quicktime movie on the page, and then call another function to put in any details that belong to the movie (because images use the same function). You get the idea. It doesn't matter what I do to anything else, display_movie() will always be display_movie(). And because of that, all of my code can be contained in one place.