What Goes in the Specification
Seven sections in this order. Each one depends on the ones before it, which is why writing them out of sequence produces a document that contradicts itself.
The flow list
Every data flow as a single line: what moves, from which system to which, in which direction, how often, and roughly how many records a day and at peak. Ten to twenty lines covers most businesses. This list is what people should be quoting against, because counting flows rather than systems is the only way two proposals end up describing the same work. Write it before anything else and get the operational people to check it, because they will name flows the managers have forgotten about.
Ownership per data type
For every data type, name the one system that may create and change it, with everything else reading. Products, prices, stock, customers, orders, invoices, tracking. Where two systems genuinely both need to write, say which fields each may write and what happens when they conflict. This section is short, it takes the longest to agree, and skipping it is the single most reliable predictor of an integration that corrupts data slowly enough that nobody connects it to the integration.
The field mapping table
Source field, destination field, any transformation, whether it is required, and what happens when it is empty or invalid. Include the unglamorous ones: date formats, currency, units of measure, tax codes, truncation where a destination field is shorter, and any value list that has to be translated. This is the longest section and it is where the real work of specification lives. A supplier who cannot produce or check this table has not understood the job.
Matching and duplicate rules
How a record in one system is recognised as the same thing in another. Which keys are tried, in what order, what constitutes a confident match, and what happens to a partial one. State plainly that ambiguous records go to a queue rather than being merged automatically, because automatic merging of customer records is close to irreversible and is regretted about a year later. For Australian trade customers the ABN is usually the strongest key and it is frequently absent, so the fallback matters.
Exception handling
For every way a record can fail to process, say where it goes and who looks at it. A queue with the reason attached, an alert to a named role, a retry policy with a limit, and a rule for what the source system shows in the meantime. The default behaviour in unspecified integrations is a silent skip, which is the most damaging option available because the business keeps trusting numbers that are quietly incomplete.
Acceptance tests and non functionals
A list of scenarios that must work, written as inputs and expected outcomes, including the awkward ones: a duplicate, a refund, an oversized order, a record with a missing required field, a vendor outage mid transfer. Alongside them the non functional expectations: how fresh data must be, what volume must be supported at peak, what monitoring exists, how quickly a failure is noticed, and what happens during a vendor outage. These are the things that turn out to matter in production and are almost never written down.