Don't treat everything as a complex problem but rather give default estimates for classes of work and then work exceptions. For example, some teams say “relatively speaking all TRs are a 1. If someone thinks a TR is not a 1, then we will estimate that exception.”
This idea simplifies the estimation process and reduces the time required but still provides room for exception. The downside is that you miss the discussion about the requirement that you get through the process of estimation and so is more prone to error (for example, everyone understands the requirement, but they understand it differently, or no one really sees this items for the work that it will really involve).
I suspect this approach is best use of sub-classes of all the estimates required and for stable teams with fairly stable work.