IMHO backward still stands for a single occasion: you compiled AND shipped an app to "vendorize it" rather than for speed purposes only... and you expect your app to work also in a latter web2py release.
That being said, there are two main topics:
- why controllers and models use a "." and views use a "_" ? even if there's no real reason (I'm not saying there isn't, just that I don't recall why at some point we switched) normalization would help keeping things in check
- given backward compatibility is needed, in this (and other occurrences), core code should check for the "latest way of doing things" and return early ELSE do all the the further step(s) more to ensure backward compatibility at the expense of efficiency and speed. Warnings on CHANGELOG should warn users about relevant state of things.