I like to do (define-key ac-complete-mode-map (kbd "<backtab>") 'ac-expand-previous), so that S-TAB moves up the list in case I go past the completion I want.
add ac-expand-previous and add a prefix argument to ac-expand
Why not ac-previous?
I don't like the undo behavior when using ac-expand + ac-previous. It adds an extra undo boundary.
One cannot go up and down the list endlessly with ac-expand + ac-previous; after doing ac-previous, the next ac-expand chooses a candidate and exits completion. With ac-expand + ac-expand-previous, you can go up and down the list as much as you like.
I like the symmetry of ac-expand + ac-expand-previous; they "work the same way". With ac-expand + ac-previous, going up the completion list is different than going down. I find it more pleasing if going up and down behave the same way.
Okay, I'm convinced.