My software teams have used Basecamp, GitHub, JIRA, PivotalTracker, Trello, and a spreadsheet for project management.

The most efficient team was the one that used the spreadsheet as a simple priority queue. Whenever there was something to do, we added it to the spreadsheet and stuck a priority on it.

Description                                   Priority        Who?
Fix bug in payment system.                    3               Wong
Add rate limiter to SMS messaging.            1                          
Filter users based on email address domain    2

If someone was working on it, we also added that person's name. If the priority of the item changed, then we changed the priority value.

If I were to recommend this to a team, I would probably add an ID to each task. That way we could tag commits and/or branches.

git commit -m "[bug-32] fix bug in payment system

If a team absolutely needed to use something more complex than a spreadsheet, at this point in my career, I would recommend GitHub issues. Many developers already know how to use the UI, and issues integrate well with code review tools.

These two tools could work in combination. First add the task to the spreadsheet. Then, if the limitations of a spreadsheet are becoming an issue, then create an associated GitHub issue.

That would leave us with a five column spreadsheet.

ID         Description             Priority     Who?      Issue Link
bug-32     Fix bug in pa...        3            Wong
           Add rate limi...        1                          
           Filter users ...        2