Person Interface

A Unified Data Layer for Scaling Contact Management with Reliability and Speed

Multiple Consumers, One Interface

Within Rox, people data needs to be accessible across web applications, mobile apps, agentic tool calls, and API integrations. The challenge isn't just about storing contact information; it's about providing a uniform, consistent view of that data regardless of the consuming application.

Our People Interface and Service architecture solve this fundamental problem by creating a single source of truth for contact operations. This access layer sits directly on top of our data store and guarantees:

  • Consistent data validation across all entry points

  • Unified business logic that prevents duplicate contacts and maintains data integrity

  • Abstracted complexity where consumers can forget underlying storage mechanisms

  • Transaction safety with proper rollback mechanisms for failed operations

The service layer pattern employed here separates by having the service layer handle transaction management and orchestration, while interface manages the core data operations.

Product Features Enabled

Contact Discovery: Persona-based people discovery for each agent a user tracks. A user and their organization have agent-suggested and configurable personas based their role and organization’s industry. The Rox agent searches for contacts in chosen accounts based on these personas using our in-house search waterfall.

Contact Enrichment: Enrich agent-discovered, CSV-uploaded, and contacts from a user’s email and calendar integrations using our in-house enrichment waterfall. So contacts a user is engaged with are automatically enriched and added to your Rox accounts by the agent.

CRM-Based Features: Just like in your traditional CRM, we also allow for user to manually add, edit, and delete contacts from their accounts. We give user’s the power to work with the agent to curate the most accurate and personalized list of contacts for each of their accounts.

Engineering the Contact Interface: Clean Data as the Foundation

Keeping CRM data clean is harder than it looks—contacts often appear in multiple places with different emails, LinkedIn URLs, or enrichment details. That’s why we built the Contact Resolution Engine, the system behind our Contact Interface that unifies records and keeps outreach accurate. Learn more about it how it works →

Scalability, Reliability, Performance & Availability

Scalability Through Database Sharding

The architecture implements a sophisticated dual-write sharding pattern. This allows:

  • Horizontal scaling by distributing contacts across multiple sharded databases

  • Gradual migration from monolithic to sharded architecture without downtime

  • Organization-level isolation for better multi-tenancy support

Reliability Through Defensive Programming

  • Duplicate prevention using the contact resolution engine

  • Transaction management with explicit commit/rollback handling at service boundaries

  • Graceful degradation - when dual-write to sharded tables fails, the system continues with primary writes

Performance Optimizations

  • Batch operations for bulk contact reads and writes

  • Pagination support with cursor-based navigation across large datasets

  • Selective eager loading relationships to eliminate N+1 queries

  • In-memory caching reducing repeated configuration lookups

  • Unified person resolution minimizing duplicate data and lookup operations

This approach ensures the system can handle millions of contacts while maintaining sub-second response times and 99% availability, all while providing a simple, consistent interface to all consumers.

Last updated