I don't normally schedule. My active projects include what I expect to touch in the next couple of weeks. I realize that sounds like scheduling, but I generally think of it as everything that I might be working on in parallel in that couple of weeks, so it's not a prediction of what will get done when, but a list of what I'm working on essentially right now.
However, over-optimism does of course creep in--"I finished X, so of course I can regard myself as working on Y now." And then three weeks later I haven't so much as touched Y, so I throw it back into Someday/Maybe. Maybe that's because X came back to life, or Z popped up and became more urgent than Y, or the whole area that contains X, Y, and Z got de-prioritized because some other area came forward.
When I'm forced to schedule and estimate, such as estimating for a kinda-substantial (more than a couple of hundred hours) programming project at work, I generally go through a highly detailed list of what I think I'll have to do, estimating each item with what I regard as a realistic-pessimistic number. That list will no doubt change a ton, but thinking it through is an exercise that stops me from totally missing entire categories. ("Oh, they don't just need reports, they need exports. Let's ask them...Oh, for God's sake, they thought exports just CAME as spreadsheets with formulas, as if by magic? Let's add 500 hours to investigate interaction with Excel, with a disclaimer in the 'unknowns and risks' section. And they get three exports. Three. Any more, they pay more.")
Then I add a glob of time for the unforeseen. Then I blindly double all the individual times. Then I look at the overall number, and if it doesn't make me say, "That's WAY too much!" I blindly double all the individual times again and increase the amount for the unforeseen by fifty percent.