CityFibre (enterprise telecoms infrastructure)
Salesforce formula fields weren't replicating cleanly into the wider data platform, so downstream teams began reproducing the same business logic themselves, causing data drift and recurring support tickets. I helped design a centralised enrichment service that became the single source of derived values, publishing complete records through Kafka.
The organisation used Salesforce as the source of truth for customer and operational data.
Heroku Connect replicated Salesforce records into the wider data platform, where state changes could be detected and published as events through Kafka. These events were consumed by numerous downstream services responsible for operational workflows, reporting and customer-facing functionality.
This architecture worked for standard Salesforce fields, but not for formula fields.
Formula fields contained important derived values and business rules. Because these fields were not reliably replicated through Heroku Connect, downstream consumers did not always receive the complete business representation of a record.
Individual engineering teams began reproducing the Salesforce formulas within their own services. This meant the same business rules existed in multiple systems, implemented in different languages and maintained by different teams.
Over time, small differences appeared between implementations. Records that should have represented the same information contained different values depending on which system was being viewed.
These inconsistencies led to operational confusion, additional investigation and recurring service-desk tickets.
Salesforce needed to remain the authoritative source for the underlying business records.
The existing platform was already built around Heroku Connect, state-change detection and Kafka-based event distribution, so the solution needed to work within that architecture rather than replace it.
Salesforce formula fields could not be treated like standard replicated fields, meaning their values could not simply be relied upon within the Heroku Connect data model.
A large number of downstream services already consumed the data. Requiring every team to change its own implementation simultaneously would have created significant coordination and delivery risk.
The solution also needed to avoid creating another conflicting source of truth. Ownership of core data, calculated values and event distribution had to remain clearly defined.
Formula logic could change over time, so the architecture needed to support central updates without requiring coordinated releases across every consuming service.
I helped analyse how Salesforce data moved through the organisation and identify where calculated values were being lost or recreated inconsistently.
I contributed to the design of a dedicated data-enrichment service responsible for producing complete records containing both source data and derived values.
The work included:
The resulting design gave downstream teams a single, consistent representation of each enriched record.
Salesforce remained the source of truth for core business data.
Heroku Connect continued to replicate supported Salesforce records into the platform and provided the state changes used to initiate downstream processing.
When a relevant record changed, the enrichment service obtained the source data and applied the required business calculations and derivation rules.
The service then produced a complete enriched representation of the record and published it through Kafka.
Downstream services consumed this enriched event rather than independently calculating missing Salesforce formula values.
The architecture established three clear areas of responsibility:
Centralising the formula logic meant changes could be implemented and tested once, rather than reproduced across multiple codebases.
It also provided a controlled location for validation, monitoring, replay and investigation when a source record or calculation produced an unexpected result.
Downstream systems could ingest complete, enriched records from a consistent source.
This reduced the number of services independently reproducing Salesforce business logic and lowered the risk of implementations diverging over time.
The approach delivered:
The solution allowed Salesforce to remain the source of truth while addressing the limitations of formula-field replication in a way that was scalable across the wider software estate.