Here are a few things I've concluded about developing in Angular JS over the past year -
Prefer events over watchers. When you need a bit of code to execute when something else happens, it's almost always better to use an event over a watcher. It's slightly more complicated, but if you plan for that early, your app will be a lot faster.
Extensively use ui.router
Seriously, don't bother with the built in router. Use this one, use it extensively, and your life will be easier.
Separate out your reusable components into modules.
Push as much business logic into your services as you can. Have your controllers deal with the UI bits, but the service do the actual work. Makes it a lot easier to write tests for the important bits and lets you reuse code more often.