1<!DOCTYPE html> 2<html lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 7 <meta name="mobile-web-app-capable" content="yes"> 8 <meta name="apple-mobile-web-app-capable" content="yes"> 9 <meta name="apple-mobile-web-app-title" content="fated.net - Singapore parenting, practical reviews and tech notes"> 10 <link rel="profile" href="https://gmpg.org/xfn/11"> 11 <!-- Google Tag Manager --> 12
12<script>
vendor: 338 bytes, lines 12-17
12 13 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 14 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 15 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 16 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 17 })(window,document,'script','dataLayer','
17GTM-PHFD94ZL
vendor: 5 bytes, lines 17-18
17'); 18
18</script>
18 19 <!-- End Google Tag Manager --> 20 <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 21 22 <!-- This site is optimized with the Yoast SEO plugin v28.6 - https://yoast.com/product/yoast-seo-wordpress/ --> 23 <title>fated.net | Singapore Parenting, Practical Reviews & Tech Notes</title> 24 <meta name="description" content="Singapore-based personal blog on parenting, kids gear, family life, practical reviews, tech experiments and products that stay useful." /> 25 <link rel="canonical" href="https://fated.net/page/2/" /> 26 <link rel="prev" href="https://fated.net/" /> 27 <link rel="next" href="https://fated.net/page/3/" /> 28
28<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"CollectionPage","@id":"https:\/\/fated.net\/","url":"https:\/\/fated.net\/page\/2\/","name":"fated.net | Singapore Parenting, Practical Reviews & Tech Notes","isPartOf":{"@id":"https:\/\/fated.net\/#website"},"about":{"@id":"https:\/\/fated.net\/#\/schema\/person\/65e61ebc8eabdaa3776c5893de1b5ca6"},"description":"Singapore-based personal blog on parenting, kids gear, family life, practical reviews, tech experiments and products that stay useful.","breadcrumb":{"@id":"https:\/\/fated.net\/page\/2\/#breadcrumb"},"inLanguage":"en-US"},{"@type":"BreadcrumbList","@id":"https:\/\/fated.net\/page\/2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/fated.net\/#website","url":"https:\/\/fated.net\/","name":"fated.net","description":"Singapore parenting, practical reviews and tech notes","publisher":{"@id":"https:\/\/fated.net\/#\/schema\/person\/65e61ebc8eabdaa3776c5893de1b5ca6"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fated.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fated.net\/#\/schema\/person\/65e61ebc8eabdaa3776c5893de1b5ca6","name":"Howard Toh","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fated.net\/wp-content\/uploads\/2025\/07\/HJCO_Piano.png","url":"https:\/\/fated.net\/wp-content\/uploads\/2025\/07\/HJCO_Piano.png","contentUrl":"https:\/\/fated.net\/wp-content\/uploads\/2025\/07\/HJCO_Piano.png","width":1022,"height":1023,"caption":"Howard Toh"},"logo":{"@id":"https:\/\/fated.net\/wp-content\/uploads\/2025\/07\/HJCO_Piano.png"},"sameAs":["http:\/\/fated.net","https:\/\/www.facebook.com\/howardtoh","https:\/\/x.com\/howardtoh"]}]}</script>
28 29 <!-- / Yoast SEO plugin. --> 30 31 32<link rel='dns-prefetch' href='//xhr.invl.co' /> 33<link rel="alternate" type="application/rss+xml" title="fated.net » Feed" href="https://fated.net/feed/" /> 34<link rel="alternate" type="application/rss+xml" title="fated.net » Comments Feed" href="https://fated.net/comments/feed/" /> 35<style id="wp-img-auto-sizes-contain-inline-css"> 36img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 37/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 38</style> 39<style id="wp-emoji-styles-inline-css"> 40 41 img.wp-smiley, img.emoji { 42 display: inline !important; 43 border: none !important; 44 box-shadow: none !important; 45 height: 1em !important; 46 width: 1em !important; 47 margin: 0 0.07em !important; 48 vertical-align: -0.1em !important; 49 background: none !important; 50 padding: 0 !important; 51 } 52/*# sourceURL=wp-emoji-styles-inline-css */ 53</style> 54 55 56<link rel='stylesheet' id='author-post-ratings-css' href='https://fated.net/wp-content/plugins/author-post-ratings/author-post-ratings.css?ver=7.1.2' media='all' /> 57<link rel='stylesheet' id='secretum-css' href='https://fated.net/wp-content/themes/secretum/css/themes/lt_dark-blue_dark-magenta/theme.min.css?ver=2.0.0' media='all' /> 58<link rel='stylesheet' id='foundation-css' href='https://fated.net/wp-content/themes/secretum/css/foundation-icons.min.css?ver=3.0' media='all' />
59<script id="fated-involve-shoplink-js" src="https://xhr.invl.co/magic/1084829/auto.js"></script>
vendor: 1 bytes, line 59
59
60<script id="jquery-core-js" src="https://fated.net/wp-includes/js/jquery/jquery.min.js?ver=3.7.1"></script>
vendor: 1 bytes, line 60
60
61<script id="jquery-migrate-js" src="https://fated.net/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.4.1"></script>
61 62<link rel="https://api.w.org/" href="https://fated.net/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://fated.net/xmlrpc.php?rsd" /> 63<meta name="generator" content="WordPress 7.1.2" /> 64 <style> 65 .bottomcontainerBox { 66 float: none !important; 67 height: auto !important; 68 width: 100% !important; 69 } 70 .bottomcontainerBox > .buttons, 71 .bottomcontainerBox > a.twitter-share-button, 72 .bottomcontainerBox > iframe, 73 .bottomcontainerBox > div[id^="___plusone"], 74 .bottomcontainerBox > span.IN-widget, 75 .bottomcontainerBox > .fb-like, 76 .bottomcontainerBox > .fb-share-button, 77 .twitter-share-button, 78 .fb-like, 79 .IN-widget, 80 .fcbkbttn_buttons_block { 81 display: none !important; 82 } 83 .fated-share { 84 clear: both; 85 margin: 2rem 0 1.25rem; 86 padding: 1rem 0; 87 border-top: 1px solid rgba(0, 0, 0, 0.1); 88 border-bottom: 1px solid rgba(0, 0, 0, 0.1); 89 } 90 .fated-share__label { 91 margin: 0 0 0.6rem; 92 color: #555; 93 font-size: 0.9rem; 94 font-weight: 700; 95 text-transform: uppercase; 96 } 97 .fated-share__links { 98 display: flex; 99 flex-wrap: wrap; 100 gap: 0.55rem; 101 align-items: center; 102 } 103 .fated-share__button { 104 display: inline-flex; 105 align-items: center; 106 justify-content: center; 107 width: 2.5rem; 108 height: 2.5rem; 109 border: 1px solid rgba(0, 0, 0, 0.16); 110 border-radius: 8px; 111 background: #fff; 112 color: #222; 113 line-height: 1; 114 text-decoration: none !important; 115 transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease; 116 } 117 .fated-share__button:hover, 118 .fated-share__button:focus { 119 background: #f3f4f6; 120 border-color: rgba(0, 0, 0, 0.32); 121 color: #000; 122 text-decoration: none !important; 123 } 124 .fated-share__button svg { 125 display: block; 126 width: 1.2rem; 127 height: 1.2rem; 128 fill: currentColor; 129 } 130 .fated-share__button--facebook { color: #1877f2; } 131 .fated-share__button--x { color: #111; } 132 .fated-share__button--linkedin { color: #0a66c2; } 133 .fated-share__button--whatsapp { color: #128c7e; } 134 .fated-share__button--telegram { color: #229ed9; } 135 .fated-share__button--email { color: #555; } 136 .fated-share__button--copy { color: #333; cursor: pointer; } 137 .fated-share__sr { 138 position: absolute; 139 width: 1px; 140 height: 1px; 141 padding: 0; 142 overflow: hidden; 143 clip: rect(0, 0, 0, 0); 144 white-space: nowrap; 145 border: 0; 146 } 147 .fated-visitors-card { 148 border-top: 1px solid rgba(0, 0, 0, 0.08); 149 } 150 .fated-visitors-row { 151 display: flex; 152 justify-content: space-between; 153 gap: 1rem; 154 padding: 0.45rem 0; 155 border-bottom: 1px solid rgba(0, 0, 0, 0.08); 156 } 157 .fated-visitors-row span { 158 color: #555; 159 } 160 .fated-visitors-row strong { 161 font-weight: 700; 162 } 163 </style> 164
164<script type="text/javascript"> 165 (function(c,l,a,r,i,t,y){ 166 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 167 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 168 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 169 })(window, document, "clarity", "script", "wzqc907vj2"); 170 </script>
170 171
171<script> 172(function() { 173 (function (i, s, o, g, r, a, m) { 174 i['GoogleAnalyticsObject'] = r; 175 i[r] = i[r] || function () { 176 (i[r].q = i[r].q || []).push(arguments) 177 }, i[r].l = 1 * new Date(); 178 a = s.createElement(o), 179 m = s.getElementsByTagName(o)[0]; 180 a.async = 1; 181 a.src = g; 182 m.parentNode.insertBefore(a, m) 183 })(window, document, 'script', 'https://google-analytics.com/analytics.js', 'ga'); 184 185 ga('create', 'UA-8791374-4', 'auto'); 186 ga('send', 'pageview'); 187 })(); 188</script>
188 189<link rel="icon" href="https://fated.net/wp-content/uploads/2026/05/fated-site-icon-512-100x100.png" sizes="32x32" /> 190<link rel="icon" href="https://fated.net/wp-content/uploads/2026/05/fated-site-icon-512-300x300.png" sizes="192x192" /> 191<link rel="apple-touch-icon" href="https://fated.net/wp-content/uploads/2026/05/fated-site-icon-512-300x300.png" /> 192<meta name="msapplication-TileImage" content="https://fated.net/wp-content/uploads/2026/05/fated-site-icon-512-300x300.png" /> 193<style id="wp-custom-css"> 194.video-container { 195 position: relative; 196 padding-bottom: 56.25%; 197 height: 0; 198 overflow: hidden; 199 max-width: 100%; 200 background: #000; 201} 202.video-container iframe { 203 position: absolute; 204 top: 0; 205 left: 0; 206 width: 100%; 207 height: 100%; 208 border: 0; 209} 210</style> 211 212 <!-- START - Open Graph and Twitter Card Tags 3.5.1 --> 213 <!-- Facebook Open Graph --> 214 <meta property="og:locale" content="en_US"/> 215 <meta property="og:site_name" content="fated.net"/> 216 <meta property="og:title" content="fated.net | Singapore Parenting, Practical Reviews & Tech Notes"/> 217 <meta property="og:url" content="https://fated.net/page/2/"/> 218 <meta property="og:type" content="website"/> 219 <meta property="og:description" content="Singapore-based personal blog on parenting, kids gear, family life, practical reviews, tech experiments and products that stay useful."/> 220 <meta property="og:image" content="https://fated.net/wp-content/uploads/2026/06/fated-default-og-1200x630-1.jpg"/> 221 <meta property="og:image:url" content="https://fated.net/wp-content/uploads/2026/06/fated-default-og-1200x630-1.jpg"/> 222 <meta property="og:image:secure_url" content="https://fated.net/wp-content/uploads/2026/06/fated-default-og-1200x630-1.jpg"/> 223 <meta property="og:image:width" content="1280"/> 224 <meta property="og:image:height" content="672"/> 225 <meta property="article:publisher" content="https://www.facebook.com/howardtoh"/> 226 <!-- Google+ / Schema.org --> 227 <meta itemprop="name" content="fated.net | Singapore Parenting, Practical Reviews & Tech Notes"/> 228 <meta itemprop="headline" content="fated.net | Singapore Parenting, Practical Reviews & Tech Notes"/> 229 <meta itemprop="description" content="Singapore-based personal blog on parenting, kids gear, family life, practical reviews, tech experiments and products that stay useful."/> 230 <meta itemprop="image" content="https://fated.net/wp-content/uploads/2026/06/fated-default-og-1200x630-1.jpg"/> 231 <!--<meta itemprop="publisher" content="fated.net"/>--> <!-- To solve: The attribute publisher.itemtype has an invalid value. --> 232 <!-- Twitter Cards --> 233 <meta name="twitter:title" content="fated.net | Singapore Parenting, Practical Reviews & Tech Notes"/> 234 <meta name="twitter:url" content="https://fated.net/page/2/"/> 235 <meta name="twitter:description" content="Singapore-based personal blog on parenting, kids gear, family life, practical reviews, tech experiments and products that stay useful."/> 236 <meta name="twitter:image" content="https://fated.net/wp-content/uploads/2026/06/fated-default-og-1200x630-1.jpg"/> 237 <meta name="twitter:card" content="summary_large_image"/> 238 <meta name="twitter:site" content="@howardtoh"/> 239 <!-- SEO --> 240 <link rel="canonical" href="https://fated.net/page/2/"/> 241 <!-- Misc. tags --> 242 <!-- is_front_page | yoast_seo --> 243 <!-- END - Open Graph and Twitter Card Tags 3.5.1 --> 244 245 <style id="wp-block-heading-inline-css"> 246h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg} 247/*# sourceURL=https://fated.net/wp-includes/blocks/heading/style.min.css */ 248</style> 249<style id="wp-block-list-inline-css"> 250ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em} 251/*# sourceURL=https://fated.net/wp-includes/blocks/list/style.min.css */ 252</style> 253<style id="wp-block-paragraph-inline-css"> 254.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg} 255/*# sourceURL=https://fated.net/wp-includes/blocks/paragraph/style.min.css */ 256</style> 257<style id="wp-block-separator-inline-css"> 258@charset "UTF-8";.wp-block-separator{border:none;border-top:2px solid}:root :where(.wp-block-separator.is-style-dots){height:auto;line-height:1;text-align:center}:root :where(.wp-block-separator.is-style-dots):before{color:currentColor;content:"···";font-family:serif;font-size:1.5em;letter-spacing:2em;padding-left:2em}.wp-block-separator.is-style-dots{background:none!important;border:none!important}
259/*# sourceURL=https://fated.net/wp-includes/blocks/separator/style.min.css */ 260</style> 261 262</head> 263 <body class="home blog paged wp-custom-logo wp-embed-responsive paged-2 wp-theme-secretum group-blog hfeed secretum-front-page "> 264 <!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 264-265
264 265 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
265GTM-PHFD94ZL
vendor: 84 bytes, lines 265-266
265" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 266
266<!-- End Google Tag Manager (noscript) --> 267 268 <div class="hfeed site" id="page"> 269 270 <div class="header py-3" id="wrapper-header" itemscope itemtype="http://schema.org/WebSite"> 271 <a class="skip-link screen-reader-text sr-only" href="#content">Skip to content</a> 272 273 <div class="container"> 274 <a href="https://fated.net" class="navbar-brand custom-logo-link mb-0 py-0" rel="home" itemprop="url" title="fated.net Singapore parenting, practical reviews and tech notes" style="max-width:300px;height:auto !important"><img src="https://fated.net/wp-content/uploads/2026/05/fated-site-logo-640.jpg" class="custom-logo img-fluid" title="fated.net" itemprop="logo" /></a> <p class="site-description description-container">Singapore parenting, practical reviews and tech notes</p> 275 </div><!-- .container --> 276 277 278 </div><!-- .header --> 279 280 <nav class="wrapper navbar navbar-expand-lg bg-primary py-0" aria-label="Main" role="navigation"> 281<div class="container link-light link-gray-300-hover"> 282<button class="navbar-toggler mx-0 my-2 mr-auto" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> 283<div id="navbarNavDropdown" class="collapse navbar-collapse"><ul id="main-menu" class="navbar-nav"><li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-280"role="none" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-280 nav-item"><a title="Tupperware Singapore Online Store" href="https://tup.sg/" class="nav-link py-3 px-3">Tupperware Shop</a></li> 284<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-326"role="none" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-326 nav-item"><a title="SH.SG – Singapore’s free URL Shortener" href="https://sh.sg" class="nav-link py-3 px-3">URL Shortener</a></li> 285<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-461"role="none" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-461 nav-item"><a title="Generate barcode for NRIC / FIN " href="https://nric.biz/create-nric-fin-barcode.php" class="nav-link py-3 px-3">NRIC/FIN Barcode Maker</a></li> 286<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-462"role="none" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-462 nav-item"><a title="Generate valid NRIC/FIN for testing" href="https://nric.biz/generate-nric-fin.php" class="nav-link py-3 px-3">NRIC/FIN Generator</a></li> 287<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-702"role="none" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-702 nav-item"><a title="ä¸æè½¬æ¼é³å·¥å · (Chinese to Pinyin Tool)" href="https://nric.biz/chinese-to-pinyin-converter.php" class="nav-link py-3 px-3">Chinese to Pinyin</a></li> 288<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-703"role="none" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-703 nav-item"><a title="Estimate Age and Residency by NRIC" href="https://nric.biz/nric-age-estimator.php" class="nav-link py-3 px-3">Estimate Age by NRIC</a></li> 289<li itemscope="itemscope" itemtype="https://www.schema.org/SiteNavigationElement" id="menu-item-729"role="none" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-729 nav-item"><a title="Privacy Policy" href="https://fated.net/privacy-policy/" class="nav-link py-3 px-3">Privacy Policy</a></li> 290</ul></div></nav><!-- .navbar --> 291</div><!-- .col-md --> 292<div class="wrapper" id="index-wrapper"> 293 <div class="container" id="content" tabindex="-1"> 294 <div class="row"> 295 296 297 <div class="col-md-8 mb-4 py-4 px-3 content-area" id="primary"> 298 <main class="site-main" id="main"> 299 <article class="post-811 post type-post status-publish format-standard has-post-thumbnail hentry category-others" id="post-811"> 300 <header class="entry-header"> 301 <h2 class="entry-title mb-4 text-40"><a href="https://fated.net/museum-of-meaningless-metrics/" rel="bookmark">Welcome to the Museum of Meaningless Metrics</a></h2> <div class="entry-meta my-4"> 302 <span class="posted-on"> 303 304 <i class="fi-clock " aria-hidden="true"></i> <time class="entry-date published updated" datetime="2026-06-21T15:33:44+08:00">21 June 2026</time> 305 306 307 308 </span><!-- .posted-on --> 309 310 <span class="byline"> 311 <i class="fi-torso " aria-hidden="true"></i> <span class="author vcard">Howard Toh</span> 312 </span><!-- .byline --> 313 </div><!-- .entry-meta --> 314 </header><!-- .entry-header --> 315 316 <div class="entry-content"> 317 <h1 data-section-id="1cdxjdk" data-start="3211" data-end="3257">Welcome to the Museum of Meaningless Metrics</h1> 318<p data-start="3259" data-end="3336">I recently encountered a comic depicting the âMuseum of Meaningless Metricsâ.</p> 319<p data-start="3338" data-end="3360">Its exhibits included:</p> 320<ul data-start="3362" data-end="3423">
321<li data-section-id="13y9lip" data-start="3362" data-end="3377">Lines of Code</li> 322<li data-section-id="piqjhw" data-start="3378" data-end="3392">Story Points</li> 323<li data-section-id="1s11mun" data-start="3393" data-end="3408">Pull Requests</li> 324<li data-section-id="1sabonw" data-start="3409" data-end="3423">Tokens Spent</li> 325</ul> 326<p data-start="3425" data-end="3581">The newest and proudest exhibit was a towering token counter, presumably recording enough artificial intelligence activity to heat a modest apartment block.</p> 327<p data-start="3583" data-end="3742">The comic is funny because it captures a recurring organisational habit: when something important is difficult to measure, we measure something nearby instead.</p> 328<p data-start="3744" data-end="3914">Productivity is difficult to measure. Value is difficult to measure. Quality, good judgement, avoided mistakes and long-term maintainability are all difficult to measure.</p> 329<p data-start="3916" data-end="3962">Counting things, however, is wonderfully easy.</p> 330<p data-start="3964" data-end="4156">And once a number appears on a dashboard, it acquires an air of authority. It becomes a target, a performance indicator and eventually a presentation slide with an upward-pointing green arrow.</p> 331<p data-start="4158" data-end="4342">The problem is not that these metrics contain no information. Most of them do. The problem begins when they are promoted from <strong data-start="4284" data-end="4307">operational signals</strong> into <strong data-start="4313" data-end="4341">proof of productive work</strong>.</p> 332<h2 data-section-id="mbj84h" data-start="4344" data-end="4373">Exhibit One: Lines of Code</h2> 333<p data-start="4375" data-end="4460">To a non-programmer, lines of code can look like a straightforward measure of output.</p> 334<p data-start="4462" data-end="4578">One developer writes 500 lines. Another writes 5,000. Clearly, the second developer has done ten times as much work.</p> 335<p data-start="4580" data-end="4672">That conclusion is roughly as reliable as judging an author by the weight of the manuscript.</p> 336<p data-start="4674" data-end="4949">A large codebase may genuinely represent a substantial amount of work. A complex application cannot always be produced in 12 elegant lines and a motivational comment. But the number of lines tells us very little about whether the work was necessary, correct or well designed.</p> 337<p data-start="4951" data-end="4985">Those 5,000 lines could represent:</p> 338<ul data-start="4987" data-end="5186"> 339<li data-section-id="1xo0228" data-start="4987" data-end="5008">a major new system;</li> 340<li data-section-id="19f0jv2" data-start="5009" data-end="5028">duplicated logic;</li> 341<li data-section-id="oqs7dr" data-start="5029" data-end="5069">an unnecessarily complicated solution;</li> 342<li data-section-id="1i7dszz" data-start="5070" data-end="5094">generated boilerplate;</li> 343<li data-section-id="ysfn43" data-start="5095" data-end="5128">poorly understood requirements;</li> 344<li data-section-id="1t1nm71" data-start="5129" data-end="5186">several fixes for problems introduced by earlier fixes.</li> 345</ul> 346<p data-start="5188" data-end="5349">Meanwhile, an experienced developer might spend a day studying the problem and submit a 20-line change that eliminates the need for hundreds of additional lines.</p> 347<p data-start="5351" data-end="5550">That does not mean fewer lines are always better. Code can be compressed until it resembles an ancient curse. Readability, maintainability and testing matter more than winning a code-golf tournament.</p> 348<p data-start="5552" data-end="5620">The meaningful questions are not âHow many lines were written?â but:</p> 349<ul data-start="5622" data-end="5797"> 350<li data-section-id="11ygr4g" data-start="5622" data-end="5669">Does the software solve the intended problem?</li> 351<li data-section-id="1bwhdag" data-start="5670" data-end="5687">Is it reliable?</li> 352<li data-section-id="12f6oe1" data-start="5688" data-end="5722">Can somebody else understand it?</li> 353<li data-section-id="1rljbd" data-start="5723" data-end="5756">Can it be changed safely later?</li> 354<li data-section-id="dfh4sj" data-start="5757" data-end="5797">Did it reduce or introduce complexity?</li> 355</ul> 356<p data-start="5799" data-end="5920">Lines of code can help estimate the size of a codebase. They are poor evidence of an individual developerâs productivity.</p> 357<h2 data-section-id="2s4qfg" data-start="5922" data-end="5950">Exhibit Two: Story Points</h2> 358<p data-start="5952" data-end="6051">I have participated in sprint-estimation exercises and have also been asked to assign story points.</p> 359<p data-start="6053" data-end="6377">In theory, story points provide a relative indication of a taskâs size. They can incorporate effort, complexity, uncertainty and risk. A task assigned eight points is not necessarily expected to take eight hours or eight days. It is simply considered substantially larger or less predictable than a task assigned two points.</p> 360<p data-start="6379" data-end="6637">The Fibonacci-like sequenceâ1, 2, 3, 5, 8, 13 and so onâis intended to discourage fake precision. As tasks become larger, our confidence in estimating them usually decreases. The gap between the available numbers forces teams to acknowledge that uncertainty.</p> 361<p data-start="6639" data-end="6658">That is the theory.</p> 362<p data-start="6660" data-end="6826">In practice, the exercise can sometimes feel like a group of people cautiously plucking numbers from the sky while discreetly checking what everyone else has plucked.</p> 363<p data-start="6828" data-end="7064">Developers and requestors may view the same task very differently. One sees a minor form change. The other sees legacy code, undocumented dependencies, six integration points and a database that becomes emotionally unstable after 4 p.m.</p> 364<p data-start="7066" data-end="7275">Ideally, disagreement exposes hidden assumptions. Someone who estimates a task as two points may know something the person estimating eight does not. The discussion is supposed to produce shared understanding.</p> 365<p data-start="7277" data-end="7310">But the process breaks down when:</p> 366<ul data-start="7312" data-end="7643"> 367<li data-section-id="1g23i5q" data-start="7312" data-end="7374">people anchor their estimates to the first number mentioned;</li> 368<li data-section-id="1pkuwcn" data-start="7375" data-end="7446">participants follow the majority to avoid defending a different view;</li> 369<li data-section-id="1uvkav0" data-start="7447" data-end="7491">developers agree on the answer beforehand;</li> 370<li data-section-id="1pmvaen" data-start="7492" data-end="7540">management treats points as hours in disguise;</li> 371<li data-section-id="h7ytwc" data-start="7541" data-end="7581">velocity becomes a performance target;</li> 372<li data-section-id="1x735gs" data-start="7582" data-end="7643">teams inflate estimates to make their output appear larger.</li> 373</ul> 374<p data-start="7645" data-end="7736">At that stage, story points stop being a conversation aid and become ceremonial arithmetic.</p> 375<p data-start="7738" data-end="7990">The points themselves were never meant to be objective units. An eight-point task for one team cannot reliably be compared with an eight-point task for another. Even within the same team, the meaning may drift as the people, technology and work change.</p> 376<p data-start="7992" data-end="8149">Story points can help a stable team forecast its own capacity. They become dangerous when outsiders mistake them for a universal measurement of productivity.</p> 377<h2 data-section-id="afqpxx" data-start="8151" data-end="8182">Exhibit Three: Pull Requests</h2> 378<p data-start="8184" data-end="8370">Pull requests are an important part of modern software development. They allow proposed changes to be reviewed, discussed, tested and improved before being merged into the main codebase.</p> 379<p data-start="8372" data-end="8455">That does not make the <strong data-start="8395" data-end="8422">number of pull requests</strong> a meaningful productivity score.</p> 380<p data-start="8457" data-end="8712">A developer who submits many pull requests may be working in a disciplined way, breaking changes into small and reviewable units. Another developer might submit fewer pull requests because the work involves longer-term research, architecture or debugging.</p> 381<p data-start="8714" data-end="8748">Or the high count could come from:</p> 382<ul data-start="8750" data-end="8948"> 383<li data-section-id="mabtz4" data-start="8750" data-end="8773">repeated corrections;</li> 384<li data-section-id="1kh4v0x" data-start="8774" data-end="8799">failed implementations;</li> 385<li data-section-id="13ryl5e" data-start="8800" data-end="8828">unnecessary fragmentation;</li> 386<li data-section-id="1jeovfs" data-start="8829" data-end="8860">automated dependency updates;</li> 387<li data-section-id="d81b3g" data-start="8861" data-end="8890">trivial formatting changes;</li> 388<li data-section-id="8owu9t" data-start="8891" data-end="8948">fixes for problems introduced by earlier pull requests.</li> 389</ul> 390<p data-start="8950" data-end="9130">Conversely, a low number could represent careful, high-impact workâor a single 18,000-line pull request that causes every reviewer to suddenly develop an urgent dental appointment.</p> 391<p data-start="9132" data-end="9215">The count does not tell us whether the changes were useful, safe or even necessary.</p> 392<p data-start="9217" data-end="9242">Better questions include:</p> 393<ul data-start="9244" data-end="9539"> 394<li data-section-id="itp3ho" data-start="9244" data-end="9287">How quickly are useful changes delivered?</li> 395<li data-section-id="18srn0w" data-start="9288" data-end="9329">How often do changes introduce defects?</li> 396<li data-section-id="1ghd6v8" data-start="9330" data-end="9377">Are reviews substantive or merely ceremonial?</li> 397<li data-section-id="1h08nv9" data-start="9378" data-end="9415">Are pull requests reasonably sized?</li> 398<li data-section-id="y02tkh" data-start="9416" data-end="9473">Does the team learn from incidents and review feedback?</li> 399<li data-section-id="1lednsu" data-start="9474" data-end="9539">Are customers or internal users seeing meaningful improvements?</li> 400</ul> 401<p data-start="9541" data-end="9682">Pull requests are a workflow mechanism. Counting them is like measuring a restaurant by the number of plates that passed through the kitchen.</p> 402<p data-start="9684" data-end="9721">Interesting, perhaps. Conclusive, no.</p> 403<h2 data-section-id="13nxxdy" data-start="9723" data-end="9752">Exhibit Four: Tokens Spent</h2> 404<p data-start="9754" data-end="9816">Now we arrive at the museumâs newest attraction: tokens spent.</p> 405<p data-start="9818" data-end="9944">As organisations adopt generative AI, token counts have become the latest impressively large numbers available for dashboards.</p> 406<p data-start="9946" data-end="9978">Someone used ten million tokens.</p> 407<p data-start="9980" data-end="9990">Excellent.</p> 408<p data-start="9992" data-end="10006">What happened?</p> 409<p data-start="10008" data-end="10135">Did those tokens produce a working application, complete useful research, resolve customer cases or automate a tedious process?</p> 410<p data-start="10137" data-end="10362">Or did an AI agent repeatedly inspect the same repository, misunderstand the task, rewrite its own plan six times and confidently announce that it had completed work for which it did not even possess the required credentials?</p> 411<p data-start="10364" data-end="10395">The token count cannot tell us.</p> 412<p data-start="10397" data-end="10495">Tokens are units of text processed or generated by an AI model. They matter for practical reasons:</p> 413<ul data-start="10497" data-end="10634"> 414<li data-section-id="11kz4a6" data-start="10497" data-end="10511">expenditure;</li> 415<li data-section-id="hspjui" data-start="10512" data-end="10532">capacity planning;</li> 416<li data-section-id="19lckm3" data-start="10533" data-end="10543">latency;</li> 417<li data-section-id="1aodojg" data-start="10544" data-end="10562">model selection;</li> 418<li data-section-id="sm059o" data-start="10563" data-end="10589">efficiency optimisation;</li> 419<li data-section-id="vgfoey" data-start="10590" data-end="10634">detecting unexpectedly wasteful workflows.</li> 420</ul> 421<p data-start="10636" data-end="10698">But tokens spent are an <strong data-start="10660" data-end="10674">input cost</strong>, not an output measure.</p> 422<p data-start="10700" data-end="11018">Using more tokens does not necessarily mean that more reasoning occurred. It may mean that the task was complex, the context was large or extensive validation was performed. It may al
422so mean that the prompt was inefficient, the agent became stuck in a loop or the system generated vast quantities of polished nonsense.</p> 423<p data-start="11020" data-end="11258">Similarly, minimising tokens is not automatically desirable. Spending additional tokens to verify an important result may be entirely justified. A cheap but incorrect answer is not efficient. It is merely an error delivered at a discount.</p> 424<p data-start="11260" data-end="11313">The more meaningful measures depend on the objective:</p> 425<ul data-start="11315" data-end="11606"> 426<li data-section-id="q6ayuo" data-start="11315" data-end="11349">Was the task actually completed?</li> 427<li data-section-id="1us2vx0" data-start="11350" data-end="11376">Was the result accurate?</li> 428<li data-section-id="1w55029" data-start="11377" data-end="11418">How much human correction was required?</li> 429<li data-section-id="1p9vrl8" data-start="11419" data-end="11454">How much time or money was saved?</li> 430<li data-section-id="9pv72s" data-start="11455" data-end="11496">Was the outcome independently verified?</li> 431<li data-section-id="1wm6ybz" data-start="11497" data-end="11562">Did the system avoid inventing actions, identifiers or results?</li> 432<li data-section-id="17png6z" data-start="11563" data-end="11606">What was the cost per successful outcome?</li> 433</ul> 434<p data-start="11608" data-end="11742">âTokens spentâ might earn bragging rights among people with generous compute budgets. It does not, by itself, demonstrate useful work.</p> 435<h2 data-section-id="1c37vrd" data-start="11744" data-end="11782">When the Metric Becomes the Mission</h2> 436<p data-start="11784" data-end="11878">The deeper issue behind all four exhibits is not measurement itself. Measurement is necessary.</p> 437<p data-start="11880" data-end="11929">The trouble begins when a proxy becomes a target.</p> 438<p data-start="11931" data-end="11994">When developers are rewarded for lines of code, codebases grow.</p> 439<p data-start="11996" data-end="12079">When teams are rewarded for completing story points, estimates mysteriously expand.</p> 440<p data-start="12081" data-end="12185">When pull-request counts become visible performance measures, work gets divided into more pull requests.</p> 441<p data-start="12187" data-end="12298">When token usage is presented as proof of AI adoption, systems find remarkably creative ways to consume tokens.</p> 442<p data-start="12300" data-end="12538">People adapt to the measurement system placed around them. This is not necessarily dishonesty. It is often rational behaviour. If an organisation repeatedly signals that a number matters, employees will naturally optimise for that number.</p> 443<p data-start="12540" data-end="12625">Unfortunately, the number may become healthier while the actual outcome deteriorates.</p> 444<h2 data-section-id="cnq2vn" data-start="12627" data-end="12661">What Should We Measure Instead?</h2> 445<p data-start="12663" data-end="12782">There is no single perfect replacement metric. That is precisely why organisations keep returning to convenient counts.</p> 446<p data-start="12784" data-end="12876">Useful measurement normally requires a combination of quantitative data and human judgement.</p> 447<p data-start="12878" data-end="12933">Depending on the work, better indicators might include:</p> 448<ul data-start="12935" data-end="13288"> 449<li data-section-id="1tht5si" data-start="12935" data-end="12967">successful outcomes delivered;</li> 450<li data-section-id="hgchvd" data-start="12968" data-end="12994">user or customer impact;</li> 451<li data-section-id="orocvg" data-start="12995" data-end="13026">reliability and defect rates;</li> 452<li data-section-id="p982er" data-start="13027" data-end="13069">lead time from request to usable result;</li> 453<li data-section-id="124400w" data-start="13070" data-end="13119">frequency and severity of production incidents;</li> 454<li data-section-id="12cdz4c" data-start="13120" data-end="13138">rework required;</li> 455<li data-section-id="16m9vk8" data-start="13139" data-end="13157">maintainability;</li> 456<li data-section-id="1ektfta" data-start="13158" data-end="13185">cost per successful task;</li> 457<li data-section-id="1utu3zr" data-start="13186" data-end="13236">quality of documentation and knowledge transfer;</li> 458<li data-section-id="1cl51wl" data-start="13237" data-end="13288">whether the original problem was actually solved.</li> 459</ul> 460<p data-start="13290" data-end="13383">Even these can be manipulated or misunderstood. No dashboard eliminates the need for context.</p> 461<p data-start="13385" data-end="13435">A metric should begin a conversation, not end one.</p> 462<h2 data-section-id="1m7dt6g" data-start="13437" data-end="13469">The Museum Is Still Expanding</h2> 463<p data-start="13471" data-end="13603">Lines of code, story points, pull requests and tokens spent are not entirely useless. Each can answer a narrow operational question.</p> 464<p data-start="13605" data-end="13634">How large is this repository?</p> 465<p data-start="13636" data-end="13699">How does this team perceive the relative size of upcoming work?</p> 466<p data-start="13701" data-end="13752">How are changes flowing through the review process?</p> 467<p data-start="13754" data-end="13792">
467How much AI capacity are we consuming?</p> 468<p data-start="13794" data-end="13825">Those are legitimate questions.</p> 469<p data-start="13827" data-end="13912">The absurdity begins when the answers are repurposed to answer much larger questions:</p> 470<p data-start="13914" data-end="13933">Who worked hardest?</p> 471<p data-start="13935" data-end="13965">Which team is most productive?</p> 472<p data-start="13967" data-end="13994">Who created the most value?</p> 473<p data-start="13996" data-end="14027">Is our AI programme successful?</p> 474<p data-start="14029" data-end="14158">Numbers cannot answer those questions simply because they are available, countable and aesthetically compatible with a bar chart.</p> 475<p data-start="14160" data-end="14215">So perhaps the comicâs museum label is slightly unfair.</p> 476<p data-start="14217" data-end="14258">These are not always meaningless metrics.</p> 477<p data-start="14260" data-end="14354">They are metrics from which we frequently demand meaning they were never capable of providing.</p> 478<p data-start="14356" data-end="14469">And judging by the rate at which dashboards are being built, the museum gift shop should be extremely profitable.</p> 479<div class="fcbkbttn_buttons_block" id="fcbkbttn_left"></div> </div><!-- .entry-content --> 480 481 482</article><!-- #post-## --> 483 484<article class="post-796 post type-post status-publish format-standard has-post-thumbnail hentry category-travel category-vietnam" id="post-796"> 485 <header class="entry-header"> 486 <h2 class="entry-title mb-4 text-40"><a href="https://fated.net/rove-beetles-in-vietnam-the-tiny-bug-we-didnt-take-seriously-until-my-daughters-eye-started-swelling/" rel="bookmark">Rove Beetles in Vietnam: The Tiny Bug We Didnât Take Seriously Until My Daughterâs Eye Started Swelling</a></h2> <div class="entry-meta my-4"> 487 <span class="posted-on"> 488 489 <i class="fi-clock " aria-hidden="true"></i> <time class="entry-date published updated" datetime="2026-06-13T02:59:07+08:00">13 June 2026</time> 490 491 492 493 </span><!-- .posted-on --> 494 495 <span class="byline"> 496 <i class="fi-torso " aria-hidden="true"></i> <span class="author vcard">Howard Toh</span> 497 </span><!-- .byline --> 498 </div><!-- .entry-meta --> 499 </header><!-- .entry-header --> 500 501 <div class="entry-content"> 502 <h2>A tourist PSA from our Ho Chi Minh City trip</h2> 503<p class="isSelectedEnd"> 504<p class="isSelectedEnd">During our recent trip to Ho Chi Minh City, we stayed in a well-furnished apartment on the 17th floor. It was a nice place, the host was responsive, and honestly, this was not the sort of problem I expected to encounter so high above ground level.</p> 505<p class="isSelectedEnd">But over the first couple of days, we started noticing tiny insects crawling around inside the ap
505artment.</p> 506<p class="isSelectedEnd">At first, I did what many people would probably do without thinking too much: I squashed a few of them.</p> 507<p class="isSelectedEnd">Bad idea.</p> 508<p class="isSelectedEnd">We later realised these were <strong>rove beetles</strong>, known locally in Vietnam as kiến ba khoang. They are small, easy to miss, and they do not bite or sting. That is probably why many tourists may not immediately see them as dangerous.</p> 509<p class="isSelectedEnd">The problem is what happens when they are crushed.</p> 510<p class="isSelectedEnd">Rove beetles can contain an irritant called <strong>pederin</strong>. If the beetle is crushed against the skin, or if its body fluid gets transferred onto skin, towels, bedsheets, clothing, or surfaces, it can cause a painful skin reaction called <strong>Paederus dermatitis</strong>. The rash can look like a burn, blister, infection, or even shingles.</p> 511<p class="isSelectedEnd">That was the part we did not know. Here’s a short clip of one of the many in our apartment. YouTube Shorts: <a href="https://youtube.com/shorts/lERdwH2axbQ">https://youtube.com/shorts/lERdwH2axbQ</a></p> 512<div style="max-width: 420px; margin: 24px auto;"> 513<div style="position: relative; width: 100%; padding-top: 177.78%; overflow: hidden; border-radius: 16px; background: #000;"><iframe style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0;" title="Rove beetle in HCMC Airbnb" src="https://www.youtube.com/embed/lERdwH2axbQ" allowfullscreen="allowfullscreen"><br /> 514</iframe></div> 515</div> 516<h2>What Happened to Emma</h2> 517<p class="isSelectedEnd">From around the second day of our stay, we noticed some swelling and redness around Emmaâs eye area.</p> 518<p class="isSelectedEnd">At first, we did not immediately connect it to the insects in the apartment. After all, these beetles are not known to sting. There was no obvious âbite momentâ, no screaming, no dramatic jungle-adventure scene. Just some redness and swelling that slowly became worrying.</p> 519<p class="isSelectedEnd"><img decoding="async" class="alignnone wp-image-799" src="https://fated.net/wp-content/uploads/2026/06/rove_beetle_attack_emma_2-300x209.png" alt="Emma's eye swelling from rove beetle dermatitis during HCMC trip" width="288" height="200" srcset="https://fated.net/wp-content/uploads/2026/06/rove_beetle_attack_emma_2-300x209.png 300w, https://fated.net/wp-content/uploads/2026/06/rove_beetle_attack_emma_2.png 581w" sizes="(max-width: 288px) 100vw, 288px" /><img decoding="async" class="alignnone wp-image-800" src="https://fated.net/wp-content/uploads/2026/06/rove_beetle_attack_emma_1-300x225.webp" alt="Redness and swelling near the eye caused by Paederus dermatitis from rove beetle" width="267" height="200" srcset="https://fated.net/wp-content/uploads/2026/06/rove_beetle_attack_emma_1-300x225.webp 300w, https://fated.net/wp-content/uploads/2026/06/rove_beetle_attack_emma_1.webp 605w" sizes="(max-width: 267px) 100vw, 267px" /></p> 520<p class="isSelectedEnd">As the trip went on, the area looked more inflamed, and because it was near her eye, we decided not to wait it out. Skin reactions are one thing. Anything near the eye is where my parental overthinking department opens a full emergency branch office.</p> 521<p>So I brought Emma to <a href="https://share.google/phqBsNwbAuqGFuLXy"><strong>Tâm Anh General Hospital</strong></a> in District 7 of Ho Chi Minh City.</p> 522<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-798" src="https://fated.net/wp-content/uploads/2026/06/IMG_2959-1024x576.jpg" alt="Registration @ Tam Anh Hospital in District 7" width="640" height="360" srcset="https://fated.net/wp-content/uploads/2026/06/IMG_2959-1024x576.jpg 1024w, https://fated.net/wp-content/uploads/2026/06/IMG_2959-300x169.jpg 300w, https://fated.net/wp-content/uploads/2026/06/IMG_2959-768x432.jpg 768w, https://fated.net/wp-content/uploads/2026/06/IMG_2959-1536x865.jpg 1536w, https://fated.net/wp-content/uploads/2026/06/IMG_2959.jpg 1835w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p> 523<h2>Visiting Tâm Anh Hospital as a Tourist in HCMC</h2> 524<p class="isSelectedEnd"><img loading="lazy" decoding="async" class="alignleft wp-image-803 size-large" src="https://fated.net/wp-content/uploads/2026/06/IMG_2962-576x1024.jpg" alt="Pediatric Consultation at Tam Anh Hospital" width="576" height="1024" srcset="https://fated.net/wp-content/uploads/2026/06/IMG_2962-576x1024.jpg 576w, https://fated.net/wp-content/uploads/2026/06/IMG_2962-169x300.jpg 169w, https://fated.net/wp-content/uploads/2026/06/IMG_2962.jpg 581w" sizes="auto, (max-width: 576px) 100v
524w, 576px" />We went to <strong>Tâm Anh General Hospital</strong> for Emmaâs consultation.</p> 525<p class="isSelectedEnd">My quick summary of the experience: it felt like a private hospital visit, closer to something like Gleneagles in Singapore in terms of environment, but the bill was surprisingly affordable from a Singaporean touristâs point of view.</p> 526<p class="isSelectedEnd">The hospital was clean, quiet, and very well-staffed. In fact, there seemed to be more nurses and staff than patients when we were there.</p> 527<p class="isSelectedEnd">The one area that could have been better was English communication. For a hospital that seems fairly modern and private, I expected basic English communication to be smoother. We managed, but it was not seamless until we saw the doctor.</p> 528<p class="isSelectedEnd">That said, once the doctor came in, the consultation itself was relaxed and reassuring. Emma noticed that the doctor walked in wearing Crocs, which immediately made the whole thing feel a bit less intimidating. Not exactly the solemn hospital drama scene I had prepared myself for.</p> 529<p class="isSelectedEnd">The doctor was an experienced older paediatrician, and almost immediately after looking at Emmaâs skin, she asked whether it could be an insect-related reaction.</p> 530<p class="isSelectedEnd">At that point, I was still unsure.</p> 531<p class="isSelectedEnd">Then we both started trying to describe the same insect in our own ways. I showed her photos of rove beetles, and we had the âah, yes, that oneâ moment.</p> 532<p class="isSelectedEnd">The doctor suspected that Emma may have come into contact with a rove beetle while sleeping, or unknowingly during the day. Another possibility is that the irritant may have been transferred from a crushed beetle on a surface, towel, bedsheet, or object.</p> 533<p class="isSelectedEnd">And yes, I had crushed one or two of them earlier in the stay before I knew what they were.</p> 534<p class="isSelectedEnd">So this post is partly a PSA, and partly my confession that I may have accidentally turned a tiny bug into a tiny biological paint marker. Not my proudest fatherhood side quest.</p> 535<h2>Should I Blame the Airbnb Host?</h2> 536<p class="isSelectedEnd">Personally, I do not think this is a case for naming and shaming the Airbnb host.</p> 537<p class="isSelectedEnd">We booked two apartments opposite each other because we were travelling as a large group. Both units were well furnished, and the host was responsive throughout our stay.</p> 538<p class="isSelectedEnd">From what I later read, rove beetles can become more common during wet or rainy seasons in parts of Vietnam. They are attracted to light and may enter homes and apartments even when people are generally careful. In our case, the apartment was on the 17th floor and the windows were shut, yet we still saw multiple beetles indoors.</p> 539<p class="isSelectedEnd">When I informed the host, he offered to reimburse our medical bill. I told him we had travel insurance, but I appreciated the gesture. He also quickly sent someone to apply pest repellent around the windows and balcony areas.</p> 540<p class="isSelectedEnd"><strong>To me, that showed responsibility.</strong></p> 541<p class="isSelectedEnd">So this is not a âbad Airbnbâ post. It is more of a âtourists should know this tiny insect existsâ post.</p> 542<p class="isSelectedEnd">Because if you see one of these beetles and react the wrong way, you may make things worse without realising it.</p> 543<h2>What Rove Beetles Look Like</h2> 544<p class="isSelectedEnd">The rove beetles we saw were small and narrow-bodied, with a distinctive colour pattern: dark head, orange/red body sections, and a darker tail end. They look a bit like an ant, a wasp, and a tiny villain from an insect anime all merged together.</p> 545<p class="isSelectedEnd"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-797" src="https://fated.net/wp-content/uploads/2026/06/images250612_ant.jpg" alt="Rove Beetle in Vietnam (kiến ba khoang)" width="600" height="479" srcset="https://fated.net/wp-content/uploads/2026/06/images250612_ant.jpg 600w, https://fated.net/wp-content/uploads/2026/06/images250612_ant-300x240.jpg 300w" sizes="auto, (max-width: 600px) 100v
545w, 600px" /></p> 546<p class="isSelectedEnd">The key thing to know: <strong>do not crush them</strong>.</p> 547<p class="isSelectedEnd">Not with your hand.<br /> 548Not with tissue.<br /> 549Not with a slipper.<br /> 550Not with a random object that you might later touch again.</p> 551<p class="isSelectedEnd">If the beetleâs body fluid gets onto a surface, and someone touches that surface later, the irritant may still transfer to the skin.</p> 552<h2>What To Do If You See a Rove Beetle</h2> 553<p class="isSelectedEnd">If you are visiting Vietnam, especially during wetter seasons, and you see a bug that looks like the one in the photos or video here:</p> 554<ol start="1" data-spread="false"> 555<li><strong>Do not crush it.</strong></li> 556<li><strong>Do not brush it across your skin.</strong></li> 557<li><strong>Gently blow it away or use a piece of paper to lift and remove it.</strong></li> 558<li><strong>If you think it touched your skin, wash the area with soap and water.</strong></li> 559<li><strong>Wash hands, towels, or clothing that may have come into contact with it.</strong></li> 560<li><strong>Avoid touching your eyes after handling anything near the insect.</strong></li> 561<li><strong>Seek medical help if there is swelling, blistering, pain, spreading redness, or eye involvement.</strong></li> 562</ol> 563<p class="isSelectedEnd">This is especially important for children because they may touch the insect, wipe their face, rub their eyes, or sleep on contaminated bedsheets without anyone noticing.</p> 564<h2>Symptoms to Watch For</h2> 565<p class="isSelectedEnd">Rove beetle dermatitis may not appear instantly. Depending on the exposure, symptoms can develop later and may include:</p> 566<ul data-spread="false"> 567<li>Redness</li> 568<li>Burning sensation</li> 569<li>Swelling</li> 570<li>Blister-like marks</li> 571<li>Linear rash patterns</li> 572<li>Skin that looks like a burn</li> 573<li>Irritation near the eyes</li> 574<li>Worsening redness or signs of infection</li> 575</ul> 576<p class="isSelectedEnd">Because the rash can look like other conditions, it is easy to misread it as a bite, allergy, infection, or even shingles. If it is near the eye, I would not take chances.</p> 577<h2>Getting Medical Help in Ho Chi Minh City</h2> 578<p class="isSelectedEnd">We brought Emma to <strong>Tâm Anh General Hospital in District 7 of Ho Chi Minh City</strong><br /> 579<span class="text-token-text-primary cursor-text rounded-sm" data-placeholder-token="true"><a style="display: inline-block; padding: 14px 22px; background: #d71920; color: #ffffff; font-weight: bold; text-decoration: none; border-radius: 8px; font-family: Arial, sans-serif; font-size: 16px; line-height: 1.2;" href="https://www.google.com/maps/search/?api=1&query=Tam%20Anh%20General%20Hospital%20Ho%20Chi%20Minh%20City" target="_blank" rel="noopener noreferrer">Get directions to Tâm Anh Hospital on Google Maps<br /> 580</a></span><br /> 581If you are a tourist in HCMC and need medical help, I would also suggest:</p> 582<ul data-spread="false"> 583<li>Bring your passport or a photo of it.</li> 584<li>Preserve and prepare earlier photos of the swelling and/or rashes to show the doctor.</li> 585<li>Take photos of the insect if you safely can.</li> 586<li>Use Google Translate if the registration counter has limited English.</li> 587<li>Ask for a medical report and itemised receipt for insurance claims.</li> 588<li>For children, eye involvement, fever, spreading redness, or severe pain, do not wait too long.</li> 589</ul> 590<h2>Travel Insurance Note</h2> 591<p class="isSelectedEnd">This is not insurance advice, but if you are travelling, keep all receipts and medical documents.</p> 592<p class="isSelectedEnd">In our case, the Airbnb host offered to reimburse the medical bill, but we had travel insurance, so I preferred to go through the proper insurance route. This is to allow us to have smoother in case there are follow-up claims or further treatment needed for medical treatment when we are back in Singapore (yes, we’re still in Ho Chi Minh as I write this).</p> 593<p class="isSelectedEnd">If you need to make a claim, remember to keep:</p> 594<ul data-spread="false"> 595<li>Hospital receipt</li> 596<li>Doctorâs memo or medical report</li> 597<li>Medication receipt</li> 598<li>Transport receipt, if applicable</li> 599<li>Photos of the condition</li> 600<li>Photos or video of the suspected insect, if available</li> 601</ul> 602<h2>Final PSA for Tourists Visiting Vietnam</h2> 603<p class="isSelectedEnd">If you remember only one thing from this post, remember this:</p> 604<p class="isSelectedEnd"><strong>If you see a rove beetle, do not squash it.</strong></p> 605<p class="isSelectedEnd">The beetle is not dangerous because it chases you, bites you, or stings you. It becomes a problem when it is crushed and its irritant gets onto your skin or nearby surfaces.</p> 606<p class="isSelectedEnd">We were lucky that Emma was seen quickly and the situation was manageable. But it could easily have been more stressful, especially because the reaction was near her eye.</p> 607<p class="isSelectedEnd">So if you are travelling to Vietnam, especially during rainy or wet seasons, keep an eye out for these tiny beetles. Shake out towels, check bedsheets, avoid leaving bright lights on near open gaps, and teach children not to touch or squash unfamiliar insects.</p> 608<p class="isSelectedEnd">Tiny bug. Serious rash. Very avoidable lesson.</p> 609<p>Unfortunately, we learned it the itchy way.</p> 610<div class="fcbkbttn_buttons_block" id="fcbkbttn_left"></div> </div><!-- .entry-content --> 611 612 613</article><!-- #post-## --> 614 615<article class="post-787 post type-post status-publish format-standard has-post-thumbnail hentry category-service-reviews" id="post-787"> 616 <header class="entry-header"> 617 <h2 class="entry-title mb-4 text-40"><a href="https://fated.net/how-a-tiny-galaxy-projector-fixed-my-kids-fear-of-the-dark-while-travelling/" rel="bookmark">How a Tiny Galaxy Projector Fixed My Kid’s Fear of the Dark (While Travelling)</a></h2> <div class="entry-meta my-4"> 618 <span class="posted-on"> 619 620 <i class="fi-clock " aria-hidden="true"></i> <time class="entry-date published updated" datetime="2026-06-12T17:40:27+08:00">12 June 2026</time> 621 622 623 624 </span><!-- .posted-on --> 625 626 <span class="byline"> 627 <i class="fi-torso " aria-hidden="true"></i> <span class="author vcard">Howard Toh</span> 628 </span><!-- .byline --> 629 </div><!-- .entry-meta --> 630 </header><!-- .entry-header --> 631 632 <div class="entry-content"> 633 634<p class="wp-block-paragraph">Ethan is afraid of the dark. Like properly afraid â the kind where every shadow is a monster and bedtime turns into a negotiation. We’ve tried night lights, leaving the door cracked, the whole routine. They help, but they don’t <em>fix</em> it.</p> 635 636 637 638<p class="wp-block-paragraph">So when we travel, I’ve started bringing along a secret weapon: a compact, USB-powered mini star/galaxy projector.</p> 639 640 641 642 643 644<p class="wp-block-paragraph">It’s small â about the size of a deck of cards â and runs off any USB port (power bank, laptop, wall adapter, whatever). And what it does to a dark room is honestly kind of magical.</p> 645 646 647 648<h2 class="wp-block-heading">How It Works</h2> 649 650 651 652<p class="wp-block-paragraph">This little gadget projects a rotating starry sky with a detailed, textured moon onto the ceiling. It covers the entire ceiling in a field of bright, scattered stars with a soft galaxy nebula drift across the scene. The colours are cool blues and whites â calming, not harsh â and the gentle rotation creates a subtle motion that’s surprisingly soothing.</p> 653 654 655 656<p class="wp-block-paragraph">Instead of lying in the dark staring at a blank ceiling imagining things, Ethan now looks up at the night sky. The moon
656is big enough that it feels real, and the stars keep his attention in a good way â the way a campfire does.</p> 657 658 659 660<h2 class="wp-block-heading">Why It’s Great for Travel</h2> 661 662 663 664<ul class="wp-block-list"> 665<li><strong>USB-powered</strong> â plug it into a power bank, laptop, or wall charger. No batteries to hunt for.</li> 666 667 668 669<li><strong>Compact</strong> â fits in any carry-on pocket or toiletries bag.</li> 670 671 672 673<li><strong>Familiar comfort</strong> â hotel rooms / Airbnb apartments feel less foreign when the ceiling looks like your own bedroom galaxy.</li> 674 675 676 677<li><strong>Works as a night light</strong> â enough gentle light to navigate the room without being bright enough to disturb sleep.</li> 678 679 680 681<li><strong>Great for naps too</strong> â the slow rotation and soft light doubles as an ambient wind-down cue.</li> 682</ul> 683 684 685 686<h2 class="wp-block-heading">Not Just for Kids</h2> 687 688 689 690<p class="wp-block-paragraph">I won’t lie â I’ve used it for myself too. After Ethan falls asleep, the galaxy projection makes the room feel like a cozy planetarium. It’s genuinely relaxing to lie there and watch the stars drift by. If you’re someone who finds it hard to wind down in unfamiliar places, this helps.</p> 691 692 693 694<h2 class="wp-block-heading">Get One</h2> 695 696 697 698<p class="wp-block-paragraph">If you’ve got a kid (or an adult) who struggles with the dark â especially when travelling â I’d honestly recommend grabbing one. It’s cheap, tiny, and the effect on the room is way more impressive than you’d expect from something this size.</p> 699 700 701 702<p class="wp-block-paragraph"><a href="https://s.shopee.sg/1Vwl9aot3Q" target="_blank" rel="noreferrer noopener nofollow sponsored">Check it out on Shopee</a> â Affiliate links help keep this site running. <em>(Prices and availability correct at time of posting.)</em></p> 703<div class="fcbkbttn_buttons_block" id="fcbkbttn_left"></div> </div><!-- .entry-content --> 704 705 706</article><!-- #post-## --> 707 708<article class="post-773 post type-post status-publish format-standard has-post-thumbnail hentry category-others" id="post-773"> 709 <header class="entry-header"> 710 <h2 class="entry-title mb-4 text-40"><a href="https://fated.net/tupperware-malaysia-consultant-termination-2026/" rel="bookmark">Tupperware Malaysia Is Closing Too â And This Time I Saw It Coming</a></h2> <div class="entry-meta my-4"> 711 <span class="posted-on"> 712 713 <i class="fi-clock " aria-hidden="true"></i> <time class="entry-date published updated" datetime="2026-06-02T04:48:46+08:00">2 June 2026</time> 714 715 716 717 </span><!-- .posted-on --> 718 719 <span class="byline"> 720 <i class="fi-torso " aria-hidden="true"></i> <span class="author vcard">Howard Toh</span> 721 </span><!-- .byline --> 722 </div><!-- .entry-meta --> 723 </header><!-- .entry-header --> 724 725 <div class="entry-content"> 726 <p><em>Date: 2 June 2026</em></p> 727<h2>Iâve Been Here Before</h2> 728<p>When <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a><a href="https://fated.net/what-happened-to-tupperware-singapore-and-tupperware-warranty/"> Singapore shut down in December 2024</a>, I was on holiday with my family. The email landed in my inbox with the subject line “Closure of <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> Singapore.” No warning. No runway. Just: stop everything, cease using the logo immediately, and figure the rest out yourself.</p> 729<p>I wrote about that experience â the silence from management, the stock left piled up at home, the customers asking about warranties I could no longer honour. It was one of the more stressful chapters of my time as a distributor.</p> 730<p>So when an email arrived on 30 May 2026 with the subject “Consultants Termination Notice” from Tupperware Malaysia, my stomach turned. Not because I was surprised. Because I knew exactly what was coming next for the people on the other end.</p> 731<h2>The Email That Says Everything</h2> 732<p>Here is the notice <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> Malaysia sent to its independent consultants, in full:</p> 733<hr /> 734<blockquote><p><strong>NOTICE OF TERMINATION OF INDEPENDENT CONSULTANT AGREEMENT</strong></p></blockquote> 735<blockquote><p>We write to you as a valued member of the Tupperware Brands Malaysia family.</p></blockquote> 736<blockquote><p>Ministry of Domestic Trade and Cost of Living (“KPDN”) formally approved our application to transition to a new business model. As part of this transition, we are required to bring the existing Independent Consultant Agreement to a close.</p></blockquote> 737<blockquote><p>This letter serves as formal notice of that termination pursuant to items 21 and 23 of the General Terms & Conditions of the Tupperware Brands Business Handbook, <strong>with an extended notice period of 30 days in place of the standard 7 days</strong> to allow you ample time to prepare.</p></blockquote> 738<blockquote><p>This termination reflects no shortcomings on your part. It is a necessary step in our transition to the newly approved framework.</p></blockquote> 739<blockquote><p>On <strong>1 July 2026</strong>, the new business model will take effect.</p></blockquote> 740<blockquote><p>In <strong>June 2026</strong>, you may continue to purchase and conduct your business as usual. All existing product warranties, customer commitments, and ongoing orders will be honoured in full by Tupperware Brands Malaysia. There will be no disruption to your day-to-day selling activities, and we remain fully committed to supporting you and your customers every step of the way.</p></blockquote> 741<blockquote><p>Also, a Transition Guideline will be distributed to provide you with all the information (including further explanation on new contract requirements) you need to move forward with confidence.</p></blockquote> 742<blockquote><p>During this transitional period, please be connected with your upline manager as they will walk
742you through the details of the new arrangement and keep you updated as things progress.</p></blockquote> 743<blockquote><p>Should you have any questions about the content of this letter or wish to discuss your options further, please do not hesitate to reach out to your upline Manager or your DSMs. They will be happy to guide you through the process.</p></blockquote> 744<blockquote><p>We are genuinely excited about what the new model brings and believe it will create an even stronger foundation for your business. We look forward to continuing this journey together, and to an exciting future ahead.</p></blockquote> 745<blockquote><p>Thank you sincerely for your dedication and the trust you have placed in Tupperware Brands Malaysia.</p> 746<figure class="wp-block-image size-large"><figcaption>The termination notice sent to Tupperware Malaysia consultants on 30 May 2026.</figcaption></figure> 747</blockquote> 748<p> </p> 749<blockquote><p> Best regards,</p></blockquote> 750<blockquote><p>Tupperware Brands Malaysia Sdn. Bhd.</p></blockquote> 751<hr /> 752<h2>The Language of Corporate Kindness</h2> 753<p>Let me translate that for anyone who has never been on the receiving end of a termination notice dressed in corporate optimism.</p> 754<p><strong>“Extended notice period of 30 days in place of the standard 7 days”</strong></p> 755<p>This is the line that floored me. The handbook apparently allows them to give just <em>seven days</em> notice. They are being “generous” by giving thirty. Thirty days to wind down a business some people have built over years or decades. Thirty days to clear stock, notify customers, and somehow pivot to a “new business model” that nobody has explained yet. The email mentions a “Transition Guideline” that <em>will be distributed</em> â future tense, no date given.</p> 756<p><strong>“This termination reflects no shortcomings on your part”</strong></p> 757<p>Of course it doesnât. The consultants did nothing wrong. They sold the products, hit their targets, built their downlines, and trusted the brand. The shortcoming is entirely on the side of a company that has decided the independent consultant model no longer suits its corporate restructuring â after profiting from that exact model for years.</p> 758<p><strong>“We remain fully committed to supporting you”</strong></p> 759<p>In my Singapore experience, that commitment translated to an overwhelmed Division Sales Manager who stopped answering emails, and a directive to immediately stop using branding I had built my business around. I hope Malaysian consultants have a better experience. I am not optimistic.</p> 760<h2>What Happens to the Stock?</h2> 761<p>Here is the question the email delicately avoids: what do consultants do with the inventory they have already purchased?</p> 762<p><a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a>âs model encourages â and in some cases requires â consultants to hold stock. When the music stops, that stock does not magically turn back into cash. In my case, I was left with products I could no longer sell under the <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> name, and a customer base that suddenly had no warranty path. The email says “existing product warranties… will be honoured in full.” That is welcome news for customers. It does not help the consultant who has RM 5,000, RM 10,000, or RM 50,000 worth of product sitting in their spare room and no clear channel to move it.</p> 763<h2>What Happens to the People?</h2> 764<p>This is the part that genuinely bothers me. <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> in Malaysia is not just a product line. For many consultants â predominantly women, many of them running small home-based businesses â it has been a source of independent income, community, and identity.</p> 765<p>You cannot tell someone to find a new livelihood in thirty days. You cannot tell them to “be connected with your upline manager” and call that a transition plan. The email reads like it was written by someone who has never had to explain to their children why the family business suddenly has a countdown timer on it.</p> 766<h2>Déjà Vu</h2> 767<p>Reading this notice gave me the same feeling I had in December 2024: the sense that a company I trusted was asking me to smile while it took something away. The phrasing is warmer this time â “genuinely excited,” “exciting future ahead” â but the substance is the same. The consultant relationship is being terminated. The business model is being upended. And the people who built that business are expected to adapt on a timeline that suits the company, not themselves.</p> 768<p>I do not know what the “new business model” looks like. Maybe it will be better. Maybe it will cut out the independent consultant layer entirely and move to direct retail or e-commerce. If so, the people who did the groundwork â the home parties, the customer demos, the warranty claims â deserve more than a thirty-day heads-up and a promise of excitement.</p> 769<h2>My Take</h2> 770<p>I am not a lawyer, and I am not looking to start a fight with a multinational. But I have been through this once already, and I know what it feels like when the corporate music stops and you are the one left holding the stock.</p> 771<p>If you are a <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> Malaysia consultant reading this: document everything. Count your inventory. Screenshot your agreements. Start talking to your customers now about what happens after 1 July. Do not wait for the “Transition Guideline” that may or may not answer your actual questions.</p> 772<p>And if <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> Brands Malaysia is serious about honouring the trust people have placed in them, they should answer one simple question clearly and publicly: <strong>what exactly happens to the independent consultants after 1 July?</strong></p> 773<p>Because thirty days of “business as usual” is not a plan. It is a countdown.</p> 774<p>—</p> 775<p><em>I am a former <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> distributor based in Singapore. I ran a <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a>-focused e-commerce business for over a decade. These views are my own, based on my personal experience and the communications I have received. I have no ongoing commercial relationship with <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> Brands Malaysia or <a href="https://s.shopee.sg/9zufyCxPSl" rel="sponsored">Tupperware</a> Brands Singapore.</em></p> 776<div class="fcbkbttn_buttons_block" id="fcbkbttn_left"></div> 777 </div><!-- .entry-content --> 778 779 780</article><!-- #post-## --> 781 782<article class="post-752 post type-post status-publish format-standard has-post-thumbnail hentry category-courier category-money category-service-reviews category-shipping-handling tag-amazon tag-amazon-singapore tag-consumer-rights tag-delivery tag-otp tag-police-report tag-scam tag-singapore" id="post-752"> 783 <header class="entry-header"> 784 <h2 class="entry-title mb-4 text-40"><a href="https://fated.net/amazon-singapore-otp-scam-laptop-never-delivered/" rel="bookmark">My $1,499 Laptop Never Arrived â and Amazon Singapore Isnât Caring</a></h2> <div class="entry-meta my-4"> 785 <span class="posted-on"> 786 787 <i class="fi-clock " aria-hidden="true"></i> <time class="entry-date published updated" datetime="2026-05-23T21:57:33+08:00">23 May 2026</time> 788 789 790 791 </span><!-- .posted-on --> 792 793 <span class="byline"> 794 <i class="fi-torso " aria-hidden="true"></i> <span class="author vcard">Howard Toh</span> 795 </span><!-- .byline --> 796 </div><!-- .entry-meta --> 797 </header><!-- .entry-header --> 798 799 <div class="entry-content"> 800 801<p class="wp-block-paragraph"><strong>ð¢ Update @ 29 May 2026</strong></p> 802 803 804 805<p class="wp-block-paragraph">This story has since been covered by <a href="https://www.zaobao.c
805om.sg/news/singapore/story20260529-9106090">Zaobao</a> and <a href="https://mustsharenews.com/amazon-laptop-delivery-fail/">Must Share News</a>, with both reports picking up on the Amazon OTP delivery failure and the consumer-protection questions around high-value deliveries marked as completed without the parcel ever reaching the customer.</p> 806 807 808 809<hr class="wp-block-separator has-alpha-channel-opacity"/> 810 811 812 813<p class="wp-block-paragraph"><strong>ð¢ Update @ 27 May 2026</strong></p> 814 815 816 817<p class="wp-block-paragraph">Someone from Amazon’s Executive Relations team has since reached out to me and assured me that the matter is now being immediately investigated, including the conduct of the driver involved. I was also informed that a refund and goodwill compensation would be arranged for the experience.</p> 818 819 820 821<p class="wp-block-paragraph">I’ve replied to request visibility into the investigation outcome â even offering to sign an NDA if necessary â because after almost a month of uncertainty, contradictory responses, missed callbacks and a police report, I genuinely just want closure and to understand what actually happened.</p> 822 823 824 825<p class="wp-block-paragraph">Thank you to everyone who followed, shared advice, offered support, or simply amplified the story. I honestly wish I never had to embark on this journey in the first place, but I hope the discussion around OTP-based deliveries and consumer safeguards proves useful to others.</p> 826 827 828 829<hr class="wp-block-separator has-alpha-channel-opacity"/> 830 831 832<img loading="lazy" decoding="async" class="alignleft wp-image-753" src="https://fated.net/wp-content/uploads/2026/05/amazon-otp-call-log.jpg" alt="Call log showing +65 3163 6827 called at 1:42 PM on 28 April 2026" width="230" height="500" srcset="https://fated.net/wp-content/uploads/2026/05/amazon-otp-call-log.jpg 589w, https://fated.net/wp-content/uploads/2026/05/amazon-otp-call-log-138x300.jpg 138w, https://fated.net/wp-content/uploads/2026/05/amazon-otp-call-log-471x1024.jpg 471w" sizes="auto, (max-width: 230px) 100vw, 230px" /> 833 834I was home. I was waiting. I was ready. 835 836On 28 April 2026, I was expecting an Amazon delivery â an Acer laptop, S$1,499, ordered the day before. Amazon had told me it required OTP verification. You know the drill: driver arrives, you give them a six-digit code, they hand you the box. Supposed to be more secure than leaving a package at the door. 837 838At 9:03 AM that morning, Amazon emailed me: <em>“Arriving Today: A one-time password is required for your Amazon delivery.”</em> Great, I thought â extra security for a big-ticket item. 839 840At 1:42 PM, my phone rang. Local number. Caller ID: 3163 6827. <span style="color: #ff0000;"><strong>(Update: This is a VALID Amazon Logistics number!)</strong></span> 841 842<em>“Hi, I’m your Amazon delivery driver. I need your OTP to complete the delivery.”</em> 843 844I gave it to him. Why wouldn’t I? Amazon had literally emailed me four hours earlier telling me a driver would need my OTP. This was also my very first Amazon order that required OTP â I had no prior experience with the process, and nothing in the email made it obvious that a phone call was a red flag. 845 846The call ended. My Amazon app updated: <strong>“Delivered.”</strong> 847 848Nobody came to my door. 849<figure class="wp-block-image size-large"><figcaption>The call that started it all â 1:42 PM, 28 April 2026. Caller ID: 3163 6827.</figcaption></figure> 850<h2>The Part Where It Gets Worse</h2> 851I checked my IP camera. I checked my smart doorbell. I reviewed the footage thoroughly. No driver, no delivery person anywhere near my unit at the time of the call. 852 853I contacted Amazon immediately. 854 855<strong>Amazon’s own customer service confirmed two things:</strong> 856<ol> 857 <li>There was <strong>no delivery photo or proof of delivery</strong> recorded for my order â their own SOP requires drivers to photograph the package at the recipient’s door</li> 858 <li>OTPs are <strong>only supposed to be provided in person</strong>, at the point of delivery, entered directly into the driver’s device</li> 859</ol> 860So to recap: their driver (or someone claiming to be their driver) called me, asked for the OTP over the phone, used it to mark the package as delivered, and never showed up. Amazon’s system accepted the OTP without any delivery proof. At 1:44 PM, Amazon sent a “Delivered” email claiming <em>“Parcel was handed to resident”</em> â a statement their own system generated automatically, despite no delivery actually taking place. 861 862And now I’m the one out S$1,499. 863<h2>The Number That Called Me</h2> 864+65 3163 6827. It’s a Singapore VoIP number. While it’s normal for delivery companies to use VoIP or in-app calling to reach customers, what’s not normal is what happened next. 865 866And think about this: how did the caller know I had an Amazon delivery that day? How did they know it required an OTP? How did they know the exact delivery window? A random scammer doesn’t have access to Amazon’s internal delivery schedule. And even if someone tricked me into giving them the OTP over the phone â the OTP alone doesn’t make a physical laptop vanish from Amazon’s warehouse. Someone with access to Amazon’s logistics chain had to physically intercept the package. 867 868OTP fraud explains how the delivery was falsified. But only someone inside Amazon’s delivery operation could make the box disappear. 869<h2>Enter Amazon’s “Leadership Team”</h2> 870I filed a police report on 30 April (F/20260430/7***, assigned to Ang Mo Kio Division HQ). I then called Amazon and demanded escalation. I was connected to a supervisor named Kyle, who identified himself as being from the “Amazon Singapore Leadership Team.” 871 872<strong>During this phone call, Kyle advised me to place a replacement order for the same laptop</strong> â the replacement order. He said the investigation and refund would take time, and ordering a replacement was the fastest way to get my laptop. So I did, right there on the call with him. 873 874Let that sink in: if Amazon truly believed the original delivery was legitimate, why would their Leadership Team supervisor tell me to buy a second identical S$1,499 laptop? Why would anyone who just “received” a laptop need another one? 875 876After the call, Kyle sent a follow-up email. He said he had “set a follow-up on my account” and “raised this issue to the relevant team.” He asked for “2 business days to get an update.” 877 878On 2 May, Kyle emailed again. He said the specialist team was “coordinating with Logistics” and â I quote â <strong>“discussing the best possible compensation we can offer.”</strong> 879 880That was 2 May. I never heard from Kyle again. 881 882I chased on 5 May. Nothing. 883I chased again on 7 May from a different email address. Nothing. 884 885On 13 May, I called Amazon for an update. The agent I spoke to checked my case notes and told me Kyle was supposed to call me back on <strong>15 May</strong>. “Please be patient,” he said. 886 88715 May came and went. No call. No email. Nothing. 888<h2>Today: The Mask Comes Off</h2> 889Today is 23 May. My second Atome instalment for the laptop I never received is due soon. I decided to check on my case status again. 890 891This time, Amazon’s attitude was completely different. The agent told me â coldly â that because I had given the OTP, it was <strong>no longer Amazon’s responsibility</strong>. Case closed. 892 893I demanded a supervisor immediately. I explained that Kyle was supposed to follow up with me. I asked them to stop passing judgement without actually investigating. 894 895The supervisor who took over was curt. Kept repeating the same line: you gave the OTP, not our problem. And then â <strong><span style="color: #ff0000;">she hung up on me</span>.</strong> 896 897Three weeks of silence. Two broken callback promises. A supervisor who literally hangs up on customers dis
897puting a S$1,499 loss. This is Amazon Singapore’s idea of “customer service.” 898<h2>The Part Where Amazon Blames You</h2> 899Amazon’s position, when you strip away everything else: <strong>“You gave away the OTP. That’s on you.”</strong> 900 901Let’s lay out what Amazon did â and didn’t do: 902<ul> 903 <li>Amazon sent me an OTP email at 9:03 AM, priming me to expect a driver to ask for the code</li> 904 <li>The one warning about not sharing the OTP over the phone was <strong>buried below the visible fold</strong> in the email â invisible on a mobile screen without scrolling past product details, tracking links, and delivery instructions</li> 905 <li>This was my <strong>very first OTP order</strong> â a S$1,499 laptop, not a S$20 cable. Amazon threw a first-time OTP user into the deep end on a premium purchase</li> 906 <li>Their system accepted the OTP remotely without requiring the driver to take a delivery photo â standard procedure that every other delivery driver follows</li> 907 <li>Their system auto-generated a false statement: “Parcel was handed to resident”</li> 908 <li>Their Leadership Team told me to buy a replacement laptop â implicitly acknowledging the first one was never received</li> 909 <li>They promised compensation, then ghosted me for three weeks</li> 910 <li>They promised a callback on 15 May â never happened</li> 911 <li>When I finally pushed for answers, a supervisor hung up on me</li> 912</ul> 913Amazon has all the tools to investigate this: chat logs, call recordings, driver GPS data, which driver account redeemed the OTP, whether the caller number matches the assigned driver. They could determine exactly what happened. They have chosen not to. 914<h2>What I’ve Done So Far</h2> 915<ul> 916 <li>Filed a police report within 48 hours (F/20260430/7***, assigned to Ang Mo Kio Division HQ)</li> 917 <li>Contacted Amazon repeatedly across chat, phone, and email over nearly four weeks</li> 918 <li>Escalated to their self-declared Leadership Team (who then ghosted me)</li> 919 <li>Contacted Atome (my BNPL provider) â they said “pursue merchant resolution first”</li> 920 <li>Saved every email, call log, and screenshot</li> 921</ul> 922I’m not letting this go. S$1,499 isn’t pocket change, and even if it were â the principle matters. Companies don’t get to design insecure systems, bury the safety warnings, generate false delivery claims, and then hang up on customers who try to hold them accountable. 923<h2>What You Should Know</h2> 924If you’re waiting for an Amazon OTP delivery: 925<ul> 926 <li><strong>The driver should never ask for your OTP over the phone.</strong> Ever. If someone calls asking for it, they’re not your driver.</li> 927 <li><strong>Don’t hand over the code until you see the box and the driver at your door.</strong> That’s literally the point of OTP.</li> 928 <li><strong>If you’re scammed, file a police report immediately.</strong> Amazon will drag things out, and evidence degrades.</li> 929 <li><strong>Know that Amazon will try to blame you.</strong> Their go-to move is “you gave the OTP, case closed.” Don’t accept it.</li> 930</ul> 931Amazon’s OTP system is only as secure as the process around it. Right now, that process has a gap big enough to drive a delivery van through â assuming the van actually shows up. 932 933<em>Police report filed: F/20260430/7***. This post will be updated as the case develops.</em><div class="fcbkbttn_buttons_block" id="fcbkbttn_left"></div> </div><!-- .entry-content --> 934 935 936</article><!-- #post-## --> 937 938 </main><!-- .site-main --> 939 940 <nav aria-label="Page navigation" class="clearfix"> 941 <ul class="pagination mt-4 float-right"><li class="page-item"> 942 <a class="page-link" href="https://fated.net/" aria-label="Previous"> 943 <span aria-hidden="true">«</span><span class="sr-only">Previous</span> 944 </a> 945 </li><!-- .page-item --><li class="page-item"><a class="page-link" href="https://fated.net/page/1/">1</a></li><li class="page-item"><span class="page-link current">2</span></li><li class="page-item"><a class="page-link" href="https://fated.net/page/3/">3</a></li><li class="page-item"><span class="page-link dots">…</span></li><li class="page-item"><a class="page-link" href="https://fated.net/page/19/">19</a></li><li class="page-item"><a class="page-link" href="https://fated.net/page/20/">20</a></li><li class="page-item"><a class="page-link" href="https://fated.net/page/21/">21</a></li><li class="page-item"> 946 <a class="page-link" href="https://fated.net/page/3/" aria-label="Next"> 947 <span aria-hidden="true">»</span><span class="sr-only">Next</span> 948 </a> 949 </li><!-- .page-item --></ul> 950 </nav> 951 </div><!-- .content-area --> 952 953 <div class="sidebar col-md widget-area mb-4 py-4 px-4" id="sidebar-right" role="complementary"> 954 <aside id="fated-referrals-widget" class="widget widget_fated_referrals col mb-5"> 955 <h2 class="widget-title">Referrals</h2> 956 <ul> 957 <li> 958 <a href="https://biz.you.co/register?promo-code=KOMIUK3D" rel="sponsored nofollow noopener" target="_blank">YouBiz corporate bank account: get SGD 50</a> 959 <p class="fated-referral-note">Use code <strong>KOMIUK3D</strong> after approval and SGD 5 virtual card spend.</p> 960 </li> 961 </ul> 962 </aside> 963 <!-- fated.net_vertical --> 964 <aside id="fated-adsense-vertical" class="widget widget_fated_adsense col mb-5"> 965
965<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5758029436360510" crossorigin="anonymous"></script>
965 966 <ins class="adsbygoogle" 967 style="display:block" 968 data-ad-client="ca-pub-5758029436360510" 969 data-ad-slot="6325663365" 970 data-ad-format="auto" 971 data-full-width-responsive="true"></ins> 972
972<script> 973 (adsbygoogle = window.adsbygoogle || []).push({}); 974 </script>
974 975 </aside> <aside id="linkcat-28" class="widget widget_links col mb-5"><h2 class="widget-title">Shopping</h2> 976 <ul class='xoxo blogroll'> 977<li><a href="https://s.shopee.sg/7VDJNg2Dmz" rel="sponsored noopener" title="Shopee Singapore shopping deals" target="_blank">Shopee Singapore</a></li> 978<li><a href="http://tup.sg" title="Tupperware Singapore Online">Tupperware Singapore</a></li> 979 980 <li><a href="https://invl.me/aff_m?offer_id=103575&aff_id=1164725&source=fated_widget_taobao" rel="sponsored noopener" title="Taobao marketplace deals" target="_blank">Taobao Marketplace</a></li> 981</ul> 982</aside> <aside id="fated-search-widget" class="widget widget_search col mb-5"> 983 <h2 class="widget-title">Search</h2> 984 <form method="get" id="searchform" action="https://fated.net/" role="search"> 985 <div class="input-group"> 986 <label for="s" class="screen-reader-text">Search our site...</label> 987 <input class="field form-control" id="s" name="s" type="text" placeholder="Search our site..." value=""> 988 <span class="input-group-append"> 989 <input class="submit btn btn-primary search" id="searchsubmit" name="submit" type="submit" value="Search"> 990 </span> 991 </div> 992 </form> 993 </aside> 994 <aside id="recent-posts-3" class="widget widget_recent_entries col mb-5"> 995 <h2 class="widget-title">Recent Posts</h2> 996 <ul> 997 <li> 998 <a href="https://fated.net/unwed-mothers-adopt-own-child-msf-singapore/">When a Mother Must Adopt Her Own Child: What MSF Didnât Fully Answer</a> 999 </li> 1000 <li> 1001 <a href="https://fated.net/iphone-video-audio-muffled-microphone-protector/">iPhone Video Audio Sounds Muffled? Check This Before Blaming Your Microphone</a> 1002 </li> 1003 <li> 1004 <a href="https://fated.net/can-an-industry-run-recycling-scheme-protect-consumer-choice/">Can an Industry-Run Recycling Scheme Protect Consumer Choice?</a> 1005 </li> 1006 <li> 1007 <a href="https://fated.net/flipper-zero-fun-useful-things-you-can-do/">Flipper Zero: 5 Surprisingly Useful and Fun Things You Can Do With It</a> 1008 </li> 1009 <li> 1010 <a href="https://fated.net/telegram-channel-group-backup-singapore/">Telegram Channel & Group Cloning: Because âLifetime Accessâ Sometimes Lasts Until Tuesday</a> 1011 </li> 1012 </ul> 1013 1014 </aside> <aside id="linkcat-10" class="widget widget_links col mb-5"><h2 class="widget-title">My Sites</h2> 1015 <ul class='xoxo blogroll'> 1016<li><a href="https://nric.biz/generate-nric-fin.php" title="Generate random NRIC / FIN for testing" target="_blank">Generate random NRIC / FIN</a></li> 1017<li><a href="https://nric.biz/create-nric-fin-barcode.php" title="Forgotten to bring your NRIC, FIN, 11B, Library card, Polyclinic / Hospital appointment card? Generate your barcode and scan it at the scanner!" target="_blank">NRIC Barcode Generator</a></li> 1018<li><a href="http://nric.biz" rel="me" title="Something I created to make it easier to validate NRIC numbers by algorithmic calculation" target="_blank">NRIC Checker</a></li> 1019<li><a href="https://nric.biz/chinese-to-pinyin-converter.php" title="Transliterate Chinese to Pinyin – ä¸æâæ¼é³" target="_blank">ä¸æâæ¼é³ (Chinese to Pinyin)</a></li> 1020 1021 </ul> 1022</aside> </div><!-- .sidebar --> 1023 1024 </div><!-- .row --> 1025 </div><!-- .container --> 1026</div><!-- .wrapper --> 1027<div class="wrapper copyright py-3" id="wrapper-copyright"> 1028 <div class="container"> 1029 <div class="row"><div class="col-md"> 1030 <footer id="colophon"><div class="site-info"> 1031 Copyright 2026 © <a href="https://fated.net">fated.net</a> - All Rights Reserved.<br /><small>Code is Poetry | Proudly Powered by WordPress!</small> </div></footer><!-- .site-info #colophon --> 1032 </div><!-- .col-md --> 1033 1034 1035 </div><!-- .row --> 1036 </div><!-- .container --> 1037</div><!-- .wrapper --> 1038 1039<div class="scrolltop"> 1040 <div class="scroll" title="Return to Top"> 1041 <i class="scroll-icon fi-arrow-up" aria-hidden="true"></i> 1042 </div> 1043</div> 1044</div><!-- #page -->
1045<script type="speculationrules"> 1046{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/secretum/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 1047</script>
vendor: 1 bytes, line 1047
1047
1048<script id="secretum-js" src="https://fated.net/wp-content/themes/secretum/js/theme.min.js?ver=2.0.0"></script>
vendor: 1 bytes, line 1048
1048
1049<script id="wp-emoji-settings" type="application/json"> 1050{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://fated.net/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}} 1051</script>
vendor: 1 bytes, line 1051
1051
1052<script type="module"> 1053/*! This file is auto-generated */ 1054var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))}); 1055//# sourceURL=https://fated.net/wp-includes/js/wp-emoji-loader.min.js 1056</script>
1056 1057 <style> 1058 .fated-contact-bot { 1059 position: fixed; 1060 right: 16px; 1061 bottom: 16px; 1062 z-index: 9999; 1063 display: inline-flex; 1064 align-items: center; 1065 gap: 8px; 1066 padding: 10px 14px; 1067 border-radius: 8px; 1068 background: #0f172a; 1069 color: #ffffff; 1070 font-size: 14px; 1071 font-weight: 700; 1072 line-height: 1.2; 1073 text-decoration: none; 1074 box-shadow: 0 10px 26px rgba(15, 23, 42, 0.22); 1075 } 1076 .fated-contact-bot:hover, 1077 .fated-contact-bot:focus { 1078 color: #ffffff; 1079 text-decoration: none; 1080 background: #1d4ed8; 1081 } 1082 @media (max-width: 520px) { 1083 .fated-contact-bot { 1084 right: 10px; 1085 bottom: 10px; 1086 padding: 9px 11px; 1087 font-size: 13px; 1088 } 1089 } 1090 </style> 1091 <a class="fated-contact-bot" href="https://t.me/HJ_web_contact_bot?start=fated-contact" rel="nofollow noopener" aria-label="Contact Fated.net through Telegram bot"> 1092 <span aria-hidden="true">TG</span> 1093 <span>Ask privately</span> 1094 </a> 1095
1095<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"78a81a5b957d4757a63492e18fcec954","r":1,"spa":2}' crossorigin="anonymous"></script>
1095 1096</body> 1097</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.