JSON Segmentation & Filtering
Summary
While on the Data squad, this feature was one of my more complex and technical pieces that required a lot of nuanced UX thinking and collaboration to serve both advanced and less advanced users and handle some unavoidable edge cases. Initially, the proposal was to provide auto-filling of arrays and objects as the user typed using dot notation. Still, the backend could not support that level and load of dynamic querying, so we had to lean heavily on UI design to make up for it.
Team
- CTO
- Data Product Manager
- Data Engineering Manager
- Data Product Designer (Me)
- Frontend Engineers
- Backend Engineers
Problem to solve
Customers frequently work with complex data containing arrays and objects (with nesting) as well as strings, numbers, and so on. Currently, Customer.io does not support arrays and objects as datatypes when segmenting and filtering, which means users are very restricted in what they can do with their data. The concept of parent-child relational data does not exist. As a result, customers are heading to competitors to have more autonomy, depth and flexibility in communicating with their customers.
Opportunity
Customer.io have an opportunity to close a competitive gap against both Iterable and Braze by implementing the ability for users to segment and filter using JSON array and object (complex) data. Since ~December 2021, Iterable has supported segmentation and Query Collections on profile and event attributes that include arrays of objects and has been effectively selling against Customer.io with their new capabilities. Braze was close behind, with early access features for profile and event attributes.
Result / Proposal
Make it possible for users to filter / segment using array and object datatypes by implementing dot notation capabilities to the condition builder when a user creates a new segment. The user, whether a new user or an existing user, must be able to find or discover this new capability quickly, and the solution should empower advanced users and assist less advanced users.