-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Onboarding Design Experiment Setup #6525
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
mikescamell
merged 15 commits into
develop
from
feature/mike/onboarding-test/experiment_setup
Aug 11, 2025
Merged
Onboarding Design Experiment Setup #6525
mikescamell
merged 15 commits into
develop
from
feature/mike/onboarding-test/experiment_setup
Aug 11, 2025
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
mikescamell
commented
Aug 5, 2025
...main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt
Show resolved
Hide resolved
mikescamell
commented
Aug 5, 2025
...main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt
Show resolved
Hide resolved
mikescamell
commented
Aug 5, 2025
...main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt
Outdated
Show resolved
Hide resolved
app/src/main/java/com/duckduckgo/app/onboarding/ui/OnboardingViewModel.kt
Outdated
Show resolved
Hide resolved
...main/java/com/duckduckgo/app/onboardingdesignexperiment/OnboardingDesignExperimentManager.kt
Show resolved
Hide resolved
5df882e to
49ffdf3
Compare
mikescamell
commented
Aug 7, 2025
app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt
Outdated
Show resolved
Hide resolved
49ffdf3 to
39e4693
Compare
6 tasks
39e4693 to
4fc9c46
Compare
4fc9c46 to
b10b580
Compare
Contributor
This stack of pull requests is managed by Graphite. Learn more about stacking. |
b10b580 to
19c27c6
Compare
19c27c6 to
647aaa7
Compare
2 tasks
This functionality was moved the omnibar last year but never removed from the BrowserTabViewModel, it actually caused me some confusion as I didn't see it fire when pressing the shield so removing this now so others don't have the same problem
Caching isExperimentEnabled and onboardingDesignExperimentCohort means we don't have to litter UI building callsites with coroutine scopes and launches. It would be a pervasive change and calling this synchronously gives me confidence. Using both app launch and onPrivacyConfigDownloaded should cover cases where we turn the experiment off.
want to make sure we have this covered
647aaa7 to
12d997c
Compare
Looks like we switched to the experiment search options but forgot to update the code after. This takes care of that and ensures that our pixel tracking is now correct and does not report as a user making a custom search on the "Try a search" onboarding dialog option
marcosholgado
approved these changes
Aug 11, 2025
Contributor
marcosholgado
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.

