Integration always takes much longer than you think because:
Data formats often not documented or out of date.
Need two parties to agree instead of one.
Both ends of the connection need to be available for sufficient testing.
Message failure and message retry is usually not estimated.
Legacy data formats usually inconsistent, unless it is XML and has a very clear XSD schema.
Data quality requirements are rarely stated in advance. For example, Production data is inconsistent, does not have referential integrity, or even tables are empty.
Capacity planning is not usually done for dev/test/prod environments.
The developers doing the back-end work are not on your team and are shared between you and other projects.
Dependencies on people who don't answer to you. They do not attend morning standups even though they should, and have not given commitments to the team for completed work.