For small backlogs and non-technical users, Trello can be effective, but mature software projects tend to accumulate thousands of open bugs and feature requests and things-we'd-like-to-do-better-someday-if-we-ever-have-the-time. Trello's cards aren't skimmable, and you can't sort and filter them by multiple dimensions the way I'd prefer. There's no way to group a bunch of cards into something like an epic. And I still haven't figured out in Trello how to assign a card to one person but have other people subscribe to updates on it. It's ok to be the engineer assigned work via Trello, but it's awful to be the project manager trying to manage a backlog in Trello.
Asana is good for personal to-dos and tiny projects, but it's awful if you need to track the status of an issue through multiple steps of a process. It's a nearly perfect platform for GTD lists. But GTD is not a system for communication among multiple people.
Finally, both Asana and Trello are missing unique, persistent, human-readable issue IDs that can be used to quickly refer to and pull up a specific item out of hundreds or thousands that may have similar keywords. It seems like a small thing, but is a huge deal dealer for me because it breaks communication.
As for Basecamp, which someone else mentioned, I find it effective for communicating about a project with clients, but not for tracking the internal status of a large number of tasks for some of the same reasons outlined above.