On the example of the applications developed at Avito I will tell you how to prevent controllers from knowing their surroundings, make them reusable and testable, and how to build navigation between them.
1. Problem description (start logics, flow, data transfer between the screens, testing)
2. Difference between a Framework and a Library. Why UIKit is framework, and why it is bad that it calls our code.
3. Coordinators. What are they and what they are responsible for, how they help to solve problems from item 1.
4. How to refactor the existing code with coordinators.