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