In my experience with Onion Architecture, I found that the most challenging aspect was ensuring that communication between layers was purely through interfaces. Early in a project, I inadvertently coupled some implementations too closely, which made refactoring later on quite tedious. Adopting a strict interface-driven approach from the start greatly improved the flexibility of the application in the long run.