How to choose: match the billing model to how defined the work is
The decision hinges on one question — can you write down what "done" means before work starts? If yes, fixed-price is the cleaner fit: the spec becomes the contract, and the developer absorbs the estimation risk. If no, hourly is more honest, because nobody can quote a price for work that isn't yet defined.
A practical rule: discovery, debugging an unfamiliar legacy codebase, and open-ended maintenance belong on hourly. A new MVP, a specific feature, or a marketing site belong on fixed-price. When a project has both — an unknown phase followed by a known build — split it: a small hourly or fixed-fee discovery sprint to produce the spec, then a fixed-price quote against that spec. That sequencing removes most of the disputes that come from quoting a blurry target.