Read Code Complete- it covers everything about this from variable naming right through to the really big stuff and it is all necessary. There is no one thing.
My approach currently boils down to writing code to do the job that needs to be done ( not for every future job the code may need potentially to do ) using informative variable names and minimal variable scope and trying to make sure that my code needs as little supplementary documentation as possible. Sometimes this makes my variable and method names a little more verbose than they used to be ( my debugging output is very compreshensive when I use that ) but they are much easier to understand.
Maintainability is also generally an outcome of solid practice in other respects - if you are writing your code in a nice DRY way then problems are easier to find, if you've got a strong set of tests then you can see if maintenance changes are going to break anything.
Ultimately it's a question of trying to be thoughtful and writing for the future- code is only written once, after that it's all maintenance...