{
    "componentChunkName": "component---src-templates-post-page-index-js",
    "path": "/how-we-fixed-training-serving-skew-in-our-ml-models/",
    "result": {"data":{"defaultImage":{"childImageSharp":{"fluid":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAALABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAME/8QAFwEAAwEAAAAAAAAAAAAAAAAAAAEDBP/aAAwDAQACEAMQAAAByJtdAZ//xAAXEAADAQAAAAAAAAAAAAAAAAABAhIg/9oACAEBAAEFAkWjOf/EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQMBAT8BP//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAEFAAAAAAAAAAAAAAAAAAIAESAhMv/aAAgBAQAGPwKyZaGP/8QAGRABAAIDAAAAAAAAAAAAAAAAAQARICHw/9oACAEBAAE/IQQDW7Z0cf/aAAwDAQACAAMAAAAQDB//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/ED//xAAWEQADAAAAAAAAAAAAAAAAAAABEBH/2gAIAQIBAT8QhX//xAAbEAEAAgIDAAAAAAAAAAAAAAABEVEAICFh0f/aAAgBAQABPxAumKz1gEnii/mv/9k=","aspectRatio":1.9047619047619047,"src":"/static/b9a1fa41d8a11857e973d42dc257e89d/2f1b1/blogs-default-image.jpg","srcSet":"/static/b9a1fa41d8a11857e973d42dc257e89d/fd013/blogs-default-image.jpg 200w,\n/static/b9a1fa41d8a11857e973d42dc257e89d/25252/blogs-default-image.jpg 400w,\n/static/b9a1fa41d8a11857e973d42dc257e89d/2f1b1/blogs-default-image.jpg 800w,\n/static/b9a1fa41d8a11857e973d42dc257e89d/0ff54/blogs-default-image.jpg 1200w,\n/static/b9a1fa41d8a11857e973d42dc257e89d/50fa3/blogs-default-image.jpg 1218w","sizes":"(max-width: 800px) 100vw, 800px"}}},"post":{"id":"cG9zdDoxMjcxMg==","title":"How We Fixed Training-Serving Skew in Our ML Models","content":"\n<p class=\"wp-block-paragraph\">Ask a data science team how long they take to go from &#8220;we have a model idea&#8221; to &#8220;the model scores live traffic.&#8221; The honest answer rarely involves the model. You fit a gradient-boosted tree or a GLM in an afternoon. A few lines of a well-documented library, a grid search, done.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The weeks go somewhere else. They go into the work around one call to .fit(): wiring up data, deriving the same features twice, writing a second &#8220;production&#8221; copy of the preprocessing, proving to a reviewer the copy matches the original, and then hoping nothing drifts after launch.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Most applied ML engineering effort lands in this gap, between a model which works in a notebook and a model safe to run unattended on live data. You don&#8217;t have to live with the gap. This post covers why the gap exists, why teams get the gap wrong so often, and what we learned building AXIOM, PhonePe&#8217;s internal framework for this middle layer.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The lessons apply whether you use Spark, pandas, or something else. Every claim below points to something we built.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Where Data Scientists Actually Add Value</h2>\n\n\n\n<p class=\"wp-block-paragraph\">A model is a function. Features go in, a prediction comes out. The interesting work for a data scientist sits in three decisions:&nbsp;</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Choosing the features that actually matter.</li>\n\n\n\n<li>Picking the right algorithm for the job (classification, regression, or ranking).</li>\n\n\n\n<li>Making sure the function holds up on new data.</li>\n</ol>\n\n\n\n<p class=\"wp-block-paragraph\">These decisions need human judgment. No framework should try to automate them.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Everything else repeats. Reading data, joining tables correctly, handling nulls, encoding categories, splitting the same way each time, tracking what ran and why. Each step looks easy because each step is easy. The trouble starts when you have to run every step <strong>twice, identically</strong>: once in training, once when scoring new data. And at a scale where nobody checks each batch by hand.</p>\n\n\n\n<h2 class=\"wp-block-heading\">What Goes Wrong When You Rewrite Preprocessing Code?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">We kept seeing one failure pattern. Other companies see the same one. A data scientist builds a notebook, fits a model, gets a good AUC, and someone asks them to &#8220;productionize&#8221; the work. So a second engineer, or the same person under deadline, reads the notebook and rewrites the preprocessing as a &#8220;clean&#8221; inference script. Null handling, categorical encoding, feature derivations, all rewritten by hand.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Most production ML incidents start in this rewrite. The reason is simple. <strong>Two separate implementations of the same logic drift apart</strong>, even when one person writes both in the same week. Some examples:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The training notebook computes an imputation median on the training data. The inference script recomputes the median on whatever small batch shows up. Same code, different number.</li>\n\n\n\n<li>A categorical encoder trained on known labels meets an unseen category. The rewritten version drops the row, buckets the value as &#8220;unknown,&#8221; or crashes, and nobody chose which on purpose.</li>\n\n\n\n<li>A date feature anchors on &#8220;today.&#8221; In training, &#8220;today&#8221; stays fixed at train time. At inference, &#8220;today&#8221; moves, and every recency feature shifts with no warning.</li>\n\n\n\n<li>The simplest one. Someone fixes a bug in the training script after launch and forgets the parallel inference script exists.</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">None of these crash. They show up weeks later as a slow accuracy drop nobody explains, because the model now scores inputs different from the ones in training. People call this training-serving skew. In almost every case, the root cause is duplicated code.</p>\n\n\n\n<figure class=\"wp-block-image size-full\"><span class=\"wp-image-12736 inline-gatsby-image-wrapper gatsby-image-wrapper\" style=\"position:relative;overflow:hidden;max-width:100%;width:738px\" data-reactroot=\"\"><span aria-hidden=\"true\" style=\"width:100%;padding-bottom:89.72972972972973%\"></span><img aria-hidden=\"true\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAIAAADUsmlHAAAACXBIWXMAAAsSAAALEgHS3X78AAAEVUlEQVR42gFKBLX7ABYabxcacBkZcSQheC0mfy8lgTMhhDshikAdjkgck1AbmlcYn14WpGYWqmsQrXISs3YPtnMDtnUAt3cAuQAXGm8YGW8ZGHAtKn5NSJJNRJNMPJNXQZpXOZtfOKBpPKdtNqtzNa98NrV8LbeGNL5/H7pzA7V1ALZ3ALgAFxluGBlvGRhwHRhzLyd/MiWBNySFNRmIOxaNRRaVTRWbUhCfWxGkZhWobhivcxWzbgOxcgG0dAC2dgC3ABgZbhoZcB0ach8ZcyEXdicYeigSfZCBobOnq52OnZ+Nn7elrqB6r1kBomIDpmYBqmwAr3EAsnQAtXYAtgAaGW4WFGoRDWQbE20vJHojEXImDHaNfp+uoqanl6SplqWxn6ifeaxcBqNpEKp4HbN1ELNxAbFzALN1ALQAFRNnOTaNYl+8XlqzbGe7YFe4Yla6NBWGLwSBOQaJQASPRwGUTgKZWAOdZg2ndh2xdxeycAOwcQCxcwCyABMPYk9LpJOS83l3ynVywoOA2IyH6kAkjDQLfj4Oh0QLi0oJkFAHllgCmV4AnmIAo2gAp20Aq3AArXEArwAVD2NHQ5p/fdhzcMVyb8B5dM96c9E+IYkzCnw9DYVCC4lHBoxUEJmCaNeFctx9Z8yCadKNeuV/P8lqAKYAFg9hSUSZgH3XeXbOenbPfHfSe3TQPSCIMgp6Ow2CQAuGRAaJURCVgmvUiHfeiHTZiHHZjXzifUDFZQCgABYNXk1HnIuK6H170nl2yYJ/2oN+3D0ihjAKdjkNfz4LgkEHhE8SkoZ13Y+E64d63Ix95JSM8nxHx10AmAAYD19EPY51ccduabtuaLhwasBwZ8A5HoAvC3Q2DXo7C34+B4BJEIx2XMF3YsF8ZcV8YsZ/actwObZVAJEAFgtZVE+kkZHsgH/TfnzMhoXci4noPyaFLQxvNA53Nwx5Ogl7SBeLhXvahoPZhoHahH7VjIzgd1LESgCEABwSXx8VYSsgcC4hdTUmeTQidjkkey0RbywJbzURdzQKdy4AczgHeE8lj0MUikoZj0sYkEcSjT8Ig0IFgQAnHmlxbcdoZLhjXq9qZLpxa8YuGHJmZZOVqbSGk6WIlKeZqrhuZZ1GF3+7i8m6jMWtgLm5iMS+jc1DFX8AKiBqiYjme3nJc3G8fHvMjIvoNB95d3+eqcm8kKilkKilqcq8d3mhRR1+1azazqjRwZ3FyqPM1KzaPBp3AB4UWyIXYCkeaTgsdTgrdDcocTEfbTcjcj8reUIsfTsidzMXcSkMakIie7eOx7CLvauFuLCKvbePxzIabgAeE1ocEVkcEVkfElwgEl0iEWAkE2MlEWQlDmQmDmYmDWYoDWgiB2RILH7ds9/FocW3lbjHosXftuAvIGoAHhNaHxRbHxRcIBNdIRJfIhJgIxFhJBFjJhFlJxBmKBBnKBBnKBBnJw9mLBZqLxttLRxrKh1oJBliHBNdV5anlQFSAIgAAAAASUVORK5CYII=\" alt=\"\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:0;transition-delay:500ms\"/><picture><source srcSet=\"/static/fa8642348fe0ff5de9a17a97bc426a04/b63e1/AXIOM-03.png 185w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/99c3a/AXIOM-03.png 369w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/227c0/AXIOM-03.png 738w\" sizes=\"(max-width: 738px) 100vw, 738px\"/><img sizes=\"(max-width: 738px) 100vw, 738px\" srcSet=\"/static/fa8642348fe0ff5de9a17a97bc426a04/b63e1/AXIOM-03.png 185w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/99c3a/AXIOM-03.png 369w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/227c0/AXIOM-03.png 738w\" src=\"/static/fa8642348fe0ff5de9a17a97bc426a04/227c0/AXIOM-03.png\" alt=\"\" loading=\"eager\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition:opacity 500ms\"/></picture><noscript><picture><source srcset=\"/static/fa8642348fe0ff5de9a17a97bc426a04/b63e1/AXIOM-03.png 185w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/99c3a/AXIOM-03.png 369w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/227c0/AXIOM-03.png 738w\" sizes=\"(max-width: 738px) 100vw, 738px\" /><img loading=\"eager\" sizes=\"(max-width: 738px) 100vw, 738px\" srcset=\"/static/fa8642348fe0ff5de9a17a97bc426a04/b63e1/AXIOM-03.png 185w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/99c3a/AXIOM-03.png 369w,\n/static/fa8642348fe0ff5de9a17a97bc426a04/227c0/AXIOM-03.png 738w\" src=\"/static/fa8642348fe0ff5de9a17a97bc426a04/227c0/AXIOM-03.png\" alt=\"\" style=\"position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center\"/></picture></noscript></span></figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Training and serving run as separate jobs, and both use one artifact: the MOJO. Serving never rewrites preprocessing. Serving loads the exact binary from training. DriftGuard compares the distribution the artifact trained on with the live data the artifact scores. When the PSI gap grows large enough to matter, DriftGuard alerts the model owner, who reviews the drift and decides whether to retrain.</em></p>\n\n\n\n<h2 class=\"wp-block-heading\">How AXIOM Keeps Training and Serving in Sync</h2>\n\n\n\n<p class=\"wp-block-paragraph\">A checklist, a wiki page, or a stricter PR review won&#8217;t solve training-serving skew. All three depend on people remembering a manual check every time, forever. People forget. The only lasting fix removes the option of running two implementations. Train and serve must run the exact same artifact.</p>\n\n\n\n<p class=\"wp-block-paragraph\">AXIOM follows this rule. Three design choices enforce the rule:</p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Preprocessing is a typed plugin, not a script.</strong> Every transformation (null handling, encoding, imputation) implements one abstract interface with fit and transform. A declarative list in a config file calls each transformer. Nobody hand-writes transformers per use case. No &#8220;training version&#8221; or &#8220;inference version&#8221; exists. You get one class, instantiated once.</li>\n\n\n\n<li><strong>Training produces one self-contained, serializable artifact.</strong> AXIOM&#8217;s model layer exports an H2O MOJO (Model Object, Optimized). This binary bundles the fitted model with the transformations fitted alongside the model. Scoring runs no Python preprocessing. Scoring loads the binary from training and reuses the binary as-is. Scoring refuses any artifact training didn&#8217;t produce. No code path exists for &#8220;re-implement this part.&#8221;</li>\n\n\n\n<li><strong>Config is the only user input.</strong> One YAML file declares the whole pipeline: data source, feature joins, preprocessing order, hyperparameters. A typed schema checks the YAML before any Spark job starts. A bad config gives you a readable error in seconds, instead of the silent skew you find in week six.</li>\n</ol>\n\n\n\n<p class=\"wp-block-paragraph\">The result: nobody needs to check by hand whether the inference code matches training code. You have one code path to review.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Model Reviews Got Faster</h2>\n\n\n\n<p class=\"wp-block-paragraph\">We didn&#8217;t aim for faster reviews at first, but we noticed the change quickly. When every model on a team runs through one transformer interface and one declarative schema, reviewers stop reading custom infrastructure code. No more Hive reads, null-handling branches, or encoder logic unique to each model. Reviewers read a YAML diff instead: which features changed, which hyperparameter moved, which transformer got added.</p>\n\n\n\n<p class=\"wp-block-paragraph\">The review surface shrinks and gets easier to read. A reviewer who knows the framework evaluates a new model&#8217;s config in minutes, instead of rebuilding someone&#8217;s custom pipeline from scratch. The framework already answered the infrastructure questions once. Does the pipeline read data correctly, join features, encode categories, and avoid skew? Those answers hold for every model. What&#8217;s left for review is the modeling decision, the part where human judgment counts.</p>\n\n\n\n<p class=\"wp-block-paragraph\">We won&#8217;t put a percentage on the time saved. We haven&#8217;t run a controlled measurement. The direction holds, though. Standardize the 90% of a pipeline which is infrastructure, and every later review covers only the 10% which is new.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Models Reach Production Sooner</h2>\n\n\n\n<p class=\"wp-block-paragraph\">The same choices which fix training-serving skew also shorten deployment, for a mechanical reason. Most of the old per-model &#8220;productionization&#8221; work now ships once, as a framework feature. You no longer write an inference script, wire the script to the feature store, or hook up monitoring for each model.</p>\n\n\n\n<p class=\"wp-block-paragraph\">In our setup:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Feature joins stay point-in-time correct by design.</strong> Training and scoring use the same connector, so nobody rewrites a join per model.</li>\n\n\n\n<li><strong>Drift monitoring comes attached from day one.</strong> AXIOM snapshots each model&#8217;s training feature distribution and compares the snapshot with live scoring data using Population Stability Index, the standard metric in credit risk modeling. When the input distribution shifts enough, AXIOM alerts the model owner to review the drift and retrain. The owner writes no monitoring code and keeps the final call on retraining.</li>\n\n\n\n<li><strong>AXIOM tracks every run by default.</strong> One versioned tracking run holds the config, label logic, model artifact, and metrics. You never have to reconstruct which pipeline produced a model.</li>\n</ul>\n\n\n\n<p class=\"wp-block-paragraph\">None of these ideas are new on their own. Point-in-time joins, PSI drift checks, and experiment tracking all have long track records. We didn&#8217;t invent them. We made them the default path, with zero extra effort, instead of a checklist item a team skips under deadline.</p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Do Teams Keep Repeating This Mistake?</h2>\n\n\n\n<p class=\"wp-block-paragraph\">If none of this is new, why do teams keep rebuilding the same pieces badly? A few honest reasons, true for any org scaling applied ML:</p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Early models are simple.</strong> One dataset, one owner, manual oversight. Doing everything twice, carefully, works at a small scale. The problem shows up once you have too many models to audit by hand, and by then a dozen pipelines already follow the ad-hoc pattern.</li>\n\n\n\n<li><strong>Skew stays quiet.</strong> A duplicated preprocessing bug doesn&#8217;t fail loudly. A business metric slides slowly, so teams patch the symptom and leave the structural cause alone.</li>\n\n\n\n<li><strong>Standardization looks like a slowdown,</strong> since teams trade some flexibility for a shared interface. We saw the opposite. Once the shared interface existed, new models shipped faster, because nobody had to redo the infrastructure work. You pay to build the framework once. Every model after the first gets the payoff.</li>\n</ul>\n\n\n\n<h2 class=\"wp-block-heading\">Key Takeaways</h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fitting the curve was never the hard part of production ML. The hard part is guaranteeing your model sees in production exactly what the model saw in training, every time, with no human re-checking by hand. Fix the structure with one artifact, one config, and one code path. Faster reviews and shorter deployments follow directly, without a separate initiative to fund.</p>\n\n\n\n<p class=\"wp-block-paragraph\">Typed configs, single-artifact serving, and standard drift metrics have each existed for decades. The gain comes from refusing to let any model skip them.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>This post describes engineering patterns from an internal ML framework at PhonePe. The core lesson applies to any team with more than a handful of models: enforce one code path from training to serving.</em></p>\n","date":"13 November, 2026","uri":"/how-we-fixed-training-serving-skew-in-our-ml-models/","categories":{"nodes":[{"name":"AI","slug":"ai"},{"name":"Uncategorized","slug":"uncategorized"}]},"author":{"node":{"name":"akankshamishra","slug":"akankshamishra","description":null}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsSAAALEgHS3X78AAADFklEQVR42mOQEY6VE45XFExSFUjT5M/S4c3T4y3Q5y0EIj3eQl2+Am2+PC2BHHWBTE3BHA3JQgXlHAXhOHnhGDnhaAYVgVRV/lR1/gwt3mw9njwDniIjnmIjnhJDnmID3mKgfh3+Ai3BXHWBLA2hbAWRNGnhRBmhWHmRWDmRGAZDvgJz4VIzgRIroUoL3gpz7nJzrgoz7gpTnnJjnjIDvhJdngIttixN/hxpntgAsZ4y7TXGUgXSwjGyIrEMdpw19tx1Dpx1TlwNDpwN9hwNthz1Nly1Vjw1ZrxVxlxlBiJl1nHzEhvORltsnu906WTtF3/hXgmRaAXxJAYf1m4g8mXp9mDs8GDu8GTvcuPqcORotWStt2SrtVBsUN21Nebmm2nN3xZm/e93eJgmu0BXuFBGLFFJOo0hnGlyBNPkMIbJGXyLYnlm+TL1ejK0eHC0RqpNyTCeGxI6W+/C0byy1/X2j/sjvjcHP5AQiJMRTQYiKdFEhiDGZh+G2gzeGbtzH0+y2efNWu9pPae54OCMyu3FbrMiwqaZHj+Y3P2qNPvlxJS/GQ67xQUCJYXCxISCxYSCGCIYOkMYWtO5ZmyMvNEYtM9+7aHSve9mVP+anvS1JnR1gl2/S+hE+7KlkdkHHXRbpfiCJAXDxYVCRQWDRYGa4xj6Yhn6Ipi6UxgmGExY6XL1SUfs+17/NzPi/k/JP5TvN8tFslqDI16BN0qSK0RGMEZSKEpMMExMJExUJJQhiWFSAsPEOKaJsQxdWnNX+C18XBbyrCH67ezE/5VB6zyUanR5cjX4M1X4UhWEkqUFY2XF46QlYqQkoyQkIxnSmKelsU1PZp2ayjjZ1W+23cy9iR33SxNvx6kvtGQvMWTJA6YcTb5MZf5UecFEaaE4CeEYMZEoYeFwYZEwhnSmGZlsM1OYpiUyT4ll6A5gbfRT63Pnq7NlKLHjajAVqABrzlLmT5MTSpISihcXjhEVjhIWiRACaWaYkcowPZlhagLD5GjmieFMvf4MzV4sTd4cPR7cM42lm/S5czX5spWQNYuANYuGAwDlye+IcW7c5gAAAABJRU5ErkJggg==","aspectRatio":1.5873015873015872,"src":"/static/8845157aae862da8b5545e41cb04eb1c/bc8e0/AXIOM-04.png","srcSet":"/static/8845157aae862da8b5545e41cb04eb1c/8ac63/AXIOM-04.png 200w,\n/static/8845157aae862da8b5545e41cb04eb1c/3891b/AXIOM-04.png 400w,\n/static/8845157aae862da8b5545e41cb04eb1c/bc8e0/AXIOM-04.png 800w,\n/static/8845157aae862da8b5545e41cb04eb1c/e48ff/AXIOM-04.png 868w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Achal Ananth, Kedar Swadi, Pramod Patil, Vaishnavi Turkane"}},"moreCategoryBlogs":{"nodes":[{"id":"cG9zdDoxMjcxMg==","excerpt":"<p>Ask a data science team how long they take to go from &#8220;we have a model idea&#8221; to &#8220;the model scores live traffic.&#8221; The honest answer rarely involves the model. You fit a gradient-boosted tree or a GLM in an afternoon. A few lines of a well-documented library, a grid search, done. The weeks go&hellip; <a class=\"more-link\" href=\"/how-we-fixed-training-serving-skew-in-our-ml-models/\">Continue reading <span class=\"screen-reader-text\">How We Fixed Training-Serving Skew in Our ML Models</span></a></p>\n","uri":"/how-we-fixed-training-serving-skew-in-our-ml-models/","date":"November 13, 2026","title":"How We Fixed Training-Serving Skew in Our ML Models","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"},{"slug":"uncategorized","id":"dGVybTox","name":"Uncategorized"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsSAAALEgHS3X78AAADFklEQVR42mOQEY6VE45XFExSFUjT5M/S4c3T4y3Q5y0EIj3eQl2+Am2+PC2BHHWBTE3BHA3JQgXlHAXhOHnhGDnhaAYVgVRV/lR1/gwt3mw9njwDniIjnmIjnhJDnmID3mKgfh3+Ai3BXHWBLA2hbAWRNGnhRBmhWHmRWDmRGAZDvgJz4VIzgRIroUoL3gpz7nJzrgoz7gpTnnJjnjIDvhJdngIttixN/hxpntgAsZ4y7TXGUgXSwjGyIrEMdpw19tx1Dpx1TlwNDpwN9hwNthz1Nly1Vjw1ZrxVxlxlBiJl1nHzEhvORltsnu906WTtF3/hXgmRaAXxJAYf1m4g8mXp9mDs8GDu8GTvcuPqcORotWStt2SrtVBsUN21Nebmm2nN3xZm/e93eJgmu0BXuFBGLFFJOo0hnGlyBNPkMIbJGXyLYnlm+TL1ejK0eHC0RqpNyTCeGxI6W+/C0byy1/X2j/sjvjcHP5AQiJMRTQYiKdFEhiDGZh+G2gzeGbtzH0+y2efNWu9pPae54OCMyu3FbrMiwqaZHj+Y3P2qNPvlxJS/GQ67xQUCJYXCxISCxYSCGCIYOkMYWtO5ZmyMvNEYtM9+7aHSve9mVP+anvS1JnR1gl2/S+hE+7KlkdkHHXRbpfiCJAXDxYVCRQWDRYGa4xj6Yhn6Ipi6UxgmGExY6XL1SUfs+17/NzPi/k/JP5TvN8tFslqDI16BN0qSK0RGMEZSKEpMMExMJExUJJQhiWFSAsPEOKaJsQxdWnNX+C18XBbyrCH67ezE/5VB6zyUanR5cjX4M1X4UhWEkqUFY2XF46QlYqQkoyQkIxnSmKelsU1PZp2ayjjZ1W+23cy9iR33SxNvx6kvtGQvMWTJA6YcTb5MZf5UecFEaaE4CeEYMZEoYeFwYZEwhnSmGZlsM1OYpiUyT4ll6A5gbfRT63Pnq7NlKLHjajAVqABrzlLmT5MTSpISihcXjhEVjhIWiRACaWaYkcowPZlhagLD5GjmieFMvf4MzV4sTd4cPR7cM42lm/S5czX5spWQNYuANYuGAwDlye+IcW7c5gAAAABJRU5ErkJggg==","aspectRatio":1.5873015873015872,"src":"/static/8845157aae862da8b5545e41cb04eb1c/bc8e0/AXIOM-04.png","srcSet":"/static/8845157aae862da8b5545e41cb04eb1c/8ac63/AXIOM-04.png 200w,\n/static/8845157aae862da8b5545e41cb04eb1c/3891b/AXIOM-04.png 400w,\n/static/8845157aae862da8b5545e41cb04eb1c/bc8e0/AXIOM-04.png 800w,\n/static/8845157aae862da8b5545e41cb04eb1c/e48ff/AXIOM-04.png 868w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Achal Ananth, Kedar Swadi, Pramod Patil, Vaishnavi Turkane"}},{"id":"cG9zdDoxMjM4Mg==","excerpt":"<p>It’s 3:00 AM. The glare of a monitor cuts through a pitch-black room as a critical alert pierces your sleep. Seconds later, you&#8217;re locked in a familiar, exhausting ritual: eight browser tabs open, bouncing frantically from Grafana metrics to Loki log streams, then over to Jira change logs. While the incident clock ticks, you’re forced&hellip; <a class=\"more-link\" href=\"/from-tool-hopping-to-talking-reimagining-datacenter-observability-with-netra/\">Continue reading <span class=\"screen-reader-text\">From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA</span></a></p>\n","uri":"/from-tool-hopping-to-talking-reimagining-datacenter-observability-with-netra/","date":"September 28, 2026","title":"From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"},{"slug":"uncategorized","id":"dGVybTox","name":"Uncategorized"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAABcRAAAXEQHKJvM/AAAC0ElEQVR42kWSS08TURiGh0BpOzPn+86Z6Qxtp9BSilBQoFB6YWgLvVDoBdqCUJC7ioJE0aACISIxkmBcmJhooomJMTHGmLhS+QX+ARf+CLfu3DiQGJM3Z/fkSb7zcHZINUBKwWEJ44i6iBErhuppsI721tE+E+030yhP44SlJZproGWNznhwwYer7XiNc0DGTtIqJm04REEnEOUhbKZBE+37D7M4kTNMyqtyRZOrbpw34A62yblgVJNzDhxRpYzsyGDDkCjrVhauP+PrWciArRgjkGQ4qsK4BlNunPPikg9XOA8peLTJRlfZqebtWt7ggcV4iFhZyESDNWKPAaM6DDTFMKvSohMrTVj14qIPl7lWsdxiLnhxwsOKqiUp8wkJE7IyZDIHEML+jgULH7KIUaSGOcNI1o4TTqg4xYpLuMh1y0vB8Ha7XG2jk3rn5VDHolPKSnQoX7xZfvc++eJk8+mH7sAMT+KyPOL3ziuQa7EtRLy7/c07XKp15/jrj17/hr9u8u2zb4933qiWjCIkP598r/7+KT159enXn7295xwXcLtKR2tfGpVSwHt9vfixPPCa08n6iGMrRK70kKXzMOeXpltoyW0r9LXPprePuw5fjlX3FduwTU2pasZlL6i2bIMtr0llTa5wSXErZt2MiTci4lovWenCS21kyieVNDrGanTFpFtr+wkZpCyBNM5k4z0dgRghMW5MuD9K7qXFO3FxM3rKL3WSWR+puLHoYmMqzSjMOFUcYJCgUcGAaAyNRQUS4UrCwbjwICfspsldnd0KwdUestBOplug1Ag5B4zYYJhB4gweENCo7TRB4yMtcoibFh5PCY8mhIc5cqA37Ufk9T5h2ZC3GnIoOCGrQFKCBMKgCBGehnl33NKom5sGzM06N8sfzwhHZeEwb8ittweFjSBZvUDmzpFJDxSdYFSV+geHrdBvOc0uUIddtWLnX98AkFf5kAQ8AAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/bc8e0/NETRA-ICON.png","srcSet":"/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/8ac63/NETRA-ICON.png 200w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/3891b/NETRA-ICON.png 400w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/bc8e0/NETRA-ICON.png 800w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/6050d/NETRA-ICON.png 1200w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/00405/NETRA-ICON.png 1600w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/c1b57/NETRA-ICON.png 1809w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Kaustubh Tripathi, Sreeman Repaka, Shejin Jacob Paulose"}},{"id":"cG9zdDoxMjMxMA==","excerpt":"<p>At PhonePe, our strategy for AI in HR was never about deploying a single, generic solution. Instead, we set out to build a fit for purpose ecosystem prioritizing speed, flexibility, and accuracy embedded directly into daily workflows. AI Readiness began before AI. We have been deliberate about maintaining a small number of core systems as&hellip; <a class=\"more-link\" href=\"/from-experimentation-to-scale-phonepes-ai-journey-in-hr/\">Continue reading <span class=\"screen-reader-text\">From Experimentation to Scale: PhonePe&#8217;s AI Journey in HR </span></a></p>\n","uri":"/from-experimentation-to-scale-phonepes-ai-journey-in-hr/","date":"September 10, 2026","title":"From Experimentation to Scale: PhonePe’s AI Journey in HR ","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAABcRAAAXEQHKJvM/AAADJElEQVR42gEZA+b8AAYQMAoSNwkSNgkRNg4SOxIUQBMUQhIRRBcVSRsXTRcSTRsNThYMTBUOTh0TVx4TWR8UWyAUXR8UXB8UXAAOEDgXF0kHDjMLETgTFkEREz8SEkIUEkUYFEkaF00aE00ZMF48PHlCMHYaE1MfFVkbFFYZFFQeFFseFFsAChA1DhQ6MDJrFBM+FhVAEhNDFhNGFxNIGBRLGhFMGSFUPc+0ocTouHf0UzqNGhdRLRZpOhF2HBNYHBNXABIRPhsYR3V731ZyuSYtXhYIPhgRRxgSSBgRSRwVThINSWGjqLPs+1ZWoD4mchIRSU0cj2YUrBwSVBoUVAAgGUwjHU9sYc12n+5aq9MuYoghGlIoG10sIWMYD04YDEkiIlhAX4saG1UUD0kZE1AZD00cFFMZE1AZFFAAJBVSIxNPPDh9YZLHW8TdStTYLomeKBhgU0uDUEiBKB9gGxBOGAtHGRJMGQpHHxhSKC5mFBBIFhNLGBVMAC0VXCsVWyUOUDgjaV+FsFCzyjaFqF8UlWkZnnBHm2dWklNLhSsiYRoNSh1Ca0ibxEdxrBILPRscTBQTRQA0FmM5GWo/HXg6HnQ6GG84S4UvbY+AHrO+ZeGQM8JDC3xOOXlcU442naR31NlmreBBdKUQCjkSFEIPET8ASh6ARR+BQS95SS9+RB14Rx58PR12LxlrRhx8RhJ9NxhtUTJ5TlqLQu7IuZTcbG3OOIemCQIxDhM8DBE5AGMlpUwfiz4vdEpKi1tDoE4hhzobbT0fczIbbiwbZTMeZ2hMi257oBvgtVCiyk+Vwlh0oSwqWQwUPgwSNgBmIqhpJq5dIKBLJoZCOX01H2hVPX9fRoZIKXY7HHItHWotD2E1PncX1q8zkZ8+LnY7HGYrLlwMGEQKFDUAYR+cYyCjZSOoYySnVx+WRR9+Rit3UjZ9QiR1Mx9uPxl2MxNpKilnMDtxOhBlJxhYDxlHCxZBChg/BRAuAFscklwdlVsemFofmlsinVcjmkogiEAdfS8WZzU9c1x2wGlDljodaSsUXxweVRYdTRAZRwoWPQUTNAMQKhRL2G7ybfYRAAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/2a4ce3c8c10695caf9007717a8fa3599/bc8e0/HR-operations-icon.png","srcSet":"/static/2a4ce3c8c10695caf9007717a8fa3599/8ac63/HR-operations-icon.png 200w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/3891b/HR-operations-icon.png 400w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/bc8e0/HR-operations-icon.png 800w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/6050d/HR-operations-icon.png 1200w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/00405/HR-operations-icon.png 1600w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/3e197/HR-operations-icon.png 1788w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"PhonePe Team"}},{"id":"cG9zdDoxMTU2MA==","excerpt":"<p>Lens lets your team see what is happening inside a running mobile app—from a normal web browser. You Know This Bug, Right? It is Friday afternoon. QA tells you that the profile screen is blank after login. You open the same app, follow the same steps, and everything works. The app does not crash. System&hellip; <a class=\"more-link\" href=\"/lens-give-your-entire-team-x-ray-vision-into-your-android-app/\">Continue reading <span class=\"screen-reader-text\">Lens: Give Your Entire Team X-Ray Vision Into Your Android App</span></a></p>\n","uri":"/lens-give-your-entire-team-x-ray-vision-into-your-android-app/","date":"August 10, 2026","title":"Lens: Give Your Entire Team X-Ray Vision Into Your Android App","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"}]},"author":{"node":{"id":"dXNlcjo1OA==","name":"Sampurna Mitra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAADJElEQVR42gEZA+b8ACYQaCUQZyIQYyAQXxwQWRgQUhMQSw8QRQwQPggQOAUQMwYOMQcOMgkONg4NOBIOPBQeSxkJQBwKRB4KRQAmEGgmEGcjEWUoD2QvGnEiF2IUEEwPD0ULED4LEj0JEDcHDjQJCzENBzEOCTcUDz4UIU0aCEEfDEchCkgAJhBoJBBnGAldIRBgHxJdGhFXExBLFBFLFhJJAAcvBgs1CAgxKj9uS4KhGxhDFAo+GRFFHQpEGAQ+HQVDACQOZy0SamA8kiUQYhwPWR0QVg8PR2QXl2YYl1hIhkk3eAMELxcdTixbfR8cSxcDPB0ORx0HRFk3g0gkcQAiB2M5SIejve48MoMcCVYbDlQbEVE6B2+gZ8Pn2/9ucqsWEEMbEkcUADocIVEhE0shAEIaAz+eaMmTUMIAJQ1kJx1sLjp/JRZlHQpXKRFdIRFVAwA6lo64ven0pMDXPEN4MCBiJgtTIZWaJr21M1B9KQ9SUCF2YjCNACQPYyMMYSkPYScSYBgRV5aZ0mhcowcAPZaGvLjl8qi91z09eDEdZCcHVCOLmSPey0HU106hxUJMjzcTZAAgDlshD10XCVQdDVYhHl87b5Y4T4EIAz6ikr7h4f9uZqwtH1wuH2MqA1gpkaAjzcJMzNZgzOVnsetpeNEAHA9TFAdMY0iPSjJ7EgRHGARILAhdWASNtXXau2zkewWxUQmEORFqKwRXMGCKMMfHTtfgaMjka6fjbX/cABYLRhEWS3KpyGl2sxAHQx0UT3MOpaME15QEy4IAuXwEtHwGtmgHnDEKXCQCSDIdZENim1mdzm6q7XJ+4QANDjwPDj0PHUkVGksXD0YYEUgVD0Q1CmNqCJyEB7pyB6ZGCXUrEFUoDlFZDotPBHwwAFI9DmlRQ5xqYscABg4xByFBCg02DAo3EA4+EQxAFA1DEA0+FAxBMQtfJglRGglFJgpSLQ1WZhehVguIMghbOgRiOwBdQQZoAAMOLAQfOgYRMwoONQ0NOhANPhQMQRgMRhoMSRcMRB4KSiUJUScJUisIVCsHVDEHWTgGYTsGZD8HaEEFadEH0IHxhAm0AAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/d85997c8e2f35163369a838af5c893fe/bc8e0/LENS-blog-icon-scaled.png","srcSet":"/static/d85997c8e2f35163369a838af5c893fe/8ac63/LENS-blog-icon-scaled.png 200w,\n/static/d85997c8e2f35163369a838af5c893fe/3891b/LENS-blog-icon-scaled.png 400w,\n/static/d85997c8e2f35163369a838af5c893fe/bc8e0/LENS-blog-icon-scaled.png 800w,\n/static/d85997c8e2f35163369a838af5c893fe/6050d/LENS-blog-icon-scaled.png 1200w,\n/static/d85997c8e2f35163369a838af5c893fe/00405/LENS-blog-icon-scaled.png 1600w,\n/static/d85997c8e2f35163369a838af5c893fe/a76e0/LENS-blog-icon-scaled.png 2560w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Mohan Sandeep Kella and Ashish Kumar Khatri"}},{"id":"cG9zdDoxMTQxMA==","excerpt":"<p>The Debugging Dilemma: Why TraceMind? In a complex mobile ecosystem, debugging a single production crash is rarely a straightforward task. Historically, developers at PhonePe faced a fragmented landscape of data points. When a crash alert hit, an engineer would often spend hours—or even days of bandwidth—jumping between disparate tools to piece together the narrative of&hellip; <a class=\"more-link\" href=\"/tracemind-automating-the-chaos-of-crash-debugging/\">Continue reading <span class=\"screen-reader-text\">TraceMind: Automating the Chaos of Crash Debugging</span></a></p>\n","uri":"/tracemind-automating-the-chaos-of-crash-debugging/","date":"July 29, 2026","title":"TraceMind: Automating the Chaos of Crash Debugging","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"}]},"author":{"node":{"id":"dXNlcjo1OA==","name":"Sampurna Mitra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAADJElEQVR42gEZA+b8AFIZhlAZhE4ZgkoYfEUYd0AXcTsWazYWZTAVXyoUWiYUVSETUB0SSxsTSBgQQhEOPA8ROgoQMwgQLwQPKQBSFoRJKYhKIIJJFnpDGHU+F3A5Fmk0FWMuFV4pFFklFVUhFVAZDEQ5R35ViKcbG0YPDzsNETcGDi0HEC4AUBaBRyiDRyB+SBd4Qxp1PRdtPB1rNxxlLxlfKBZZIhJRJhRWIBJOGxhPLURtIylVEhJBFhFEMiFoDhI8AEoXfEccfEMYdj0TbjYTZTgXZzYXZS8UXSsPVyUKUSAZT2sdnVsdjBMQQhQFPhcLQxcVSBUSRx4WUhMSQwBFGHZCF3RGHnZbNIyBTrtkOZgtEFg6Km1BTYE+gJZEmKh1Pr9QG4YXC0cjOmMmSm4WDkoVDkkWEksXEkwAPBRtTSh9rIHjvIH2xXf/j3HVT3uwUqDESrjESsTAVtPFZcTEKiZnGAlHO2qDe/LhYZS6KSpqGhBTHBNWADkYaFIygat84IhZuoFvz2ie1my00oHB15jP25PW2W7f01rKxTVojh4eVh8mWlKJo4rB40ZOjhkJUx8eYgA0FmE2GWM3HGQoD1NscrqlxeuYwNqBv9JRxMcswbshxbklv7QoeY0eJVgVCUgVC00oKGogHWMVCFIeKWgAMBVcLxVbLRRZKRFUZ2m4XqHJSpq9SqzEIsC7KcbBONDIPL/CLnuZHiBSGA9EIBxQGBBMYEmXVDuRHRpiACYUUSATSRgTQhAON2Flumuc5G6a0myiyiu9vy6xuCyUpiZ3lS5khiQiVBcPQRgUQxEUOplvyKZo5R4YWQAHDy0FDysGDywIDi87O3pERYoxKm4vM3galaEahJUlbognWHkzR28hGk4YEUMXEkINDjZvVJ+baNQSFjkABA8qCxAxERU8DBE1Cw0xDAoyEwpCJyhpK26JIkltIixbIhxRHhFKGxFHGRNEFhFBEQ87FRg8KylWDhI3AAQPKgwQMhMWQQsQNQ8ROBMTPhUSPxgSQR0QRx4OSB8PSh4RSx0TSxwTSBkSRBURQBMSPBMUOwcNLwgPMPek40up98KQAAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/ce3dbe909b007cd9c8350b8b2f15046a/bc8e0/Tracemind_Icon-scaled.png","srcSet":"/static/ce3dbe909b007cd9c8350b8b2f15046a/8ac63/Tracemind_Icon-scaled.png 200w,\n/static/ce3dbe909b007cd9c8350b8b2f15046a/3891b/Tracemind_Icon-scaled.png 400w,\n/static/ce3dbe909b007cd9c8350b8b2f15046a/bc8e0/Tracemind_Icon-scaled.png 800w,\n/static/ce3dbe909b007cd9c8350b8b2f15046a/6050d/Tracemind_Icon-scaled.png 1200w,\n/static/ce3dbe909b007cd9c8350b8b2f15046a/00405/Tracemind_Icon-scaled.png 1600w,\n/static/ce3dbe909b007cd9c8350b8b2f15046a/a76e0/Tracemind_Icon-scaled.png 2560w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"PhonePe Team"}}]},"moreBlogs":{"nodes":[{"id":"cG9zdDoxMjcxMg==","excerpt":"<p>Ask a data science team how long they take to go from &#8220;we have a model idea&#8221; to &#8220;the model scores live traffic.&#8221; The honest answer rarely involves the model. You fit a gradient-boosted tree or a GLM in an afternoon. A few lines of a well-documented library, a grid search, done. The weeks go&hellip; <a class=\"more-link\" href=\"/how-we-fixed-training-serving-skew-in-our-ml-models/\">Continue reading <span class=\"screen-reader-text\">How We Fixed Training-Serving Skew in Our ML Models</span></a></p>\n","uri":"/how-we-fixed-training-serving-skew-in-our-ml-models/","date":"November 13, 2026","title":"How We Fixed Training-Serving Skew in Our ML Models","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"},{"slug":"uncategorized","id":"dGVybTox","name":"Uncategorized"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsSAAALEgHS3X78AAADFklEQVR42mOQEY6VE45XFExSFUjT5M/S4c3T4y3Q5y0EIj3eQl2+Am2+PC2BHHWBTE3BHA3JQgXlHAXhOHnhGDnhaAYVgVRV/lR1/gwt3mw9njwDniIjnmIjnhJDnmID3mKgfh3+Ai3BXHWBLA2hbAWRNGnhRBmhWHmRWDmRGAZDvgJz4VIzgRIroUoL3gpz7nJzrgoz7gpTnnJjnjIDvhJdngIttixN/hxpntgAsZ4y7TXGUgXSwjGyIrEMdpw19tx1Dpx1TlwNDpwN9hwNthz1Nly1Vjw1ZrxVxlxlBiJl1nHzEhvORltsnu906WTtF3/hXgmRaAXxJAYf1m4g8mXp9mDs8GDu8GTvcuPqcORotWStt2SrtVBsUN21Nebmm2nN3xZm/e93eJgmu0BXuFBGLFFJOo0hnGlyBNPkMIbJGXyLYnlm+TL1ejK0eHC0RqpNyTCeGxI6W+/C0byy1/X2j/sjvjcHP5AQiJMRTQYiKdFEhiDGZh+G2gzeGbtzH0+y2efNWu9pPae54OCMyu3FbrMiwqaZHj+Y3P2qNPvlxJS/GQ67xQUCJYXCxISCxYSCGCIYOkMYWtO5ZmyMvNEYtM9+7aHSve9mVP+anvS1JnR1gl2/S+hE+7KlkdkHHXRbpfiCJAXDxYVCRQWDRYGa4xj6Yhn6Ipi6UxgmGExY6XL1SUfs+17/NzPi/k/JP5TvN8tFslqDI16BN0qSK0RGMEZSKEpMMExMJExUJJQhiWFSAsPEOKaJsQxdWnNX+C18XBbyrCH67ezE/5VB6zyUanR5cjX4M1X4UhWEkqUFY2XF46QlYqQkoyQkIxnSmKelsU1PZp2ayjjZ1W+23cy9iR33SxNvx6kvtGQvMWTJA6YcTb5MZf5UecFEaaE4CeEYMZEoYeFwYZEwhnSmGZlsM1OYpiUyT4ll6A5gbfRT63Pnq7NlKLHjajAVqABrzlLmT5MTSpISihcXjhEVjhIWiRACaWaYkcowPZlhagLD5GjmieFMvf4MzV4sTd4cPR7cM42lm/S5czX5spWQNYuANYuGAwDlye+IcW7c5gAAAABJRU5ErkJggg==","aspectRatio":1.5873015873015872,"src":"/static/8845157aae862da8b5545e41cb04eb1c/bc8e0/AXIOM-04.png","srcSet":"/static/8845157aae862da8b5545e41cb04eb1c/8ac63/AXIOM-04.png 200w,\n/static/8845157aae862da8b5545e41cb04eb1c/3891b/AXIOM-04.png 400w,\n/static/8845157aae862da8b5545e41cb04eb1c/bc8e0/AXIOM-04.png 800w,\n/static/8845157aae862da8b5545e41cb04eb1c/e48ff/AXIOM-04.png 868w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Achal Ananth, Kedar Swadi, Pramod Patil, Vaishnavi Turkane"}},{"id":"cG9zdDoxMjM4Mg==","excerpt":"<p>It’s 3:00 AM. The glare of a monitor cuts through a pitch-black room as a critical alert pierces your sleep. Seconds later, you&#8217;re locked in a familiar, exhausting ritual: eight browser tabs open, bouncing frantically from Grafana metrics to Loki log streams, then over to Jira change logs. While the incident clock ticks, you’re forced&hellip; <a class=\"more-link\" href=\"/from-tool-hopping-to-talking-reimagining-datacenter-observability-with-netra/\">Continue reading <span class=\"screen-reader-text\">From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA</span></a></p>\n","uri":"/from-tool-hopping-to-talking-reimagining-datacenter-observability-with-netra/","date":"September 28, 2026","title":"From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"},{"slug":"uncategorized","id":"dGVybTox","name":"Uncategorized"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAABcRAAAXEQHKJvM/AAAC0ElEQVR42kWSS08TURiGh0BpOzPn+86Z6Qxtp9BSilBQoFB6YWgLvVDoBdqCUJC7ioJE0aACISIxkmBcmJhooomJMTHGmLhS+QX+ARf+CLfu3DiQGJM3Z/fkSb7zcHZINUBKwWEJ44i6iBErhuppsI721tE+E+030yhP44SlJZproGWNznhwwYer7XiNc0DGTtIqJm04REEnEOUhbKZBE+37D7M4kTNMyqtyRZOrbpw34A62yblgVJNzDhxRpYzsyGDDkCjrVhauP+PrWciArRgjkGQ4qsK4BlNunPPikg9XOA8peLTJRlfZqebtWt7ggcV4iFhZyESDNWKPAaM6DDTFMKvSohMrTVj14qIPl7lWsdxiLnhxwsOKqiUp8wkJE7IyZDIHEML+jgULH7KIUaSGOcNI1o4TTqg4xYpLuMh1y0vB8Ha7XG2jk3rn5VDHolPKSnQoX7xZfvc++eJk8+mH7sAMT+KyPOL3ziuQa7EtRLy7/c07XKp15/jrj17/hr9u8u2zb4933qiWjCIkP598r/7+KT159enXn7295xwXcLtKR2tfGpVSwHt9vfixPPCa08n6iGMrRK70kKXzMOeXpltoyW0r9LXPprePuw5fjlX3FduwTU2pasZlL6i2bIMtr0llTa5wSXErZt2MiTci4lovWenCS21kyieVNDrGanTFpFtr+wkZpCyBNM5k4z0dgRghMW5MuD9K7qXFO3FxM3rKL3WSWR+puLHoYmMqzSjMOFUcYJCgUcGAaAyNRQUS4UrCwbjwICfspsldnd0KwdUestBOplug1Ag5B4zYYJhB4gweENCo7TRB4yMtcoibFh5PCY8mhIc5cqA37Ufk9T5h2ZC3GnIoOCGrQFKCBMKgCBGehnl33NKom5sGzM06N8sfzwhHZeEwb8ittweFjSBZvUDmzpFJDxSdYFSV+geHrdBvOc0uUIddtWLnX98AkFf5kAQ8AAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/bc8e0/NETRA-ICON.png","srcSet":"/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/8ac63/NETRA-ICON.png 200w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/3891b/NETRA-ICON.png 400w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/bc8e0/NETRA-ICON.png 800w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/6050d/NETRA-ICON.png 1200w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/00405/NETRA-ICON.png 1600w,\n/static/ba4ff4bf12dd10f99b59dd0d51e6bf33/c1b57/NETRA-ICON.png 1809w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Kaustubh Tripathi, Sreeman Repaka, Shejin Jacob Paulose"}},{"id":"cG9zdDoxMjMxMA==","excerpt":"<p>At PhonePe, our strategy for AI in HR was never about deploying a single, generic solution. Instead, we set out to build a fit for purpose ecosystem prioritizing speed, flexibility, and accuracy embedded directly into daily workflows. AI Readiness began before AI. We have been deliberate about maintaining a small number of core systems as&hellip; <a class=\"more-link\" href=\"/from-experimentation-to-scale-phonepes-ai-journey-in-hr/\">Continue reading <span class=\"screen-reader-text\">From Experimentation to Scale: PhonePe&#8217;s AI Journey in HR </span></a></p>\n","uri":"/from-experimentation-to-scale-phonepes-ai-journey-in-hr/","date":"September 10, 2026","title":"From Experimentation to Scale: PhonePe’s AI Journey in HR ","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAABcRAAAXEQHKJvM/AAADJElEQVR42gEZA+b8AAYQMAoSNwkSNgkRNg4SOxIUQBMUQhIRRBcVSRsXTRcSTRsNThYMTBUOTh0TVx4TWR8UWyAUXR8UXB8UXAAOEDgXF0kHDjMLETgTFkEREz8SEkIUEkUYFEkaF00aE00ZMF48PHlCMHYaE1MfFVkbFFYZFFQeFFseFFsAChA1DhQ6MDJrFBM+FhVAEhNDFhNGFxNIGBRLGhFMGSFUPc+0ocTouHf0UzqNGhdRLRZpOhF2HBNYHBNXABIRPhsYR3V731ZyuSYtXhYIPhgRRxgSSBgRSRwVThINSWGjqLPs+1ZWoD4mchIRSU0cj2YUrBwSVBoUVAAgGUwjHU9sYc12n+5aq9MuYoghGlIoG10sIWMYD04YDEkiIlhAX4saG1UUD0kZE1AZD00cFFMZE1AZFFAAJBVSIxNPPDh9YZLHW8TdStTYLomeKBhgU0uDUEiBKB9gGxBOGAtHGRJMGQpHHxhSKC5mFBBIFhNLGBVMAC0VXCsVWyUOUDgjaV+FsFCzyjaFqF8UlWkZnnBHm2dWklNLhSsiYRoNSh1Ca0ibxEdxrBILPRscTBQTRQA0FmM5GWo/HXg6HnQ6GG84S4UvbY+AHrO+ZeGQM8JDC3xOOXlcU442naR31NlmreBBdKUQCjkSFEIPET8ASh6ARR+BQS95SS9+RB14Rx58PR12LxlrRhx8RhJ9NxhtUTJ5TlqLQu7IuZTcbG3OOIemCQIxDhM8DBE5AGMlpUwfiz4vdEpKi1tDoE4hhzobbT0fczIbbiwbZTMeZ2hMi257oBvgtVCiyk+Vwlh0oSwqWQwUPgwSNgBmIqhpJq5dIKBLJoZCOX01H2hVPX9fRoZIKXY7HHItHWotD2E1PncX1q8zkZ8+LnY7HGYrLlwMGEQKFDUAYR+cYyCjZSOoYySnVx+WRR9+Rit3UjZ9QiR1Mx9uPxl2MxNpKilnMDtxOhBlJxhYDxlHCxZBChg/BRAuAFscklwdlVsemFofmlsinVcjmkogiEAdfS8WZzU9c1x2wGlDljodaSsUXxweVRYdTRAZRwoWPQUTNAMQKhRL2G7ybfYRAAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/2a4ce3c8c10695caf9007717a8fa3599/bc8e0/HR-operations-icon.png","srcSet":"/static/2a4ce3c8c10695caf9007717a8fa3599/8ac63/HR-operations-icon.png 200w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/3891b/HR-operations-icon.png 400w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/bc8e0/HR-operations-icon.png 800w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/6050d/HR-operations-icon.png 1200w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/00405/HR-operations-icon.png 1600w,\n/static/2a4ce3c8c10695caf9007717a8fa3599/3e197/HR-operations-icon.png 1788w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"PhonePe Team"}},{"id":"cG9zdDoxMTc4Mg==","excerpt":"<p>Introduction Android&#8217;s native RecyclerView is exceptionally efficient at handling large datasets through item recycling, but it lacks native support for spatial interactions like pinch-to-zoom and canvas-level panning. For complex layouts—such as interactive retail grids or detailed dashboards—smooth zooming and panning are essential to the user experience. To address this limitation, we engineered a custom ZoomableRecyclerView&hellip; <a class=\"more-link\" href=\"/zoomable-recyclerview-enabling-pinch-to-zoom-and-panning-in-android-recyclerviews/\">Continue reading <span class=\"screen-reader-text\">Zoomable RecyclerView: Enabling Pinch-to-Zoom and Panning in Android RecyclerViews</span></a></p>\n","uri":"/zoomable-recyclerview-enabling-pinch-to-zoom-and-panning-in-android-recyclerviews/","date":"September 08, 2026","title":"Zoomable RecyclerView: Enabling Pinch-to-Zoom and Panning in Android RecyclerViews","categories":{"nodes":[{"slug":"engineering","id":"dGVybTo3","name":"Engineering"}]},"author":{"node":{"id":"dXNlcjoxMzc4","name":"akankshamishra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC70lEQVR42iXR109TcRTA8f4vjuCAe87vDtuKaEHAhYOYmOiDvvpmJI5Eg4AIMcYVY5DRSsXBUCLEKIgxEYpIw6zILeW2peOWhq5b2mJbSn8WTL7JefrknOSoAH5sNUzQLLBzBCUAmeAKy4Z4Lszzm3FsiGAAQUZwIM4jTgKM5JTqP0YcJzhXxNvVnA9JWBAiWo2i1cZy7dfGNJo4z8cQVwECAC5CRI6dQBj+j00EZwCkAmaZsGG1OnKgUNHpwkfK7RXHbOXlC8UlYnmZreywVa32AhPgOefRI1aWjKm21poRRQY8LAlp1ZFDB8OHS6JnTjo6XkQGe1MGffhZk394KCHOpBvqnLt3L3Osf5+wSMhkDo8QnEaQEP0cpwjqeNGheKEuffqM83tf6te3zIyZWmc3pPlsLEBfGTx79ng4NgzgIGjJ4dHcQHQWMOEibeDSKevl89LjqxN1V0yfOpNjn//O/sqKkxm7NRuVqbHNW1Ag87yC4CE4r0IYY8kcgpuBSH9NV6qnNt7zMPupMfHxycTXkN9HFT/1OOKiJRkJUH2LC8AjCNGtj4gqAmMEfm/PW7l5wZT6cCf07kGiq+7FDVN/fSf9+SaTptl1Gg0qLuvfwBJ9qbczjEsQVrewVZW/d1Snm2X3OT/X6KNdNcG3jY6mhotnfRWVS8sDA6lAyN9nWbfZvHYqL9CXbW6G8fB8brN382yGGdFwlnNlZntbvc9Yr7yrHX3UVnEi+rhqODHUmYkqq+JKJrbmk+iKRI0GOT9f5tgIogtxTkXIj215ltYqY/D1LZfh7vKrXI1iy/NkT3Vk6EMyQdfT2XSS+t0bioe2t3rzdnkJGwS0A8yodu01VZYOLDZXO/XVS/pa2Vgb777tM97vuNX7pTs+MUoXpjakPxt/pjNBH21t8u7Y6VZzsoabBxjfxO3XnroNNxaaq5cMdxZb7rVff3+8xFtc6h7sXjP1rU39zFrNGUnM+Kdi+mb39h02DS8V8lMApn/5ZcMwVRrcXAAAAABJRU5ErkJggg==","aspectRatio":1.5873015873015872,"src":"/static/b19c886c47692230b76a1bd769d3e1dd/bc8e0/Tech-Blog_Opt1-2-scaled.png","srcSet":"/static/b19c886c47692230b76a1bd769d3e1dd/8ac63/Tech-Blog_Opt1-2-scaled.png 200w,\n/static/b19c886c47692230b76a1bd769d3e1dd/3891b/Tech-Blog_Opt1-2-scaled.png 400w,\n/static/b19c886c47692230b76a1bd769d3e1dd/bc8e0/Tech-Blog_Opt1-2-scaled.png 800w,\n/static/b19c886c47692230b76a1bd769d3e1dd/6050d/Tech-Blog_Opt1-2-scaled.png 1200w,\n/static/b19c886c47692230b76a1bd769d3e1dd/00405/Tech-Blog_Opt1-2-scaled.png 1600w,\n/static/b19c886c47692230b76a1bd769d3e1dd/a76e0/Tech-Blog_Opt1-2-scaled.png 2560w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Akhil Elango"}},{"id":"cG9zdDoxMTU2MA==","excerpt":"<p>Lens lets your team see what is happening inside a running mobile app—from a normal web browser. You Know This Bug, Right? It is Friday afternoon. QA tells you that the profile screen is blank after login. You open the same app, follow the same steps, and everything works. The app does not crash. System&hellip; <a class=\"more-link\" href=\"/lens-give-your-entire-team-x-ray-vision-into-your-android-app/\">Continue reading <span class=\"screen-reader-text\">Lens: Give Your Entire Team X-Ray Vision Into Your Android App</span></a></p>\n","uri":"/lens-give-your-entire-team-x-ray-vision-into-your-android-app/","date":"August 10, 2026","title":"Lens: Give Your Entire Team X-Ray Vision Into Your Android App","categories":{"nodes":[{"slug":"ai","id":"dGVybTo0MjE2","name":"AI"}]},"author":{"node":{"id":"dXNlcjo1OA==","name":"Sampurna Mitra"}},"featuredImage":{"node":{"altText":"","localFile":{"childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAIAAAAmMtkJAAAACXBIWXMAAAsTAAALEwEAmpwYAAADJElEQVR42gEZA+b8ACYQaCUQZyIQYyAQXxwQWRgQUhMQSw8QRQwQPggQOAUQMwYOMQcOMgkONg4NOBIOPBQeSxkJQBwKRB4KRQAmEGgmEGcjEWUoD2QvGnEiF2IUEEwPD0ULED4LEj0JEDcHDjQJCzENBzEOCTcUDz4UIU0aCEEfDEchCkgAJhBoJBBnGAldIRBgHxJdGhFXExBLFBFLFhJJAAcvBgs1CAgxKj9uS4KhGxhDFAo+GRFFHQpEGAQ+HQVDACQOZy0SamA8kiUQYhwPWR0QVg8PR2QXl2YYl1hIhkk3eAMELxcdTixbfR8cSxcDPB0ORx0HRFk3g0gkcQAiB2M5SIejve48MoMcCVYbDlQbEVE6B2+gZ8Pn2/9ucqsWEEMbEkcUADocIVEhE0shAEIaAz+eaMmTUMIAJQ1kJx1sLjp/JRZlHQpXKRFdIRFVAwA6lo64ven0pMDXPEN4MCBiJgtTIZWaJr21M1B9KQ9SUCF2YjCNACQPYyMMYSkPYScSYBgRV5aZ0mhcowcAPZaGvLjl8qi91z09eDEdZCcHVCOLmSPey0HU106hxUJMjzcTZAAgDlshD10XCVQdDVYhHl87b5Y4T4EIAz6ikr7h4f9uZqwtH1wuH2MqA1gpkaAjzcJMzNZgzOVnsetpeNEAHA9TFAdMY0iPSjJ7EgRHGARILAhdWASNtXXau2zkewWxUQmEORFqKwRXMGCKMMfHTtfgaMjka6fjbX/cABYLRhEWS3KpyGl2sxAHQx0UT3MOpaME15QEy4IAuXwEtHwGtmgHnDEKXCQCSDIdZENim1mdzm6q7XJ+4QANDjwPDj0PHUkVGksXD0YYEUgVD0Q1CmNqCJyEB7pyB6ZGCXUrEFUoDlFZDotPBHwwAFI9DmlRQ5xqYscABg4xByFBCg02DAo3EA4+EQxAFA1DEA0+FAxBMQtfJglRGglFJgpSLQ1WZhehVguIMghbOgRiOwBdQQZoAAMOLAQfOgYRMwoONQ0NOhANPhQMQRgMRhoMSRcMRB4KSiUJUScJUisIVCsHVDEHWTgGYTsGZD8HaEEFadEH0IHxhAm0AAAAAElFTkSuQmCC","aspectRatio":1.5873015873015872,"src":"/static/d85997c8e2f35163369a838af5c893fe/bc8e0/LENS-blog-icon-scaled.png","srcSet":"/static/d85997c8e2f35163369a838af5c893fe/8ac63/LENS-blog-icon-scaled.png 200w,\n/static/d85997c8e2f35163369a838af5c893fe/3891b/LENS-blog-icon-scaled.png 400w,\n/static/d85997c8e2f35163369a838af5c893fe/bc8e0/LENS-blog-icon-scaled.png 800w,\n/static/d85997c8e2f35163369a838af5c893fe/6050d/LENS-blog-icon-scaled.png 1200w,\n/static/d85997c8e2f35163369a838af5c893fe/00405/LENS-blog-icon-scaled.png 1600w,\n/static/d85997c8e2f35163369a838af5c893fe/a76e0/LENS-blog-icon-scaled.png 2560w","sizes":"(max-width: 800px) 100vw, 800px"}}}}},"subtitleAcf":{"text":"Mohan Sandeep Kella and Ashish Kumar Khatri"}}]},"previous":null,"next":{"uri":"/from-tool-hopping-to-talking-reimagining-datacenter-observability-with-netra/","title":"From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA"},"categoriesData":{"nodes":[{"id":"dGVybTo0MjE2","name":"AI","count":8,"uri":"/category/ai/"},{"id":"dGVybToxOQ==","name":"Architecture","count":15,"uri":"/category/architecture/"},{"id":"dGVybTo0NDI=","name":"Cricket","count":null,"uri":"/category/sports/cricket/"},{"id":"dGVybTo3","name":"Engineering","count":16,"uri":"/category/engineering/"},{"id":"dGVybToyNQ==","name":"Mobile","count":10,"uri":"/category/mobile/"},{"id":"dGVybToyMg==","name":"Open Source","count":null,"uri":"/category/open-source/"},{"id":"dGVybToxNg==","name":"People Stories","count":3,"uri":"/category/people-stories/"},{"id":"dGVybToyOA==","name":"Product","count":3,"uri":"/category/product/"},{"id":"dGVybTo0MzM=","name":"Sports","count":null,"uri":"/category/sports/"},{"id":"dGVybTozMQ==","name":"Tech Stories","count":null,"uri":"/category/tech-stories/"},{"id":"dGVybTox","name":"Uncategorized","count":2,"uri":"/category/uncategorized/"}]},"recentPosts":{"nodes":[{"id":"cG9zdDoxMjcxMg==","title":"How We Fixed Training-Serving Skew in Our ML Models","uri":"/how-we-fixed-training-serving-skew-in-our-ml-models/"},{"id":"cG9zdDoxMjM4Mg==","title":"From Tool-Hopping to Talking: Reimagining Datacenter Observability with NETRA","uri":"/from-tool-hopping-to-talking-reimagining-datacenter-observability-with-netra/"},{"id":"cG9zdDoxMjMxMA==","title":"From Experimentation to Scale: PhonePe’s AI Journey in HR ","uri":"/from-experimentation-to-scale-phonepes-ai-journey-in-hr/"},{"id":"cG9zdDoxMTc4Mg==","title":"Zoomable RecyclerView: Enabling Pinch-to-Zoom and Panning in Android RecyclerViews","uri":"/zoomable-recyclerview-enabling-pinch-to-zoom-and-panning-in-android-recyclerviews/"},{"id":"cG9zdDoxMTU2MA==","title":"Lens: Give Your Entire Team X-Ray Vision Into Your Android App","uri":"/lens-give-your-entire-team-x-ray-vision-into-your-android-app/"}]}},"pageContext":{"id":"cG9zdDoxMjcxMg==","categories":[{"id":"dGVybTo0MjE2","name":"AI","slug":"ai","uri":"/category/ai/","count":8},{"id":"dGVybToxOQ==","name":"Architecture","slug":"architecture","uri":"/category/architecture/","count":15},{"id":"dGVybTo3","name":"Engineering","slug":"engineering","uri":"/category/engineering/","count":16},{"id":"dGVybToyNQ==","name":"Mobile","slug":"mobile","uri":"/category/mobile/","count":10},{"id":"dGVybToxNg==","name":"People Stories","slug":"people-stories","uri":"/category/people-stories/","count":3},{"id":"dGVybToyOA==","name":"Product","slug":"product","uri":"/category/product/","count":3},{"id":"dGVybTox","name":"Uncategorized","slug":"uncategorized","uri":"/category/uncategorized/","count":2}],"categoryId":"dGVybTo0MjE2","previousPostId":null,"nextPostId":"cG9zdDoxMjM4Mg=="}},
    "staticQueryHashes": ["4132566406"]}