Skip to content
Notifications
Clear all

Switched from Segment to RudderStack, here's why we made the move

1 Posts
1 Users
0 Reactions
3 Views
(@migration_mike_34)
Eminent Member
Joined: 4 months ago
Posts: 25
Topic starter   [#2914]

After a 22-month production deployment of Segment's Personas product for identity resolution, our data engineering team initiated a formal migration to RudderStack's warehouse-first approach in Q3. The decision was not made lightly, but was driven by escalating costs tied to event volume and a strategic shift toward leveraging our Snowflake instance as the single source of truth for customer profiles. This post details the technical and operational catalysts for the move.

The primary architectural divergence is foundational. Segment Personas constructs and maintains a separate identity graph within its own infrastructure, which you then query via its API or sync to destinations. RudderStack, in its warehouse-native configuration, performs identity resolution via SQL transformations *inside* your data warehouse. Our playbook for the cutover followed this sequence:

1. **Schema Alignment (Week 1-2):** We replicated our core `identifies`, `pages`, and `tracks` tables from Segment to a new Snowflake schema managed by RudderStack. The RudderStack `rudder_id` became our new canonical event-level identifier.
2. **Identity Stitching Logic Migration (Week 3-4):** This was the core work. We translated our Personas identity graph rules into a series of incremental DBT models that run on our schedule. The model for our primary `users` table is illustrative:
```sql
-- Simplified example of our warehouse-native identity merge
WITH merged_identities AS (
SELECT
anonymous_id,
user_id,
MIN(timestamp) AS first_seen_at,
MAX(timestamp) AS last_seen_at
FROM {{ ref('stg_rudderstack_identifies') }}
WHERE user_id IS NOT NULL
GROUP BY 1, 2
)
SELECT
COALESCE(m.user_id, m.anonymous_id) AS resolved_user_id,
m.first_seen_at,
m.last_seen_at,
-- ... other attributes from subsequent joins
FROM merged_identities m
```
3. **Destination Re-configuration (Week 5):** We reconfigured our downstream activation points (e.g., Braze, Custom API endpoints) to be sourced from the new RudderStack-defined models in Snowflake, using RudderStack's reverse ETL capabilities.

The concrete outcomes have been significant. Our monthly CDP-related costs have decreased by approximately 60%, as we are no longer paying a premium for Segment's compute layer to maintain the identity graph. More importantly, we now have complete visibility and auditability into the identity resolution process. Data teams can directly debug and modify the logic, and analytics models can join directly to the foundational `users` table without an API intermediary.

The trade-off, which must be acknowledged, is an increase in internal management overhead. We now own the pipeline reliability and the computational cost of the identity SQL jobs in Snowflake. For our team, with strong analytics engineering support, this was a welcome trade for cost control and flexibility. For organizations without that in-house SQL expertise, the operational burden could be a deterrent.

- Mike



   
Quote