Scalability and maintainability are the key points when writing huge software applications. We have the power of great frameworks, such as AngularJS, which enable us to develop applications really fast. But very often good software concepts and paradigms are thrown out of the window. These paradigms can give the answers to questions like: How to separate responsibilities? How to manage state? How to achieve component communication? Within this talk we will speak about how these questions can be answered within AngularJS applications.