Skip to main content

Campaign Classification Guide

Introduction: read me!

With Campaign Classification we mean a set of rules and labels that allow us to conveniently tag campaigns, and enable better insights by providing a way to pull out only relevant data to answer specific business questions and to being able to take targeted data-driven actions.

Our solution requires each campaign to be qualified by three fields, which the internal campaign owner must properly set and promptly follow up in case of changes: Campaign Class, Campaign Family and Campaign Status Details. At the time when this page was written, this was possible by accessing the Campaign View Page of the tryber.me back-office and acting on three dedicated single-choice drop-down menus. Values displayed in menus can be updated according to changes in needs. miniatura

This guide is dedicated both to people who create the data (creating and managing campaigns) and to those who need to access and analyze data (e.g. Holistics users): synergy, understanding and proactivity in communicating changes in needs and in the operational scenario is of paramount importance for the efficacy of this approach, that might be even misleading otherwise; periodically checking this guide for changes and talking with colleagues are both good practices.

Please notice that, as a system of tags, the actions here described have absolutely no impact platform-side or, in other words, acting on campaign classification field won't have any effect either on features or contents of a campaign. Campaign classification has no direct relation and must be not confused with Campaign Category and Campaign Type.

Campaign Class

The first attribute of a campaign to be set is the Class .

By means of the Class, our goal is to qualify the campaign ontologically, as an entity, or in other words to declare the reason why it was created.

As such, this attribute is not supposed to vary in most scenarios, although this operation is always permitted.

The logic is simple: is it a real campaign run for a real customer, to make money? It's a Business one. Is it a fake campaign with the only purpose to show how things work while onboarding a new colleague? It's a Mock one. And so on.

In the following, please find a comprehensive table to guide you among every possible supported scenario. If something is not clear or you think your case is not supported, please speak up with your manager and data team. Campaign classes available in the drop-down menu can be updated, but the need must be proved and the decision must be shared across the company.

ClassUse CaseFurther info
BusinessReal campaign run for a real customer.Usually profit-related / sold for tokens.
POCThe campaign is a POC or a CCCPProof of Concept campaigns (ex CCCP, ex BizDev, now Sneak-Peek, tomorrow who knows) or free trial campaign, run with the purpose to acquire new customers.
TrainingCampaign to train and challange trybers (community)Class usually used by Community team, to tag campaigns whose aim is to coach new trybers, either by educating them to useful concepts and new skills or by engaging them in challenge and training activities.
Internal COPSInternal / community / operations campaigns created for operational needs or accounting purposes of internal activitiesClass reserved to tag campaigns whose aim is to support / be the platform-counterpart of various internal operations. In general, it can be used to tag any behind-the-scenes work activity that has no place in the other categories, or when there's no direct link to an agreements or a customer to charge. This tag is especially relevant when payouts or purchase orders occurred. No/only-fake customers are expected as well as no/only-zero tokens charged.
MockFake campaign created for demo / train new colleagueTo train new colleagues, as well as to show something to someone or whatever, it may be convenient to create a fake campaign to play with. No problem! Just tag it as class='Mock' to not affect real data quality.
DuplicatedCampaign created by accident / with errors.Some mistakes that may occur creating a campaign could not be fixable and deleting a campaign is not possible from tryber.me back-office. Under this circumstance, you can just tag the broken campaign as class='Duplicated' and move on creating a fresh new one as needed. This allows a seamless operativity without affecting data quality.
Test ReleaseDev: campaign to test new features on the platformIt may be convenient to further validate released features or pieces of code in real world / production environment. Should this involve the creation of a campaign... no problem! Just tag the campaign(s) as class='Test Release' to not affect real data quality. This class is intended to be used only by devs/designers.

Other classes you may find browsing data

Browsing data you may fall across campaign classes not reported in the table above. At the time when this document was written they are:

  1. 'Undetermined<nowiki/>' - We retrospectively tagged all the campaigns in our databases, by hand, back to 1st January 2020 to validate the approach and create a history. All previous campaigns will have 'Undetermined' class.
  2. NULL (blank) - The person in charge to manage the campaign has not assigned a class yet. Be patient, it's just a matter of time. If the situation persists for a long time please contact the data team!

Campaign Family

The second attribute of a campaign to be set is the Family.

By means of the Family, our goal is to qualify the campaigns by their afferent business unit, usually related to the kind of activity performed inside it or, in other words, its object.

As such, this attribute is not supposed to vary in every known scenarios, although this operation is always permitted.

The logic is simple and independent from the class' one: are you carrying on bug-hunting-like activities in this campaign? Its family is Functional. Is it something weird and unprecedented? Then it's Special.

