If it takes six months to design and build an application, it will take another six months to get it ready for prime time. If the software system your company is creating is highly similar to a system it has created before, you can be confident of your development schedule. If the software system your company is creating is an entirely new breed of animal, it's virtually impossible to estimate how long development is going to take. Create a generous schedule that allows for unknowns. Be realistic when you're trying to determine which of the above two situations applies.
Managers can help by keeping system definitions constant.
The system a team of engineers is creating shouldn't be a moving target. Management should use a good planning process that accurately defines the feature set for the software, and then resist making big changes once development begins. The idea is to tie programmers' careers to the success of the organization so they will be motivated to complete software as quickly as possible while maintaining high quality. It's like planning the construction of a house. You wouldn't try to estimate the completion date without talking to people experienced in pouring foundations, framing walls, and installing heating systems.