<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Criteo Tech Blog - Medium]]></title>
        <description><![CDATA[Tech stories from the Criteo Tech team - Medium]]></description>
        <link>https://medium.com/criteo-engineering?source=rss----fc3ea5a64a12---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Criteo Tech Blog - Medium</title>
            <link>https://medium.com/criteo-engineering?source=rss----fc3ea5a64a12---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 19:09:16 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/criteo-engineering" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Introducing Criteo Tech]]></title>
            <link>https://medium.com/criteo-engineering/introducing-criteo-tech-d477d39a286f?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/d477d39a286f</guid>
            <category><![CDATA[criteo]]></category>
            <category><![CDATA[tech-blog]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Thu, 24 Sep 2026 07:31:01 GMT</pubDate>
            <atom:updated>2026-09-24T07:31:01.818Z</atom:updated>
            <content:encoded><![CDATA[<h3>Introducing Criteo Tech: <em>Explore the ideas, projects, and people behind Criteo’s technology.</em></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Gex0a1caH9g583rzxz0sGg.jpeg" /></figure><p>Technology at Criteo is shaped by the engineers, researchers, and communities who build, experiment, learn, and share every day.</p><p><a href="https://tech.criteo.com/">tech.criteo.com</a> brings more of that work together in one place. It is a dedicated destination for exploring technical articles, engineering stories, research, career journeys, and insights from across Criteo Tech.</p><p>The site also makes it easier to discover the wider Criteo Tech ecosystem, with links to key initiatives and resources such as the Criteo AI Lab and our Open Source projects.</p><p>This is only the beginning. Over time, the website will feature more of the people and activities behind our technical community — including events, talks and recaps, Tech Ambassador stories, and other ways Criteos contribute to technology inside and outside the company.</p><p>Whether you already follow our work or are discovering Criteo Tech for the first time, we invite you to explore <a href="https://tech.criteo.com/">tech.criteo.com</a> and see what our teams are building, researching, and sharing.</p><p><a href="https://tech.criteo.com/">Criteo Tech | Engineering, AI &amp; Research</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d477d39a286f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/introducing-criteo-tech-d477d39a286f">Introducing Criteo Tech</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How Criteo Measures Bare-Metal Infrastructure Carbon]]></title>
            <link>https://medium.com/criteo-engineering/how-criteo-measures-bare-metal-infrastructure-carbon-6d0302218eab?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/6d0302218eab</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[green-tech]]></category>
            <category><![CDATA[sustainability]]></category>
            <category><![CDATA[infrastructure]]></category>
            <category><![CDATA[carbon-emissions]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Wed, 23 Sep 2026 09:54:59 GMT</pubDate>
            <atom:updated>2026-09-23T09:54:59.323Z</atom:updated>
            <content:encoded><![CDATA[<h4>Authors: <a href="https://tech.criteo.com/blog/author/aida-cisse/">Aida Cissé</a>, <a href="https://tech.criteo.com/blog/author/omar-ait-mous/">Omar Ait Mous</a>, <a href="https://tech.criteo.com/blog/author/vera-ilina/">Vera Ilina</a></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*L-SXWgKYEtarNzDYjEwtaw.png" /></figure><p>For many years now, we have been computing the global carbon footprint of the Criteo Bare-Metal Infrastructure thanks to the plethora of data we have at the <strong>data-center-level</strong> — yearly electricity consumption, <a href="https://en.wikipedia.org/wiki/Power_usage_effectiveness">PUE</a>, the carbon impact of manufacturing the servers, …</p><p>This was enough for some time as it allowed us to monitor our impact and work on achieving our <a href="https://www.criteo.com/wp-content/uploads/2025/11/Criteo-Global-Environmental-Policy-Update-v2.pdf">SBTi commitments</a>. But as awareness grows, people and teams start asking questions to understand the impact of their applications and their share within the global picture.</p><p>Due to the lack of more granular data, questions like “ <em>What is the footprint of this specific server in this location?</em>” become harder to answer, and questions like <em>“What is the impact of my application in a specific data center?”</em> even harder.</p><p>This is the story of how we reduced that gap at Criteo: from an end user’s genuine question about application emissions to <strong>Dashboards</strong> and a <strong>Web UI</strong> where anyone can explore the <strong>daily embodied &amp; usage emissions of every physical asset</strong> across our fleet.</p><p>Since the application impact can be derived as a share of the underlying assets it uses, the first step was to compute the impact of those physical assets and make the result available for exploration.</p><h3>From data centers to physical assets</h3><p>Our initial sustainability work focused on facilities: how much electricity each data center uses, how efficient the cooling is, how much carbon is associated with the local grid, and what the manufacturing impact is of all the physical assets. This was good enough for <a href="https://criteo.investorroom.com/csr-reports">Sustainability reporting</a> and high‑level decisions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*K7jVi6UKV6PYkUMLNi2uZQ.png" /></figure><p>But things are moving forward and we needed to strengthen our approach and methodology:</p><ul><li>New regulations and voluntary frameworks were asking for <strong>more granular, auditable data</strong>.</li><li>Internally, the infrastructure and product teams wanted to compare <strong>hardware options and locations</strong> based on carbon impact in addition to price.</li><li>With AI workloads growing, we were about to deploy new, <strong>very carbon‑intensive hardware</strong> (GPUs) and needed a way to measure their specific impact.</li><li>Reduce the infrastructure impact: to identify the levers and make some carbon savings</li></ul><p>We realized that in order to make meaningful decisions, we had to compute the carbon impact at a more granular level: instead of “X tons of <a href="https://en.wikipedia.org/wiki/Global_warming_potential#Carbon_dioxide_equivalent">CO₂eq</a> per datacenter per year,” we wanted “Y kgCO₂eq per server per day.”</p><p>To do so, we set ourselves a goal:</p><blockquote><strong><em>Compute the daily carbon footprint of every physical asset in our datacenter (server,</em></strong><em> </em><a href="https://en.wikipedia.org/wiki/Power_distribution_unit"><strong><em>PDU</em></strong></a><strong><em>, rack, network gear), split into embodied and usage emissions, and let our users explore the data in the tools they already use.</em></strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FUo26nQkNcrpoGdMSDo3Dg.png" /></figure><h3>Agreeing on what we actually measure</h3><p>Before we could write a single line of code, we had to answer a deceptively simple question:</p><blockquote>“What should be accounted for in the carbon footprint of a server (or any other physical asset)?”</blockquote><p>We worked with our partner <a href="https://hubblo.org/fr/">Hubblo</a>, a consulting firm specializing in the environmental impact of digital technologies, and converged on a model with <strong>two complementary parts</strong>, mirroring how finance views <a href="https://en.wikipedia.org/wiki/Capital_expenditure">CAPEX</a> vs <a href="https://en.wikipedia.org/wiki/Operating_expense">OPEX</a>: in our case, <strong>embodied</strong> and <strong>usage</strong> impacts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JXSqtNOyVnNhDklRs_F45A.png" /></figure><h4>Embodied impact: before the asset is installed, and once it is decommissioned</h4><p>The <strong>Embodied Impact</strong> is the part we often forget; it includes:</p><ul><li>Extracting raw materials and manufacturing boards, chips, and chassis.</li><li>Assembling and shipping the assets.</li><li>Treating the hardware at its end‑of‑life.</li></ul><p>We treat embodied emissions like <strong>amortized CAPEX</strong> in finance: i.e. we amortize the embodied impact over a standard <strong>six‑year lifetime</strong> to obtain a daily embodied impact of the asset.</p><p>There are three components to this:</p><p><strong>Manufacturing</strong></p><ul><li>Vendor ‑ or database‑provided — emission factors for servers, racks, PDUs, and network gear.</li><li>Amortized over a six-year period: Daily manufacturing impact = (hardware manufacturing emission factor) / (365 × 6)</li></ul><p><strong>Hosting &amp; technical environment</strong></p><ul><li>A generic factor from <a href="https://librairie.ademe.fr/economie-circulaire-et-dechets/6105-product-category-rule-pcr-for-cloud-services-and-data-centre-it-hosting-services.html">ADEME’s Cloud &amp; Datacenters PCR</a> that represents the impact of the building and its technical environment (beyond electricity).</li></ul><p><strong>Transportation</strong></p><ul><li>Standardized intensities per ton-kilometer for the typical lanes between suppliers, staging locations, and data centers.</li><li>Also amortized over a six-year period.</li></ul><p>Once we have all three, we can compute the daily embodied impact of the asset:</p><blockquote><strong><em>Daily embodied emissions</em></strong><em><br>= Daily manufacturing + Daily hosting &amp; technical environment + Daily transportation.</em></blockquote><h4>Usage impact: what happens once the asset is powered on</h4><p>The <strong>Usage Impact</strong> covers everything that happens during the life of the asset. For this, we take into account:</p><ul><li>Its own electricity consumption.</li><li>The overhead of keeping it alive: cooling, power distribution, UPS, etc., captured via the data center’s <strong>PUE</strong>.</li></ul><p>Conceptually, the formula is pretty simple:</p><blockquote><strong><em>Daily usage emissions</em></strong><em><br>= PUE × Electricity Emission Factor (kgCO₂e/kWh) × Power consumption over the last 24h (kWh).</em></blockquote><p>In other words, consider how much energy the asset uses, adjust for the efficiency of the building, and multiply by how carbon‑intensive the local grid is on that day.</p><h4>Putting it all together</h4><p>Once we agreed on this split, two things became clear:</p><ul><li>We couldn’t simply rely on static theoretical power usage values, we needed real measurements from the assets.</li><li>For our engineers and auditors to trust the numbers, our assumptions had to be <strong>transparent</strong> and <strong>auditable</strong>.</li></ul><h3>From whiteboard to pipeline</h3><p>The first tangible step of the project was not a dashboard; it was a whiteboard covered in arrows between data sources.</p><p>We identified five families of inputs:</p><ol><li><strong>Inventory &amp; flavors</strong> — what assets do we have, where are they, and which hardware profile (or “flavor”) do they belong to?</li><li><strong>Power metrics</strong> — how much power each asset actually consumed over the last 24 hours?</li><li><strong>Data‑center metrics</strong> — PUE and location‑specific electricity emission factors.</li><li><strong>Hardware emission factors</strong> — manufacturing and end‑of‑life footprint of servers and other assets.</li><li><strong>Transport data</strong> — how hardware moves from its manufacturing location to its destination data center, and relocation over its lifetime.</li></ol><p>Some of these already existed in our production systems; some lived in Excel sheets or PDF files; others were lost in emails from our vendors; and the rest were missing and had to be requested from our partners.</p><h4>Normalizing carbon data</h4><p>We started by building a <strong>data service</strong> to gather, ingest and normalize all carbon‑related numbers:</p><ul><li>Emission factors</li><li>Transportation footprints</li><li>Real-time power usage of each physical asset</li><li>…</li></ul><p>Everything is stored in a database with explicit owners and update processes, so that, for example, the Hardware team can refresh a set of emission factors without touching the rest of the pipeline.</p><p>Values change over time, for example, the manufacturing of the same hardware model can evolve and become more efficient; the data service had to handle all of that.</p><blockquote><em>This service became the </em><strong><em>single source of truth</em></strong><em> for anything that might appear in a carbon computation.</em></blockquote><h4>Daily computation and persistence</h4><p>With emission factors under control, we can now focus on the daily computation. The shape of the job is deliberately simple:</p><p><strong>For each day and each physical asset:</strong></p><ul><li>Extract the power consumption on that day.</li><li>Retrieve the relevant <em>PUE</em> and <em>electricity emission factor</em> for its data center.</li><li>Fetch its <em>manufacturing</em> and <em>transport</em> emission factors, in addition to the generic hosting factor.</li></ul><p><strong>Compute:</strong></p><ul><li>Daily embodied emissions.</li><li>Daily usage emissions.</li><li>Total daily carbon impact.</li></ul><p><strong>Store results</strong> in a database with one row per asset per day.</p><p>From there, everything else is “just” data visualization and analysis.</p><h3>Living with imperfect data</h3><p>As expected with initial iterations, early runs of the pipeline surfaced all the usual data quality issues:</p><ul><li>Assets with no real-time power consumption metrics.</li><li>Hardware models with unknown manufacturing emissions.</li><li>Assets relocation that were never marked as such.</li><li>…</li></ul><p>Instead of waiting for perfect data, which will never happen, we decided to work on a methodology to estimate <strong>reasonable replacement values</strong>; we would rather have <strong>good-enough well-documented</strong> numbers than nothing.</p><h4>Power usage: a ladder of fallbacks</h4><p>Usually, when real-time power usage metrics are unavailable, they are lost for good for that period of time; for this reason, we use a <strong>ladder of fallback heuristics</strong>:</p><ol><li>Use <strong>real‑time power consumption metrics</strong> when available</li><li>Otherwise,</li></ol><ul><li>An asset that is shut down uses no power.</li><li>Estimate the power usage from similar assets doing the same thing, in the same location.</li><li>Fall back on the <strong>theoretical power consumption</strong> of the hardware model, provided by the manufacturer.</li><li>Estimate the power usage from all assets of the same type (i.e. servers, PDUs…) in the same location.</li></ul><p>Each time we move down the ladder, we increase uncertainty — but we are explicit about it and have the metrics to monitor coverage and evolution over time.</p><h4>Embodied emissions: borrowing from neighbors</h4><p>The issues are much easier to handle for manufacturing and transportation given that missing past data is not lost forever, although they can change over time,</p><ul><li>Use <strong>vendor‑provided values</strong> or <strong>our partners’ values</strong>, when available.</li><li>Otherwise, borrow values from <strong>similar assets deployed in the same location</strong> to keep transport distances realistic.</li><li>Any remaining gaps are <em>temporarily</em> set to <strong>0</strong>, clearly flagged as such — an incentive to liaise with our providers to gather the real data instead of ignoring the problem.</li></ul><p>Once the real values are retrieved, we update our metrics database and restart the computation to refine the numbers.</p><p>This may sound rough around the edges, but it has the advantage of computing a value for every single physical asset, and making our numbers <strong>traceable</strong>: when someone challenges a number we publish, we can walk them back through the exact assumptions behind the computation.</p><h3>Visualization dashboards</h3><p>Once the database started filling up with results, we moved on to the fun part: <strong>exploring them</strong>.</p><p>With different users and different needs, some interested in digging into the details while others focused on more global views, we built different visualizations that let us answer questions we could not answer before this initiative:</p><ul><li>What is the carbon impact of this specific server in this location on a given date?</li><li>What is the average daily usage impact of this type of server models in a specific year?</li><li>What is the yearly carbon impact in this location (i.e. the sum of all assets in that location)?</li><li>What is the total monthly embodied impact of all network gear on a given month?</li><li>How does the carbon impact of this database evolve over time?</li><li>How much carbon impact did we save by migrating to the newer generation of server models?</li><li>How is the carbon impact distributed across the different types of assets (servers, network gear, etc.)?</li><li>…</li></ul><p>All these questions, and many more, become easy to answer and let internal users of Criteo’s infrastructure explore data independently and incorporate the results into workload-sizing and deployment decisions.</p><h3>What the numbers changed for us</h3><p>First of all, when we sum everything, we get back to the global carbon footprint of the Criteo Bare-Metal Infrastructure we were previously manually computing, but we now have much more detail, and the conversations shifted from theory to very concrete trade‑offs when we started exploring the results.</p><h4>Usage dominates, but embodied emissions are important</h4><p>It comes as no surprise that <strong>usage emissions</strong> are the largest slice of our footprint: Electricity and PUE still matter a lot.</p><p>However, the dashboards make something else visible: for certain fleets — especially those using <strong>recent hardware models and high‑end GPU servers</strong> — <strong>embodied emissions are significant</strong>.</p><p>This has practical consequences:</p><ul><li>We pay very close attention to how well these GPU servers are actually <strong>used</strong>, not just how many we have.</li><li>We ensure we continue using server models that can safely run for another year or two before replacing them with newer generations.</li></ul><h4>Geographic location matters</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5FPZgm1BMXNyIIVxi4w6rA.png" /></figure><p>Comparing the same hardware model across different locations highlights how <strong>grid mix and facility design</strong> interact:</p><ul><li>The same hardware in two regions can have <strong>very different usage emissions</strong>, purely due to electricity mix.</li><li>High‑density sites with better PUE can offset a part of that, but not all.</li></ul><p>This feeds directly into <strong>capacity planning</strong> and <strong>site‑selection</strong> discussions: we can now consider both the carbon impact and the financial cost when considering moving workloads from one location to another.</p><h4>Server models are not made equal</h4><p>Analysis of the carbon impact of different hardware models shows:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aMQSyjGlbLq8riGqsFKtGA.png" /></figure><ul><li>A couple of large, general‑purpose <strong>CPU fleets</strong> dominate total emissions because there are a lot of them, and they run all the time.</li><li>Some <strong>GPU and storage</strong> models have the highest <strong>per‑server</strong> daily impact.</li></ul><p>This leads to more nuanced conversations:</p><ul><li>if you optimize and reduce this particular fleet, here’s how much carbon you can realistically save</li><li>if you migrate to a different hardware model, here’s how the carbon impact will change</li><li>if you pick this specific server model for your fleet, here’s how much carbon impact to expect</li></ul><h3>The wider picture</h3><p>We are taking a complementary angle on the <strong>infrastructure</strong> side:</p><ul><li>Grounding our calculations in recognized methodologies (<a href="https://ghgprotocol.org/">GHG Protocol</a>, ADEME’s Cloud &amp; Datacenters PCR).</li><li>Treating <strong>upstream emissions</strong> (manufacturing, buildings, transport) as first‑class citizens, not a footnote to electricity.</li><li>Making the results available and <strong>usable by our engineers</strong>, not just sustainability specialists.</li></ul><p>Our hope is that, as more actors share their methods and data, we can converge on <strong>standards that make hardware and site choices comparable across the industry</strong>.</p><h3>What next?</h3><p>We are quite happy with this first iteration, yet we already know how to improve on this:</p><p><strong>Refine data</strong></p><ul><li>Use <strong>daily electricity emission factors</strong> instead of annual averages.</li><li>Integrate <strong>relocation emissions</strong> directly into the embodied impact of assets.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Y1tR3Zi1x6jyqBW8Z9wb4Q.png" /></figure><p><strong>Broaden the scope</strong></p><ul><li>As stated above, we can now compute the carbon impact of each individual asset we have in our infrastructure</li><li>The next step would be to compute the impact of each application, each product, each user…</li><li>To do so, we will rely on the redistribution framework we already have in place to propagate the monetary cost of these physical assets to their users, and their users’ users…</li><li>The idea is that the cost is first allocated to its direct clients, such as technology clusters, whose cost is then redistributed to the services and applications running on those clusters according to their resource consumption, and this logic continues up the stack until we reach the production and clients.</li><li>Our goal for carbon is to reuse the same framework so that carbon emissions follow the same allocation paths.</li><li>This will let us compute the carbon cost of each layer, each service, each application, each product, each user.</li></ul><h3>Closing the loop</h3><p>Remember that original question — “ <em>What is the footprint of this specific server in this location?</em> “</p><p>It now has a concrete answer.</p><p>More importantly, it unlocks new kinds of discussions inside Criteo:</p><ul><li>SREs and hardware engineers discussing the <strong>carbon impact</strong> of hardware models in the same breath as reliability and cost.</li><li>Product teams asking for <strong>carbon estimations</strong> (in addition to cost estimations) to feed into their own roadmaps.</li><li>Sustainability work that is <strong>embedded in everyday infrastructure decisions based on realtime carbon impact</strong>, not just in yearly reports.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1j5rPNAJIyVubTMojKrp8A.png" /></figure><p>There is a lot still to improve in our data and our methodology, but one thing is clear: once you can see the carbon footprint <strong>day by day, site by site</strong>, it becomes much harder to ignore — and much easier to act on.</p><p><em>Originally published at </em><a href="https://tech.criteo.com/blog/carbon-footprint-bare-metal-infrastructure/"><em>https://tech.criteo.com</em></a><em> on September 16, 2026.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6d0302218eab" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/how-criteo-measures-bare-metal-infrastructure-carbon-6d0302218eab">How Criteo Measures Bare-Metal Infrastructure Carbon</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introducing CLEPR, our model for semantic understanding]]></title>
            <link>https://medium.com/criteo-engineering/introducing-clepr-our-model-for-semantic-understanding-d3984eed84c8?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/d3984eed84c8</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[adtech]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[retail-media]]></category>
            <category><![CDATA[semantic-search]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Tue, 02 Jun 2026 06:36:00 GMT</pubDate>
            <atom:updated>2026-06-02T06:36:00.599Z</atom:updated>
            <content:encoded><![CDATA[<p>Author: <a href="https://www.linkedin.com/in/paulcoursaux/">Paul Coursaux</a></p><p>At Criteo, retail media is about helping brands reach shoppers directly on retailers’ property, right at the digital shelf where purchase decisions are made. Through <a href="https://www.criteo.com/fr/platform/commerce-max/">CMAX</a>, our unified retail media platform, we connect advertisers to retailers’ audiences with <a href="https://www.criteo.com/blog/boost-your-brand-with-sponsored-products-ads/">Sponsored Products</a> that appear alongside native results in onsite search and browsing experiences.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4Mu5C3JTHFZqlssG1_zolw.png" /><figcaption>Sponsored products: Boost your brand with sponsored ads</figcaption></figure><p>In this context, the core problem we address is balancing two imperatives: delivering strong performance for advertisers while preserving a high‑quality, trustworthy shopping experience for retailers and their customers, as we define more precisely in our notions of <em>semantic relevance</em> and <em>outcome‑based relevance</em> below. We solve this by using our <a href="https://medium.com/criteo-engineering/criteo-boosts-ad-performance-with-latest-ai-advancements-2fc3d5f65f56">proprietary deep learning models</a> to ensure that Sponsored Products not only perform, but also accurately reflect each user’s intent and each retailer’s catalog.</p><p><a href="https://medium.com/criteo-engineering/criteo-boosts-ad-performance-with-latest-ai-advancements-2fc3d5f65f56">Criteo Boosts Ad Performance with Latest AI Advancements</a></p><p>In this article, we align with the accuracy and outcome‑based relevance framework introduced in our blog post on agentic recommendation systems, <a href="https://medium.com/criteo-engineering/leveraging-commerce-data-for-outcome-based-relevancy-in-agentic-recommendation-systems-717d62589ec3"><em>“Leveraging Commerce Data for Outcome-Based Relevancy in Agentic Recommendation Systems”</em></a>:</p><ul><li>accuracy or “semantic relevance” captures how well a product’s content matches the user’s query</li><li>“outcome‑based relevance” measures whether recommendations actually satisfy user needs as evidenced by real commerce signals such as clicks and purchases</li></ul><p><a href="https://medium.com/criteo-engineering/leveraging-commerce-data-for-outcome-based-relevancy-in-agentic-recommendation-systems-717d62589ec3">Leveraging Commerce Data for Outcome-Based Relevancy in Agentic Recommendation Systems</a></p><p>Building on Criteo’s ongoing investment in AI‑driven retail media, we have therefore focused on strengthening the accuracy engine behind Sponsored Products.</p><p>Advertising on retailer’s property comes with unique constraints. Unlike off-site advertising, where ads are displayed beyond the retailer’s own digital properties, for example, on external websites, search platforms, or social media, and optimization primarily targets performance metrics (e.g., click-through rate), onsite Sponsored Products must satisfy strict accuracy requirements to preserve the quality of the shopping experience. For instance, if a shopper searches for “red dress,” the ads shown alongside search results must be tightly aligned with that intent: different brands, styles, lengths, or sizes of red dresses are acceptable, but different-colored dresses, such as a yellow dress, as well as unrelated products like jeans, shoes, or handbags, are not.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*apkMGBG1qb45iWStfL0VnA.png" /><figcaption>On-site Sponsored Products must satisfy strict accuracy requirements to preserve the quality of the shopping experience</figcaption></figure><p>Ads are displayed alongside organic results in response to explicit user queries, making relevance to search intent non-negotiable. An inaccurate ad is not just inefficient: it creates annoyance and cognitive friction for shoppers, undermines the perceived quality of the retailer’s search results, and ultimately harms Criteo’s reputation with retailers by degrading the overall shopping experience.</p><p>To address this challenge, we have leveraged the latest advances in Language Modeling to deepen our understanding of search intent and product semantics. In our Agentic Recommendation Service blog post, we showed that outcome-based relevancy improves by 60% when fine‑tuned on commerce data. This builds on top of years of experience gained by optimizing search models to deliver optimal Retail Media experience to retailers, brands, and consumers. By combining our unique commerce data with these latest advances in language models, we ensure that Sponsored Products deliver strong performance while meeting the high bar of accuracy required in retail media.</p><h3>Introducing our Contrastive Language Embedding for Product Retrieval model</h3><p>Criteo’s retail media ecosystem operates at a truly global scale. We power Sponsored Products across multiple continents, languages, and retail verticals — from home improvement to fashion and consumer electronics. Our systems must understand billions of products across diverse catalogs, each shaped by local consumer behavior, regulatory environments, and cultural nuance.</p><p>Semantic understanding in this context is far from trivial. A simple query can carry very different meanings depending on geography or vertical. “Chips,” for example, refers to crisps in the US, but to fries in the UK; “biscuits” are soft, savory rolls in the US but sweet, crunchy cookies in Europe; and “Apple” may denote a smartphone brand in consumer electronics or a piece of fruit in grocery. These nuances are not edge cases; they are daily realities at a global scale.</p><p>As a result, we need a system capable of handling multiple languages while capturing cultural subtleties, domain-specific vocabulary, and local shopping intent. At the same time, it must operate reliably across billions of product listings and millions of daily queries without compromising latency.</p><p>To address these challenges, we developed CLEPR (Contrastive Language Embedding for Product Retrieval), a deep learning model designed to measure and optimize the semantic relevance between search keywords and product offerings.</p><p>While Large Language Models (LLMs) are powerful, they are not yet practical as the primary retrieval engine in our setting. On-site Sponsored Products must respond in a few tens of milliseconds and score billions of keyword–product pairs per day. Running an LLM at that frequency would be prohibitively expensive and too slow for real‑time retail search. Our CLEPR two-tower architecture addresses both problems at once. Similar to the DeepKNN system described in <a href="https://www.criteo.com/blog/optimizing-advertising-performance-with-advanced-machine-learning-and-vector-database-technology/),"><em>“Optimizing Advertising Performance with Advanced Machine Learning and Vector Database Technology”</em> </a>these vector representations place related items close together in a shared space, enabling fast similarity scoring with low latency and predictable costs at Criteo scale.</p><p><a href="https://www.criteo.com/blog/powering-ai-assisted-and-agentic-commerce-criteos-vision-for-the-next-ai-era-2/">Optimizing Advertising Performance with Advanced Machine Learning and Vector Database Technology | Criteo</a></p><p>We first experimented with <a href="https://en.wikipedia.org/wiki/Contrastive_Language-Image_Pre-training">CLIP</a>, which was the most popular text–image encoder at the time. While CLIP’s text encoder could theoretically represent keywords to retrieve products, this method is less ideal: keywords, typically broad and concise, differ significantly from the detailed and descriptive product titles and descriptions CLIP was trained on. Concretely, CLEPR is a two-tower neural network architecture featuring two specialized encoders: one for search keywords and another for products. Using contrastive learning, CLEPR learns to map semantically similar keywords and products into nearby points in a shared embedding space, enabling us to compute relevance scores that capture the true intent behind user searches.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6zap65Ytkd555MOYyVfNYg.png" /><figcaption>CLEPR Two-Tower architecture</figcaption></figure><h4>Training CLEPR: overcoming data sparsity and quality challenges</h4><p>Ideally, we would train CLEPR directly on organic search clicks: when a user searches for “running shoes” and then clicks a specific product page, this search‑to‑product interaction provides noisy but powerful evidence that the query and product are relevant to each other. By mining millions of such organic search‑to‑click events on retailers’ e‑commerce platforms, one could automatically build positive (keyword, product) training pairs without any manual labeling.</p><p>In practice, however, we do not collect these search‑to‑click events explicitly. We only see search events and product page visits as separate log events. To approximate the ideal signal, we reconstruct pseudo “organic clicks” by stitching together consecutive search events and subsequent product page views within the same session, using simple heuristics based on temporal proximity and session information. This reconstruction lets us train at scale on a natural behavioral signal, but it also makes the data inherently imperfect.</p><p>Once these heuristic search‑to‑product pairs are built, CLEPR learns to pull matched keyword–product pairs closer in a shared embedding space through contrastive learning.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Nc9-28j4vMrokok98LYgWw.png" /><figcaption>CLEPR training data</figcaption></figure><p>However, even after reconstruction, this click-based training signal remains imperfect. In particular, it can produce false positives where a product is clicked after a query, but the click does not actually reflect the user’s search intent. To limit this noisy traffic, we apply strict data‑quality filters. We retain only keyword–product pairs with high exclusivity scores (where a keyword consistently leads to clicks on the same product across sessions) and enforce hard thresholds on minimum volume and recency of interactions. These safeguards do not fix issues such as relevant products that are never clicked, but they substantially reduce spurious positive pairs and focus training on the most reliable keyword–product relationships.</p><p>Even with these filtering strategies, an important concern remains: a model trained on click data may learn to reproduce behavioral biases rather than true semantic relevance. Clicks are biased by search result positioning, product popularity, and user behavior patterns that don’t necessarily reflect semantic relevance. For this reason, we adopt a contrastive learning objective: instead of predicting clicks directly, the model learns to bring embeddings of matched keyword–product pairs closer together while pushing apart mismatched pairs within the same batch. This relative training signal encourages the model to capture discriminative semantic structure rather than absolute click propensity. For example, even if a keyword–product pair appears with 10,000 clicks in the training data, we only count it once, preventing popularity bias and keeping the focus on semantic meaning. To obtain an accurate measure of model quality, we evaluate CLEPR on human-labeled keyword-product pairs, where annotators provide explicit relevance judgments. These annotations serve as ground truth, allowing us to measure whether CLEPR genuinely understands relevance beyond the patterns in click data. CLEPR’s contrastive learning approach, trained purely on filtered click data, must learn rich semantic representations that generalize to these human-judged examples — a true test of whether the model has captured meaningful relevance signals rather than simply overfitting to click biases.</p><h4>CLEPR in production: bringing semantic guardrails to ranking at scale</h4><p>Deploying CLEPR in our ranking pipeline brought semantic relevance directly into production. Acting as a guardrail, CLEPR ensures that candidate products meet a minimum relevance threshold before performance optimization, reducing mismatches between search intent and ad placement.</p><p>We followed a deliberately careful, experimentation‑driven path to get there. CLEPR was first introduced behind strict safeguards, with successive A/B tests and phased rollouts to validate every change before expanding its impact. At each step, we closely monitored both semantic and outcome-based relevance, only scaling up when experiments demonstrated clear, consistent gains.</p><p>Operating CLEPR at the Criteo scale also required solving non‑trivial ML engineering challenges.</p><p>On the inference side, we must continuously re‑embed a catalog of about 2B products whenever product content changes, and still score over 10 billion keyword–product pairs per day across languages, verticals, and retailers. This calls for highly optimized offline inference pipelines and infrastructure that can run massive batches of CLEPR forward passes in a reasonable time, while keeping latency low and costs predictable.</p><p>Training at this scale introduces its own constraints. To keep up with the volume and diversity of training data, we rely on Distributed Data Parallel (DDP) training with Ray over a multi‑GPU cluster, allowing us to efficiently ingest billions of keyword–product pairs, stabilize optimization, and iterate quickly on new CLEPR versions.</p><p>After deployment, we saw a +6% increase in Click-Through Rate (CTR) and a sharp drop in relevance issues. CLEPR proves that embedding semantic understanding into production not only improves shopper trust but also drives measurable engagement gains.</p><h3>What’s next? Powering AI-Native Commerce</h3><p>By embedding CLEPR scores as features in our ad ranking and filtering pipelines, we create strong relevancy guardrails that improve user experience, increase ad engagement, and help advertisers reach the right audiences with the right products.</p><p>Building on this foundation, we are now extending CLEPR’s semantic intelligence into AI-native shopping experiences. In this context, we are exploring multimodality, where CLEPR can jointly leverage text, image, and other signals, and how it can best interoperate with Criteo’s Foundation Models to inject richer commerce knowledge into AI-native journeys.</p><p>Next, we’re extending this semantic intelligence into AI‑native shopping experiences. Building on Criteo’s agentic commerce vision described in <a href="https://www.linkedin.com/in/sherryd-smith">Sherry Smith</a>’s blogpost, “Why retail media rises in an agentic commerce era” (<a href="https://www.criteo.com/blog/why-retail-media-rises-in-an-agentic-commerce-era/),">Why retail media rises in an agentic commerce era | Criteo</a> we are designing conversational shopping assistants on retailers’ properties, where commerce shifts from keywords to rich, natural‑language interactions. CLEPR ensures products surfaced in these experiences are tightly aligned with what shoppers actually mean.</p><p><a href="https://www.criteo.com/blog/why-retail-media-rises-in-an-agentic-commerce-era/">Why retail media rises in an agentic commerce era | Criteo</a></p><p>At the same time, our Agentic Commerce Recommendation Service connects AI shopping assistants directly to merchant inventory through Criteo’s commerce intelligence. CLEPR translates open-ended queries into transaction-ready recommendations grounded in real shopping signals — not just catalog metadata.</p><p>As commerce shifts from keywords to conversations, CLEPR is evolving from a ranking feature into a foundational semantic layer for AI-driven discovery.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d3984eed84c8" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/introducing-clepr-our-model-for-semantic-understanding-d3984eed84c8">Introducing CLEPR, our model for semantic understanding</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What Stood Out at ICLR 2026: Criteo Papers and Research Highlights]]></title>
            <link>https://medium.com/criteo-engineering/what-stood-out-at-iclr-2026-criteo-papers-and-research-highlights-3b54dba09447?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/3b54dba09447</guid>
            <category><![CDATA[iclr]]></category>
            <category><![CDATA[llm]]></category>
            <category><![CDATA[research]]></category>
            <category><![CDATA[agentic-ai]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Thu, 28 May 2026 06:31:00 GMT</pubDate>
            <atom:updated>2026-05-28T06:31:00.635Z</atom:updated>
            <content:encoded><![CDATA[<h4>Authors: <a href="https://www.linkedin.com/in/ahmed-ben-yahmed-a590ab203/">Ahmed Ben Yahmed</a>, <a href="https://www.linkedin.com/in/antoine-schnepf-603a3b16a/">Antoine Schnepf</a>, <a href="https://www.kkassab.com/">Karim Kassab</a>, and <a href="https://www.linkedin.com/in/melissa-tamine/">Mélissa Tamine</a>.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CyA5UTR5D3UTUKxwDIz0pw.jpeg" /></figure><p>The 14th International Conference on Learning Representations (<a href="https://iclr.cc/">ICLR 2026</a>) was held from April 23 to 27, 2026, at the Riocentro Convention and Event Center in Rio de Janeiro, Brazil. It was the first time the conference made its way to South America. As one of the three flagship venues in machine learning, ICLR gathers each year several thousand researchers and practitioners from academia and industry around the latest advances in representation learning.</p><p>This edition was particularly vibrant, with a strong emphasis on reasoning and agentic LLMs, world models, multimodal foundation models, diffusion-based generation, and modern 3D and 4D scene representations. The setting itself, sitting between the conference center, the beach, and the Pão de Açúcar, added a uniquely warm and collaborative atmosphere to the technical program.</p><h3>Our Contributions</h3><h4>Contextual Multi-Armed Bandits with Minimum Aggregated Revenue Constraints</h4><p><strong><em>Authors:</em></strong><em> Ahmed Ben Yahmed, Marc Abeille, Hafedh El Ferchichi, Vianney Perchet.</em></p><p>Our paper addresses an open question in the literature on the exploration–exploitation dilemma for contextual bandits with minimum revenue guarantees, where the learner must simultaneously maximize cumulative reward and ensure a minimum aggregated revenue for each arm across contexts. Prior work shows that in the non-contextual case, multi-armed bandits with revenue constraints can achieve fast rates for both regret and constraint violation; however, in the contextual case, existing methods rely predominantly on primal-dual approaches that yield only √T guarantees on both metrics. We establish a sharper trade-off between regret and constraint violation through two algorithms, <strong>OLP</strong> and <strong>OPLP</strong>, which target two opposite points on the Pareto frontier, one prioritizing regret, the other prioritizing constraint satisfaction. Our results are essentially tight, matching the lower bounds we derive.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zgI9HNg5lr5swxjQkhIK3A.jpeg" /><figcaption><em>Ahmed Ben Yahmed</em></figcaption></figure><p><strong>Main takeaways</strong></p><ul><li><strong>Pareto trade-off:</strong> <strong>OLP</strong> achieves polylogarithmic regret with O(√T) constraint violation, while <strong>OPLP</strong> flips this, polylogarithmic constraint violation with O(√T) regret, giving practitioners two operating points on the performance/constraint-satisfaction frontier.</li><li><strong>Novel gap notion:</strong> We define the sub-optimality gap <strong>ρ*</strong> via the LP’s active constraint set rather than reward differences, providing a refined complexity measure that generalizes naturally to other globally-constrained bandit problems.</li><li><strong>Lower bound rules out free exploration:</strong> We establish a matching Ω(√T) lower bound, and prove that whenever K &gt; 2 and |C| &gt; 1, the optimal allocation assigns zero probability to at least one (arm, context) pair. This refutes the “free exploration” property exploited in non-contextual settings (Baudry et al., 2024), restoring the classical exploration-exploitation tradeoff.</li></ul><p><a href="https://openreview.net/forum?id=qbhPULMkuQ">Contextual Multi-Armed Bandits with Minimum Aggregated Revenue...</a></p><h4>Fused-Planes: Why Train a Thousand Tri-Planes When You Can Share?</h4><p><strong><em>Authors:</em></strong><em> Karim Kassab*, Antoine Schnepf*, Jean-Yves Franceschi, Laurent Caraffa, Flavian Vasile, Jeremie Mary, Andrew Comport†, Valérie Gouet-Brunet† (*,† equal contribution).</em></p><p>Tri-Planar NeRFs have become the go-to representation for large-scale 3D modeling, as their 2D planar structure makes them directly compatible with standard image-based architectures. Yet, the prerequisite step of training a Tri-Plane <em>per object</em> is computationally wasteful: each scene is fit in isolation, ignoring the rich structural similarities that exist within an object class. Our paper, <em>Fused-Planes</em>, addresses exactly this inefficiency.</p><p>We introduce a novel planar representation that decomposes each object into two complementary components: a <em>micro</em> plane that captures object-specific details, and a <em>macro</em> plane obtained as a learned linear combination over a small set of globally shared <em>base planes</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8jb8NVvNit9NdPaY90XOPw.jpeg" /><figcaption><em>Antoine Schnepf &amp; Karim Kassab</em></figcaption></figure><p><strong>Main takeaways</strong></p><ul><li><strong>State-of-the-art efficiency among planar representations:</strong> 7.2× faster training and 3.2× lower per-object memory footprint than Tri-Planes, while improving rendering quality.</li><li><strong>Ultra-lightweight variant (Fused-Planes-ULW):</strong> 1875× smaller per-object footprint than Tri-Planes, with only minor quality degradation, opening the door to truly large-scale Tri-Plane datasets.</li><li><strong>Design insight:</strong> the latent space and the micro/macro decomposition are <em>both</em> essential. Each in isolation underperforms; together, they provide a framework with similar or better quality than Tri-Planes.</li></ul><p><a href="https://fused-planes.github.io/">Fused-Planes</a></p><h4>On the Impact of the Utility in Semivalue-based Data Valuation</h4><p><strong><em>Authors:</em></strong><em> Mélissa Tamine, Benjamin Heymann, Maxime Vono, Patrick Loiseau</em></p><p>Our paper studies a practical but often overlooked question in semivalue-based data valuation: <em>how much do the resulting data rankings depend on the utility function chosen by the practitioner?</em> In data valuation, each data point is assigned a score reflecting its contribution to a downstream task. These scores are then typically used to rank examples, for instance, to remove harmful samples, select a smaller training subset, or reason about the contribution of different data providers.</p><p>The issue is that semivalue-based methods, such as Data Shapley, Beta Shapley, or Data Banzhaf, do not produce values in isolation: they depend on a utility function. If small changes in the utility lead to completely different rankings of the data points, then the valuation is hard to interpret and may not be reliable enough for downstream decisions.</p><p>We address this problem by introducing a geometric view of utility dependence. For a fixed semivalue, we embed each data point into a low-dimensional space, which we call the dataset’s <strong>spatial signature</strong>. In this space, choosing a utility corresponds to choosing a direction, and the value of a data point is obtained by projecting its embedding onto that direction. Therefore, changing the utility becomes a geometric rotation, and robustness becomes the question: <em>how far can we rotate the utility direction before the ranking of data points changes significantly?</em></p><p>Building on this representation, we define a robustness metric that quantifies how stable the data-value ranking is under changes in the utility. Empirically, we show that this robustness metric agrees with classical rank-correlation analyses: when rankings under different utilities have low Kendall or Spearman correlation, our robustness score is also low. We also observe that Banzhaf often yields more robust rankings than Shapley or Beta Shapley, and we provide geometric and analytical insight into why this happens.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uiHh0BBQg8HVeA-wcK0Idg.jpeg" /><figcaption><em>Mélissa Tamine</em></figcaption></figure><p><strong>Main takeaways</strong></p><ul><li><strong>Data valuation should not be used blindly.</strong> Even when the valuation method is fixed, changing the utility function can substantially change the ranking of data points.</li><li><strong>Robustness to utility choice is a necessary diagnostic.</strong> Before using data values for cleaning, subset selection, or partner-level compensation, practitioners should check whether the ranking is stable or mostly an artifact of the chosen metric.</li><li><strong>The spatial signature gives an interpretable geometric picture.</strong> It turns utility dependence into a projection problem: data points are embedded in a space, utilities are directions, and rankings are induced by projections.</li><li><strong>The proposed robustness metric makes this diagnostic operational.</strong> It yields a normalized score between 0 and 1, making it easy to identify contexts where semivalue-based data valuation is reliable and those where it is too sensitive to trust.</li><li><strong>Banzhaf appears more robust in many settings.</strong> Across several datasets and utility families, Banzhaf often yields more stable rankings, which can be explained by the greater collinearity among its spatial signatures.</li></ul><p><a href="https://medium.com/criteo-engineering/on-the-impact-of-the-utility-in-semivalue-based-data-valuation-fd40b59a813b">On the Impact of the Utility in Semivalue-based Data Valuation</a></p><h3>Papers Highlighted By The Team</h3><h4>Can Small Training Runs Reliably Guide Data Curation? Rethinking Proxy-Model Practice?</h4><p><strong><em>Authors:</em></strong><em> Jiachen T. Wang, Tong Wu, Kaifeng Lyu, James Zou, Dawn Song, Ruoxi Jia, Prateek Mittal</em></p><p>This paper studies a very practical question in large-scale model training: <em>can small proxy models reliably guide data curation decisions for larger target models?</em> In many industrial and frontier AI pipelines, data teams cannot train a full-scale model for every candidate data recipe (i.e., candidate training datasets resulting from different data curation choices). Instead, they train smaller proxy models on different curated datasets, compare their validation performance, and use this comparison to decide which data recipe should be used at scale.</p><p>The paper argues that the standard proxy-model protocol has a subtle but important flaw. Most proxy experiments train all candidate datasets with the same fixed hyperparameters, often in the name of fairness. However, in realistic large-scale training, the final model is not trained with a fixed generic configuration: hyperparameters are tuned for the selected dataset. Therefore, the right objective is not to find the dataset that performs best under one arbitrary proxy configuration, but the dataset that performs best after data-specific hyperparameter tuning. The authors show that proxy rankings can be fragile: even small changes in learning rate can flip the relative ranking of data recipes. This means that a data recipe that looks best under one proxy configuration may not be the one with the best potential after tuning at the target scale. To address this, they propose a simple patch: train proxy models with tiny learning rates. Their intuition is that, in this regime, training dynamics are dominated by first-order gradient alignment between the training data and the validation distribution, while higher-order effects that can scramble rankings are reduced.</p><p>Empirically, they evaluate 23 data recipes covering domain composition, filtering, deduplication, and major pretraining corpora across the GPT-2, Pythia, and OPT model families, ranging from 70M to 1B parameters. The results are strong: using tiny learning rates significantly improves the agreement between proxy-model rankings and tuned target-model rankings.</p><p><strong>Main takeaways</strong></p><ul><li><strong>Proxy-model data curation is not automatically reliable.</strong> Small training runs can give misleading recommendations if the proxy configuration is fixed arbitrarily.</li><li><strong><em>Fair</em> fixed hyperparameters can be unfair to datasets.</strong> Different data recipes may require different optimal learning rates or training configurations, so comparing them under a single fixed setup can favor the dataset that happens to match it.</li><li><strong>Learning rate is a major source of ranking instability.</strong> Small changes in learning rate can change which data recipe appears best, even at the same proxy scale.</li><li><strong>Tiny learning rates provide a simple, practical fix.</strong> Training proxy models with learning rates one or two orders of magnitude below standard choices makes rankings more stable and more transferable to tuned larger models.</li><li><strong>This is highly relevant for data-centric AI at scale.</strong> The paper gives a concrete warning: when using small models to guide expensive data decisions, the evaluation protocol matters as much as the data recipe itself.</li></ul><p><a href="https://arxiv.org/abs/2512.24503">Can Small Training Runs Reliably Guide Data Curation? Rethinking Proxy-Model Practice</a></p><h4>Convergence of an Actor-Critic Gradient Flow for Entropy-Regularised MDPs in General Spaces</h4><p><strong><em>Authors:</em></strong><em> Denis Zorba, David Šiška, Lukasz Szpruch.</em></p><p>This paper proves the stability and global convergence of a two-timescale actor-critic gradient flow for infinite-horizon, entropy-regularised Markov Decision Processes (MDPs) with <strong>continuous (Polish) state and action spaces</strong> under linear function approximation. The critic is updated via Temporal Difference (TD) learning on a faster timescale, while the actor is updated via Policy Mirror Descent, which in the continuous-time limit becomes an approximate Fisher–Rao gradient flow. The key technical challenge is that in general action spaces the KL divergence is unbounded (unlike the finite-action case where it is bounded by log|A|), making finite-time blow-up a real risk. The authors develop a Lyapunov-based framework combining convex analysis over both Euclidean and measure spaces to rule this out and establish exponential convergence to the optimal regularised value function.</p><p><strong>Main takeaways</strong></p><ul><li><strong>Timescale separation is essential:</strong> The critic must run on a faster timescale than the actor for both stability and convergence; the authors show ηₜ = η₀·exp(k₁t) suffices.</li><li><strong>Entropy regularisation is necessary, not optional:</strong> In general action spaces, the KL term in standard mirror-descent bounds is typically infinite without regularisation, since optimal unregularised policies are mixtures of Diracs. Regularisation forces the optimal policy to have full support, making the analysis tractable.</li><li><strong>Convergence rate:</strong> The actor-critic flow achieves exponential convergence to the optimal regularised policy for all discount factors γ ∈ (0,1), up to an error term that decays exponentially when the critic runs sufficiently fast.</li><li><strong>Stability result:</strong> Under mild assumptions, KL(πₜ(·|s)|µ)² grows at most as a₁·exp(a₂t), preventing finite-time blow-up of either the policy or the critic parameters.</li></ul><p><a href="https://arxiv.org/abs/2510.14898">Convergence of actor-critic for entropy regularised MDPs in general action spaces</a></p><h4>Best-of-N through the Smoothing Lens: KL Divergence and Regret Analysis</h4><p><strong><em>Authors:</em></strong><em> Gholamali Aminian, Idan Shenfeld, Amir R. Asadi, Ahmad Beirami, Youssef Mroueh</em></p><p>This paper provides a theoretical analysis of <strong>Soft Best-of-N (SBoN)</strong>, a smoothed variant of Best-of-N (BoN) sampling for LLM alignment. Instead of deterministically picking the highest proxy-reward response from N samples, SBoN samples probabilistically via a softmax with inverse temperature β (recovering BoN as β → ∞, and the reference policy as β → 0). The authors derive finite-sample upper bounds on KL divergence between SBoN and the reference policy, and both upper and lower bounds on the regret gap versus the optimal policy. A novel <em>tilted error</em> metric ε_β,r is introduced to track reward misspecification, interpolating between MSE and L∞ error.</p><p><strong>Main takeaways</strong></p><ul><li><strong>Smoothing mitigates reward hacking:</strong> When the proxy-reward model is weak, BoN overoptimizes as N grows, while SBoN’s stochasticity guards against this failure.</li><li><strong>Optimal finite β exists:</strong> Under overoptimization, there is a sweet spot β* where SBoN provably achieves a tighter regret bound than BoN.</li><li><strong>Improved theory:</strong> Unlike Huang et al. (2025), the BoN regret bound here stays finite when overoptimization vanishes, and the framework uses calibrated rewards.</li><li><strong>Empirical validation:</strong> Experiments with Olmo-2 1B on the Attaq harmfulness dataset confirm that SBoN outperforms BoN when paired with weak proxy reward models (Beaver 7B, Tulu-v2.5), while both perform similarly with a strong reward model (ArmoRM 8B).</li><li><strong>Practical edge:</strong> SBoN matches the performance of more complex methods like InferenceTimePessimism while requiring only a single hyperparameter.</li></ul><p><a href="https://arxiv.org/abs/2507.05913">Best-of-N through the Smoothing Lens: KL Divergence and Regret Analysis</a></p><h4>Depth Anything 3: Recovering the Visual Space from Any Views</h4><p><strong><em>Authors:</em></strong><em> Haotong Lin*, Sili Chen*, Jun Hao Liew*, Donny Y. Chen*, Zhenyu Li, Yang Zhao, Sida Peng, Hengkai Guo, Xiaowei Zhou, Guang Shi, Jiashi Feng, Bingyi Kang*†.</em></p><p>Depth Anything 3 (DA3) pursues a <em>minimal modeling</em> strategy for 3D visual perception. Stepping back from task-specific designs (monocular depth, SfM, MVS, SLAM), the authors ask two central questions: is a single set of prediction targets enough, and is a plain transformer enough?</p><p>The paper answers yes to both. DA3 predicts geometry from any number of input views, with or without known camera poses, using a plain pretrained DINO backbone (no architectural specialization) and a single depth-ray prediction target that sidesteps the orthogonality constraints of rotation matrices by representing camera pose implicitly through a per-pixel ray map. Multi-view consistency is obtained through an input-adaptive cross-view self-attention mechanism, and diverse training data is unified via a teacher-student paradigm in which a synthetic-data-trained monocular teacher generates high-quality pseudo-depth labels for real-world captures.</p><p>On the paper’s newly proposed visual geometry benchmark, DA3 sets a new state of the art, improving over VGGT in camera pose accuracy and in geometric accuracy, while also surpassing Depth Anything 2 on monocular depth. The paper further introduces a feed-forward novel view synthesis (FF-NVS) benchmark and reports two findings: (i) fine-tuning DA3 with an additional DPT head for FF-NVS substantially outperforms highly specialized task-specific models, and (ii) enhanced geometric reconstruction capability directly correlates with improved FF-NVS performance, establishing DA3 as a strong backbone for this task.</p><p><a href="https://arxiv.org/abs/2511.10647">Depth Anything 3: Recovering the Visual Space from Any Views</a></p><h4>Sharp Monocular View Synthesis in Less Than a Second</h4><p><strong><em>Authors:</em></strong><em> Lars Mescheder, Wei Dong, Shiwei Li, Xuyang Bai, Marcel Santos, Peiyun Hu, Bruno Lecouat, Mingmin Zhen, Amaël Delaunoy, Tian Fang, Yanghai Tsin, Stephan R. Richter, Vladlen Koltun.</em></p><p>SHARP (Single-image High-Accuracy Real-time Parallax) addresses photorealistic view synthesis from a single image. The paper targets three problems: sub-second synthesis on a standard GPU, real-time photorealistic rendering from nearby views, and a metric 3D representation with absolute scale that can be coupled to a physical headset. Given an input image, SHARP regresses a high-resolution 3D Gaussian representation (around 1.2M Gaussians, parameterized over a 768×768 grid with two layers) via a single feed-forward pass.</p><p>The architecture consists of four learnable modules: a pretrained Depth Pro encoder, a depth decoder that outputs two distinct depth layers, a learned depth adjustment module, and a Gaussian decoder, and is trained end-to-end for view synthesis fidelity. Two additional contributions are emphasized: a carefully designed loss configuration that prioritizes view synthesis quality while suppressing common artifacts, and the depth adjustment module, which resolves depth ambiguities during training and is identified by the authors as a fundamental challenge for regression-based view synthesis.</p><p>Across multiple held-out datasets in the zero-shot regime, SHARP reduces LPIPS and DISTS relative to the strongest prior method, synthesizes three orders of magnitude faster than that baseline (and two to three orders of magnitude faster than diffusion-based systems more broadly), and supports rendering at more than 100 FPS on a standard GPU.</p><p><a href="https://apple.github.io/ml-sharp/">SHARP</a></p><h4>Lyra: Generative 3D Scene Reconstruction via Video Diffusion Model Self‑Distillation</h4><p><strong><em>Authors:</em></strong><em> Sherwin Bahmani, Tianchang Shen, Jiawei Ren, Jiahui Huang, Yifeng Jiang, Haithem Turki, Andrea Tagliasacchi, David Lindell, Zan Gojcic, Sanja Fidler, Huan Ling, Jun Gao and Xuanchi Ren.</em></p><p>Lyra addresses the challenge of generating realistic 3D scenes from very limited input. Traditional 3D reconstruction methods usually require many camera views and precise camera positions, while video diffusion models can generate realistic videos but do not produce explicit 3D structures.</p><p>The main idea behind Lyra is to transfer the 3D understanding learned by a video diffusion model into a 3D Gaussian Splatting (3DGS) representation using a teacher–student training setup. Instead of relying on real multi-view datasets, the model is trained entirely on synthetic views generated by the diffusion model itself.</p><p>One of the most interesting aspects of Lyra is its flexibility: it can generate 3D scenes from a text prompt, a single image, or even a short video, and it also supports dynamic scene generation over time. The paper reports state-of-the-art performance on both static and dynamic 3D scene generation tasks.</p><p><a href="https://research.nvidia.com/labs/toronto-ai/lyra/">Lyra: Generative 3D Scene Reconstruction via Video Diffusion Model Self-Distillation</a></p><h4>EA3D: Event‑Augmented 3D Diffusion for Generalizable Novel View Synthesis</h4><p><strong><em>Authors: </em></strong><em>Wangbo Yu, Chaoran Feng, Jianing Li, Aofan Zhang, Zhenyu Tang, Mingyi Guo, Wei Zhang, Zhengyu Ma, Li Yuan and Yonghong Tian.</em></p><p>EA3D focuses on generating new camera views in challenging situations with fast camera motion, where traditional NeRF and 3D Gaussian Splatting methods often fail because they rely on sparse RGB images.</p><p>The paper combines standard RGB frames with data from event cameras, which capture rapid brightness changes and motion information much more effectively. Instead of optimizing each scene independently, EA3D uses a diffusion-based framework that learns to combine appearance information from RGB images with geometric information extracted from event streams.</p><p>A key contribution is the <strong>EA-Renderer</strong>, which builds 3D scene features from both RGB and event data, allowing the model to generate realistic and temporally consistent novel views. The authors also introduce a new large-scale dataset, <strong>Event-DL3DV</strong>, designed specifically for this task.</p><p>What is particularly interesting is that EA3D achieves strong generalization across different scenes while handling difficult motion conditions much better than previous approaches.</p><p><a href="https://openreview.net/forum?id=YwawhlWdtm">EA3D: Event-Augmented 3D Diffusion for Generalizable Novel View...</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3b54dba09447" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/what-stood-out-at-iclr-2026-criteo-papers-and-research-highlights-3b54dba09447">What Stood Out at ICLR 2026: Criteo Papers and Research Highlights</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What the EPM Role Looks Like in Practice at Criteo]]></title>
            <link>https://medium.com/criteo-engineering/what-the-epm-role-looks-like-in-practice-at-criteo-0944ea18cf0f?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/0944ea18cf0f</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[program-manager]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[way-of-working]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Tue, 26 May 2026 06:31:00 GMT</pubDate>
            <atom:updated>2026-05-26T06:31:00.613Z</atom:updated>
            <content:encoded><![CDATA[<p>Authors: <a href="https://www.linkedin.com/in/auriane-barbalat-754a1534/">Auriane Bonmarchand</a>, <a href="https://www.linkedin.com/in/carolina-tealdo/?locale=en">Carolina Tealdo</a> &amp; <a href="https://www.linkedin.com/in/mnguyen10/">Minh-Quyên NGUYEN</a></p><p>In our previous <a href="https://medium.com/criteo-engineering/at-the-heart-of-delivery-what-engineering-program-managers-do-at-criteo-d7fc19896acc">post</a>, we explained the Engineering Program Manager role at Criteo at a high level: EPMs sit at the intersection of business ambition, technical reality, and execution, helping complex cross-team initiatives move from intent to delivery. But if you are considering this role, that high-level description is only the beginning. The more interesting question is: what does the role actually feel like in practice?</p><p>For us, the answer comes down to one simple idea: <strong>an EPM drives projects to completion in complex environments</strong>.</p><p>That means aligning people who do not naturally work together, maintaining momentum over time, and ensuring the work converges toward a coherent outcome. A big part of the role is spotting inconsistencies early, whether they are in priorities, understanding, ownership, or execution, and addressing them before they slow everything down. And underneath all of that, there is one principle that matters especially: <strong>transparency</strong>. Because consistency across teams only happens when people have access to the same information, the same context, and the same reality.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BuNH8MOuTFVhXlvgyPLsmQ.png" /></figure><p>To illustrate that, we will use two very different examples:</p><ul><li><strong>Audience Agent</strong>, a product-facing initiative with high ambiguity, fast iteration, and many cross-functional dependencies</li><li><strong>Dallas datacenter migration</strong>, a large infrastructure transformation with strict operational constraints and a strong need for sequencing, risk visibility, and production safety</li></ul><p>On the surface, they have very little in common. One is a product-facing initiative in an emerging space, with fast learning cycles and evolving technical approaches. The other is a large infrastructure transformation, with strict operational constraints and a strong need for sequencing, readiness, and production safety. Through these two examples, we’ll look at how projects with very different dynamics and constraints still rely on the EPM role in similar ways: creating clarity, enabling collaboration, and helping teams move forward together.</p><h3>Audience Agent: bringing structure to an emerging space</h3><p>The <strong>Audience Agent</strong> project explored a new way of interacting with customer audience insights and segmentation data, using emerging agent-like systems to make complex workflows more intuitive and automated. The goal was to empower clients with an AI-driven experience that makes audience building smarter, faster, and more streamlined — enabling marketers to explore insights, create segments, and manage audiences through more natural and efficient interactions. More details are available in this article <a href="https://www.criteo.com/blog/introducing-agentic-audiences/"><em>Introducing Agentic Audiences</em></a>, and in the <a href="https://www.youtube.com/watch?v=tt0RJipZZXs">product demo showcasing how the agent works in practice</a>.</p><p>From the start, there were strong product signals. We had clear use cases and a good understanding of user needs. But on the execution side, much more was still open. Some of the features had never been built at Criteo before, there were no established internal guidelines for this kind of agentic experience, and the technical approach was still evolving.</p><p>So the project started with a familiar EPM challenge: <strong>clear intent, but high uncertainty</strong>.</p><p>Our ambition was not to wait until everything was perfectly defined. It was to deliver fast, learn fast, iterate, and keep moving.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BrsI4Q2_Lnc4y7G2wUE5kg.png" /><figcaption>The Audience Agent is available for all Criteo clients in <a href="https://marketing.criteo.com/audience-manager">CGrowth platform</a></figcaption></figure><h4>Bringing structure without losing flexibility</h4><p>One of the most important things an EPM does is turn fuzzy ideas into a delivery shape that teams can actually work with. On this project, which started with a kickoff bringing together all the key stakeholders. This was not just about reviewing requirements. It was about creating shared clarity on how we would work together, what we were trying to achieve first, and where we needed to stay flexible. From there, we structured the project into three milestones. The first two had clear goals and deliverables. The third was intentionally left more open. That was a deliberate choice: we wanted to reach an MVP within the quarter, while also keeping room to adapt based on feedback and learning.</p><p>That balance matters a lot in EPM work.</p><blockquote><strong><em>Structure is necessary, but over-structuring too early can slow a project down instead of helping it</em></strong><em>.</em></blockquote><h4>Making a cross-functional team work as one team</h4><p>Another key challenge was that success depended on close collaboration across domains that do not always work tightly together. The project brought together contributors from backend, frontend, testing, UX, AI research, AI platform, agentic core, and product. Each group had its own expertise, constraints, and perspective. None of them alone could make the project successful.</p><p>This is exactly where the EPM role becomes very concrete.</p><p>The EPM job was not to replace the expertise of those teams. It was to create the conditions for that expertise to come together effectively: making sure the right people were involved at the right time, that dependencies were visible, that the work was framed in a way people could act on, and that decisions did not get lost in the gaps between teams.</p><h4>What the role looked like in practice</h4><p>On a project like this, the day-to-day work of an EPM is rarely one thing. It is a mix of structuring, facilitating, connecting, challenging, and adjusting.</p><p>That meant:</p><ul><li>framing the work and the milestones</li><li>collecting needs across teams</li><li>identifying the right contributors</li><li>aligning stakeholders around a shared delivery plan</li><li>putting in place the right artifacts, rituals, and tracking</li><li>keeping the broader stakeholder group informed</li><li>surfacing cross-team impacts early</li><li>spotting inconsistencies across workstreams</li><li>challenging priorities when needed</li><li>unblocking collaboration issues</li><li>protecting momentum over time</li></ul><p>For the Audience Agent project, we set up a dedicated cross-functional squad composed of people from different teams. While they worked almost exclusively on this scope, they still belonged to and participated in the dynamics of their respective teams. We also used a cadence that matched the project’s needs: squad stand-ups twice a week, deep dives on specific topics, and a weekly sync with a broader group of stakeholders.</p><p>That cadence was chosen to match the project’s level of dependency, urgency, and ambiguity, not to follow a supposedly “correct” process..</p><p>This is another important part of the EPM role at Criteo: <strong>we create structure, but we do not force a one-size-fits-all model</strong>. In the broader EPM role, the goal is to support ways of working that serve the teams and the program, not the other way around.</p><h4>Launch is not the finish line</h4><p>We reached the initial goal of delivering an MVP within the quarter. But on this kind of project, launch is not the end. It is the start of the next cycle.</p><p>From there, the work continued through iteration: incorporating user feedback, refining priorities, and building on what the first milestones had taught us.</p><p>That is part of what makes projects like this so interesting for an EPM. You are operating in an environment with high ambiguity, strong dependencies, and fast learning loops. The role is not just to keep a plan on track. It is to help the project keep making coherent progress as reality evolves.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eyY4dQlGVyyMcmQxPUUhxg.png" /></figure><h4>Adapting the level of involvement</h4><p>One aspect of the role that is often underestimated is how much you need to adapt your level of involvement.</p><p>Sometimes you are deeply embedded with the team, helping structure discussions and move decisions forward. Sometimes you step back and simply monitor progress. Sometimes you only intervene when something starts to drift.</p><p>The goal is not to be everywhere but to step in where and when it matters most.</p><p>That is also why the role is hard to reduce to a checklist. EPM work is contextual. It depends on the maturity of the teams, the shape of the project, the level of ambiguity, and where the biggest delivery risk sits at a given moment.</p><h3>Dallas datacenter migration: making a complex infrastructure transformation deliver safely</h3><p>If Audience Agent shows the EPM role in a fast-moving product and innovation space, the <strong>Dallas datacenter migration</strong> shows the same role in a completely different context: infrastructure transformation at scale.</p><p>Criteo operates and manages its own on-premises infrastructure across multiple datacenters in Europe, Asia, and America. In that context, this project is about moving out of the current Dallas datacenter and opening a new Dallas setup aligned with newer Criteo standards for architecture, resiliency, power efficiency, network access, and new server generations, while keeping production stable during the transition. This is not a simple move. It is a real infrastructure evolution: opening the new room, opening the new network hub, interconnecting the environments, migrating workloads, and eventually vacating the legacy site.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4HLwxRPHLdDyxqBRIb5M5A.png" /></figure><h4>Why is such a delivery challenge</h4><p>What makes this project particularly interesting is that complexity is everywhere, but not always in the same form as on a product-focused project.</p><p>Here, complexity comes from architecture choices, migration patterns, operational safety, procurement and readiness dependencies, and the sheer number of teams that need to move in the right order.</p><p>The migration approach itself is designed to reduce disruption. Instead of doing a large, customer-visible traffic cutover, the setup keeps the carrier hotel as the stable connection point, and allows work to be shifted server by server gradually into the new environment, making it transparent for clients (both internal and external).</p><p>At the same time, the project introduces updated network standards and new server generations to improve resilience, reduce power and space usage, and prepare for future infrastructure needs.</p><p>And all of this needs to happen without disturbing production in the current datacenter, and it must be completed and stabilized well before the end-of-year peak season.</p><h4>What the EPM adds in practice</h4><p>On this kind of initiative, the EPM does not replace technical ownership. The technical decisions stay in the experts’ hands. The role of the EPM is to create the conditions for successful delivery: ensuring the project progresses against the agreed planning, making dependencies visible as early as possible, identifying and communicating that risks along with mitigation plans, and keeping teams aligned throughout a long and complex execution path.</p><p>A lot of that work is almost invisible when things go well.</p><p>But behind that apparent continuity, there is a lot of coordination:</p><ul><li>defining what “done” means at each stage</li><li>aligning multiple technical roadmaps</li><li>sequencing readiness and migration activities</li><li>making small but critical dependencies visible early</li><li>clarifying which workloads can move transparently and which require more preparation</li><li>maintaining visibility on the critical path</li><li>communicating risks and mitigation actions clearly</li><li>keeping stakeholders aligned without centralizing every technical conversation</li></ul><p>This project also shows something important about EPM work: <strong>shared clarity is already a delivery enabler</strong>.</p><p>When many teams, dependencies, and risks have to move together, progress does not happen automatically. It needs structure, visibility, and continuous alignment.</p><h3>Two very different projects, one same role</h3><p>At first glance, these two projects do not look similar at all. One is about experimenting with a new user-facing agent experience in a fast-moving environment. The other is about evolving physical infrastructure and migration architecture without disturbing production. One needs flexibility to learn and iterate quickly. The other needs sequencing, readiness management, and careful operational control. And yet, despite these differences, the core expectations of the EPM role remain remarkably similar.</p><p>In both projects, the value of the EPM is to make delivery possible across complexity.</p><p>That means:</p><ul><li>creating structure without removing flexibility</li><li>making dependencies visible before they become blockers</li><li>maintaining transparency across teams</li><li>adapting the level of involvement to what the project needs</li><li>creating momentum and making experts makes the best technical decisions</li></ul><p>This is also fully aligned with how we describe the EPM role at Criteo more broadly: EPMs help turn fuzzy ideas into scoped programs, surface dependencies and risks early, communicate progress transparently, and lead through influence rather than through formal authority.</p><blockquote><strong>EPMs do not replace technical ownership. They create the conditions for expert teams to deliver together</strong>.</blockquote><h3>What this means if you are considering the role</h3><p>For us, this is one of the most rewarding things about being an EPM at Criteo. You are not there to be in the spotlight. You are there to help complex things actually happen.</p><p>You work close enough to the technical side to understand the real constraints, and close enough to the broader program view to keep the whole system moving coherently. That position is demanding because ambiguity, dependencies, and trade-offs are constant. But it is also what makes the role so engaging.</p><p>If you enjoy turning messy situations into actionable plans, helping teams align without flattening their expertise, and driving progress in environments where many things are moving at once, then this role can be a very good fit.</p><p>Because in the end, whether the project is innovative, operational, product-facing, or deeply infrastructural, the heart of the job stays the same: <strong>turning complexity into alignment, and alignment into execution.</strong></p><p>If this article inspires you and sounds like the kind of challenge you’d enjoy, keep an eye on EPM opportunities on our <a href="https://careers.criteo.com/en/jobs/?keyword=&amp;team=Engineering&amp;pagesize=10#results">careers page</a> 👇</p><p><a href="https://careers.criteo.com/en/jobs/?keyword=&amp;team=Engineering&amp;pagesize=10#results">Your next adventure awaits!</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0944ea18cf0f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/what-the-epm-role-looks-like-in-practice-at-criteo-0944ea18cf0f">What the EPM Role Looks Like in Practice at Criteo</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Our Experience at Devoxx France 2026]]></title>
            <link>https://medium.com/criteo-engineering/our-experience-at-devoxx-france-2026-8aaf3044f28f?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/8aaf3044f28f</guid>
            <category><![CDATA[devoxxfr]]></category>
            <category><![CDATA[tech-culture]]></category>
            <category><![CDATA[conference]]></category>
            <category><![CDATA[community]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Thu, 21 May 2026 07:21:00 GMT</pubDate>
            <atom:updated>2026-05-21T07:44:27.495Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Authors: </strong><a href="https://www.linkedin.com/in/toufik-ider/">Toufik Ider</a>, <a href="https://www.linkedin.com/in/djobl%C3%A9-k-a9b668a5/?locale=en">Djoble Koutouan</a>, <a href="https://www.linkedin.com/in/aymendelly/">Aymen DELLY</a>, <a href="https://www.linkedin.com/in/gilgenkrantz/">Mathieu Gilgenkrantz</a>, <a href="https://www.linkedin.com/in/thanh-phuc-le-339357b7/">Thanh Phuc LE</a> and <a href="https://www.linkedin.com/in/phan-tien-dat/">Dat Phan</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*vm5Tx4ACaNcB3NfAg4idyw.jpeg" /></figure><p>From April 22 to 24, we were back on site at <a href="https://www.devoxx.fr/">Devoxx France</a> with a booth and two talks from our Tech Ambassadors, Estelle Thou and William Montaz. This year’s edition had a great atmosphere, strong turnout, and one very clear trend: AI was everywhere, with sessions on LLMs and agentic systems filling up fast and driving conversations across the venue.</p><p>Between talks, our booth gave us plenty of chances to talk about what makes Criteo unique, share some of the AI initiatives happening in our tech teams, and connect with other engineers and curious attendees from very different backgrounds.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*irMoaaCQKDsqRM08tjD2UA.jpeg" /></figure><h3>Criteo Talks</h3><h4>Maternité dans la tech: Du témoignage à l’action</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*500xGHMIHkh2JA8hgXde2w.jpeg" /></figure><p><a href="https://www.linkedin.com/in/estelle-thou-5356b4132/">Estelle Thou</a>, one of our Software Engineers, talked about concrete strategies to better recruit and retain women in tech, drawing on the experience of maternity leave: safe spaces, HR support, mentoring, inclusive communication, adaptation of the return to work, and levers for improvement, aimed at managers, HR, and developers for greater inclusion.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fe1HU4H-ktSs%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3De1HU4H-ktSs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fe1HU4H-ktSs%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1672629fa57d6b64bd69d1b59ae8f04b/href">https://medium.com/media/1672629fa57d6b64bd69d1b59ae8f04b/href</a></iframe><h4>Production Troubleshooting: boostez vos skills, une étude de cas</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MzSRI9hKIFT7Llr__BfvOg.jpeg" /></figure><p><a href="https://www.linkedin.com/in/williammontaz/">William Montaz</a>, Senior Staff SRE, walked attendees through a real-world incident involving Spark jobs corrupting data. The session explored a rigorous technical investigation method: formulating and testing hypotheses, avoiding bias, and distinguishing between correlation and root cause. The goal was to learn how to effectively diagnose any complex incident, even in uncertain environments.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FhXcHyFNXkbs%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DhXcHyFNXkbs&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FhXcHyFNXkbs%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/18da0b2208b904d65754037cc61e3683/href">https://medium.com/media/18da0b2208b904d65754037cc61e3683/href</a></iframe><h3>Talks that stood out to our team</h3><h4>Stop à la dette documentaire: Industrialisez vos ADRs et READMEs avec Spec-kit</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/alexandre-guillemot-4032a3172/"><em>Alexandre Guillemot</em></a><em>, Tech Lead at WeScale, and </em><a href="https://www.linkedin.com/in/axel-chauvin/"><em>Axel Chauvin</em></a><em>, Senior Engineer at WeScale.</em></p><p>This session looked at documentation debt through a very practical lens: ADRs and project documentation should be part of the regular development workflow, not something left for the end. The spec-driven approach presented with Spec-kit was especially interesting, from specification and planning to tasks and implementation, with AI helping generate artifacts while developers remain responsible for reviewing and validating them. Another strong idea was the use of CI agents to check architecture rules, required ADRs, and consistency between code and documentation, with a scoring mechanism that can even reject a pull request when the ADR is missing or unrelated to the change.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F9pZC5s7d2T0%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D9pZC5s7d2T0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F9pZC5s7d2T0%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/3030bb7a35bafcab28d1a95ee114c659/href">https://medium.com/media/3030bb7a35bafcab28d1a95ee114c659/href</a></iframe><h4>Understanding Prompt Injection: Techniques, Challenges, and Advanced Escalation</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/brianvermeer/"><em>Brian Vermeer</em></a><em>, Staff Developer Advocate at Snyk.</em></p><p>Brian framed prompt injection less as traditional hacking and more as social engineering for LLMs. Through live demos, he walked through prompt leakage, structured output abuse, role-playing, multi-turn manipulation, payload splitting, obfuscation, delimiter confusion, and link smuggling, showing that newer models are not automatically safer and that combining simple techniques can still bypass guardrails or expose sensitive data. One of the clearest takeaways was the need to be careful when AI agents have access to broad tools, chat history, or sensitive context.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FSIfYive6nOA%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DSIfYive6nOA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FSIfYive6nOA%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b134246cfab217072cd239f0284dd372/href">https://medium.com/media/b134246cfab217072cd239f0284dd372/href</a></iframe><h4>Shall we play a Game? LLM Security in Practice</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/jkcso/"><em>Joseph Katsioloudes</em></a><em> and </em><a href="https://www.linkedin.com/in/xavier-ren%C3%A9-corail-2428431/"><em>Xavier René-Corail</em></a><em>, GitHub Security Lab.</em></p><p>This workshop explored how to trick LLMs into revealing information they should not disclose, starting with a simple chatbot and ending with a more agentic setup based on GitHub Security Lab’s Secure Code Game. What made it memorable was how concrete it felt: some classic tricks are now blocked by major providers, but other manipulations still work, even on the latest models. The conclusion was both simple and important: prompt injection cannot be fully prevented, so the rest of the application has to be designed with that reality in mind.</p><p><em>⚠️ This is the workshop from </em><a href="https://tessl.io/devcon/">Devcon Spring 2026</a></p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FcrrYnbG1kRE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DcrrYnbG1kRE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FcrrYnbG1kRE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/f18d7e2cd760b19ad8a10aa6824fd874/href">https://medium.com/media/f18d7e2cd760b19ad8a10aa6824fd874/href</a></iframe><h4>L’ampoule qui en savait trop: voyage au cœur de la sécurité des objets connectés</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/paulpinault/"><em>Paul Pinault,</em></a><em> Rtone.</em></p><p>What started with a simple ESP32 lightbulb demo quickly became a deep dive into the hidden complexity of modern connected devices. The talk showed how compliance, secure updates, certificate chains, real-time clocks, and long-term support requirements turn a seemingly simple IoT product into a much larger engineering challenge, especially under European regulations such as the Radio Equipment Directive and the Cyber Resilience Act. It was a great reminder that while talking to the device may take only a few lines of code, building a secure and compliant connected product is something else entirely.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FF8zKPTxSUTk%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DF8zKPTxSUTk&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FF8zKPTxSUTk%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/5461fc4bbca96d2a574d6b20fb473d5c/href">https://medium.com/media/5461fc4bbca96d2a574d6b20fb473d5c/href</a></iframe><h4>7 ans au pays de Kafka</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/fabien-alberi/"><em>Fabien Alberi</em></a><em> and </em><a href="https://www.linkedin.com/in/valerie-servaire/"><em>Valérie Servaire</em></a><em>, Michelin.</em></p><p>This was an impressive look at how Michelin built and scaled its Kafka infrastructure over seven years, from factory floors to web and client-facing services. The session walked through the architecture journey from initial requirements to real-world design and showed how they achieved smooth, reliable streaming at scale.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FMNRBqUKaeXI%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMNRBqUKaeXI&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FMNRBqUKaeXI%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/82b22847633c517f0d92c2a3640b9449/href">https://medium.com/media/82b22847633c517f0d92c2a3640b9449/href</a></iframe><h4>Les design patterns agentiques dont vous êtes le héros</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/glaforge/"><em>Guillaume Laforge</em></a><em>, Google.</em></p><p>Guillaume offered a hands-on exploration of multi-agent systems that went beyond basic demos. The session focused on coordination strategies, routing mechanisms, and swarm-style collaboration, using LangChain4j and ADK for Java to show how scalable and resilient agent-based architectures can be designed and integrated in practice.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Fc092bWijLhU%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Dc092bWijLhU&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Fc092bWijLhU%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/1fdb65eee1f159b4123b96091563157d/href">https://medium.com/media/1fdb65eee1f159b4123b96091563157d/href</a></iframe><h4>Docker Compose votre Dev Toolkit pour AI &amp; Cloud</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/ndeloof/"><em>Nicolas De Loof</em></a><em> and </em><a href="https://www.linkedin.com/in/guillaumelours/?locale=en"><em>Guillaume Lours</em></a><em>, Docker.</em></p><p>This talk focused on the latest Docker Compose updates for LLM-based applications. The demos showed how to define models, connect to external resources through providers, and offload GPU workloads with Docker Offload, all within a more streamlined workflow that brings code, models, and execution closer together for modern AI projects.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FfzOPd2VZe44%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DfzOPd2VZe44&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FfzOPd2VZe44%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/be7c75070d314ce3001fb4e308c6af43/href">https://medium.com/media/be7c75070d314ce3001fb4e308c6af43/href</a></iframe><h4>Apprendre à notre IA à apprendre</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/philippartstephane/"><em>Stéphane Philippart</em></a><em>, OVHcloud</em></p><p>Stéphane Philippart brought useful clarity to the vocabulary around AI agents, covering concepts such as RAG, MCP, tooling, and agents. The key idea was to separate the reasoning engine from the runtime: the LLM acts as the brain, while the agent runtime handles state, memory, and tooling so the brain can interact with the real world. It was a strong reminder that most of the real implementation work for developers still lives in the runtime layer.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FN3NzgO6M-Ss%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DN3NzgO6M-Ss&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FN3NzgO6M-Ss%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/0b33901f2647312441298b3c20bf2d68/href">https://medium.com/media/0b33901f2647312441298b3c20bf2d68/href</a></iframe><h4>Standards et agents IA: un tour d’horizon de MCP, A2A, ADK et plus encore</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/glaforge/?skipRedirect=true"><em>Guillaume Laforge</em></a><em> and </em><a href="https://www.linkedin.com/in/emmanuelbernard/"><em>Emmanuel Bernard</em></a><em>.</em></p><p>Several attendees highlighted this session, and the common thread in their notes was clear: AI agents are moving from standalone tools to connected systems built on shared protocols. MCP was presented as the standard way to connect agents to tools and external systems, A2A as the communication layer between agents, and ACP as a structured messaging protocol, all pointing toward a more interoperable ecosystem. Frameworks such as LangChain4j and Quarkus were also highlighted as the scaffolding that helps teams implement these ideas without getting lost in protocol boilerplate.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FKvJ2OfLW7PE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DKvJ2OfLW7PE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FKvJ2OfLW7PE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/602d08f36f43bc92d3865650ed3b4f34/href">https://medium.com/media/602d08f36f43bc92d3865650ed3b4f34/href</a></iframe><h4>L’Agentic Coding, nouveau territoire du Platform Engineering</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/sesyilmaz/"><em>Yankı Sesyılmaz</em></a><em> and </em><a href="https://www.linkedin.com/in/julientanay/"><em>Julien Tanay</em></a><em>, Doctolib.</em></p><p>This was another talk that came back in several recaps, and for good reason. Through Doctolib’s experience, it showed what happens when agentic coding becomes a real internal platform used by hundreds of engineers: spec-driven development, shared skills and plugins, telemetry, governance, and strong onboarding all matter as much as the models themselves. One takeaway stood out especially well: in such a fast-moving ecosystem, success is not just about building features, but about knowing what to standardize, what to govern, and sometimes what not to build at all.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FNLg8As47Y84%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DNLg8As47Y84&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FNLg8As47Y84%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/189b99c38ccf09c10fbac72143c0e6c6/href">https://medium.com/media/189b99c38ccf09c10fbac72143c0e6c6/href</a></iframe><h4>PostgreSQL Analytics: It’s a Trap!</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/l%C3%A6titia-avrot/"><em>Lætitia Avrot</em></a><em>, Docker.</em></p><p>Lætitia challenged the familiar idea that PostgreSQL is only for transactional workloads and should be abandoned for analytics. A big part of the talk was about benchmark bias, especially vendor-created benchmarks that are designed to favor the engine they promote while ignoring general-purpose scenarios where PostgreSQL performs very well. Her conclusion was refreshingly pragmatic: the best engine for your data is often the one you already know how to run well.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FzqhiV8r6cGE%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DzqhiV8r6cGE&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FzqhiV8r6cGE%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/c1412fab20203f66d16e6ef5aa3ad761/href">https://medium.com/media/c1412fab20203f66d16e6ef5aa3ad761/href</a></iframe><h4>Sous le capot d’une base de données analytique</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/swallez/"><em>Sylvain Wallez</em></a><em>, Elastic.</em></p><p>This session offered a deep dive into what really happens inside a query engine, using Elasticsearch and ES|QL as reference points. The talk walked through the full pipeline from parsing to logical planning, optimization, physical planning, and distributed execution, with a strong focus on predicate pushdown, vectorized execution, and static rule-based optimizations that reduce compute and data movement. One particularly interesting point was that the engine does not score multiple query plans against each other, but instead relies on deterministic rules to produce a single optimized plan.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2F_3_cZdqhnhM%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_3_cZdqhnhM&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2F_3_cZdqhnhM%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b4e1b689a2b366a5d5c2ec5cbf15e20d/href">https://medium.com/media/b4e1b689a2b366a5d5c2ec5cbf15e20d/href</a></iframe><h4>Another World, une belle leçon d’architecture logicielle</h4><p><em>Speaker: </em><a href="https://www.linkedin.com/in/olivier-poncet-33369010/"><em>Olivier Poncet</em></a><em>.</em></p><p>This talk revisited the architecture of <em>Another World</em>, the 1991 game created by Éric Chahi, and showed just how modern some of its design choices still feel today. The most striking example was the use of a custom virtual machine and instruction set, a concept that still echoes in today’s software world through technologies such as the JVM, .NET, and Docker. The session also covered compression, rendering, and sound, while reminding the audience that all of this came from one person working far outside the usual norms of the time.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FgMVUtqghVN8%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DgMVUtqghVN8&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FgMVUtqghVN8%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/b41b44ccc6c111d589ecb389ffc18025/href">https://medium.com/media/b41b44ccc6c111d589ecb389ffc18025/href</a></iframe><h4>De zéro à des milliards de traces, le tracing distribué chez Winamax</h4><p><em>Speakers: </em><a href="https://www.linkedin.com/in/anthonymaffert/?locale=en"><em>Anthony Maffert</em></a><em> and </em><a href="https://www.linkedin.com/in/nicolas-fidel/"><em>Nicolas Fidel</em></a><em>, Winamax.</em></p><p>This session explored Winamax’s observability journey, from trace production to indexing, storage, and search, with open-source technologies such as OpenTelemetry, Quickwit, and Jaeger. The talk was also notable for its scale: 100% of the system is instrumented, an internal tracing SDK helps standardize implementation across hundreds of repositories, and daily trace volume reaches around 50 terabytes. For teams working on large, interconnected systems, it felt very relevant and easy to map to challenges we know well ourselves.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FxqXAd8oo7VA%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DxqXAd8oo7VA&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FxqXAd8oo7VA%2Fhqdefault.jpg&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/062d5eea8af657820e01cdcab8be4bf6/href">https://medium.com/media/062d5eea8af657820e01cdcab8be4bf6/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1av9RdSZo9oqJRjTJfe4Sg.jpeg" /></figure><p>Devoxx France 2026 reminded us once again why this conference matters so much to our team. It gave us space to share what we do at Criteo, reconnect with the wider tech community, and come back with ideas that feel immediately relevant to the way we build, scale, and think about software today. From agentic platforms and AI security to documentation, streaming, observability, and database architecture, the event was full of strong conversations and practical lessons.</p><p>Most of all, we are leaving this edition grateful for the people we met, the talks we attended, and the energy around the booth throughout the event. We are already looking forward to the next one.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*G1vxbZxNwuLKzYYmBNN_4g.jpeg" /></figure><p>Check all the recordings from the conference here 👇</p><p><a href="https://www.youtube.com/@DevoxxFRvideos">Devoxx France videos</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8aaf3044f28f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/our-experience-at-devoxx-france-2026-8aaf3044f28f">Our Experience at Devoxx France 2026</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Are tech speakers still relevant in the AI era?]]></title>
            <link>https://medium.com/criteo-engineering/are-tech-speakers-still-relevant-in-the-ai-era-46879ecc862c?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/46879ecc862c</guid>
            <category><![CDATA[conference]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[public-speaking]]></category>
            <category><![CDATA[tech-culture]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Tue, 19 May 2026 07:11:00 GMT</pubDate>
            <atom:updated>2026-05-19T07:11:00.653Z</atom:updated>
            <content:encoded><![CDATA[<p>Author: <a href="https://www.linkedin.com/in/diana-cibu-8090a317/">Diana Cibu</a></p><p><em>Public orators have played a major role in spreading knowledge and driving progress since the early days of oratory in Ancient Greece. I’ve always been fascinated by speakers’ unique ability to catch an entire audience’s attention and how they turn messages into valuable takeaways that stick with you long after their speech is done.</em></p><p><em>If there’s one thing I’ve learned throughout my journey as a tech speaker is that knowledge doesn’t just depend on the message you want to deliver; Knowledge happens when you get people to hear it. This is even more true in today’s world. Current society is marked by constant information, and the rise of AI is accelerating and reshaping the way we gain knowledge. In a world where accessing knowledge has never been easier, we might question how relevant speakers still are…</em></p><p><em>But that’s the trick, isn’t it? We’re surrounded by this ocean of noise everywhere we go, so if you don’t want your message to get lost, you need the right voice to carry it. That’s the reason for this article on why tech speakers are still relevant today to drive progress in tech — and beyond.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hlr1vreRtY5af5rLzYKWNw.jpeg" /></figure><h3><strong>Stage one: Powering through</strong></h3><p>They say that any time you learn something new, you go through the same process; a learning curve consisting of 4 distinctive stages:</p><ol><li><strong>Stage 1: You don’t know that you don’t know it, </strong>meaning that you’re still unaware of your own biases, triggers, and blockers. So, your only option is to power through.</li><li><strong>Stage 2: You know that you didn’t know it</strong>. You become aware of those limitations.</li><li><strong>Stage 3: You know that you know it</strong>. That’s when learning happens. You gain experience and start to improve.</li><li><strong>Stage 4: You no longer know that you know it</strong>. You now have integrated the right reflexes, and you do them automatically without even thinking about it. Now, you’re ready to get the point of all this.</li></ol><p>So, let’s rewind the tape to stage one, when I first stepped into the tech speakers’ game. During a work visit in Paris, I met <a href="https://www.linkedin.com/in/kiniengelmo/">Kini</a>, our Head of Developer Relations, who emphasized how important it was to have tech experts spread knowledge and make our community more visible in and out of Criteo. He was talking about diverse ways in which we could all contribute, like writing tech articles, hosting meetups, and giving public talks. Back then, I remember thinking, <em>“I don’t know who will accept such a challenge</em>…”</p><p>A few months later, <a href="https://medium.com/criteo-engineering/criteo-r-d-hits-the-stage-at-voxxed-days-bucharest-2025-b8da8bfbd3db">Voxxed Days 2025</a> came and, as we wanted to make ourselves known in Bucharest, one of our Dev Leads, <a href="https://www.linkedin.com/in/benjamin-degerbaix/">Benjamin Degerbaix</a>, agreed to give a talk on stage. He still needed someone else up there with him though, so, despite my insecurities, I volunteered. The goal was to introduce attendees to the world of Adtech, how we work at Criteo, and how we manage super busy times like Black Fridays from a technical standpoint. Even though I had worked on the content repeatedly with Benjamin and practiced it with Kini’s support, I felt like a total mess up there. My voice was trembling, and I couldn’t bring myself to breathe better. I remember I constantly ran out of air. But I went on, with my eyes fixed on the audience. There, I spotted <strong>familiar faces smiling back at me,</strong> which helped me to power through.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*l6lGn7mSRvFQ2BQoNvvk5w.jpeg" /></figure><p>Their encouragement made a real difference for me; yet another example of how much community matters for your own growth.</p><h3><strong>Stage two: Becoming aware</strong></h3><p>Going down from there, I realized how poorly my voice sounded and how hard it was for me to breathe peacefully when fear stroke. There was only room for improvement from that point on.</p><p>I felt like I had just climbed a mountain. Was it worth it? Oh, absolutely! The view from the top was just breathtaking. We always want to master things, but there is real room to grow further when switching back to a beginner’s mind. You must accept that learning those things doesn’t happen overnight; You grow into them.</p><blockquote>Lesson learned: No matter how much you stumble along the way or how much you need to learn still, learning always makes things more exciting — at least, for me.</blockquote><h3><strong>Stage three: Growing into it</strong></h3><p>If public speaking might feel like an innate skill in some people, it’s like any other skill. You can learn it, nurture it, and finally master it.</p><p>That was my mindset when I agreed, later on, to join my colleague <a href="https://www.linkedin.com/in/catalin-stan-44b7522/">Catalin Stan</a> on stage at <a href="https://medium.com/criteo-engineering/criteo-r-d-supporting-the-devops-community-at-devcon-2025-75e271b86d1b">Devcon</a> to discuss developer environments from a DevOps versus Developer perspective. This time, I didn’t hesitate. I think I was rid of the fear of the unknown also. I know what troubled me the first time was my breathing patterns, and this time, I knew what I was getting myself into, so I practiced being mindful of my breathing while speaking. I found abdominal breathing to be the key here! It’s no mystery, but we’re so disconnected sometimes that breathing can end up feeling like rocket science.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uDvMpofagE0bZDTzd9cFoA.jpeg" /></figure><p>Devcon was an upgrade compared to my first time on stage at VoxxedDays. I could feel it the way I spoke and how naturally I moved on stage. As I said, you grow into those things.</p><h3><strong>Stage four: Getting the point</strong></h3><p>Soon after Devcon, I was asked to present again, but this time internationally for <a href="https://conferences.codemotion.com/madrid/">Codemotion Madrid</a>. This turned out to be a huge step forward for me. Why? Well, for starters, I was to be alone on stage for the first time. The talk would be longer too (45 minutes just for myself versus 30 minutes shared with a co-speaker) and there would be no familiar faces in the audience.</p><p>The talk was about the architecture of the AdTech ecosystem. I was very nervous to be alone on stage, but then it hit me: I could draw from my previous experiences. I then remembered that it’s fine and actually relevant to take breaks between sentences. It allows the information to sink in and your audience can follow your thought process more naturally. I remember placing my bottle of water on the side to remind me of that. I went on stage and did my thing. It was only after finishing my talk that I realized it: not once had I run out of air. Shoutout to me! I was now rid of my own technical difficulties and had just reached the 4th stage of learning: managing to control my breath while speaking, without thinking about it.</p><p>The room was full, and many participants showed curiosity about digital advertising. I then realized something: I had successfully delivered my message to a wide and diverse international audience. I got the global picture then: Developing those individual skills had boosted my personal growth but, more importantly, allowed me to contribute to boosting collective tech growth. At the end of the day, it was all about sharing knowledge and learning to do it with my own personal touch.</p><p>Circling back to the beginning of the article, why attend in-person conferences in a world where knowledge is accessible everywhere? Why learn to go on stage if everything can be done online?</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZWe444E4z6Q7iSceCwwfCw.jpeg" /></figure><p>I guess my answer lies in the power in real interactions. Sharing ideas, stories, and experiences firsthand brings (and will still bring tomorrow) real added value that can’t be found elsewhere. AI may be reshaping many things, but there is nothing like connecting in-person with people who share your interests, passions, and objectives. This thing, right there, that’s the human factor, and it cannot be replaced.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=46879ecc862c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/are-tech-speakers-still-relevant-in-the-ai-era-46879ecc862c">Are tech speakers still relevant in the AI era?</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How We Cut HAProxy Fleet GCP Cost in Half by Moving from N2D to C4D]]></title>
            <link>https://medium.com/criteo-engineering/how-we-cut-haproxy-fleet-gcp-cost-in-half-by-moving-from-n2d-to-c4d-bbdafed3265f?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/bbdafed3265f</guid>
            <category><![CDATA[virtual-machine]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[gcp]]></category>
            <category><![CDATA[load-balancing]]></category>
            <category><![CDATA[infrastructure]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Thu, 07 May 2026 06:26:01 GMT</pubDate>
            <atom:updated>2026-05-07T06:26:01.149Z</atom:updated>
            <content:encoded><![CDATA[<h4>Author: <a href="https://www.linkedin.com/in/stanislav-glukhov/">Stanislav Glukhov</a></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FfZK_YL-xLhRfGGYDzw7TQ.png" /></figure><p>When you run a large production footprint in Google Cloud, changing a VM family is never just a hardware refresh. In our case, HAProxy sits on a critical path of the platform, serving as part of the traffic layer that hundreds of downstream systems quietly depend on every day. That means even a seemingly straightforward migration from one instance type to another has to be treated as a reliability exercise first and an infrastructure optimization second.</p><p>We decided to migrate our HAProxy fleet from N2D to C4D, not because the old setup was failing, but because at our scale, “good enough” is rarely the end of the story. With hundreds of VMs in production, small improvements in per-instance efficiency, network handling or latency behavior can compound into meaningful operational gains. At the same time, even a minor regression can have an outsized blast radius. This made the migration worth doing, but only with careful validation and a clear understanding of what success would actually mean.</p><p>What made this project especially interesting is that the value was not limited to raw benchmark improvements. We expected some performance benefits from moving to a newer instance family, but along the way we also found several less obvious advantages: better operational headroom, more predictable behavior under load, and benefits that only become visible when you operate proxy infrastructure at scale. This article is about that migration, how we approached it, and what we learned beyond the usual “new machine type is faster” narrative.</p><blockquote>“Even a seemingly straightforward migration from one instance type to another has to be treated as a reliability exercise first and an infrastructure optimization second”</blockquote><h3>HAPROXY SETUP</h3><p>In our platform, HAProxy is a core part of the traffic layer sitting between upstream traffic sources and a large pool of backend services in Google Cloud. It is not just a simple proxy tier: it serves millions of requests per second overall, with individual instances commonly handling around 100k–200k QPS. At that scale, even small changes in instance behavior can have a visible impact on latency, resilience and how well the platform absorbs traffic spikes or infrastructure events.</p><p>One of the main reasons this layer matters so much for us is that it gives us more flexibility than relying only on Google Cloud Load Balancing. It is also significantly less expensive, which is important when you run a fleet of this size. But the biggest advantage is control: with HAProxy, we can tune traffic distribution much more precisely and align balancing behavior with how our backend fleet actually behaves in production.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/854/1*TvSIx2oD4BZwGrIR_Jb-tg.png" /><figcaption>High-level traffic paths</figcaption></figure><p>That flexibility is especially valuable in our environment because a large part of our backend fleet runs on Spot VMs and those machines are not homogeneous. We use different instance types and sizes depending on availability, price and what capacity we can actually get in each region. As a result, backend capacity is not a flat pool of interchangeable nodes: some machines are stronger than others and the fleet composition can change quickly when Spot capacity becomes constrained.</p><p>This is where HAProxy gives us an advantage beyond cloud load balancing. Instead of treating every backend as equal, we can assign different balancing weights and distribute traffic according to the real serving capacity of each machine. To make those weights meaningful, we use our own internal performance measurements for the instance types we run rather than relying only on specs. That becomes especially useful during Spot shortages, when we need to replace one machine family with another and keep the service stable while the backend mix is changing.</p><h3>PLATFORM COMPARISON</h3><p>N2D and C4D are not just two price points in the same catalog, they come from different product generations and were introduced for different goals. N2D was introduced as Google Cloud’s AMD-based general-purpose family, aimed at giving customers a lower-cost alternative for common compute workloads while still supporting large VM sizes and flexible memory ratios. The Milan-based version of N2D was announced in September 2021 as an update to the earlier N2D generation, bringing 3rd Gen AMD EPYC Milan into that same cost-oriented family. Google documents N2D as a general-purpose series with up to 224 vCPUs and up to 896 GB of memory.</p><p>C4D was introduced much later, in June 2025, for a different purpose. Google presents it as a high-performance VM family for demanding business workloads, built on 5th Gen AMD EPYC Turin and Google’s Titanium platform. In this context, Titanium matters as much as the CPU generation itself: Google describes it as dedicated offload hardware for networking, storage and virtualization, which reduces hypervisor overhead on host CPUs and is meant to deliver more predictable performance. Google also positions C4D above prior generations in raw capability, advertising up to 80% higher web-serving throughput and up to 30% better general compute performance versus the previous generation. <a href="https://cloud.google.com/blog/products/compute/c4d-vms-unparalleled-performance-for-business-workloads?utm_source=chatgpt.com">C4D VMs: Unparalleled performance for business workloads | Google Cloud Blog</a></p><p>For us, the architectural difference mattered less as a marketing distinction and more as an operational one. N2D was built to be a strong price-performance general-purpose option, which is exactly why it had been the default choice for years. C4D, by contrast, was launched for workloads where higher and more stable performance is worth paying for. That makes the comparison less about “old versus new” and more about whether a general-purpose Milan platform is good enough for the job, or whether a Turin + Titanium platform gives enough additional throughput and consistency to justify its higher cost.</p><h3>NOISY NEIGHBOR</h3><p>In cloud environments, the noisy-neighbor effect is the name for performance interference caused by resource sharing on the same physical host. Even with virtualization and tenant isolation, not every underlying resource is perfectly dedicated. Different workloads can still compete for shared CPU caches, memory bandwidth, NUMA-local resources, interrupt handling capacity, NIC queues, storage paths and hypervisor attention. This usually does not appear as a hard failure. More often, it shows up as lower consistency: jitter, uneven latency and visible differences between instances that look identical on paper.</p><p>Our measurements are consistent with that kind of effect on N2D and it is especially visible for a latency-sensitive tier such as HAProxy. In practice, we observed performance differences of around 20% between nominally identical machines and performance on the same machine could also vary over time. For a high-QPS proxy layer, that means you cannot safely size the fleet around the average machine in the pool. Operationally, you have to orient load toward the weakest machines, because they define the safe capacity limit. That reduces usable headroom per instance and forces you to run more machines overall than you would need on a more stable platform.</p><p>For example, in the test below, we sent the maximum possible request volume to both the N2D servers and C2D, the previous generation of AMD instances that already provided much more stable performance. The difference was visible immediately. N2D performance fluctuated significantly throughout the day, even under the same test conditions, while C2D remained much more consistent over time.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LpaCsh6OEAF1de_dfZvgRg.png" /><figcaption>N2D performance</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MoyJsKc1W4FYy8HKRoOKZg.png" /><figcaption>C2D performance</figcaption></figure><blockquote>“Operationally, you have to orient load toward the weakest machines, because they define the safe capacity limit”</blockquote><p>We do not observe the same behavior on C4D, and that is not surprising. Google explicitly presents C4D as a platform designed for stronger consistency, describing it as aligned with the underlying NUMA architecture to provide optimal, reliable, and consistent performance. In practice, C4D combines a newer Turin-generation CPU, higher memory bandwidth, and a more advanced platform stack, which likely reduces transient contention enough that it no longer becomes visible in our HAProxy workload. So while noisy-neighbor effects are theoretically possible on any shared platform, in our case, they are clearly visible on N2D and effectively negligible on C4D.</p><h3>SECRET SAUCE</h3><p>One of the most valuable outcomes of this migration was that it improved much more than raw instance performance. During a broader HAProxy configuration optimization initiative, we had already learned that for this type of workload, hardware and network driver behavior matter almost as much as the proxy configuration itself. In a system serving traffic over Ethernet at very high rates, some share of CPU is always spent on IRQ processing. One of the first optimizations we applied was to dedicate a subset of cores to IRQ handling only. That helped, but it also made it clear that the default networking settings provided by the platform are designed for general-purpose workloads, not for a proxy layer operating at our scale.</p><p>A particularly useful optimization was reducing how frequently the system switches between kernel space and user space by increasing NIC interrupt coalescing values. In practice, this meant allowing the kernel to batch work more aggressively instead of interrupting the CPU as often. The change was simple:</p><pre>ethtool -C ens3 rx-usecs 256 tx-usecs 256<br># instead of the default 20 / 50</pre><p>Our preliminary investigation showed that this could increase ICMP response latency by around 0.512 microseconds, which was negligible for our use case, while reducing the user-space share of CPU load quite significantly. In other words, the machines became not just faster, but calmer: less CPU time was wasted on constant interruption and context switching and more of it was available for actual HAProxy work.</p><p>The non-obvious advantage was that this optimization turned out to depend not only on HAProxy tuning, but also on the NIC implementation and queue format exposed by the instance family. Older environments gave us either legacy VirtIO networking or an older generation of gVNIC behavior. Newer machines, by contrast, came with gVNIC by default and more importantly, with a more modern queue model that exposed more granular driver controls. That difference mattered because the rx-usecs setting is supported only when the NIC and driver stack expose the right capabilities. In our older fleet, that path was effectively blocked even when gVNIC was enabled.</p><p>The reason it failed on N2D was not that the idea was wrong, but that the platform simply did not support the level of NIC tuning we needed. On N2D, the gVNIC driver runs with the older GQI QPL queue format:</p><pre>sudo dmesg | grep gve<br>[    4.388590] gve 0000:00:04.0: Driver is running with GQI QPL queue format.</pre><p>That queue format does not support reading or changing coalescing parameters through ethtool, which meant we could not tune rx-usecs and tx-usecs there. On more modern instances, the driver uses DQO RDA instead:</p><pre>sudo dmesg | grep gve<br>[    2.224848] gve 0000:00:03.0: Driver is running with DQO RDA queue format.</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i07IsaeDL4CqceXnOADQVw.png" /><figcaption>C4D Haproxy node before coalesce tuning</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*laW5QDVxD9pwZQjKVo_oiQ.png" /><figcaption>C4D Haproxy node after coalesce tuning</figcaption></figure><blockquote>“The machines became not just faster, but calmer: less CPU time was wasted on constant interruption and context switching and more of it was available for actual HAProxy work”</blockquote><p>That newer mode allows tuning of network parameters and in practice it gave us a meaningful extra lever for optimization. Once we could actually apply those settings, we saw the soft-IRQ portion of CPU load drop by roughly 10%. This was one of the clearest examples of a non-obvious migration benefit: the gain was not just that the newer instances were faster, but that they unlocked a class of low-level network tuning that had simply not been available to us before.</p><p>At the same time, this is only one part of a much broader story. We have done a long and detailed body of work on adapting HAProxy to cloud environments and that topic deserves a dedicated article of its own. Much of this initiative has been driven by our SRE professionals, <a href="https://medium.com/u/df19499e717a">Dmytro Hopkalo</a> and Damien Claisse, who have invested significant effort into understanding and improving HAProxy behavior under real cloud constraints. They will be writing a separate article focused specifically on HAProxy setup and cloud adaptation shortly after this one.</p><h3>AND HOW IT GOES</h3><p>We approached the migration conservatively. Our HAProxy fleet is managed through Google Instance Groups, so instead of doing a big-bang replacement, we migrated environments gradually, moving traffic from N2D-based groups to C4D-based groups step by step. After each change, we let the environment run for several days and watched the metrics that actually mattered for this layer: latency, CPU behavior, stability during peaks and the overall predictability of the fleet. For a proxy tier on the critical path, that kind of slow validation under real traffic was far more important than any synthetic benchmark.</p><p>On paper, the economics looked challenging. We use highcpu shapes for HAProxy, but the C4D equivalents come with much more memory than N2D. For example, n2d-highcpu-16 has 16 GB RAM, while c4d-highcpu-16 has about 30 GB. So part of the C4D premium was not just newer CPUs, but also paying for memory we did not necessarily need in the same ratio. In our case, the closest C4D equivalent ended up being about 88% more expensive per instance than N2D. That meant the migration only made sense if the performance gain was significant enough to let us run materially fewer resources.</p><h4>Some Cost Optimization Examples</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*To23EOJ2WZSAyOwCvFXRTg.png" /></figure><p>In production, that is exactly what happened. Because C4D gave us more usable performance per machine, more stable behavior, and better tuning options, we were able to right-size environments much more aggressively using c4d-highcpu-4, c4d-highcpu-8, and c4d-highcpu-16 according to real traffic patterns. We also moved to HyperDisk Balanced, which improved I/O behavior and simplified the platform. Above are the results for some environments in Japan and the Netherlands, where we achieved a significant reduction in vCPUs and instance cost. Overall, the effective savings were around 50%, despite C4D being substantially more expensive per instance on paper.</p><p>Just as importantly, we achieved all of this with zero downtime. The migration was completed without service interruption, which is exactly the standard you want for a high-QPS HAProxy layer. The only serious complication was capacity availability: during Black Friday 2025, we had difficulties with provisioning of C4D highcpu instances in the Netherlands for almost two months. That was a useful reminder that infrastructure migrations are not only about performance and cost. They also depend on regional capacity and keeping a realistic fallback plan. Looking back, the migration was worth it not because one benchmark was higher, but because the new platform changed the operational profile of the fleet: fewer vCPUs, fewer instances, lower cost, better tuning control and more predictable performance.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bbdafed3265f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/how-we-cut-haproxy-fleet-gcp-cost-in-half-by-moving-from-n2d-to-c4d-bbdafed3265f">How We Cut HAProxy Fleet GCP Cost in Half by Moving from N2D to C4D</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Grind Behind the Epiphany: A Short Story of a Research Project]]></title>
            <link>https://medium.com/criteo-engineering/the-grind-behind-the-epiphany-a-short-story-of-a-research-project-45e94a21a489?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/45e94a21a489</guid>
            <category><![CDATA[research-paper]]></category>
            <category><![CDATA[paper]]></category>
            <category><![CDATA[research]]></category>
            <category><![CDATA[algorithms]]></category>
            <category><![CDATA[science]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Thu, 30 Apr 2026 06:46:01 GMT</pubDate>
            <atom:updated>2026-04-30T09:52:33.544Z</atom:updated>
            <content:encoded><![CDATA[<p>Author: Alain Rakotomamonjy</p><blockquote>From ideation to outcome, this is the story of a privacy-preserving research project. It tells how research can generate innovations but also joy and despair.</blockquote><h3><strong>Early 2024: The “Hammer” Phase</strong></h3><p>Two research leads who pioneered Criteo’s early privacy initiatives, as part of the Criteo multi-year research program, introduced me to a challenge born from the <a href="https://privacysandbox.google.com/">Privacy Sandbox</a> era: Learning from Label Proportions (LLP). The data was no longer granular; we were looking at “bags” of samples where only the aggregate label distributions were known.</p><p>I let the problem sit. Research often begins with a subtle, subconscious “incubation” phase. This is where the mental load of the unknown begins to take its toll. In my case, but I know I am not alone, the problem starts to consume your brain<strong>.</strong> It follows you home, sitting at the dinner table and echoing through your sets at the gym. It even finds its way into your dreams, playing out in abstract logic. Eventually, this constant mental churn led to a breakthrough. I convinced myself this was a Domain Adaptation (one of my favorite research topics) problem in disguise that could be addressed using my favorite mathematical tool.</p><p>As the saying goes, when you have a hammer, everything looks like a nail, and my favorite mathematical tool was the only hammer I liked to use.</p><blockquote>Research Lesson #1: The Tool Trap.</blockquote><blockquote>We often default to our favorite methods because they feel safe. The difficulty lies in staying objective enough to realize when your favorite tool is actually a distraction.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6yx3kvgdqJ9L_VVZdue9LQ.png" /></figure><h3><strong>October 2024: The “False Peak”</strong></h3><p>I began generating “synthetic” samples to start working on the problem. On toy datasets, the results were staggering. <strong>Mood: Indestructible!</strong></p><p>I onboarded two other researchers on the problem, with whom I already had successful research stories, and moved to real-world benchmarks and stress-tested the model on problems considered hard by Google fellows. It outperformed the state-of-the-art (SOTA) in nearly every category. We felt like world champions, and an <a href="https://icml.cc/Conferences/2025">ICML 2025 </a>submission was a no-brainer… or so we thought.</p><h3><strong>January — March 2025: The Reality Check</strong></h3><p>We submitted the paper, complete with a new algorithm and what we believed was foundational theory. Then came the “silence”, two months of forced patience to let our brains muse on other problems while the work sat in the hands of reviewers.</p><p>Then came the day of the reviews. We were overconfident, eager to see just how enthusiastic the reviewers would be. You know the feeling: refreshing the webpage every minute, heart rate climbing with every click.</p><p>The reviews showed up. They weren’t glowing; they were lukewarm.</p><p>The crushing blow came from a single comment: a reviewer pointed to a 2019 paper we had completely overlooked. At first glance, it felt like the classic “reviewer-wants-to-be-cited” situation, a common hurdle in the peer-review process. Yet I rushed to re-implement the paper, as performance is everything, praying it was a false alarm or a niche case. It wasn’t. Their performance was better than ours. The “novelty” and performance we felt so proud of were suddenly under threat.</p><p><strong>Mood: Rock bottom.</strong></p><blockquote>Research Lesson #2: The Hidden Literature.</blockquote><blockquote>Research is difficult because you aren’t just racing against the present;<br>you’re racing against every paper ever written. Missing one citation can invalidate months of work.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h3T20j39wb0gt-cZH4pArQ.png" /></figure><h3><strong>April 2025: The Valley of Despair</strong></h3><p>The rejection was official. It stung, but it was fair: the competition’s performance was simply superior. In a single review cycle, we went from feeling like world champions to local league players.</p><p>To make matters worse, the ground shifted beneath us: <a href="https://privacysandbox.google.com/blog/privacy-sandbox-update">Google announced it was pivoting away from the Privacy Sandbox</a>. The emotional toll was too high and our motivation evaporated. We lacked the energy to pivot and the time to reflect, so we did what many researchers do when the light fades: we put the project in a drawer.</p><blockquote>Research Lesson #3: The Psychological Toll.</blockquote><blockquote>This is the hardest part of research: the “Dead End” phase. It requires immense emotional resilience to watch your work be rejected and your project’s relevance questioned simultaneously.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0-vi9C0kPR7h9RSQgOcfIw.png" /></figure><p>Sometimes, “putting it on pause” isn’t giving up; it’s necessary maintenance for your brain.</p><blockquote>Research Lesson #4: Strategic Patience.</blockquote><blockquote>Sometimes, the best thing you can do for a project is to stop working on it. Burnout kills creativity; distance creates perspective.</blockquote><h3><strong>November — December 2025: The Transcendent Simplicity</strong></h3><p>Dust settled. The relentless pressure to “publish or perish” for the ICML cycle had faded, and another successful privacy project gave us the breathing room and the energy to open the drawer again.</p><p>Then, it happened. Out of the quiet churn of dozens of trials and errors, and the solitary musings of a researcher staring at mountains of experiments, came a spark. A new way to refine the method, one that actually simplified the entire architecture.</p><p>The results were undeniable: we had achieved state-of-the-art performance. Again.</p><blockquote>Research Lesson #5: Order from Chaos.</blockquote><blockquote>The difficulty of research is that you must navigate through extreme complexity to find simplicity. You have to be willing to be wrong, to be rejected, and to wait, just to find that one elegant truth that was hiding in the noise all along.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*OdU3PyqqgTikS8e_6GqQEQ.png" /></figure><p>In December, as we sat down to write the paper, the true “Epiphany” arrived. The new algorithm fit perfectly into a beautiful mathematical framework, one that made the entire approach feel flawless. There were no longer any “black box” components or parts justified by sloppy rationales. The pieces didn’t just fit; they belonged together. It was no longer a collection of ideas; it was a cohesive truth.</p><p>As it turns out, performance isn’t everything. Mathematical beauty counts.</p><blockquote>Research Lesson #6: Writing is Reasoning.</blockquote><blockquote>The “write-up” isn’t just a report; it is the final, most rigorous stage of discovery. Moving from a mental sketch to a formal paper acts as a cognitive filter, exposing “hand-wavy” logic and forcing messy architectures into elegant frameworks. You don’t write to record an epiphany, you write to invite one.</blockquote><h3><strong>January 2026: The Seoul Cycle</strong></h3><p>The dust from the previous year’s rejection has been recycled into fuel. We’ve just hit “Submit” for <a href="https://icml.cc/">ICML 2026</a> in Seoul. The paper is unrecognizable from the 2025 version; the new algorithm is more efficient, the math is rigorous, and we’ve proactively addressed that 2019 competitor in the related work. <br><strong>Current mood status: Cautiously Zen</strong>.</p><p>But the difficulty of research doesn’t end at the submission button. Now begins the “Black Box” phase. Between now and the April 30 notification date, the work is out of our hands. We will likely face a tough rebuttal period in late March, where we’ll have one week to defend our work against “Reviewer 2”, who might still argue that the problem is irrelevant because the Privacy Sandbox was dropped.</p><blockquote>Research Lesson #7: The Zen of Detachment.</blockquote><blockquote>You have to care enough about the work to spend a year perfecting it, but be detached enough to realize that a conference decision isn’t about you<br>personally. Research is a marathon where the finish line (the conference in Seoul) is fixed, but the path is paved with “Weak Rejects” that you have to flip into “Accepts” through sheer persistence.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8hiu3JbRrUXzWJSFAybRhg.png" /></figure><h3><strong>So What May Happen Next?</strong></h3><ul><li><strong>The Best Case</strong>: The epiphany holds up. Reviewers recognize the elegance of the mathematical framework, and by July 2026, we will be presenting our work at the COEX Center in Seoul, contributing a definitive solution to the LLP problem.</li><li><strong>The Reality Check</strong>: We might get “lukewarm” scores again. If so, the next step isn’t to give up as we did in April 2025, but to use the rebuttal phase to educate the reviewers on why this simplified framework is actually a fundamental shift in the field.</li><li><strong>The Pivot</strong>: Regardless of the ICML outcome, the “epiphany” has given the work a life of its own. Even if the Privacy Sandbox is gone, the math behind learning from aggregated data is universal, it’s the future of medical data, financial privacy, and beyond.</li></ul><h3><strong>The Final Word: The Pulse of Discovery</strong></h3><p>In the end, this is the heartbeat of research. It is a cycle that demands you find the courage to begin confident and joyful, the resilience to endure the despair of being “scooped” or rejected, and the clarity to see that a failed submission is often just the “incubation” for a greater idea. Of course, we must also accept the truth that, sometimes, the drawer stays closed.</p><p>Whether the notification on April 30th is an “Accept” or a “Reject,” the outcome has already been won. We traded the overconfidence of the “world champion” for the quiet certainty of the architect of a novel framework. We found the beauty in the math, and that is a victory that no reviewer can take away. Furthermore, the algorithm we built will serve as a keystone when the industry shifts again, placing Criteo in a formidable position for whatever comes next in privacy.</p><p><strong>Research is a rollercoaster, but it’s a ride worth taking.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*B_Ej8oSFz47eweuJURc7Yw.png" /></figure><h4><strong>The Math Behind the Epiphany</strong></h4><p>The core challenge of <strong>Learning from Label Proportions </strong>is that the labels are hidden inside “bags”. Our breakthrough came from a simple intuition: if we introduced a small set of samples, anchors, with known labels, they could act as a compass for guiding the model to identify categories within the rest of the data, only based on proportions.</p><p>We framed this as a <strong>Domain Adaptation</strong> problem. We treated the anchor samples with known labels as a “source” and the unlabeled bags as the “target”. The goal was to align the features of the unlabeled data within those bags with the known behavior of our anchors.</p><p>To make this alignment happen, we used <strong>Optimal Transport</strong>. Think of it as a mathematically disciplined way of moving points in space. Instead of letting the model guess, we used an iterative process to “move” samples toward their most likely counterparts. This was the “hammer” I loved to use, and it provided a crucial guarantee: the math ensured that the majority of our samples were being pulled toward the correct regions of the feature space, rather than drifting aimlessly. It turned a guessing game into a precise geometric migration.</p><p>The final, “beautiful” framework emerged as a <strong>single, unified optimization problem</strong>. It doesn’t just move the data; it jointly learns the model parameters while migrating the anchor samples toward their final goal in one seamless mathematical motion.</p><p>Check the paper 👉 <a href="https://hal.science/hal-05063059/">Particle Flow for Learning from Label Proportion.</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45e94a21a489" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/the-grind-behind-the-epiphany-a-short-story-of-a-research-project-45e94a21a489">The Grind Behind the Epiphany: A Short Story of a Research Project</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[At the Heart of Delivery: What Engineering Program Managers Do at Criteo]]></title>
            <link>https://medium.com/criteo-engineering/at-the-heart-of-delivery-what-engineering-program-managers-do-at-criteo-d7fc19896acc?source=rss----fc3ea5a64a12---4</link>
            <guid isPermaLink="false">https://medium.com/p/d7fc19896acc</guid>
            <category><![CDATA[company-culture]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[way-of-working]]></category>
            <dc:creator><![CDATA[Criteo Tech]]></dc:creator>
            <pubDate>Wed, 22 Apr 2026 09:19:04 GMT</pubDate>
            <atom:updated>2026-04-23T14:39:56.585Z</atom:updated>
            <content:encoded><![CDATA[<p>Authors: <a href="https://www.linkedin.com/in/auriane-barbalat-754a1534/">Auriane Bonmarchand</a>, <a href="https://www.linkedin.com/in/carolina-tealdo/?locale=en">Carolina Tealdo</a> &amp; <a href="https://www.linkedin.com/in/mnguyen10/">Minh-Quyên NGUYEN</a></p><p>At Criteo, Engineering Program Managers (EPMs) sit at the heart of our most complex, cross-team initiatives. We connect business ambition with technical reality, helping engineering teams ship impactful products at scale. In this article, three EPMs share what the role really looks like, why we love it, and how your career can grow in this path.</p><p>If you ask ten people what an EPM does, you’ll probably get ten different answers… So let us explain our vision of the EPM role: what we do (and don’t), why so many of us love this job, and how the role can evolve over time.</p><figure><img alt="The amazing EPM Criteo team posing at the latest team building" src="https://cdn-images-1.medium.com/max/1024/1*sWMMmMyxg9amtR32E3_krw.jpeg" /><figcaption>The amazing EPM Criteo team ❤</figcaption></figure><h3>What is an EPM at Criteo?</h3><p>At Criteo, we’ve been working hard to define this role more clearly. In this section, we’ll explain who we are, how we work, and what we are actually doing.</p><h4>Who are we?</h4><p>EPMs are part of Criteo Technology, led by the CTO. They are embedded in engineering domains (e.g., Infra/Platform, Security, Product functional areas such as campaign management or audience) or transversal programs (e.g., AI, agentic commerce). Our main goal is to deliver our projects efficiently, and to do so, we must facilitate and work in close partnership with:</p><ul><li><strong>Product Managers (PMs)</strong> — who translate an idea into a product vision.</li><li><strong>Engineering Managers (EMG) / Dev Leads/Devs </strong>— who own the technical strategy, the product building.</li><li><strong>other EPMs</strong> — who own <em>how it all comes together and actually ship</em></li><li><strong>Functional teams (Legal, Sales, Finance, …)</strong>- Who support our client operations (rollout strategy, sales enablement, compliance, data analysis…)</li></ul><p>A simple way to think about it: EPM is the heartbeat of a program, connecting tissue between business intent, technical reality, and execution at scale.</p><h4>How do we work?</h4><p>We use a shared mission statement for the EPM team at Criteo:</p><blockquote><strong><em>Our mission is to drive valuable outcomes from complex engineering projects and programs, and improve the delivery of R&amp;D, while supporting Product and Engineering.</em></strong></blockquote><p>This is a catchy phrase, but in practice, this means:</p><ul><li>Turning fuzzy ideas into <strong>scoped, phased programs</strong> that teams can execute</li><li>Making sure <strong>dependencies, risks, and trade‑offs</strong> are surfaced and handled early</li><li>Ensuring <strong>delivery flows</strong> are as simple and efficient as possible (reducing friction, hand‑offs, and noise)</li><li>Measuring and communicating <strong>outcomes</strong>, not just activity (e.g., revenue impact, time saved, quality improvements)</li></ul><figure><img alt="An image showing the three pillars with just logos" src="https://cdn-images-1.medium.com/max/1024/1*RJOgaLDdeGErURY6Hh6RDQ.png" /><figcaption>Our three pillars</figcaption></figure><p>In our role, we consistently keep 3 pillars in mind:</p><p><strong>Projects / Delivery</strong> — Making sure complex initiatives are correctly shipped by:</p><ul><li><strong>Clarifying</strong> <strong>scope</strong>, dependencies, and success criteria.</li><li>Designing the <strong>delivery plan</strong>: phasing, milestones, critical path, <strong>anticipating</strong> challenges and risks early, and preparing mitigation plans.</li><li><strong>Coordinating</strong> execution across teams, managing constraints (time, resources, scope), and adapting plans as reality changes constantly.</li><li><strong>Communicating</strong> progress, risks, and changes with as much transparency as possible.</li></ul><p><strong>Best Practices &amp; Processes </strong>— Acting as “guardians of the temple” for key R&amp;D processes with a pragmatic approach by:</p><ul><li>Supporting and improving rituals like<strong> project kick‑offs, technical architecture validation, and quarterly preparation/planning</strong>.</li><li>Helping teams pick and evolve ways of working (Scrum, Kanban, hybrid) that actually serve them, rather than forcing a one‑size‑fits‑all model.</li><li>Continuously refining our operating model: <strong>processes should serve the teams, not the other way around</strong>.</li></ul><p><strong>Influence and collaboration</strong> — Aligning all the stakeholders to move in the same direction by:</p><ul><li>Providing a <strong>neutral, program‑first view</strong> when priorities collide.</li><li>Sometimes, saying “not yet” or “not this” (always backed by actual capacity and risk data) when everything can’t fit at once.</li><li><strong>Keeping alignment</strong> across Product, Tech, and Go‑to‑Market so that increased velocity doesn’t just produce more chaos.</li></ul><h4>What concretely do we do(n’t)</h4><p>People we work with often mix up what we do and what we don’t do. Let us clarify what people think we do and what we actually do.</p><p>🚩️ “EPMs manage people.”<br>✅ We <strong>lead through influence </strong>and partner with managers. <strong>BUT</strong> EMG/Devleads are managing the people.</p><p>🚩️ “EPMs write code and define technical architectures.”<br>✅ We take part in technical discussions and ask probing questions (sometimes “annoying” but always necessary) to strengthen the shared understanding between Product and Engineering and to ensure consistency at the company level. We don’t write production code, but we do speak the engineers’ language: most EPMs have an engineering background (though it’s not mandatory), which allows us to challenge plans and identify risks. <strong>BUT</strong>, development teams own the technical decisions, and Product Managers own the product features.</p><p>🚩️ “EPMs are like Scrum masters, they plan and organize our teamwork”.<br>✅ Teams can use Scrum or Kanban, and some ceremonies overlap. <strong>BUT</strong> we focus on <strong>end‑to‑end program outcomes</strong>, not on running every daily for a single squad.</p><p>🚩️ “EPMs prioritize for the company.”<br>✅ We frame trade‑offs, expose dependencies, and highlight constraints. We often challenge prioritization or roadmap assumptions when they clash with capacity or reality. <strong>BUT</strong> PMs and Dev Leads own their roadmaps and the final calls.</p><p>🚩️ “EPMs defend only R&amp;D or product interests.”<br>✅ We must take <strong>a step back and see the big picture</strong> outside of Product or R&amp;D point of view to deliver the best possible outcomes for Criteo.</p><p>🚩️ “EPMs must be in all the decision meetings, and everything must be validated by us.”<br>✅ We don’t want all information and decisions to be funneled “through the EPM.” We push for open channels and direct conversations between the people who actually do the work.</p><figure><img alt="A visual explainig with examples the do and don’ts for an EPM at Criteo" src="https://cdn-images-1.medium.com/max/1024/1*7IjLOLDUo-uDw46fHQcebg.png" /><figcaption>What an EPM does and does not</figcaption></figure><h3>Why we love our job</h3><p>Given all this complexity and ambiguity, why do people stay in EPM roles and genuinely enjoy them?</p><p>One of the main reasons is the diversity. No two programs look the same<strong>. </strong>When you take a look at the different projects the 3 of us have been working on, those are completely different with different technical topics, product and business goals, and stakeholders:</p><ul><li><a href="https://www.criteo.com/go/"><strong>Criteo GO</strong></a>: Our new self-service platform that enables small businesses to launch and optimize effective digital ad campaigns in minutes.</li><li><a href="https://www.criteo.com/blog/introducing-agentic-audiences/"><strong>Audience Agent</strong></a>: A new way of interacting with audience data, leveraging emerging agentic systems to make complex workflows more intuitive and automated — Which we’ll deep-dive in another post.</li><li><strong>Datacenter migration</strong>: The opening of a new air-cooled datacenter room in Dallas, aligned with updated DC standards, improves efficiency and paves the way for advanced technologies such as densified infrastructure. We’ll explore this topic in a future post.</li></ul><p>Another reason is the dynamism and the daily challenges. We never get bored. We’re often brought in when everything is moving at once (priorities, constraints, and expectations) and there’s no obvious path forward, which is exactly what makes the work engaging. If we can give you examples, we have to:</p><ul><li>Deal with <strong>ambiguity</strong>: We’re often pulled in when something is clearly important, but nobody has yet turned it into a clear objective, scope, and plan. Our job is to take that fuzzy idea and work with stakeholders to turn it into something concrete that teams can actually build and deliver.</li><li>Manage the <strong>constraints: </strong>Capacity versus ambition, tech debt, compliance, client commitments, market windows. Quarter preparation at Criteo, deciding what actually fits in the next quarter, can be a roller coaster. It is essentially a structured conversation about finding the right balance between trade‑offs.</li><li><strong>Lead through influence, no formal authority: </strong>We don’t manage people, and we don’t sign off on roadmaps. Instead, we help shape how programs are defined, sliced, and delivered, and we’re expected to speak up when something needs to be reshaped or even stopped.</li></ul><p>And finally, we love our job also because of <a href="https://careers.criteo.com/en/we-are-criteo/culture/"><strong>Criteo’s culture</strong></a>: a collaborative, supportive, and learning-oriented environment where we get to work with smart people who are willing to share, challenge, and grow together.</p><h3>What can I become when I grow old?</h3><h4>Who becomes an EPM?</h4><p>Whether you started as an engineer, a PM, or a project/program manager is finally secondary. The specific path you took matters less than the skills and mindset you bring.</p><p>What really makes someone effective as an EPM at Criteo is a mix of:</p><ul><li><strong>Systems thinking:</strong> being comfortable with complexity, dependencies, and trade-offs.</li><li><strong>Structured communication:</strong> turning messy reality into clear narratives and actionable plans.</li><li><strong>Bias to action:</strong> driving progress instead of staying on the sidelines.</li><li><strong>Resilience and curiosity:</strong> sticking with tough problems and wanting to understand how things really work.</li><li><strong>Technical knowledge:</strong> understanding engineering concepts well enough to follow technical discussions, challenge plans, and spot risks.</li></ul><h4>What can I do then?</h4><p>Once you’re in the role, the natural next question is: <em>what does growth look like if I stay an EPM?</em> Or should I try something else? The good news is that both scenarios are possible.</p><figure><img alt="A visual showcasing the career path for an EPM at Criteo with the different options" src="https://cdn-images-1.medium.com/max/1024/1*xNNFQakKx791R1rQTEPKSw.png" /><figcaption>EPM Career Paths</figcaption></figure><h4>Growing within the EPM path</h4><p>If you choose to stay in the EPM craft, you can build a long, rich career without changing jobs entirely — your scope, impact, and challenges simply grow over time. Instead of running a single project in one product area, you gradually move to larger, more complex programs and portfolios that span multiple teams and connect to company-level priorities, not just one product.</p><p>As you progress, the challenges also evolve:</p><ul><li><strong>Functional and technical</strong>: deeper product and tech topics, more complex systems, tougher trade-offs.</li><li><strong>Operational</strong>: heavier coordination, higher stakes, more critical communication and reporting, especially on initiatives closely followed by leadership.</li></ul><p>With seniority, we’ll also expect you to share your experience by mentoring other EPMs and ICs, and by supporting EMGs/Devleads on program practices.</p><h4>Moving beyond EPM</h4><p>And if, at some point, you want to move beyond the EPM role itself, the skills you’ve built can easily be reused in several roles:</p><ul><li><strong>Product Management.</strong> If you’re drawn toward owning the “why” and “what” — problem definition, value, customer outcomes — your EPM background in execution and cross‑team alignment is a strong foundation.</li><li><strong>Engineering Management / Tech Leadership.</strong> If you want to lead teams directly and own technical direction, you already understand capacity, dependencies, risk, and how to make complex work deliverable.</li><li><strong>Org / Strategy / Business Ops.</strong> If you love planning, prioritization, and portfolio‑level thinking, there are paths into roles focused on how we invest, how we plan across time horizons, and how we evolve our operating model.</li><li><strong>Domain leadership.</strong> Some EPMs go deep into a space (e.g., infra, AI, security, data, commerce experiences) and evolve into leaders whose job mixes domain strategy with strong program orchestration.</li></ul><p>The point isn’t that EPM is “just a stepping stone”. It’s that:</p><blockquote><strong><em>Being an EPM builds a rare mix of strategic thinking, execution craft, and cross‑functional influence that keeps a lot of doors open.</em></strong><em> You can stay and deepen your craft, or you can pivot when the right opportunity appears — without starting from scratch.</em></blockquote><p>If we had to summarize in short words, we are not always in the spotlight, but if you look behind most large, cross‑team successes in Product &amp; Technology, you’ll usually find an EPM somewhere in the middle asking the awkward questions, mapping the dependencies, making risks visible, nudging decisions forward, and quietly making sure the whole thing actually works. And for those of us who love seeing the whole system, connecting dots, and getting things done and done right, then this job is made for you.</p><p>The three of us who worked on this article genuinely love what we do. Even if the day‑to‑day isn’t always easy, we feel we’re in a unique position: close enough to the functional side of Criteo to understand the business, and close enough to the technical side to enjoy the engineering challenges that come with it. We rarely get bored, and we have the chance to work with great teams in a great atmosphere.</p><p>If this article inspires you and sounds like the kind of challenge you’d enjoy, keep an eye on EPM opportunities on our <a href="https://careers.criteo.com/en/jobs/?keyword=&amp;team=Engineering&amp;pagesize=10#results">careers page</a> 👇</p><p><a href="https://careers.criteo.com/en/jobs/?keyword=&amp;team=Engineering&amp;pagesize=10#results">Your next adventure awaits!</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d7fc19896acc" width="1" height="1" alt=""><hr><p><a href="https://medium.com/criteo-engineering/at-the-heart-of-delivery-what-engineering-program-managers-do-at-criteo-d7fc19896acc">At the Heart of Delivery: What Engineering Program Managers Do at Criteo</a> was originally published in <a href="https://medium.com/criteo-engineering">Criteo Tech Blog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>