Task/Issue URL: https://app.asana.com/1/137249556945/project/1207908166761516/task/1210983806890977?focus=true
Description
This PR refactors the onboarding design experiment implementation by introducing a new
OnboardingDesignExperimentManagerthat centralizes experiment-related logic. The manager handles enrollment, cohort determination, and firing experiment-specific pixels for tracking user interactions throughout the onboarding flow.Key changes include:
Steps to test this PR
Onboarding Experience
Pixels
Use Logcat to check for Pixels firing.
When there are multiple options you'll need to clear data and get back to the same position.
Variant – Modified Control
Filter logs using:
experiment_metrics_onboardingDesignExperimentAug25_modifiedControlIntro screen shown →
introScreenDisplayedComparison screen shown →
comparisonScreenDisplayedTap “Choose Browser” →
chooseBrowserAccept system Set as default dialog →
setDefaultRateAddress-bar-position sheet displayed →
setAddressBarDisplayedaddressBarSetTopaddressBarSetBottom“Try a search” bubble appears →
tryASearchDisplayedfirstSearchSuggestionsecondSearchSuggestionthirdSearchSuggestionsearchOrNavCustomSERP message dialog appears →
messageOnSerpDisplayedSite-suggestion bubble (adjacent) appears →
visitSitePromptDisplayedAdjacentfirstSiteSuggestionsecondSiteSuggestionthirdSiteSuggestion(Clear data, get back to "Try a search" dialog, dismiss and then open a new tab) Site-suggestion bubble appears →
visitSitePromptDisplayedNewTabfirstSiteSuggestionsecondSiteSuggestionthirdSiteSuggestionTrackers-blocked dialog shown →
trackersBlockedMessageDisplayedNo-trackers dialog shown →
noTrackersMessageDisplayedTracker-network dialog shown →
trackerNetworkMessageDisplayedFrom a blockers dialog, tap privacy-shield →
privacyDashClickedFromOnboardingFire-button education prompt displayed →
fireButtonPromptDisplayedfireButtonClickedFromOnboardingEnd-of-journey screen shown →
finalOnboardingScreenDisplayedSecond non-DDG site loads →
secondSiteVisitSecond DDG SERP loads →
secondSerpVisitVariant – Buck
Filter logs using:
experiment_metrics_onboardingDesignExperimentAug25_buckIntro screen shown →
introScreenDisplayedComparison screen shown →
comparisonScreenDisplayedTap “Choose Browser” →
chooseBrowserAccept system Set as default dialog →
setDefaultRateAddress-bar-position sheet displayed →
setAddressBarDisplayedaddressBarSetTopaddressBarSetBottom“Try a search” bubble appears →
tryASearchDisplayedfirstSearchSuggestionsecondSearchSuggestionthirdSearchSuggestionsearchOrNavCustomSERP message dialog appears →
messageOnSerpDisplayedSite-suggestion bubble (adjacent) appears →
visitSitePromptDisplayedAdjacentfirstSiteSuggestionsecondSiteSuggestionthirdSiteSuggestion(Clear data, get back to "Try a search" dialog, dismiss and then open a new tab) Site-suggestion bubble appears →
visitSitePromptDisplayedNewTabfirstSiteSuggestionsecondSiteSuggestionthirdSiteSuggestionTrackers-blocked dialog shown →
trackersBlockedMessageDisplayedNo-trackers dialog shown →
noTrackersMessageDisplayedTracker-network dialog shown →
trackerNetworkMessageDisplayedFrom a blockers dialog, tap privacy-shield →
privacyDashClickedFromOnboardingFire-button education prompt displayed →
fireButtonPromptDisplayedfireButtonClickedFromOnboardingEnd-of-journey screen shown →
finalOnboardingScreenDisplayedSecond non-DDG site loads →
secondSiteVisitSecond DDG SERP loads →
secondSerpVisitVariant – BB
Filter logs using:
experiment_metrics_onboardingDesignExperimentAug25_bbIntro screen shown →
introScreenDisplayedComparison screen shown →
comparisonScreenDisplayedTap “Choose Browser” →
chooseBrowserAccept system Set as default dialog →
setDefaultRateAddress-bar-position sheet displayed →
setAddressBarDisplayedaddressBarSetTopaddressBarSetBottom“Try a search” bubble appears →
tryASearchDisplayedfirstSearchSuggestionsecondSearchSuggestionthirdSearchSuggestionsearchOrNavCustomSERP message dialog appears →
messageOnSerpDisplayedSite-suggestion bubble (adjacent) appears →
visitSitePromptDisplayedAdjacentfirstSiteSuggestionsecondSiteSuggestionthirdSiteSuggestion(Clear data, get back to "Try a search" dialog, dismiss and then open a new tab) Site-suggestion bubble appears →
visitSitePromptDisplayedNewTabfirstSiteSuggestionsecondSiteSuggestionthirdSiteSuggestionTrackers-blocked dialog shown →
trackersBlockedMessageDisplayedNo-trackers dialog shown →
noTrackersMessageDisplayedTracker-network dialog shown →
trackerNetworkMessageDisplayedFrom a blockers dialog, tap privacy-shield →
privacyDashClickedFromOnboardingFire-button education prompt displayed →
fireButtonPromptDisplayedfireButtonClickedFromOnboardingEnd-of-journey screen shown →
finalOnboardingScreenDisplayedSecond non-DDG site loads →
secondSiteVisitSecond DDG SERP loads →
secondSerpVisitUI changes
No UI changes in this PR - this is an internal refactoring of the experiment implementation.