I think a lot about programming. Most of my life is spent planning what to code, or coding it.
Tonight, it rained. It was a good downpour. As the droplets fell, I thought about it. How it saturated the piece of concrete I was focusing on. And I got to thinking about the Software Development Lifecycle.
A project is like that slab of concrete. It's a block of work, sometimes it's a small square of sidewalk. And other times, it's a highway, in which you know there is an end, but you can't see the end from the start.
The goal is to saturate the ground. Your tool, droplets of water.
In time, given enough droplets (tasks), you will reach your goal, as long as you can keep the flow going. Each droplet gets you closer to your goal.
Some people may try to estimate the time it will take given your current rate of saturation. Usually these people do not account for rework (a drop hitting the same spot), or the need to wash away some dirt (refactoring older code).
I find it easier to not worry about such things. Just be the droplet and keep on falling.