Shipping is the last price a buyer sees and the one they remember. Get it wrong and it turns up in abandoned carts, complaint emails, and one-star reviews that mention postage by name. Get it right and buyers stop thinking about it, which is the goal. After a dozen stores, my shipping pricing has come down to three setups, and I pick between them by what the average order looks like.
Free shipping is a pricing decision

Free shipping is a lie everyone agrees to. The cost moves into the product price, and on the right catalog nobody minds. I do the math before committing: if the average order is 60 dollars and postage averages 6 dollars, I raise prices around 8 to 10% and advertise free shipping. On a pet supplies store, that swap lifted average order value by about 4% and cut shipping-related support tickets to near zero. Buyers compare item prices far more carefully than they compare postage, and a single line that says “free shipping” does quiet work on the product page.
The version that never works is free shipping promised and then paid for out of margin. I have watched stores subsidize postage for a year and discover it during a cash-flow crunch. The price list has to carry the parcel, or the arrangement falls over later.
The threshold trick

When the catalog is cheap or heavy, I set a free-shipping threshold instead. The number I use is roughly the current average order value plus 15%. At that height it is close enough to reach and far enough to stretch for. A basket at 42 dollars with free shipping at 50 gets extended more often than not, and I watched that single rule lift average order value 11% on a stationery store within a month. The threshold is a suggestion with a prize attached, and buyers like prizes far more than they like a shipping table.
Heavy, awkward, and far away

The two catalogs where flat and free both fail are heavy goods and international orders. Parcels get priced on whichever is greater, actual weight or dimensional weight, so a lamp that weighs two kilos but ships in a one-meter box costs like a five-kilo parcel. I learned that on a lighting store where the postage bill came in 40% over the quotes in month one. After that I measure every box and keep a rate card with the real numbers before any product goes live.
Overseas, I price by zone and keep the count of zones small: home country, one or two neighbors, one catch-all. Three zones cover the map honestly. Ten zones create a table nobody reads and a support queue for people who guessed. Where a country costs more than my margin carries, I do not ship there and I say so on the shipping page. A short list kept honestly beats a wide one kept badly.
What I tell buyers about delivery
Flat rates come next, one per zone, printed on the product page. A buyer should never meet a shipping price for the first time at checkout. Surprise postage at the payment step is the single most reliable abandonment trigger I know, and it is also the easiest to fix: state the number where the buyer decides.
Delivery time is part of the price, so I publish it plainly. “Arrives in 3 to 5 working days” or “Ships next working day” on the product page, matching whatever the carrier actually does that season. Parcels that land inside the promised window generate thanks. Parcels that land outside it generate disputes, whatever the actual delay was. I would rather under-promise on a slow lane than lose a week of email over a promised two days.
Under the hood I keep it boring: two carriers with real contracts, packaging weighed on a scale rather than guessed, and every parcel’s actual cost recorded next to what the buyer paid. When those two numbers drift apart by more than a couple of percent for a month, the price list gets a rewrite. Shipping pricing is a living thing. It gets checked every quarter like stock levels.