Fix the unit of comparison before anything else
The unit is one finished, sellable, inspected unit delivered to the door where you take custody. Not a piece price, not a container, not an FOB figure on one side and a DDP figure on the other. Almost every wrong sourcing conclusion traces back to a mismatch at this step, and no amount of care in the lines below fixes it.
Write down four things and hold them constant across both columns: the Incoterm and the exact delivery point, the order quantity, the specification including packaging, and the date of the comparison. Then build both columns line by line, in the same order, so the two are readable side by side. The relevant comparison is usually not 'is Vietnam cheaper than China' in the abstract but 'is this supplier, at this volume, on this lane, cheaper than the incumbent for this SKU' — a question with an answer.
Lines 1 to 5: what it costs to get goods to the port and across the water
Ex-works price is the line everyone has. Tooling, moulds and first-article samples are the line everyone treats as a rounding error until they divide it by the volume that actually materialised rather than the volume in the forecast. Inland freight and export clearance is where a new-to-export supplier quietly costs more than an experienced one, and where certificate-of-origin issuance shows up as both a fee and a lead time.
Freight and insurance behave in a way that catches people out: freight is quoted per container and paid per unit, so a lane that looks cheap at full utilisation gets expensive at the volumes you actually ship in the first year, and insurance is priced off declared value, so it moves whenever the customs value below moves. None of these lines is exotic. They are simply not in the quote you were sent, which is why the column has to be built rather than received.
- Hold the Incoterm, quantity, specification and comparison date constant across both columns
- Amortise tooling over volume you would defend in front of your CFO, not forecast volume
- Price certificate-of-origin issuance as both a fee and a lead time
- Model freight at your real utilisation, not at a full container
Line 6: customs value is not the price you negotiated
Duty is not applied to your unit price. It is applied to the customs value, which is built from the transaction value plus items the importing country's rules require you to add — assists you supplied, tooling you paid for separately, certain royalties and packing costs. If tooling appears as line 2 in your model and again inside the dutiable value, you are paying duty on a line you already counted, and if it appears in neither, your duty estimate is low.
This is also where the origin analysis and the cost model meet. The more of the finished good's content is imported into Vietnam rather than made there, the more the origin question decides which duty applies at all — so the evidence chain behind the origin claim is not a compliance chore sitting off to the side of the cost model. It is an input to the duty line.
Line 7: the duty line goes stale faster than everything else
Two rules make this line survivable: write the date next to every rate, and name the instrument it came from. The reason is visible in what happened to United States duties on Vietnamese goods inside a single year, according to the published federal instruments themselves.
The reciprocal tariff on Vietnamese goods was set at 46% under the original executive order, then superseded at 20% from August 7, 2025 — so a 46% figure has been wrong since the summer of 2025, and the tariff schedule marks that heading as terminated. The same order created a 40% duty on goods determined to have been transshipped to evade it. Then the Supreme Court held on February 20, 2026 that the emergency-powers statute does not authorise the president to impose tariffs; the follow-on executive order terminated those duties, and the related tariff headings were treated as inactive from February 24, 2026. A temporary 10% import surcharge under a different statute ran from February 24, 2026 and expired on July 23, 2026 at the end of its 150-day statutory limit. Since July 24, 2026 the operative instrument has been a Section 301 action adding 12.5% on Vietnamese-origin goods, with goods already covered by steel, aluminium, copper, vehicle and parts measures carved out of it rather than stacked on top.
Two things follow, and both are the kind of thing that costs real money. First, there is no single blended rate for Vietnam: the 12.5% sits on top of each subheading's own rate, and those range from zero on many industrial goods to double digits on apparel and footwear, so a model that uses one number for the whole catalogue is wrong for most of the catalogue. Second, the tariff schedule still prints the transshipment heading at its 40% rate with no 'provision terminated' note next to it, unlike the superseded reciprocal heading — meaning a rate read off the schedule today is not necessarily a rate being collected today. Check the instrument, not just the table.
The China column: pull your own line, and date it too
This piece deliberately does not publish a China rate. Not because the number is unknowable, but because a rate quoted in an article is a snapshot of a moving instrument, and the same instability that made the Vietnam sequence above worth writing out applies to every other origin. A landed-cost model that inherits a rate from a blog post inherits its date too, silently.
The method instead: for each HS subheading in scope, pull the base rate and every additional instrument that applies to goods of that origin from the tariff schedule and the current federal notices, record the retrieval date in the cell, and re-pull before any decision that commits capital. Two columns built this way are comparable even when the rates move, because you can see exactly what changed and when.
The same discipline applies to non-tariff costs that only exist on one side. If the goods are bound for the European Union and fall in the carbon-border sectors, the certificate obligation sits on the authorised EU importer rather than on the Asian seller — but it lands in the same landed-cost model, and the definitive regime has applied since January 1, 2026, so it is a live line rather than a future one.
Lines 8 to 11: the ones that decide the answer more often than duty does
Broker and port charges look fixed and behave variably: they scale with how often a shipment gets held, corrected or re-filed, which correlates with how experienced the supplier is at exporting your product class. Working capital is arithmetic nobody enjoys doing — transit days plus payment terms equals days of cash tied up — and it regularly reverses a comparison that unit price appeared to settle.
Quality and rework is the line that decides the answer most often. Defect rate times the cost of fixing a defect after it has landed, plus inspection cost, plus the revenue you do not get from units that arrive unsellable. It is also the line with the least data at decision time, which is an argument for a first-article and pilot-run cost you deliberately budget rather than a number you guess.
Compliance overhead is last only because it is recurring rather than per-shipment: origin documentation, audits, buyer-side regimes and the staff time behind them. It is the line where a supplier that already keeps clean records is genuinely cheaper than one that does not, which is the connection back to the six-step due diligence file. If you are also standing up in-market operations rather than only importing, the market-entry costs belong in a separate model, not this one.
The output: one page, two columns, every cell dated
The deliverable is a single page with the eleven lines down the left and the two options across the top, plus two extra rows: the date of the comparison and the assumptions held constant. Anyone who picks it up six months later can tell whether it still holds, and anyone who disagrees with the conclusion can point at the specific line they disagree with.
That is the real value of the framework. It converts an argument about a country into an argument about a line item, and line items can be checked.
