2) Its an MVVM framework, not a MVC. I come from Rails Background and expected a MVC approach. Once I understood the differences between MVVM and MVC, AngularJs made much more sense.
3) Structure is critical. Perhaps this is true of any good web app, but taking the time to plan data models, processes and screens really helps. This thinking then needs to be converted into an AngularJS structure - states/routes, scopes, factories, services, controllers, and directives.
4) Directives make AngularJs really powerful. If you're new to AngularJs, directives might seem a strange concept. They are really just injectable, reusable code that can keep your controller skinny. If you find yourself repeating code, then chances are, you should be using a directive.
5) When you can think of 3 ways to solve something, chances are you need to think harder as there are probably another 3 ways. Which leads into my next point...
6) Stack overflow has lots of 'wrong' answers. They might work but there are better solutions. AngularJs should be 'elegant', so when something feels too complex, it probably is.
7) Scope inheritance between controllers is based on nesting of views and html, not the structure of your states or controllers. However, if you start accessing scope in parent controllers with $parent then you should consider using a factory.....
8) Data binding across controllers should use a factory / services. Great video from thinkster that explains it. Also worth reading this stack overflow question to see a mistake I was initially making.