collection of projects |

collection of projects |

collection of projects |

collection of projects |

powering smarter omnichannel marketing

powering smarter omnichannel marketing

powering smarter omnichannel marketing

powering smarter omnichannel marketing

| Q1 - Q4 2024

my role

See what my team had to say about working with me! I worked alongside a lead product designer, content designer, lead product manager, and a team of engineers. I was responsible for leading and iterating on the designs.

context

Klaviyo, built for eCommerce marketing, has served brands like Fashion Nova and Skims. However, it lacks full support for non-eCommerce objects with schemas, such as pets, subscriptions, children, schools, etc. You can think of a schema as the column headers in an excel spreadsheet: it tells you what each field is named, and what kind of data it will hold, such as dates, string (text), numeric, boolean (true/false), etc.

problem

Businesses like vet offices need to track detailed information beyond basic customer profiles. They need to manage multiple pets per owner, each with unique characteristics. However, Klaviyo currently lacks the tools to define and organize this data, making it impossible to personalize communications effectively. This gap in functionality forces these businesses to seek alternative solutions.

Non-eCommerce customers are currently forced to use a clunky workaround: creating numerous custom properties for each pet, per profile(pet owner). This creates a massive, frustrating data management burden.



timeline

objects in profiles

As a marketer when one of my customer's is having an issue with their order, I want to quickly find the order they’re talking about on their profile page, so that I can either give them a quick answer or else dive into our eCommerce platform to diagnose the problem or make a change.

  • View all records of the Order object

  • View all fields that define the Order object

  • View other objects the profile has.

objects in flows

As a marketer, when leveraging data that is stored as a custom object (think pets, children, appointments, subscriptions, classes, etc.), I want to filter my flow splits based on attributes of this data (like their existence, current status, and properties), so that I can send highly personalized and targeted messaging.

Today, I have to guess how many instances of these objects I want to support (e.g. a max of 3 pets) and then duplicate the fields for each object as a custom property for each pet (e.g. “pet_name_1”) so that I can create one flow for each instance (e.g. “pet_1_birthday_flow”, “pet_2_birthday_flow”, etc.).

This is suboptimal because my profiles can have an unknown number of these things (e.g. booked concerts, hotels, or appointments), so I have to create a new filter condition for every copy of those instances within a flow. (e.g. “pet_1_pet_breed”, “pet_2_pet_breed”... pet_200_pet_breed.)

Outcome: Increased KAV because it is significantly easier for brands to build KAV driving flows using their data now that they can store it in custom objects.

objects in segments

As a marketer when I create a campaign, I want an intuitive way to segment my audience based on information I am storing in my custom objects, so that I can ensure my content is highly relevant by targeting the right audience.

Today, I have to know how many potential records a profile may have for each instance of the thing I would typically model as an object, store each instance of these things in profile property (either as lists or as enumerated fields), and then add a separate condition for each one in my segments.

This is suboptimal because it requires extensive data manipulation by a developer to get the data into a shape I can use and a significant amount of my time repetitively building the right filters for a segment. If I ever need to change anything then I may have to update each of those filters for every segment. This may be prohibitive if my customers can have more than one or two instances of something.

objects in campaigns

As a marketer when I am writing a message that will use data stored on a custom object, I want an intuitive way to identify and insert the data from the specific object relevant for the profile receiving the message without having to write code, so that I can fully leverage my customer data without needing a developer.

Today, I have to know the ID for each object record so I can reference it in the profile, forcing me to only use flows triggered off of events containing the IDs for the desired object records.

This is suboptimal because it requires extensive development tooling and skill while also severely limiting Klaviyo’s functionality.