I am a big fan of creating to-do lists. The primary reason is that they help me focus on the tasks that needs to be done, prohibiting me to drift into procrastination mode.
I usually write todos on a piece of paper when sittingat my PC. When not working, or when I require that my list of tasks are available anywhere I use Todoist.
Todoist is a To-do web application with a dedicated Android and iOS app. I use the Android app when on the go and the web application whenever I am at a desktop environment.
Todoist allows tasks to be scheduled using dates and relative time such as today, tomorrow, nextweek. Todoist can group tasks into user-defined projects using an hashtag.
Todoist provides auto-completion and intellisense making it easy to schedule and group tasks correctly.
On the programming side of things, Todoist has a RESTful API which one can use to interface with Todoist. Although I have yet to use this API, I might at some point implement a desktop application that can insert a task from any application (I miss such a feature).
Todoist comes in two flavors: Free and Premium. The freeversion supports the features described above. The Premium version also allows one to see done tasks, add labels and add comments to tasks, among other things. The free version does not support this, although I have not found these shortcoming a problem yet.