It's the development team's job to work with the customer to break down the features into small, user visible units of work, called Stories. These stories are the key to keeping development focused on visible, tangible, customer value. Once the feature breakdown is complete for the next set of features, the development team can estimate the effort involved in completing each story.
Our main planning tool is Pivotal Tracker, a web application we developed in-house that embodies many of the principles above. We use it to keep track of stories and estimate them, and to track releases and deadlines. It is used by both developers and the customer to keep track of where things are in development, and to keep development focused on the highest priority features at all times.
We use a simple, point-based system for story estimation, where the points are measures of relative complexity. Developers are much better at estimating the complexity of a problem than they are at estimating the duration of work to solve that problem.
Velocity is a measure of how many points a given team completes in a given week. Experience has shown that a given development team will work through a fairly consistent number of points on a weekly basis, and this strong central tendency means that velocity for a team becomes very predictable after the first two to three weeks of development. This will give you a very early indication of how long a given set of features will take, and give you the visibility to make informed choices about what features you choose to implement.