I usually use an Excel sheet, on a shared network folder: one column is used to specify the "group" of the task, and one to specify the task itself. For completed tasks, we simply mark the row in green. The primary disadvantage for that is sharing - I've yet to find a decent solution that allows more than one person to edit the backlog. We have some ways to deal with it (by limiting the updates to a specific time of day, and then having the team update it together), but it is still annoying.
For sprints with a small number of tasks, we simply write the tasks on a whiteboard, and strike over the tasks as they are completed.