I do not choose architecture by the name of a pattern, but by the complexity of the problem. The goal is clear boundaries, safe changes, and a solution proportionate to the application.
How I think about architecture
UI, Application, Domain, and Infrastructure boundaries
For more complex parts, I separate inputs, use cases, business rules, and technical details so a change does not flow through the entire system.
Ports and adapters for the outside world
Application logic depends on its own interface; a database, queue, or external API is its concrete adapter.
Transactions at the use case
I keep a transaction boundary where an application performs one related business operation, not randomly inside an infrastructure detail.
Pragmatism before dogma
When complexity does not justify more layers, I stay with a simpler Controller → Service → Doctrine solution.