I've been using a todo system based on Github issues for the better part of a year. It's been an interesting exercise in trying to corral the things that aren't done yet but that need to be.
When I started out, I dumped every last thing that I might do into the system, everything from major tasks to "do laundry" (which can seem like a major task at times). The count of undone things oscillated from 60 to 100 things to be done, which made it seem like an infinite list because it took too long to review the whole list and it was on 3 or 4 screens.
After some reflection, I decided that the only way to make progress on this list was to dramatically prune it. That means taking some items off the list that I really do want to do eventually, it's just that I'm not focusing on them now because every time I look at them on the list I say "no". Crossing them off the list doesn't completely delete them, and when I need to revisit them I can reopen the issue.
The list is down to 30 now, and I'm careful not to add more than that without crossing something else off the list. It still has a few lingering things that haven't been done for a long time, but I have had my teeth cleaned, and what's more I can read through the whole thing in one sitting and usually say "yes" to some next task.
More reading: Why limit your work in progress, Jim Benson.