Dynamic Yield

Dynamic Yield developer for hire

I build Dynamic Yield variation code as a single minified JS and CSS bundle from my own build rig, with single-page-app handling, anti-flicker, and accessibility solved in code before it ever reaches Dynamic Yield. In Dynamic Yield itself I set the audience and targeting and drop the bundle into a custom-code experience, and conversion tracking runs through GA4. The hard parts are handled in code, not left to the tool, so the build ships clean and passes engineering review. Available for direct briefs and as overflow capacity for CRO agencies running Dynamic Yield programmes.

Why most Dynamic Yield variation code breaks, and how I avoid it

Most Dynamic Yield tests that fail in production fail for the same reasons: the variant assumes the DOM is ready when it runs, it never re-applies after a single-page-app route change, it sets a React input in a way the framework ignores, or it shifts layout after first paint and wrecks Core Web Vitals. These are not Dynamic Yield problems. They are client-side engineering problems that show up on every testing tool, and they are where a marketer-led build or a generalist falls down.

I solve them before Dynamic Yield is involved. The variant is built and tested as real code, so by the time it goes into Dynamic Yield it already survives a hostile DOM, re-applies on route changes, sets framework inputs correctly, and ships with the accessibility patterns the brief leaves out. Dynamic Yield then does the one job it is good at: deciding who sees the test and where.

What I actually touch in Dynamic Yield

Dynamic Yield is a personalisation-led platform, so the work lives where the platform decides who to serve. My variant is one minified JavaScript file and one CSS file that go into a Dynamic Yield custom-code experience or campaign. I set the audiences and targeting in Dynamic Yield, then let conversion tracking run through GA4 rather than rebuilding measurement inside the tool. The less bespoke logic lives in the platform's UI, the less there is to break on a publish, and the easier the test is to hand over and reason about.

Real work on Dynamic Yield

On the Avon site I built a homepage bestsellers carousel as a social-proof test through Dynamic Yield: a 19-product carousel injected above the existing homepage modules, with a desktop variant-selector dropdown, a mobile bottom-sheet variant picker, and inline add-to-bag that submits through the host's own cart service rather than a separate cart of its own. Impression events were visibility-gated on both control and variant so exposure measurement stayed consistent across arms. The full write-up is in the bestsellers carousel case study.

The engineering baked into every variant

Single-page-app route changes

Dynamic Yield's script evaluates on load. On a React, Vue, or Next.js site, a route change after that happens client-side with no fresh page load, so a naive variant either persists onto pages it should not or breaks because the elements it expected are gone. My bundle watches for URL changes and re-runs the variant logic on each one, with a short settle so the framework's render pass finishes before the variant mounts. I cover the failure mode in why experiments stop firing on SPA route changes.

Anti-flicker without tanking Core Web Vitals

The variant hides only the elements it is about to change, with a timeout failsafe, rather than blanking the whole page. That stops the flash of original content without the page-wide hide that most setups reach for and that wrecks LCP. The full tradeoff is in stopping A/B test flicker without tanking Core Web Vitals.

React and framework-controlled inputs

Setting input.value directly does not fire React's onChange, so form state and visual state drift apart and the test measures nothing useful. The bundle uses the native input descriptor so the framework registers the change. The pattern is below, and explained in full in setting a React controlled input from an A/B test.

// Bypass React's overridden value setter so onChange actually fires
const setReactInputValue = (input, value) => {
  const nativeSetter = Object.getOwnPropertyDescriptor(
    window.HTMLInputElement.prototype,
    "value"
  ).set;

  nativeSetter.call(input, value);
  input.dispatchEvent(new Event("input", { bubbles: true }));
};

Late-rendering elements and accessibility

Targets that mount late (lazy carousels, async recommendations) are handled with an element-wait utility rather than a fixed delay, so the change applies whenever the element appears. See targeting elements that render late. Any new modal or interactive component ships with a focus trap, ARIA roles, and keyboard parity by default, so the variant passes accessibility review instead of failing it on handover. The patterns are in accessible A/B test variants.

Built with my own rig

The reason Dynamic Yield only ever sees a single clean bundle is that I do not author variants by hand in the tool. I build them in a CRO-specific rig that turns out one minified JS and one CSS per experiment, with a shared helper library for the patterns above, sub-200ms builds, and a stack mode for testing how multiple experiments interact. It is the same output regardless of platform, which is why a Dynamic Yield build, a Convert build, and an Optimizely build all reach the same engineering bar. The full write-up is in abtestrig, the CRO build tool I built.

How I work on Dynamic Yield projects

Briefs start with a short intake: scope, hypothesis, audience, expected lift, leading indicator. The variant is built to your engineering conventions where they exist and to pass review where they do not, self-QA'd cross-browser, and run through an accessibility pass before handover. The handover doc covers the Dynamic Yield audiences and targeting, the goal and GA4 mapping, and how the bundle is organised.

I work UK and EU business hours, every business day, live on Slack and email through your working day. For North American clients, UK afternoons overlap with morning standups on the East Coast.

Hire a Dynamic Yield developer

For Dynamic Yield variation builds, overflow capacity for CRO agencies, or to discuss a specific test idea. I respond within one UK business day.