In the following, please find a comprehensive table to guide you among every possible supported scenario. If something is not clear or you think your case is not supported, please speak up with your manager and data team. Campaign Families available in the drop-down menu can be updated, but the need must be proved and the decision must be shared across the company.

Families, in particular, can have a huge impact on other logics (e.g. community guild membership calculations, at the time when this document was written) so do not underestimate the importance of set them carefully.

FamilyBU / Service Portfolio labelCampaign objectFurther info
FunctionalSoftware QualityFunctional testing / Bug hunting (like) related activities-
UXExperience Optimization –UX/CX/?X (like) activities; Research and Interviews.-
Ethical HackingCyberSecurity – WhiteJarCybersecurity (like) related activities.-
Community-Community activities not covered by previous families.They know.
SpecialExtraNovel non-catalogue activities. Non standard object/objective.PLEASE NOTE: it's not a matter of how / of size, but it's a matter of what, it's about the content. A super big bug hunting campaign with thousand of tester may be not typical, but it's still a Family='Functional' campaign.

Other families you may find browsing data

Browsing data you may fall across campaign families not reported in the table above. At the time when this document was written they are:

  1. 'Undetermined<nowiki/>' - We retrospectively tagged all the campaigns in our databases, by hand, back to 1st January 2020 to validate the approach and create a history. All previous campaigns will have 'Undetermined' family.
  2. NULL (blank) - The person in charge to manage the campaign has not assigned a family yet. Be patient, it's just a matter of time. If the situation persists for a long time please contact the data team!

Campaign Status Details

The second attribute of a campaign to be set is the Status Details. Since the campaign status button has an operation role and provides only 'Open' and 'Closed' options, we set up this attribute to complement the actual campaign status and possibly to replace it, of course only for analytical purposes.

The aim of the Status Details is to track the progress and the outcome of a campaign, and therefore must be promptly updated concurrently to any changes that might have occurred. There are no constraint implemented on the relationship between Status and Status Details although, theoretically, there are some of course.

In the following, please find a comprehensive table to guide you among every possible supported scenario. If something is not clear or you think your case is not supported, please speak up with your manager and data team.

Status DetailUse caseCompatible Campaign's Status expected
PlannedA campaign has been created in great advance compared to its start date, just to insert it in the platform and maybe perform some preliminary operations, but it's still not actually running. Most of campaigns never pass by this state.Open
RunningCampaign activities are actively ongoing. This is the most typical status for open campaigns, that usually holds from start date to close date.Open
PausedCampaign's activities have been put on-hold due to some issues / needs. Uncommon.Open
AbortedCampaign failed / interrupted by the customer who won't proceed. Uncommon.Closed
SuccessfulCampaign completed. This is the most typical status for closed campaigns, that usually holds from close date on.Closed

Other status details you may find browsing data

Browsing data you may fall across campaign status details not reported in the table above. At the time when this document was written they are:

  1. 'Undetermined<nowiki/>' - We retrospectively tagged all the campaigns in our databases, by hand, back to 1st January 2020 to validate the approach and create a history. All previous campaigns' status details are 'Undetermined'.
  2. NULL (blank) - The person in charge to manage the campaign has not assigned status details yet. Be patient, it's just a matter of time. If the situation persists for a long time please contact the data team!

LEGACY

!!! Warning !!! The contents below are DEPRECATED and are NO LONGER VALID (from 27th June 2022)

They reflect a previous prototype implementations of campaign classification based on conventions and automatic rules. It was helpful to design the current approach but had limitations and has been fully replaced with the approach documented above.

So why we left this piece of documentation? Because someone might find it useful, to understand something about past data and to better shape the future learning from the past.

Campaign Class

Differenziare le campagne di business da quelle di uso interno è molto importante. Per questo abbiamo creato la Campaign Class che usa il Project e talvolta un tag nel campaign title per instradare ogni campagna ed assegnarla ad una sua classe di appartenenza.

+Use caseActionProject (Customer)TagCampaign Class
Parte una campagna cliente...secondo necessità!Business
Ho creato una campagna ma ho sbagliato qualcosa.Duplicated (Duplicated)Duplicated
Ho già creato una campagna per un cliente che decide però di interromperla....nessuna modifica o riassegnazione project!@abortedAborted
Arriva un nuovo collega, devo creare una campagna per insegnargli ad usare la piattaforma.Prova (Prova)Mock
Community: Parte una campagna POC o CCCP- POC (POC)cp title comincia con 'BIZ 'POC
Community: Parte una campagna di training- RAOTraining
Community: Parte una campagna interna- Community AccountingInternal COPS
Dev: Viene creata una campagna per testare le nuove features sviluppateTEST RELEASE (TEST RELEASE)Test Release

Campaign Family

