In this project for Haveselskabet, I was tasked with investigating and fixing data synchronisation issues between an Umbraco CMS and a customer-controlled external platform. The two systems were integrated through webhooks, with the external platform acting as the source of truth. While the CMS only attempted to update user data, the actual validated data was always pushed back from the customer platform. However, this led to recurring issues in the user profile sync, where data would unexpectedly overwrite or fail to update correctly.
After auditing the backend codebase (built with C# and Razor Pages), I discovered multiple concurrency issues and race conditions in the webhook processing pipeline. Because both systems operated on a near real-time stream of updates, minor delays or overlapping requests resulted in state mismatches. In particular, simultaneous webhook triggers would interfere with each other due to the lack of proper locking or deduplication logic, causing cascading desyncs.
I refactored the webhook handlers to be more robust and idempotent. This included introducing correlation tokens, rejecting duplicate updates, and enforcing sequential execution of webhook calls where necessary. On top of that, I implemented detailed logging and versioned update tracking, which allowed us to trace the exact flow of every profile change across systems. These improvements significantly increased sync reliability and eliminated the recurring data corruption issues.
The project sharpened my understanding of distributed systems, real-time syncing challenges, and concurrency control. It also demonstrated the importance of treating external systems as unstable by default and designing for resilience rather than assuming perfect communication. This experience has made me more confident in handling cross-system integrations and debugging hard-to-trace data bugs in production environments.