This is one of the most overlooked gaps in Jobber, and you've described it perfectly. Most people just live with it, but it's actually solvable without waiting on Jobber to build a native duration field. The short version: duration doesn't have to live inside Jobber to work with Jobber. You can build a layer around it that tracks estimated time per job type, feeds that into how jobs get placed on the schedule, and stops your unscheduled jobs from defaulting to a meaningless 1 hour. Once that's in place, your office isn't manually dragging jobs around or guessing anymore. The schedule actually reflects real job length.
I've worked through this exact problem before, and the fix is less complicated than most people assume once you see how the pieces connect. Not going to lay out the whole system here since it really depends on how your team quotes and routes jobs, but if you want to compare notes on your setup, happy to talk through it.
How many job types are you typically juggling? Is it a handful of standard services, or does almost every job need its own custom estimate? ProperGuy