இணையதளத்தின் root layout-இல் இருந்த ஒரு பொதுவான செயல்பாடு (shared function), A/B-test exposure counter-ஐ ஒரு page-view counter-ஆக மாற்றிவிட்டது. இது மாதிரி அளவை (sample size) செயற்கையாக அதிகரித்ததோடு, conversion rates-ஐ அர்த்தமற்றதாக்கியது. முகப்புப் பக்கத்தை 50/50 எனப் பிரித்த இந்தச் சோதனையில், ஒரு variant-க்கு 178 மற்றும் மற்றொரு பகுதிக்கு 57 முறை எனப் பதிவானது—இது எதிர்பார்க்கப்பட்ட சமமானப் பிரிவிலிருந்து முற்றிலும் மாறுபட்டது.

இந்தத் தவறு randomizer-ஐ எப்படித் தாண்டியது

பார்வையாளர்களை ஒரு variant-க்கு ஒதுக்கும் randomizer-ஐ டெவலப்பர் முதலில் சரிபார்த்தார். அவர் middleware-ஐ ஆய்வு செய்தார், cookie logic-ஐப் பரிசோதித்தார் மற்றும் assignment function-ஐ 10,000 முறை அழைக்கும் ஒரு ஸ்கிரிப்டை இயக்கினார்; அது துல்லியமான 50/50 பிரிவைத் தந்தது. Randomizer சரியாகவே செயல்பட்டது; பிரச்சனை exposure எவ்வாறு பதிவு செய்யப்பட்டது என்பதில் இருந்தது.

ஒரு தனிச் செயல்பாடு (function) இரண்டு வேலைகளைச் செய்தது:

  1. Set the variant – பார்வையாளரின் அனுபவம் சீராக இருப்பதை உறுதி செய்ய ஒவ்வொரு page load போதும் இது இயங்கும்.
  2. Record the exposure event – variant முதன்முதலில் தோன்றும் தருணத்தில், ஒரு பார்வையாளருக்கு ஒரு முறை மட்டுமே இது நிகழ வேண்டும்.

அந்தச் செயல்பாடு root layout-இல் இருந்தது, இது ஒவ்வொரு navigation போதும் render செய்யப்படும் ஒரு component ஆகும். Layout render செய்யப்படும் ஒவ்வொரு முறையும் exposure-recording code இயங்கியதால், ஒவ்வொரு page view-வும் ஒரு புதிய exposure-ஆகக் கணக்கிடப்பட்டது. முகப்புப் பக்கத்தின் இரண்டு variants சற்று மாறுபட்ட layout trees-களைப் பயன்படுத்தியதால், அவற்றின் page-view விகிதங்கள் வேறுபட்டன, இது randomizer பழுதாகிவிட்டது போன்ற மாயையை உருவாக்கியது.

தவறான கணக்கீடு ஏன் முக்கியமானது

Conversion எண்கள்—click-throughs, sign-ups, purchases—சரியாகப் பதிவு செய்யப்பட்டன. ஆனால் denominator (exposure-களின் எண்ணிக்கை) தவறாக இருந்தது. கணக்கிடப்பட்ட conversion rates யதார்த்தத்தை விட மிகக் குறைவாகத் தெரிந்தன, மேலும் அந்த விகிதங்களின் அடிப்படையில் எடுக்கப்பட்ட எந்த முடிவுகளும் நம்பகத்தன்மையற்றவை.

இந்த முரண்பாடு தெரியவருவதற்கு முன்பு சோதனை இரண்டு வாரங்கள் நடைபெற்றது, இதனால் குழுவினர் முழு தரவுத் தொகுப்பையும் (data set) கைவிட வேண்டிய கட்டாயம் ஏற்பட்டது.

தீர்வு

தீர்வு எளிமையானது: பொறுப்புகளைத் தனித்தனிச் செயல்பாடுகளாகப் பிரிப்பது. Exposure-recording code இப்போது பார்வையாளர் ஏற்கனவே கணக்கிடப்பட்டுள்ளாரா என்பதைச் சரிபார்க்கிறது, ஒரு பயனருக்கு ஒரு முறை மட்டுமே இயங்குகிறது. Variant-setting code இருக்கும் இடத்திலேயே தொடர்கிறது, ஒவ்வொரு navigation போதும் தொடர்ந்து இயங்குகிறது.

சோதனைகளை நடத்தும் எவருக்கும் மூன்று முக்கியக் கருத்துக்கள்

  • State-setting என்பதிலிருந்து one-off events-களைத் தனிப்பயுங்கள். ஒரு variant-ஐ ஒதுக்குவதற்கும் மற்றும் ஒரு exposure-ஐப் பதிவு செய்வதற்கும் ஒரே செயல்பாட்டைப் பயன்படுத்தினால் அது மோதலில் முடியும்; ஏனெனில் முதலாவது மீண்டும் மீண்டும் நடக்கும், ஆனால் இரண்டாவது மீண்டும் நடக்கக்கூடாது.
  • Root layout-இல் one-shot logic-ஐத் தவிர்க்கவும். ஒவ்வொரு page load போதும் render செய்யப்படும் ஒரு component-இல் வைக்கப்படும் எதுவாக இருந்தாலும் அது மீண்டும் மீண்டும் இயங்கும், இது “ஒரு பார்வையாளருக்கு ஒரு முறை” என்பதை “ஒரு page view-க்கு ஒரு முறை” என மாற்றிவிடும்.
  • கண்டறியப்பட்ட பிரிவு randomizer-க்கு முரணாக இருக்கும்போது, முதலில் counter-ஐ ஆய்வு செய்யுங்கள். டெவலப்பர்கள் பெரும்பாலும் randomizer-இன் நேர்மையைச் சோதிக்கிறார்கள், ஆனால் எண்ணும் முறை (counting mechanism) துல்லியமாக உள்ளதா என்பதை அரிதாகவே சரிபார்க்கிறார்கள்.

அடுத்து எவற்றைக் கவனிக்க வேண்டும்

Exposure-க்கு ஒரு தனி counter-ஐச் சார்ந்திருக்கும் எந்தவொரு சோதனையும், அந்த counter component tree-இல் எங்குள்ளது என்பதை ஆய்வு செய்ய வேண்டும். Counter ஒரு global layout-இல் இருந்தால், ஒரு cookie அல்லது local-storage flag போன்ற ஒரு நிலையான அடையாளத்துடன் (persistent identifier) அந்த நிகழ்வை இணைக்கும் சரிபார்ப்பைச் சேர்க்கவும். குழுக்கள் தங்கள் dashboards-களில் ஒரு sanity check-ஐயும் உருவாக்க வேண்டும்: கண்டறியப்பட்ட variant distribution ஒரு சிறிய புள்ளிவிவர வரம்பைத் தாண்டி விலகினால், randomizer பழுதாகிவிட்டது என்று கருதுவதற்கு முன், counter audit செய்ய அந்தச் சோதனையைத் தனிக்குறிப்படையுங்கள் (flag).

சுருக்கமாகச் சொன்னால், நம்பகமான exposure count இல்லாமல் சரியாகச் செயல்படும் randomizer பயனற்றது. பொறுப்புகளைப் பிரிப்பதும், எப்போதும் render செய்யப்படும் கூறுகளுக்கு வெளியே one-off events-களை வைப்பதும், A/B சோதனைகளைத் துல்லியமாக வைத்திருக்கவும் வாரக்கணக்கில் வீணாகும் ஆய்வைத் தவிர்க்கவும் உதவும்.