Bulk pricing is real, and so is the cost of a compound full of material you cannot use for three months. The difference between the two is a delivery schedule.
Add wastage deliberately, not generously
Every trade has a working allowance, and rounding up "to be safe" on all of them at once is how a budget quietly grows by a tenth:
Floor and wall tiles: 10% on a simple rectangular room, 12–15% where there are diagonal laying, many cuts, or small rooms.
Blocks: around 5%, mostly breakage in handling and transport.
Reinforcement: depends on the bar schedule and stock lengths, not on a percentage. Take the cutting list to the supplier.
Cement: order to the pour, not to the project — it is the one material that degrades in storage.
Phase the delivery, fix the price
The useful negotiation is not "how much for everything" but "what price if I commit to everything and take it in three drops". You keep the volume price, the supplier keeps a confirmed order, and your site holds only what the next fortnight needs.
Get the schedule in the order itself: quantities per drop, dates, and what happens if a drop slips. A delivery that arrives a month early is a storage cost you agreed to without noticing.
Let storage set the limit
Before confirming any quantity, walk the site and answer three things: where it goes, what covers it, and who moves it. Material stored badly is material bought twice — and cement, tiles and timber all have shorter shelf lives on a wet site than anyone budgets for.
Keep a named surplus
Deliberately keep a small, labelled surplus of anything that must match later: tiles from the same batch, a bundle of the roof's own screws, a litre of the final paint. Everything else, order to the measurement.