Per indirizzare le varie tipologie di campagne nelle macro aree a cui appartengono abbiamo creato le Campaign Family. Queste ci permettono, attraverso il campaign type, di risalire alla Business Unit. Qui una tabella che indica ogni campaign type a che Campaign Family appartiene.

+campaign type idcampaign type nameCampaign Family
1Functional Testing (Bug Hunting)Functional
2User ScreencastUX
5Prototype TestingUX
6Competitor BenchmarkUX
8Test Book TestingFunctional
10Click DaySpecial
11Explorative TestingFunctional
12New OS TestingFunctional
13Bug Hunting & Customer FeedbacksFunctional
14Device Compatibility TestingFunctional
16Regression TestingFunctional
17Localization Testing [1 country]Functional
19Usability TestUX
20Benchmark Usability TestUX
22Performance TestingFunctional
23Security Bug Bounty ProgramEthical Hacking
24Accessibility TestingSpecial
25Chatbot and Voice Training & TestingSpecial
26Quantitative A/B testingUX
27Qualitative A/B testingUX
28Gaming TestingSpecial
29Payment TestingFunctional
30Complete Customer Journey AnalysisUX
31Moderated Usability TestUX
32Usability Test (video subtitled)UX
33Special ProjectSpecial
34QL on SiteSpecial
35Always onFunctional
36WebinarCommunity
37TrainingCommunity
38Instant FunctionalFunctional
39RecruitingCommunity
40SpecialSpecial
41Instant Thinking AloudUX
42Instant SurveyUX
43Vanity ChallengeCommunity
44KPI ChallengeCommunity
45Social ChallengeCommunity
49UX ChallengeCommunity
50Quiz ChallengeCommunity

Query

WITH
campaign_class_table AS (
SELECT
pj.id as project_id,
CASE
WHEN pj.display_name in ('POC', 'BIZ per SALES') THEN 'POC'
WHEN pj.display_name = 'TEST RELEASE' THEN 'Test Release'
WHEN pj.display_name = 'Prova' THEN 'Mock'
WHEN pj.display_name = 'Duplicated' THEN 'Duplicated'
WHEN pj.display_name in ('RAO', 'Training TC', 'Community: Active Tester', 'Challenge') THEN 'Training'
WHEN pj.display_name in ('Community Accounting', 'AQ Internal', 'Community giveaway', 'Community Link Referral MVP', 'WhiteJar Link Referral') THEN 'Internal COPS'
ELSE 'Business'
END AS campaign_class
FROM wp_appq_project pj
),
campaign_family_table AS (
SELECT
ct.id AS campaign_type_id,
CASE
WHEN ct.id IN (1, 8, 11, 12, 13, 14, 16, 17, 22, 29, 35, 38) THEN 'Functional'
WHEN ct.id IN (2, 5, 6, 19, 20, 26, 27, 30, 31, 32, 41, 42) THEN 'UX'
WHEN ct.id IN (10, 24, 25, 28, 33, 34, 40) THEN 'Special'
WHEN ct.id IN (23) THEN 'Ethical Hacking'
WHEN ct.id IN (36, 37, 39, 43, 44, 45, 49, 50) THEN 'Community'
ELSE NULL
END AS campaign_family
FROM wp_appq_campaign_type ct
),
campaign_classification_table AS (
SELECT
cp.id AS campaign_id,
cp.title AS campaign_name,
COALESCE (cc.campaign_class, 'Unassigned Project') AS campaign_class,
COALESCE (cf.campaign_family, 'Unclassified Type') AS campaign_family
FROM wp_appq_evd_campaign cp
LEFT JOIN campaign_class_table cc ON cp.project_id = cc.project_id
LEFT JOIN campaign_family_table cf ON cp.campaign_type_id = cf.campaign_type_id
)
/*
FINAL VERSION of CLASSIFICATION TABLE
Override campaign_class when '@aborted' in cp.title with 'Aborted' custom class
Override campaign_class when cp.title starts with 'BIZ ', with 'POC' class (requested by community)
Override campaign_family when campaign_class='Training' with custom rules (requested by community)
*/
SELECT
campaign_id,
CASE
WHEN campaign_name ~ '^BIZ\s' THEN 'POC' -- exact match, case sensitive, it starts with BIZ and it is followed by a space
WHEN (campaign_name like '%@aborted%') THEN 'Aborted'
ELSE campaign_class
END AS campaign_class,
CASE
WHEN (campaign_class = 'Training') THEN
CASE
WHEN (campaign_name like '%UX%') THEN 'UX'
ELSE 'Functional'
END
ELSE campaign_family
END AS campaign_family
FROM campaign_classification_table
ORDER BY campaign_id DESC