I don't like "To-do Lists".
But for the last 10 years or so, I've been working on and with "To-Do Queues" and I really like them.
What's the difference?
To-do lists focus on showing you the overall list, and side-track you into admiring the tasks done, the overall shape and structure of the list, and spending your time fiddling with and "gardening" the list.
In contrast, a "To-do Queue", by default, shows you only the NextItem.
The thing to do. Then you just go away, stop faffing with the list and with a "methodology". And do the damned item!
Then cross it off and on to the next one.
A To-do queue app gives you other functions to manipulate the queue .. eg. throw items backwards into the future, or pull items that match a specific name to the front of the queue, or to "nip" and "tuck" (the kind of "stack oriented" operations you get in ForthLanguage).
But the idea is to minimize the time needed to work with the structure of the to-do list, itself, and to let you focus on other things like doing the to-dos.
My To-do queue app is MindTrafficControl.