A framework, by definition, provides a basic set of tools for application development we can use to avoid writing repeatable code. It often encourages to take shortcuts to enable rapid development. In theory, we only need to implement the part which is specific to our domain. In practice, we often end up with highly coupled code, mixed layers and a dependency graph deceptively close to spaghetti.
Jakub will take Symfony as an example to present techniques of decoupling from a framework and keeping it on a distance.