When it matters I also put the datatype, range and unit of each variable and the datatype of the return value. E.g.
savedialog_button_add(p, x, y, ascii_upper, ascii_lower, key) put a button with a size of 32 x 32 pixels on the screen centered at panel-relative position (x, y) on panel p where (0, 0) is the top-left of the panel, and that represents the character with ASCII value ascii_upper when shift is used, ascii_lower otherwise, and that is activated when the key with keycode key is pressed.
int ix(int i 1..world_width cells) 0..room_width pixels Returns the room x-coordinate of the left hand side of the ith cell.
Edit: although I have to say, I usually keep script names so descriptive that this sometimes feels superfluous. It's more to have a list of all scripts. Also, the above explanation is always at the start of the script itself, in the code. /edit
I also keep to-do lists, but usualy not right from teh start. I also use the "done" list for the same purpose as Smarty - to remind myself that while a lot needs to be done, a lot is already finished as well! My to-do list looks like my code: like a rainbow, with tasks categorized into e.g. "graphics", "audio", "coding", "design", "balancing" etc.