Everything was built on the synchronous API
It works beautifully in a demo with fifty products and becomes unusable at twenty thousand. The symptoms are a catalogue update that takes most of a night, a site that slows down while the sync runs, and a run that fails two thirds of the way through with no clean way to resume. Use the asynchronous and bulk endpoints for anything that touches more than a handful of records, keep the synchronous ones for single record events such as an order acknowledgement, and record the bulk reference so status can be checked and failures replayed.
Indexers and the cron queue were not considered
A successful write to Magento does not mean the storefront reflects it. Price, stock and category indexers have to run, and on a large catalogue they take real time. If cron is misconfigured, the queue consumers are not running, or indexers are set to update on save during a bulk load, you get either a site that never updates or a site that grinds. Set indexers to schedule for bulk work, confirm the consumers are running, and treat the queue depth as something monitoring watches.
The scope of each attribute was never decided
Attributes and prices can be global, per website or per store view. Once values have been written at the wrong level, cleaning them up means finding overrides that are invisible unless you look for them, and the classic symptom is a price that refuses to change on one store view no matter how many times the integration pushes it. Decide the scope for every mapped attribute up front, document it, and have the integration write at that level only.
Upgrades were treated as somebody else’s problem
Magento and Adobe Commerce upgrades change interfaces, and quarterly security patches arrive on their own schedule. An integration built against internal classes or a third party extension that has not kept pace will break on upgrade day. Build against the official REST interfaces, keep an inventory of every extension the integration depends on, test the upgrade on a staging copy with the integration attached, and agree who is responsible for the platform update before something needs patching urgently.
Credentials were issued as an admin user
Magento integration tokens carry the access of the role they are attached to, and an administrator token that leaks is a whole store. Create a dedicated integration with the narrowest resource access that works, keep tokens out of source control, rotate them, and restrict access by network where the platform and hosting allow it. Because these connections carry customer names, addresses and order history, the Privacy Act 1988 and the Australian Privacy Principles make least privilege a legal expectation and not just good practice.
Nobody load tested before November
An integration that is comfortable in July can be the thing that falls over in the last week of November, when order volume triples and the catalogue is being repriced daily at the same time. Rate limits, queue depth, indexer duration and database load all move together. Test at three times current peak on a staging environment sized like production, and agree in advance which flows can be throttled or paused during peak trading if something has to give.