When I'm asked to provide an estimate for a project, I know it's not just the amount of dollars that matter. It's also the amount of time.
Time estimates are often the most mysterious to clients. "It's just an iPhone app with five screens, why will it take so long?"
Get on a boat and cruise up to a real iceberg, and I think you'll agree that it looks a little intimidating. Just wait until someone mentions that 90% of it is actually underwater! It's actually ten times bigger than what you'd otherwise think.
An app is a lot like that. Even for a "small" app, there's a whole lot of unseen work that must be done:
I could actually keep going, but I think you get the idea. Software engineering is, in many ways, similar to civil engineering. That bridge over the river doesn't look complicated, so why did it take so long to build? Consider the soil conditions, the load-bearing requirements, factors of safety, construction schedules, weather conditions, blueprint reviews, municipal inspections at each stage of construction - there's a whole lot that goes into building a bridge that users of the bridge will never see.
On the other hand, don't just take a firm's word for it. Ask questions about how they came up with the schedule, what tradeoffs went into the decision, and what kinds of options are availble for shorterning the timeline without losing quality. But hopefully you now have a sense of the kinds of factors that are involved when building a software timeline.