<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:webfeeds="http://webfeeds.org/rss/1.0" version="2.0">
  <channel>
    <atom:link href="http://pubsubhubbub.appspot.com/" rel="hub"/>
    <atom:link href="https://f43.me/newyork-times-developers.xml" rel="self" type="application/rss+xml"/>
    <title>NewYork Times Developers</title>
    <description>All the Code That&amp;#039;s Fit to Print</description>
    <link>http://open.nytimes.com</link>
    <webfeeds:icon>https://s2.googleusercontent.com/s2/favicons?alt=feed&amp;domain=open.nytimes.com</webfeeds:icon>
    <generator>f43.me</generator>
    <lastBuildDate>Sun, 19 Apr 2026 16:12:54 +0200</lastBuildDate>
    <item>
      <title><![CDATA[How The New York Times Games Team Delivered Accessible, Cross-Platform Dark Mode]]></title>
      <description><![CDATA[<h4>Bringing accessible, brand-consistent dark mode to life in The New York Times Games app through cross-platform design and engineering collaboration.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yLeICgvBZ5fayu1RUjyTeQ.gif"><figcaption>Illustration by Allie Sullberg</figcaption></figure><p><strong>By Vanessa Johnson, Daniel Falokun, Michael Ingber and Oleksandr Zabiiako</strong></p><p>The Games Mobile App introduced dark mode back in October. This seamless implementation was a collaborative effort, requiring careful planning and management of design, cross-platform coordination, and engineering work across both legacy and modern user interface systems. The process to implement dark mode across the app included consideration on the visuals, colors, and icons that are mode specific to maintain legibility and brand consistency. The New York Times Games team is excited to have delivered this feature before the end of 2025, and thrilled to be able to roll out a feature that continues to make our app accessible for all.</p><h3>Development Work on Mobile</h3><p>On the development side, the mobile and web engineers synchronized assets which were colors, fonts, and images to ensure that hybrid screens showed the correct styles and colors. This was possible since our design system across mobile was constructed in a way that encouraged consistency and scalability across platforms. With clear and easy to follow designs supported by our internal design system, Android and iOS could ensure consistency on both platforms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/996/1*x3hIVp_5wr7xCfz5_Z725A.png"><figcaption>Screens in dark mode</figcaption></figure><p>From an Android perspective, it required separate approaches for XML (Extensive Markup Language) based screens which use an imperative, hierarchical approach and Jetpack Compose screens that use a more modern declarative approach. <a href="https://developer.android.com/develop/ui/views/layout/declaring-layout">XML</a> and<a href="https://developer.android.com/compose"> Jetpack Compose</a> are different ways the UI can be constructed. To ensure dark mode compatibility, all features were revisited to make sure they were adapted, especially the additions that were being worked on during the dark mode project. Another aspect of this development was updating external libraries that required making pull requests, creating a version of those changes for testing to make sure it worked in the main project, approval, testing, and merging of the changes in the external library. With these additions, the support of dark mode was a multiteam effort.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/818/1*jqvuVZKqRLHTc2ORM6WvUw.png"></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/318/1*qYhFU0Emm0CWLZk9SQiLfA.png"></figure><p>From an iOS perspective, supporting dark mode required distinct approaches for UIKit-based screens (including legacy Objective-C views) versus SwiftUI screens. UIKit screens depended on two key callbacks: overrideUserInterfaceStyle, which allows developers to explicitly set a screen’s appearance regardless of system settings, and traitCollectionDidChange, which triggers whenever the system’s appearance preference changes, enabling dynamic updates to UI colors and styles. SwiftUI screens, by contrast, used the @Environment(\.colorScheme) property wrapper along with asset catalogs configured for light and dark variants, providing a more declarative and automatic approach to handling appearance changes.</p><p>This distinction was critical because UIKit screens required manual observer pattern implementation to catch appearance changes, while SwiftUI handled these updates natively through its reactive system.</p><p>The Games app also integrates several shared New York Times packages that are maintained outside the core repository. To keep dark mode working consistently across all features, we needed to coordinate updates to these external packages. This approach ensured that components such as the login flow and profile avatar selection screen, which rely on these shared packages, would support dark mode alongside the rest of the application.</p><h3><strong>Why was this coordination necessary?</strong></h3><p>Dark mode is a system-wide feature that users expect to work seamlessly across the entire app. Without updating these external packages, parts of the experience would break or appear inconsistent, diminishing the overall value of the dark mode feature.</p><p>With dark mode now available in The New York Times Games app, our users can play their favorite puzzles any time of the day while reducing eye strain during evening play sessions. Dark Mode is a highly valued feature — players are actively using it, demonstrating strong demand for this capability and validating the effort invested in its implementation across all screens and dependencies.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qBwcrL2Hkx3rmeMvNxlDRQ.png"><figcaption>Users Raving about Dark Mode</figcaption></figure><h3>The design perspective</h3><p>The first major step was moving from fixed color definitions to a semantic color system based on variables. Instead of using hard-coded colors, we introduced semantic tokens to the library, such as backgrounds, text, strokes and interactive elements. This approach allowed us to support Dark Mode consistently and at scale. Since we revisited the colors we took the opportunity to reorganize our naming convention as well. To support this shift we started from creating a color mapping document. On the left it listed our legacy colors, and on the right it was mapped to its new color variable. For example, what used to be called “Background Primary“ became “$bg-page”. This mapping was essential for keeping both designers and developers aligned.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/752/1*UPorPtUUuUhhUKoFlicwlw.png"></figure><p>Once the foundations were in place, we moved on to adapt actual screens. That included updating components and pages, defining rules for how surfaces behave in light and dark contexts, and covering edge cases. There was also a need to create new design tokens that were not needed before. For example, for the bottom sheet in the light theme, the background was always white. But when switching to the dark mode, using dark gray instead of black makes it much better.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dC_QWZbiETPF1SNlEPhOHQ.png"></figure><p>Our illustrations also couldn’t simply have their colors inverted. Flipping the colors made it look too high in contrasty. We ended up reviewing each illustration individually and manually adapting it for dark mode. In addition to illustrations, we also revisited in-app animations to ensure they support Dark Mode. For example, new features are introduced through a modal shown when a user opens the app after an update. These modals typically include an animation that highlights the main idea of the feature, and we update this system so that the animations now adapt seamlessly to both light and dark modes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h4yqDFmoPOT3-7zjYqPc7g.png"></figure><p>An essential part of the process was a design review of every screen as it was implemented. Each feature and flow went through VQA (visual design check) to ensure visual consistency. This includes validating all interactions and contextual elements, making sure no assets were missing, miss-colored or behaving unexpectedly in a dark environment. This allows us to catch issues early and deliver great final experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*x8ReHJhSIsOeuRnqMHAAcg.png"></figure><p>Overall, the design work behind Dark Mode became much more than a tech upgrade or just inverting our existing colors.. It was a fully-scale process that brought evolution of our design language, color system and visual assets.</p><h3>The web perspective</h3><p>We launched a new Badges feature in September, and a “badge detail” view was built which can be opened in multiple places. It can be opened within each of the game webviews where users can earn badges, including on web/mobile-web/news apps, and it can also be opened from the natively built Me Tab and Trophy Case in the Games Apps. For the latter use case, we built a standalone hybrid webview that serves a single badge detail.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/462/1*e9zB9665FNf9dE-4VFyQKw.png"><figcaption>Within the Connections webview</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/450/1*r6CqfcHPx9SWgsolzGHXRg.png"><figcaption>As a standalone webview</figcaption></figure><p>This standalone webview is powered by a set of query parameters. The app passes all dynamic information (which badge it is, when it was earned, the user’s progress towards the next level of the badge, etc) through the query string in the URL and the webview parses that information to render the content.</p><p>In order to support the apps’ dark mode, we needed this standalone webview to respect each app’s dark mode setting. The apps already contain many webviews — every non-crossword game is a webview. But each of those games has its own internal dark mode setting, disconnected from the app’s global dark mode setting. This was intentionally designed to give users more fine grained control over which games they prefer in dark or light mode.</p><p>To sync dark mode between this standalone webview and the apps, we updated the native to web contract so that the webview would recognize an additional query parameter named “dark”. If the app passes in that query parameter, the webview knows it must render in dark mode. Badge detail is then able to set its theming in a very similar way to most game webviews, like so:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/502/1*T-pYeuOReoUgueqMV1--vA.png"></figure><p>Some extra care needed to be taken to get enough contrast between the white text and the multi-colored radiating shape animation, especially given the blurred effect on the webview’s background. So in dark mode only, we lower the opacity of the radiating shapes to 40%.</p><p>In summary, to support dark mode on this webview, we leveraged prior work that enabled dark mode on game webviews. The key change was that instead of giving the user control over the setting within the webview, we allowed each app to pass in that app’s setting via a query parameter.</p><h3>Takeaways</h3><p>Dark mode in the apps has been a big milestone for The New York Times and brings great joy to our users. This project showed the complexity and teamwork needed across platforms to bring a high impact project like Dark Mode over the finish line.</p><p><a href="https://www.linkedin.com/in/danielfalokun/"><em>Vanessa Johnson</em></a><em> is an Android Engineer working on the Games App at The New York Times. Vanessa has tech led multiple projects that include Dark Mode, Strands Archive, and Connections Bot in the Apps. When not at work, Vanessa likes to play pickup basketball and travel to speak at various conferences.</em></p><p><a href="https://www.linkedin.com/in/danielfalokun/"><em>Dan Falokun</em></a><em> is an iOS Engineer working on the Games App at The New York Times. Dan has tech led multiple projects that include The Midi Crossword, Strands Archive, Dark Mode and Connections Bot in the Apps. Outside of work, Dan likes to travel and listen to music.</em></p><p><em>Mike Ingber is a Staff Web Engineer on NYT Games.</em></p><p><em>Special Thanks to our past interns: Naomy Portillo and Tony Vu for starting the project on mobile, Ihor Shamin, Nazar Novak and Maksym Safronov for helping get dark mode over the finish line on the Android side and Lian Chang, Kathy Lee, Robert Vinluan and William Frohn on the design side.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=be7241ddb7ba" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/implementing-dark-mode-in-the-games-app-be7241ddb7ba">How The New York Times Games Team Delivered Accessible, Cross-Platform Dark Mode</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/implementing-dark-mode-in-the-games-app-be7241ddb7ba</link>
      <guid>https://open.nytimes.com/implementing-dark-mode-in-the-games-app-be7241ddb7ba</guid>
      <pubDate>Thu, 16 Apr 2026 17:35:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Right Team for the Job: From Engineering to Product: A Superpower for Developer Platform…]]></title>
      <description><![CDATA[<h3><strong>The Right Team for the Job: From Engineering to Product: A Superpower for Developer Platform Strategy</strong></h3><h4><em>Introducing Danny Cassidy, Senior Technical Product Manager, Developer Productivity in Developer Platforms</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*S1GR_afPfX0TMn1QKLsxFQ.jpeg"><figcaption>Illustration by Claire Merchlinsky</figcaption></figure><p><strong>By Geethu Jacob, Daniel Cassidy, Nikki Larson and Erica Vendetti</strong></p><p><strong><em>“PMs actively and effectively engage with engineering and technology decisions, understanding possibilities and consequences.”</em></strong></p><p><strong>This article is part of a New York Times Open </strong><a href="https://open.nytimes.com/building-the-new-york-times-product-team-the-right-team-for-the-job-ff9b43222537"><strong>series</strong></a><strong> showcasing the breadth of experiences and backgrounds of our Product Managers.</strong></p><h3><strong>Engineering can fuel product leadership</strong></h3><p>For Danny Cassidy, coding was an early creative outlet. As a high school student, he taught himself to code, trying his hand at frontend web development.</p><p>“I was very inspired by online communities back then, and how the internet could foster connection for people across the world. So, I first learned how to make extensions on forum software. My first paid gig in high school was building a social networking feature into a site for pet owners so that they could create profile pages for their pets. Those were the days!”</p><p>Building on the base of that passion, Danny studied information technology in college. “There’s a definite craft to software development”, he says. “It’s not just technical. You are thinking about solving a problem in an elegant and legible way. I always enjoyed that part of the process.” As a software engineer, Danny focused on building backend APIs and content management systems (CMS) for media brands. Here, Danny learned to understand how engineering solutions fit into the business context. Engineers “need to know how a solution will evolve and scale over time. And their solutions need to be understood and maintainable by a multitude of people throughout all of this.”</p><p>In 2015, Danny accepted an engineering job at The Times working on the backend APIs that deliver our digital content from our CMS to our desktop and mobile apps. As an engineer at The New York Times, Danny had the opportunity to work with more stakeholders than before:</p><p>“As I started working on more complex, cross-functional projects, I noticed great engineering leaders consistently asking fundamental questions: Why are we building this? Who is it serving? How is it helping the business? This realization inspired me to more fully dedicate my career to understanding and measuring how technology can drive significant business and user impact.”</p><p>Danny started to think about a move to Product Management after a conversation with leadership:</p><p>“I had no idea there was such a thing as Technical Product Management. It was honestly never a consideration for me. I always thought I’d spend my entire career in engineering. One day, my boss at the time asked me if I was interested in Product Management, and it opened up this whole conversation. I am very grateful that he recognized a shift in the kind of work I was excelling at and raised the question to me.”</p><h3><strong><em>Leveraging a technical background to build for engineers</em></strong></h3><p>Danny is now a Senior Technical Product Manager in the Delivery Platforms Mission. He is responsible for providing centralized infrastructure and tooling to the New York Times product engineering teams so they can develop more efficiently. “The platform we are building out is <em>very </em>technical and serves many kinds of engineers at The Times, all with different levels of experience, expertise, and needs. I lean on my technical background almost every day to help navigate across technical domains and user personas.”</p><p>In his current position, Danny’s background as an engineer enables him to <strong>effectively engage with engineering and technology decisions, understanding the possibilities and consequences </strong>of each potential path. For a role like Danny’s, “it’s difficult to have strong Product Judgment if you struggle to understand how technical decisions impact your users and the business outcomes you are trying to deliver.”</p><p>Danny’s engineering background proved invaluable when his team faced a critical CI/CD pipeline replacement. (Think of a CI/CD pipeline as the “assembly line” for software, making sure updates reach users quickly and reliably!) When a vendor sunset their current tooling, Danny understood firsthand the developer blockers it created for multiple teams. Armed with empathy for the engineers, Danny led a user-centered, data-driven evaluation across The New York Times and Wirecutter. His deep engagement with engineering allowed him to synthesize platform pain points, assess future-fit alternatives, and ultimately align the organization around a long-term CI/CD strategy that successfully balanced business impact, developer experience, and technical feasibility.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fAl5DVcOeh4geiiinkACLg.png"><figcaption><em>A snapshot from the evaluation matrix, showing how engineering teams’ needs were prioritized and compared across potential CI/CD vendors, guiding the decision toward the most future-ready solution.</em></figcaption></figure><p>Danny’s journey underscores how deep technical roots can strengthen a product manager’s leadership especially in platform work where empathy for engineers, strategic thinking, and business context must align. As you’re considering your next career steps, if you’re passionate about connecting user needs and business outcomes in tech, product management could be your next career step.</p><p>And if you’re like Danny, your technical acumen might be a powerful asset to build tools that empower others to do their best work!</p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=a290e65970ea" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/the-right-team-for-the-job-from-engineering-to-product-a-superpower-for-developer-platform-a290e65970ea">The Right Team for the Job: From Engineering to Product: A Superpower for Developer Platform…</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/the-right-team-for-the-job-from-engineering-to-product-a-superpower-for-developer-platform-a290e65970ea</link>
      <guid>https://open.nytimes.com/the-right-team-for-the-job-from-engineering-to-product-a-superpower-for-developer-platform-a290e65970ea</guid>
      <pubDate>Wed, 11 Feb 2026 22:52:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Building The New York Times Product Team: The Right Team for the Job]]></title>
      <description><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7veLdfomF4hRWjmAvnGFXA.jpeg"><figcaption>Illustration by Giacomo Bagnara</figcaption></figure><p><strong>By Nikki Larson, Erica Vendetti and Michael Beach</strong></p><p>Our mission is simple: We seek the truth and help people understand the world. Accomplishing that mission requires each of us to build trust, seek out different perspectives, collaborate respectfully, and continuously strive to deliver the very best in all we do. But what exactly does that mean for Product Managers (PMs)? How do we earn and maintain trust with tens of millions of global readers in an era of misinformation? Where are new readers finding and developing a daily habit with our original reporting? How can Product unlock growth opportunities for our business? How can we help readers connect with their passions by building products like Games, The Athletic or Cooking? How do we use AI to responsibly advance our mission? How do we scale our systems to support breaking news? PMs at The New York Times solve a variety of problems for our readers, our journalists, other product and functional teams. To meet the evolving needs of our almost 12 million subscribers, we rely on a Product team with a wide range of unique backgrounds.</p><p>It takes creativity and expertise from people in every part of the company to fulfil our mission. So it’s not uncommon for our PMs to have started their careers in roles outside of product. To build a world-class Product team, we’ve hired both PMs by trade as well as those who were previously dancers, consultants, entrepreneurs, journalists, strategists, operations specialists, and engineers. Our diverse experiences fuel the analytical rigor, creativity, communication skills, leadership, and execution skills needed to excel in getting to know our users’ needs and leading teams to build solutions to meet them. This post will help introduce you to PMs whose backgrounds outside of Product Management help them excel in their current roles at The New York Times.</p><h3>One guiding framework, many possible solutions</h3><p>While our PMs work on products across the entire business, they are all guided by a common set of competences. No matter how different the problem, PMs continually develop their skills in these areas to help guide our teams to solutions and root us in our <a href="https://www.nytco.com/mission-and-values/">values</a>.</p><ul><li><strong>Product Strategy: </strong>PMs use structured thinking to define and prioritize impactful work that solves the right problems for our users, our business, and our journalistic mission. They analyze trends and develop product vision with empathy for our various users, including readers seeking a range of news and life needs, journalists who use our editorial tools to produce the most compelling and distinct multimedia reports, and engineers to enhance developer productivity.</li><li><strong>Execution: </strong>PMs are here to move the business forward by unlocking product-driven growth opportunities. They are resourceful, driven, and resilient, overcoming obstacles with determination and focus to help teams move with urgency, focus, and impact.</li><li><strong>Leadership:</strong> PMs are critical for team dynamics, helping to facilitate inclusive, high-performing teams where everyone feels valued. They lead with influence, building trust and communicating clearly to achieve shared goals.</li><li><strong>Cross-Functional Collaboration: </strong>PMs foster strong cross-functional relationships, collaborating effectively to set priorities and drive results.</li><li><strong>Technical Acumen: </strong>PMs possess a strong understanding of technology, enabling them to effectively engage with engineering decisions, including helping to uncover the possibilities and consequences of technical choices.</li></ul><p>The New York Times welcomes PMs of different backgrounds and skills, who add a richer understanding of human experience into the very core of the products they manage. PMs share a deep commitment to the importance of independent journalism, and leverage their unique perspective to make the essential value of our journalism better understood and more useful to more people. <strong>This series is meant to help you discover how our Product team maintains the integrity of our mission while navigating the digital transformation around us all. </strong>Their stories are a nod to the power of transferable skills and the nature of product leadership at The New York Times.</p><p>Ultimately, this series is more than just a showcase of our team. It’s an exploration of how diverse pathways can lead to extraordinary impact and a reflection of our belief that the best products are built by teams who bring the richness of the human experience to the challenge of solving problems. They build solutions for our readers, our journalism, and the world.</p><p><strong>Curious about joining our team? Check out our </strong><a href="https://www.nytco.com/careers/"><strong>career boards</strong></a><strong> for more information.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=ff9b43222537" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/building-the-new-york-times-product-team-the-right-team-for-the-job-ff9b43222537">Building The New York Times Product Team: The Right Team for the Job</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/building-the-new-york-times-product-team-the-right-team-for-the-job-ff9b43222537</link>
      <guid>https://open.nytimes.com/building-the-new-york-times-product-team-the-right-team-for-the-job-ff9b43222537</guid>
      <pubDate>Wed, 11 Feb 2026 22:42:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How The New York Times is scaling Unit Test Coverage using AI Tools]]></title>
      <description><![CDATA[<h4>How AI tools are helping our software engineers write better tests at scale</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7Ydoq98t7mlPQUZkpTz4Mg.gif"><figcaption>Illustration by Nick Little</figcaption></figure><p><strong>By Eric Chima and Leonardo Quixadá</strong></p><p>At The New York Times, we’re all excited to build fresh new experiences that delight our users. Our product managers are driven to find new ways to get our work in front of our audience and build reader engagement. Our engineers are motivated to solve unique technical challenges. And just when you think all that work is on track, breaking news strikes and all of our plans change at once.</p><p>With all that going on, who could blame us if our test coverage couldn’t quite keep up?</p><p>Like every engineering organization, The Times deals with routine maintenance tasks: updating dependencies, cleaning up old code, <a href="https://open.nytimes.com/accessibility-requirements-not-features-76d9758665cd">maintaining accessibility standards</a>, and, yes, building testing into all of our products. Our engineers are committed to quality, but when you work at the speed of news, there’s always a new issue that needs to be addressed. Fortunately, generative AI has arrived with the promise of tidying up after us, taking care of the busy work, and giving time back to our developers to focus on feature development. But how far can you trust it?</p><p>Recently, one of our platform teams used AI tools to build out unit tests across our flagship product, the <a href="http://nytimes.com/">News site</a>. This was an opportunity for our testing to catch up with our rapid development. Our goal was to improve the reliability of our web app, but also to evaluate AI products and determine how far we could push them to do work in bulk across our codebase. As expected, the agents required strict human supervision, but they improved our efficiency in writing tests and let us quickly expand coverage on some of our most critical code.</p><h3>AI accelerates, but humans test the tests</h3><p>Unit tests are a crucial part of the development process. The idea is to divide application code into small pieces and write tests for each, creating guardrails to ensure that changing one piece of the site doesn’t impact the rest. Having comprehensive unit tests makes the site more reliable and lets us roll out major changes (like <a href="https://open.nytimes.com/enhancing-the-new-york-times-web-performance-with-react-18-d6f91a7c5af8">last year’s React upgrade</a>) more confidently. But like many fast-moving engineering teams, we found our test coverage hadn’t kept pace with our rapid development. When we audited our News site, we found that we only had about 60 percent test coverage across our codebase. To compensate, we had to conduct extensive manual testing before releasing new features.</p><p>To us, expanding our test coverage seemed like an ideal application for generative AI. We knew that AI could struggle to deal with code context across a large project, but that’s less of an issue when the agent is writing self-contained unit tests for modular code. The tool only needed to cover each individual file, a task it should be able to replicate reliably without understanding the entire codebase.</p><p>We set out with an initial goal of reaching 80 percent test coverage across our entire News monorepo, touching code owned by over a dozen different teams. We initially covered six different projects, taking them from an average of 28% code coverage all the way to 83%. We estimated that AI cut the required work by 70%, reducing the effort for a single project from weeks to hours.</p><p>But while AI accelerated our work, it wasn’t reliable or autonomous enough to cover the whole monorepo without human supervision. The tools had to be closely monitored and each test verified. It took enough work that even with AI assistance, our small group wasn’t going to be able to cover everybody else’s code. Instead, we chose a variety of different web projects and key news pages as test cases, and then wrote up instructions that other teams (and now, you, our Open Blog readers!) can use to generate their own unit tests.</p><h3>The test generation process</h3><p>Before we could begin, we needed a reliable way to measure test coverage throughout our code base. To do that, our engineers wrote a small package called test-cov that would iterate through a directory and measure the test coverage of each file. That package was key because it not only allowed us to measure our progress but would be repeatedly fed into the AI prompt as it learned which files needed additional tests.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rzTURaBzUS-gcVgGilPuTg.png"><figcaption><em>Sample output from test-cov on a GraphQL subgraph directory</em></figcaption></figure><p>With that in place, we began working with simpler, standalone projects within our monorepo. They allowed us to refine our prompting strategies to consistently achieve our 80% coverage target before moving on to more dense code. Eventually, we advanced all the way to the Story template, the critical page type that displays <a href="https://www.nytimes.com/2025/11/12/opinion/ai-coding-computer-science.html">most</a> <a href="https://www.nytimes.com/2025/11/12/us/politics/scott-bessent-irs-loophole.html">of</a> <a href="https://www.nytimes.com/2025/11/12/opinion/ai-coding-computer-science.html">our</a> <a href="https://www.nytimes.com/2025/11/12/science/brain-implants-technology-disability.html">articles</a>. By that stage, we had distilled our process to a point where we were able to quickly and efficiently improve Story’s code coverage from 53 to 83 percent.</p><p>The actual workflow consisted of two loops: a big loop (the “User Loop”) and a smaller one (the “AI Loop”). The User Loop involves creating a chat, feeding it a prompt, and then letting the AI Loop run. Once the AI’s work is done, the user can review the results and trigger the AI Loop again if necessary. Ideally, the User Loop would only need to run once, but that isn’t always the case. The AI Loop involves the AI agent running the test-cov package, identifying coverage gaps, generating new tests, running the tests to validate them, and then running the test-cov package again to see whether more iterations are necessary.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EwRL1q3JUn1rxyygZHipHw.png"></figure><p>Allowing an LLM to edit production files carries inherent risks. One is that the agent will introduce regressions or security holes into your code. Another is that the AI will “cheat” by editing the source code to conform to existing unit tests, rather than the other way around. To combat that, we introduced the most important instruction in our prompt:</p><p>“Do not touch the source code.”</p><p>That command was one of two “walls” that confined the AI agent. The other wall was our test-cov package, which ran on every iteration and produced a read-only report. That was another constraint that could not be cheated. Together, the two walls trapped the AI loop in a silo where it could only leave if it hit the goal.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yij_DC2xGLf_ZmJIxT9SNg.png"></figure><h3>The agent in action</h3><p>Our early experiments involved a lot of trial and error. Sometimes, the agent would create useful unit tests. Other times, it would hallucinate unknown commands, get stuck in a loop of creating and deleting tests, or just run too many commands and hit our LLM’s limit. Even with our smallest applications, the work was slow going.</p><p>To solve this, we asked the agent itself to refine the rules we were feeding into the tool. Our final prompts were roughly seven pages (largely AI-written but reviewed and edited by humans) and included strict guidelines on how the LLM should write and verify its tests. We gave it rules to follow across a wide variety of categories, including:</p><ul><li><strong>Agent role </strong>— If you tell the agent that it’s a senior Javascript engineer, it’s more likely to write code like one. See example below.</li></ul><pre># Unit Test Coverage Improvement Agent<br><br>You are a senior JavaScript/TypeScript engineer specializing in unit testing with Jest and React Testing Library. Your mission is to systematically improve code coverage for JavaScript/TypeScript source files in a monorepo environment.</pre><ul><li><strong>Target identification and coverage areas</strong> — Coverage goals, what directories to search, what testing frameworks to use, and where to target tests. We focused on things like components, utilities, API calls, etc.</li><li><strong>Test structure and generation </strong>— What types of tests to create, where to put them, how to name them, etc.</li><li><strong>Available commands </strong>— Tools the agent can use to do its work. That included our test-cov package and the tools necessary to execute and validate tests in our system.</li><li><strong>Success criteria and quality standards </strong>— All tests pass without flakiness, tests are maintainable and use standard conventions, and test coverage goals are met.</li><li><strong>Safety guardrails </strong>— Focus on quality over quantity, report obstacles rather than making assumptions, and back out after 10 iterations to avoid infinite loops. Most importantly, <em>never modify the source code!</em></li><li><strong>Error handling </strong>— What to do if coverage becomes flaky, test coverage decreases, or the agent becomes stuck on complex logic.</li><li><strong>Reporting template </strong>— How the agent should report the results when it’s done.</li></ul><p>Below: An example rule for reporting templates</p><pre>## Reporting Template<br><br>```markdown<br>## Code Coverage Improvement Report<br><br>**Project**: [Project Name]<br>**Date**: [Date]<br>**Duration**: [Time Spent]<br><br>### Summary<br>- **Files Processed**: X<br>- **Initial Average Coverage**: Y%<br>- **Final Average Coverage**: Z%<br>- **Target Achievement**: [Met/Partially Met/Not Met]<br><br>### Detailed Results<br>| File | Initial | Final | Improvement | Status |<br>|------|---------|-------|-------------|--------|<br>| file1.ts | 45% | 85% | +40% | ✅ Target Met |<br>| file2.ts | 60% | 78% | +18% | ⚠️ Close to Target |<br><br>### Challenges Encountered<br>- [List any significant obstacles]<br><br>### Recommendations<br>- [Suggestions for further improvement]<br>- [Areas needing manual review]<br><br>### Files Requiring Manual Attention<br>- [List files that couldn't reach 80% threshold]<br>- [Include specific reasons and suggestions]</pre><p>Once we had refined the prompt enough, the process was much smoother. We still kept close supervision on the process, but the agent was efficiently creating effective tests, and the rules were reusable across larger projects. We had initially hypothesized that large routes would be more difficult than standalone projects, but even when we graduated to the Story route, which is a very complex codebase, we were able to create the tests we wanted with only minimal effort and human supervision. The time required to add or improve unit tests shrank from weeks to hours.</p><h3>Limitations and learnings</h3><p>Despite our success with a longer prompt, we found that it’s important to limit the chat context to only essential information. It’s tempting to drop entire directories or pages of technical documentation into the chat, but this can lead to a phenomenon called <em>context rot. </em>As the tool iterates, it becomes distracted by irrelevant information or calls incorrect tools. In some cases, it will hallucinate into the context and then reference its own hallucinations, causing a feedback loop that poisons the test-generation process.</p><p>It was also important to limit the agent’s scope each time we ran it. Although we were eager to scale the project quickly, applying these methods to an entire codebase at once introduces several problems. Iterating over large codebases expands the context, increasing the potential for context rot. And even if everything runs successfully, the resulting commit might be too big for a human to effectively review.</p><p>In fact, code reviews had been one of our major early concerns with the project. Because our group didn’t own most of the code we were working on, we would be turning over our generated tests to other Times teams to approve. Would The Times’s Story team accept the AI-generated tests we were adding to their project?</p><p>To mitigate those worries, we kept our client teams apprised of our goals and plans throughout the early stages of the project. When the new unit tests were ready, we arranged a formal review with Story engineers to make sure they met their standards. In the end, we were pleased by how well our work was received. The tests were effective and well-written. And, as it turns out, teams are very excited when you automate their grunt work.</p><h3>What’s next?</h3><p>When we think about the potential of AI in web development, we usually imagine a brand-new website spun up in seconds. We’ve all seen the demos where AI agents quickly build and deploy a web-based version of Tetris. For teams like ours, though, who are building features on top of extensive existing web infrastructure, the appeal of AI is its potential to manage the busy work associated with large codebases. After the success of the test generation project, we’re experimenting with other ways that AI can make our lives easier. Can we use the same principles to update our old, end-of-life CSS framework? Could they help us migrate separate projects to a common monorepo?</p><p>We started on News, but our AI work is already paying dividends across the bundle. Last week, our Games team tried our test-generation process on their latest puzzle game, Pips. When they told us that it turned their unit test epic into a two-point ticket, it validated everything we’d done in this project. We’re hoping these techniques become a standard used throughout the company.</p><p>This project was just one focused experiment within a broader set of initiatives exploring how AI can responsibly support software development at The Times. Under the close supervision of our engineers, product managers, and designers, it’s clear that AI tools can meaningfully enhance our productivity and change the way we work.</p><p>After all, the more we can automate the mundane, the more we can free up our talented contributors to focus on the things they do best. At least until breaking news strikes again.</p><p><a href="https://www.linkedin.com/in/lquixada/"><em>Leonardo Quixadá</em></a><em> is a Senior Software Engineer at The New York Times, working as a web platform engineer for the The New York Times. He is passionate about using GenAI tools and strong engineering practices to improve developer productivity and the speed at which high-impact journalism reaches millions of readers.</em></p><p><em>Eric Chima is the Senior Technical Product Manager for the Web Platforms team at The New York Times. His team builds the web foundations that enable Times engineers to create new experiences and ways of delivering our journalism.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=fa796bf9b8d2" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/how-the-new-york-times-is-scaling-unit-test-coverage-using-ai-tools-fa796bf9b8d2">How The New York Times is scaling Unit Test Coverage using AI Tools</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-is-scaling-unit-test-coverage-using-ai-tools-fa796bf9b8d2</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-is-scaling-unit-test-coverage-using-ai-tools-fa796bf9b8d2</guid>
      <pubDate>Tue, 13 Jan 2026 19:51:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Designing A Digital Times Museum For All]]></title>
      <description><![CDATA[<h4>How five product design interns created an award-winning virtual museum for The New York Times</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TkpbB5_zR3GSXWYSeqaBQQ.jpeg"><figcaption>Illustration by Lucas Burtin</figcaption></figure><p><strong>By Nuoran Chen, Mina Chung, Frannie Ello, Christina Su, and Bella Rinne</strong></p><p>A key element of The New York Times Product Design Internship Program is a cohort project where all the interns work as a group to create a deliverable that is presented to the entire product design team. We, the summer 2024 cohort, were tasked with designing a proof-of-concept that brings the internal company museum in the NYC office to remote employees.</p><p>The Times Museum is home to multiple artifacts where visitors can freely roam from each display to understand how their stories intertwine. From an official letter authorizing the publication of the leaked Pentagon Papers to physical effects of our war correspondents, each display is unique and speaks to the history behind The Times’ mission to bring independent journalism to all.</p><p>Our group began our work with a tour of The Times Museum led by retired journalist and museum curator, <a href="https://www.nytimes.com/by/david-w-dunlap">David W. Dunlap</a>. On this tour, David guided us through each artifact in chronological order, describing the stories behind each piece and additional facts that were not fully captured with labels. His guided tour was essential for understanding the details behind The New York Times history and journalistic evolution. This tour informed two key requirements for the virtual museum.</p><ol><li><strong>A guided tour with pathways for autonomous exploration</strong>: Visitors should experience the museum in order as it was curated while also being able to explore independently.</li><li><strong>Highlight important artifacts</strong>: We want to reduce the cognitive load for visitors and prominent artifacts so visitors are not overwhelmed when they enter the virtual museum.</li></ol><p>With these defined requirements, we began the design process.</p><p>We held multiple brainstorming sessions to prioritize features and propose user flows in this virtual museum, but quickly found ourselves at a roadblock. For many weeks, we focused on nailing down our key features without bringing our ideas to visual sketches and designs. Not only did this make it challenging to scope our work, but it made it challenging for us to get feedback from other designers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ocK45EteCnD3nvJWSVisZA.jpeg"><figcaption><em>Putting our ideas to visuals helped with deciding the scope of our project.</em></figcaption></figure><p>We divided responsibilities to each team member: Bella took charge of onboarding to the museum, Nuoran and Mina shared the interactive map and navigation, and Christina and Frannie worked together on the artifact pages. Additionally, each team member rotated responsibility in preparing for our biweekly workshops with designers who gave us feedback on our deliverables.</p><p>To bring the New York Times museum to a digital audience, we realized the first challenge was how to display artifacts online. How can users navigate the space and discover artifacts that interest them? With this question in mind, we began a deep dive into inspiration. We explored various museums’ digital websites and then drew from the company’s internal communication platform to ensure our design reflected the brand’s editorial integrity. The early explorations based on these inspirations show the spectrum of displaying artifacts — in a more editorial way or spatial way.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D86GSdDVSQM8GjIyB6OxFw.jpeg"><figcaption><em>Low-fidelity iterations of the museum navigation.</em></figcaption></figure><p>After discussion, we agreed that since the physical museum already exists, our goal was to recreate its sense of physical presence — helping users feel connected to the artifacts and experience the excitement of walking through the space. To achieve this digitally, Nuoran used photogrammetry to stitch together photos of the museum, creating a 3D environment where users can either follow a guided tour or explore freely.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*8nHCTDBKNXHA04krZwmy2g.gif"><figcaption><em>Creating a digital twin of the museum using photo photogrammetry</em></figcaption></figure><p>This 3D foundation led us to adopt a spatial UI, which ensures the UI doesn’t distract from the artifacts; it becomes part of the physical space itself. Nuoran and Mina designed unified spatial UI components, such as the floor-plan map and the side panel for filtering and navigation. These navigation methods ensured a cohesive and accessible experience. Upon landing, users enter a panoramic 3D view that visualizes the museum, map and the side rail. This helps users understand where they’re located in the space and helps them efficiently navigate between highlighted artifacts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Zs64W3ZbdRnhr1Lza3EwWA.png"><figcaption><em>Visitors land onto a 3D map where they can understand the physical space of the museum.</em></figcaption></figure><p>Users can feel as if they’re walking through the museum by following visual cues such as locator pins embedded in the 3D space or directional arrows on artifact cards that guide exploration and highlight key artifacts.</p><p>To support this system, Bella designed an onboarding flow that introduces users to each component’s functionality before they begin their journey.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*lEftq7cAeEsoeApzPh0tNw.gif"><figcaption><em>Onboarding that tells users how to navigate through the digital museum</em></figcaption></figure><p>The second design focus was creating interactive experiences around the highlighted artifacts. With limited time, we only focused on ten key artifacts that best represent the museum while minimizing visitor decision fatigue. David provided the list of artifacts, and we began exploring ways to present them in the virtual space. Our initial approach used editorial-style layouts with static images and text, but we quickly realized this fell short. These artifacts are powerful touchstones of journalism’s history, and much of their presence is lost on a flat screen. Unlike physical museums where artifacts are behind glass and out of reach, virtual environments offer opportunities for more immersive interaction and deeply engaging storytelling.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*WozMSqSB_gFJW9Kk4vD6xg.gif"><figcaption><em>Earlier artifact page iterations felt static and focused on the text.</em></figcaption></figure><p>Realizing that, we regrouped and had a workshop to brainstorm interactive features that could make key artifacts more vibrant and help tell their stories more effectively. Christina and Frannie tried out different animations to bring these ideas to life. For example, the <em>“Man Walking on the Moon”</em> artifact includes three newspaper front pages, each with a different headline — highlighting how journalists in the analog era adapted to rapidly unfolding events. We stacked these newspapers together so users can click on tags to switch between the headlines, mimicking the experience of flipping through real newspapers. For Barney Darnton’s story, rather than stacking all his related objects together, we chose to display them across a single page representing his role as a World War II correspondent in the Pacific Theater. Users can zoom in on individual items to explore his story in greater depth.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*OLraX__r3_z5RNATfwpF5g.gif"></figure><p>Instead of treating the ten artifacts as separated experiences, we organized them in chronological order under a unifying theme: “Integrity of the Times.” This structure forms the basis of the guided tour we offer users from the start. To make this tour’s storytelling more engaging, we introduced a scavenger hunt element throughout the experience. As users explore each artifact, they can collect clues that unlock the full story behind it which adds a layer of interactivity that makes the journey more educational and gamified.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*1arEaUTRCOf2RoP81SrslA.gif"></figure><p>As we wrapped up this project, our team understood the responsibility of designing a virtual museum and the rich history that comes with it. Throughout our design process, we used real imagery and content from the museum in our sketches, constantly questioning if our ideas were the best way to showcase a specific artifact. <em>Is this interaction too playful for this artifact? Does this artifact need more visuals to tell the story?</em> As product designers, we often think about design consistency at the system-level, but as designers working at The New York Times, it is this kind of editorial thinking that brings our work to life. We ended this project by presenting it to the Product Design team, The Times Brand and R&amp;D teams. Our work went on to earn the <a href="https://ifdesign.com/en/winner-ranking/project/virtual-new-york-times-museum/702910">2025 iF Design Award </a>and the <a href="https://www.idsa.org/awards-recognition/idea/idea-gallery/virtual-new-york-times-museum/">2025 IDEA Bronze Prize</a>, highlighting the strength of our approach and storytelling as recognized by the broader design community.</p><p>These awards could not have been won without each member of the team and the strength of our collaboration in this project. Sharing project management responsibilities among this team of designers each step of the way helped with decision-making and keeping us prepared for deadlines. Lastly, for designers looking to hone their process, it can be daunting to jump into designs before everything is answered; however, sometimes visuals are necessary provocations that help a team align on an idea.</p><p><em>A special ‘thank you’ to former product designers Bella Rinne and Christina Su for being a part of this project and contributing to this article</em>. <em>We could not have done this project and won this award without you two!</em></p><p><em>Nuoran Chen is an associate product designer who has worked on The New York Times’ internal design system and currently designs mobile subscription experiences across different Times products.</em></p><p><em>Mina Chung is an associate product designer who has worked on the core news home page and currently designs current subscribers’ experience managing and upgrading their digital subscription across different NYT product surfaces.</em></p><p><em>Frannie Ello is an associate product designer who designs across visual formats and video experiences for the news web and app platforms.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=405331352189" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/designing-a-digital-times-museum-for-all-405331352189">Designing A Digital Times Museum For All</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/designing-a-digital-times-museum-for-all-405331352189</link>
      <guid>https://open.nytimes.com/designing-a-digital-times-museum-for-all-405331352189</guid>
      <pubDate>Wed, 15 Oct 2025 20:30:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Scaling subscriptions at The New York Times with real-time causal machine learning]]></title>
      <description><![CDATA[<h3><strong>Scaling Subscriptions at The New York Times with Real-Time Causal Machine Learning</strong></h3><h4>How real-time algorithms and causal ML transformed our digital subscription funnel from static paywalls to dynamic, millisecond decision-making</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*UITh9uwuoXVxScBnf9JnJQ.gif"><figcaption>Illustration by <a href="https://mathieulabrecque.com/">Mathieu Labrecque</a></figcaption></figure><p>The New York Times became a subscription-first news and lifestyle service with the launch of its paywall in 2011. Since then, our subscription strategy has evolved substantially. Initially, users could access a limited number of free articles per month before they encountered the paywall. In 2019, we began personalizing this number using a Machine Learning (ML) model — <a href="https://open.nytimes.com/how-the-new-york-times-uses-machine-learning-to-make-its-paywall-smarter-e5771d5f46f8">The Dynamic Meter</a>. In the past few years, we have replaced this model with real-time algorithms that decide, typically within milliseconds, whether to grant access. These algorithms are tailored to balance and optimize the tradeoff between several business Key Performance Indicators (KPIs), while also allowing us the flexibility to adjust for any business constraints. This article further details the motivation behind these algorithms and their design based upon principles from causal machine learning and multi-objective optimization.</p><h3><strong>Our subscription funnel</strong></h3><p>The New York Times has a tiered subscription funnel (Figure 1), consisting of unregistered, registered, and subscribed users. This funnel is designed to provide non-subscribers with limited access to our content, allowing them to discover our offerings. At other times, the content may be blocked by a digital “wall”. We have two types of walls — a registration wall that asks a user to register for a free account or log in, and a paywall that asks a user to subscribe. A large number of users are unregistered — they may be shown either a registration wall or a paywall. Once a user is in the registered state, they can be shown only a paywall.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0tTyFxroIibVwYrsKNXu0Q.png"><figcaption>Figure 1: The New York Times subscription funnel</figcaption></figure><h3><strong>Optimizing the subscription funnel</strong></h3><p>Optimizing who sees the registration wall or the paywall — and when — is a very relevant question for our business. While blocking access encourages users to subscribe, we do not want to block all our content because it prevents users from discovering the breadth and depth of our journalism.</p><p>Our holistic business strategy is made up of distinct KPIs for registered and unregistered users. For registered users, the business KPIs are two-fold and related to engagement and conversion, similar to our previous <a href="https://open.nytimes.com/how-the-new-york-times-uses-machine-learning-to-make-its-paywall-smarter-e5771d5f46f8">model</a>.</p><p>For unregistered users, we are interested in subscriptions as well as registrations. Post registration, we can offer tailored experiences to provide users with a more rewarding experience. In addition, we consider <a href="https://en.wikipedia.org/wiki/Bounce_rate">bounce rate</a> as a relevant KPI, for better user experience and since it is often relevant for SEO (Search Engine Optimization).</p><p>Due to such competing business KPIs, the decision to show a registration wall or a paywall is nuanced. Our goal is to build a smart system driven by ML that can decide when to show a paywall, a registration wall, or allow access. As an example, if a user is highly likely to only register but not subscribe, we might show them a registration wall. If they are not likely to subscribe or register, but might engage, the best decision is to allow access so that they get interested in our content.</p><p>Beyond sophisticated machine learning methods, the success of our approach is possible due to a close collaboration with our business leadership in clearly defining business KPIs. The data-driven culture at The Times enables this seamless collaboration. Our shared understanding of the fundamental tradeoffs in our business is crucial for building customized ML models with business constraints.</p><h3><strong>Machine learning for optimizing the subscription funnel</strong></h3><p>Machine learning has been a key component of how the Times’ paywall has been operating. We published an article on our previous <a href="https://open.nytimes.com/how-the-new-york-times-uses-machine-learning-to-make-its-paywall-smarter-e5771d5f46f8">Dynamic Meter model</a> that used to personalize the number of free articles every registered user could access in a month. This model was implemented at the start of each month as a batch process to balance and maximize KPIs for subscription as well as engagement. While very successful for our strategy, this approach did not allow us to take real-time data, as well as article information, into account for making a paywalling decision.</p><p>To leverage the capabilities provided by our Machine Learning Platform, we revamped our algorithms to be real-time and took a holistic approach to apply machine learning in optimizing our subscription funnel. We also apply custom manual rules that can override algorithmic outcomes — for instance, designating certain content as open access for public service.</p><h3><strong>Modeling</strong></h3><p>From the perspective of prescriptive ML, different user types have different sets of “actions”. For unregistered users, the actions include (1) showing a registration wall, (2) showing a paywall, or (3) allowing access. For a registered user, the actions are (1) showing a paywall or (2) allowing access. Since the actions, as well as the number and nature of objectives, are different for our two user groups, we decided to build separate prescriptive models. Here, we describe the construction of the models holistically.</p><p>For each user type, we have a set of supervised predictors <em>fᵢ(𝐗, a)</em>, where <em>i</em> represents a specific objective, such as propensity to subscribe or engage with an article. These predictors take in <em>𝐗</em>, a vector of features available at inference time, and an action <em>a</em>, such as showing a paywall or allowing access.</p><p>The supervised predictors <em>fᵢ(𝐗, a)</em> are trained on data collected by a Randomized Control Trial (RCT), which is set up to randomly take an action with equal probability. The RCT is always on and the collected data from it ensures that the supervised predictors are causal, which means they are able to make predictions about counterfactual actions for any given request. This supervised learning setup — where the action <em>a</em> is used as a feature — is typically referred to as an <a href="https://causalml.readthedocs.io/en/latest/methodology.html#s-learner">S-Learner</a>.</p><p>Since we have multiple objectives, we take a convex linear combination to construct a single objective using weight factors <em>δᵢ</em> such that <em>∑ ᵢ δᵢ = 1</em>. These weight factors determine how much we value one objective over the others and are chosen based on certain business constraints that we detail below.</p><p>The models then take an action <em>a*</em> as per the policy in Equation 1.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r8XP2CuCUSE7Nyg_PG1hhw.png"></figure><p><em>a*</em> is the action that maximizes the combined objectives.</p><p>Our modeling approach is schematically shown in Figure 2. Real-time features are ingested into supervised predictors, which predict the objectives for each action. These predictions are then multiplied by their weight factors and combined. Finally, the action is chosen that leads to the largest objective.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6tOWgAWkVsux3cRFgrIEfg.png"><figcaption>Figure 2: A schematic for our algorithmic approach that determines whether to show a registration wall, a paywall, or allow access to a user accessing a specific article. Using a real-time feature vector <em>𝐗, supervised predictors return different objectives for each action. These objectives are combined using pre-determined weight factors based on business constraints. The final chosen action maximizes the combined objective. This process is typically executed within milliseconds when a user accesses an article.</em></figcaption></figure><h3><strong>Respecting business constraints</strong></h3><p>The weight factors in our models crucially determine the rates at which registration walls and paywalls are shown, which are often determined by business constraints. For example, for the registered user model, a constraint might be a desired paywall rate in aggregate over a day. For the unregistered user model, we may have multiple constraints, such as those on registration wall rate and paywall rate.</p><p>We solve an optimization problem to figure out the weight factors by backtesting on a recent RCT dataset . By applying a trained model on this dataset, we can construct functions <em>rₖ(δ₁, δ₂, …; χ) </em>that return any statistics about the actions that the model takes on the dataset. Our problem is to match <em>rₖ</em> with a business-specified target <em>tₖ</em> by continuously changing the weight factors <em>δᵢ</em>(s). For example, <em>t₁</em> might represent a paywall rate. Correspondingly, <em>r₁</em> returns the paywall rate that the model would have achieved if it were applied to the historical RCT dataset.</p><p>We pose the above problem as yet another multi-objective optimization problem to minimize the losses in Equation 2, which are the squared errors between the achieved and the target rates.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vktf7PDQhetX6Z0FVeW3dg.png"></figure><p>The Pareto optimization problem for these losses is in Equation 3.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7ziYo3DDqTEyjaOJ4_cjPQ.png"></figure><p>We may solve Equation 3 in its native multi-objective formulation, or combine the individual losses and treat it as a single objective problem. Our investigations showed that the loss landscape is rugged and steep, and we usually have 3–5 parameters to optimize. We tried several derivative-free optimization algorithms like <a href="https://link.springer.com/article/10.1007/s10589-010-9329-3">Nelder-Mead simplex algorithm</a> and <a href="https://arxiv.org/abs/1807.02811">Bayesian optimization</a>, and found that <a href="https://www.egr.msu.edu/~kdeb/papers/c2014022.pdf">U-NSGA-III</a> worked the best.</p><p>After a sufficiently low loss is achieved, the model is deployed to production with the weight factors that are found. We run this optimization as frequently as every day to adapt to the changing traffic patterns. This approach also allows us the flexibility to respond to business requirements at a rapid pace. Any changes typically involve a simple edit to our configuration files to reflect the modified targets, and the tuning of weight factors is triggered right after.</p><p>To anticipate the impact of weight factor changes on outcomes such as subscription rate, we utilize <a href="https://arxiv.org/abs/2106.07695">Inverse Probability Weighting (IPW)</a>, specifically Hajèk estimation, similar to our <a href="https://open.nytimes.com/how-the-new-york-times-uses-machine-learning-to-make-its-paywall-smarter-e5771d5f46f8">previous work</a>. This estimation also helps us inform our stakeholders about the expected impact of changing any business constraints, such as the paywall rate.</p><p>The training of the supervised predictors and the tuning of the weight factors operate in a control flow as shown in Figure 3. We only deploy a new model if the optimization loss for respecting business constraints is sufficiently low. Otherwise, our team gets alerted while the previously trained model continues to remain in production and serve traffic.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yhONASebsHkbv33sEfdY2g.png"><figcaption>Figure 3: A pictorial representation of the control flow for training supervised predictors and tuning the weight factors to respect business constraints. This process is executed on a schedule every day so that the algorithm continuously adapts to changing traffic patterns and maintains business constraints.</figcaption></figure><h3><strong>Performance measurement</strong></h3><p>To ensure that our productionalized models are performant, we compare their performance against our constantly running RCT. This helps us understand how much better the personalization of the model is as compared to a purely random policy.</p><p>Say we are operating with 3 KPIs. From the RCT data, we can develop a 3-dimensional plane with its extreme points being the average of data points where only a specific action was taken (registration wall, paywall, or allowed access). Any intermediate percentages of actions would correspond to a point on this plane. If the model is better than the randomized policy, then, in this space of objectives, the model point lies on the side of the RCT plane where the objectives are increasing. This is schematically shown in Figure 4. The dotted red lines help us define the performance improvement for each KPI over the random policy. As we vary the weight factors to adjust for business constraints, the model point moves around along the <a href="https://en.wikipedia.org/wiki/Pareto_front">Pareto front</a><strong>.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*V3NMrJDAvHTDTEjWjnAIdA.png"><figcaption>Figure 4: A schematic representation for comparing model performance against the Randomized Control Trial when we are considering three competing KPIs (Key Performance Indicators). Examples of such KPIs include subscription rate, registration rate, and engagement. The model point lies “above” the RCT surface, thus indicating that its policy is better than a purely random policy. While holding any two KPIs constant, the model does better in terms of the third KPI.</figcaption></figure><p>In addition, we also conduct A/B tests to validate any improvements or changes we make to the models as compared to their old counterparts.</p><h3><strong>Conclusion</strong></h3><p>The New York Times registration wall and paywall are now driven by dynamic real-time algorithms. These algorithms are inherently causal and learn the efficacy of these walls based on a variety of factors using Randomized Control Trial (RCT) data. They are designed in a customized way to balance the tradeoff between multiple KPIs, while also helping provide an explicit control over business constraints. As a result, these models have achieved a boost in subscription rate and registration rate while maintaining the rates at which registration walls and paywalls are shown.</p><p><a href="https://www.linkedin.com/in/rsupekar/"><em>Rohit Supekar</em></a><em> is a Lead Machine Learning Scientist at The New York Times, focusing on algorithmic targeting for access and messaging systems. He is passionate about developing and deploying ML solutions, drawing on his doctoral research in applied mathematics and scientific machine learning.</em></p><p><em>Many thanks to the Algorithmic Targeting, Machine Learning Platform, and Meter teams for their invaluable contributions to this collaborative effort.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=5f23a7b24ff4" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/scaling-subscriptions-at-the-new-york-times-with-real-time-causal-machine-learning-5f23a7b24ff4">Scaling subscriptions at The New York Times with real-time causal machine learning</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/scaling-subscriptions-at-the-new-york-times-with-real-time-causal-machine-learning-5f23a7b24ff4</link>
      <guid>https://open.nytimes.com/scaling-subscriptions-at-the-new-york-times-with-real-time-causal-machine-learning-5f23a7b24ff4</guid>
      <pubDate>Fri, 03 Oct 2025 15:19:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The New York Times Games’ Path to Dark Mode]]></title>
      <description><![CDATA[<h4><em>How we designed a deceptively complex feature</em></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2IrBHYTCuNopOZNZI4KYnA.jpeg"><figcaption>Illustration by Alessandro Gottardo</figcaption></figure><p><strong>By Joel Urena, Jenna Kim, Kenneth Ofosu, Shaka Clark, Raven Adaramola, Dylan Campbell</strong></p><p>At least once a day, our players requested a Dark Mode feature for The New York Times Games, particularly those who enjoy playing at night. The bright screens were negatively impacting their satisfaction and hindering accessibility. Our players often wondered why this seemingly simple feature — <em>just a switch from white to black</em> — took so long to deliver.</p><p>People may think designing for Dark Mode is about inverting colors from white to black, one of the points players often cited when asking for Dark Mode. But there are numerous factors that make up little decisions when designing and implementing Dark Mode. Not only do we have to consider the color accessibility, we have to make intentional color decisions to preserve the brand of each game and The New York Times Games.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*hsYW6kpGTSohh2-EWpTpyQ.png"><figcaption><em>A compilation of negative Games app reviews that reference dark mode</em></figcaption></figure><h3>Primer: Design Systems &amp; Feature Discovery</h3><p>In the Spring of 2023, The New York Times Games was evolving quickly and we found ourselves with a user experience that was vastly different depending on which game you played and where you played it. We began to rectify this problem with the development of a Design Systems strategy. Like most other tech orgs, we hypothesized that if we began approaching product design and front-end development systematically, surely that would orient us toward a more consistent product experience, right? The answer: yes, eventually.</p><p>From a business and user impact perspective, the clearest Design Systems opportunity to prioritize first was Dark Mode. However, given the maturity of The New York Times Games digital product, the operational complexity we were tackling was massive. At the time, we had eight live games spread across three surfaces: The New York Times Games apps, the The New York Times news app and on the web. We also had ancillary experience for some of these games in the form of our companion articles (e.g: <a href="https://www.nytimes.com/spotlight/spelling-bee-forum">Spelling Bee Forum</a>, <a href="https://www.nytimes.com/spotlight/daily-crossword-column">Daily Crossword’s Wordplay column</a>).</p><p>What we thought would be a simple color switch became an extensive exercise in paying down years of design debt. We discovered that each game had its own distinct user experience, with different fonts, color palettes, and component styles. Implementing a consistent Dark Mode across everything meant we couldn’t just add a new theme; we had to audit every screen and standardize the design from the ground up. This complexity forced us to make a critical decision: should we spend years paying down this debt, or could we find a way to scope Dark Mode in a way that delivered immediate value to our players? Our solution was to prioritize the user-facing experience over a complete systemic overhaul, giving us a path to delivery while continuing to chip away at the underlying issues.</p><p>We made the strategic choice to restrict Dark Mode to the Games app, which allowed us to narrow our technical and design focus to typical mobile and tablet display sizes. This decision also served to distinguish the Games app experience from our other platforms, aligning with our long-standing objective of establishing it as the premier destination for playing our games.</p><p>We then began unpacking the remaining scope. Product managers developed a visual to help cross-functional teams get a sense of what work needed to be done to get us to ship our first Dark Mode experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*di6wTNBmhRlFkqQAr89D-Q.png"><figcaption><em>Path to Dark Mode In Apps</em></figcaption></figure><p>Once we understood the work ahead, our next step was to pitch the project to Games leadership for a spot on the roadmap. We publish our games using a hybrid strategy — our apps are a native shell built around our web-based games — which meant we needed to align our web and app teams. Given the competing priorities we faced on the Games App roadmap, this was a hard sell. We ultimately struck a balance between the two teams by aligning on a UX that leveraged our hybrid model to give users the maximum amount of flexibility when determining their theme preferences. Just like with Wordle, every game would have its own Dark Mode setting.</p><h3>Designing the System</h3><p>Now that it was approved, we wondered, “what are steps to actually get to Dark Mode on Games? How does engineering come into play as designers are exploring?” We decided to create a strategic chart outlining the high-level steps to the feature: <strong>Alignment, Foundation, Exploration, Integration</strong>. There were still unanswered questions, such as whether to launch all the Dark Mode features at once or to keep the scope narrow by launching it for each game individually. Creating this outline of the design strategy helped us gain clarity that we need to launch Dark Mode individually, reducing the complexity of the project by breaking things down, a common pitfall when working on design systems. This approach also mitigated risk as it allowed us to go through visual quality assurance for each game.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eZRXcJRgV4iMaA4D4i0Umg.png"><figcaption><em>Product strategy diagram</em></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o9FO4w6AckmpZks11l--9w.png"></figure><p>To ensure <strong>Alignment</strong>, we presented to the wider team on the importance of investing in design tokens. Because the wider team was so accustomed to using hex values for colors, it was crucial to change the way designers and engineers work with color.</p><p>For <strong>Foundation </strong>work, we conducted an audit of all game surfaces to identify any misalignments or discoveries. The New York Times Games product expanded significantly from its initial focus on The New York Times Crossword to include over eight distinct games. This growth, however, occurred without a unified design system. Consequently, each game surface utilized unique hex values, even when visual similarities were present.This investigation again proved the importance of design systems. To address this problem, the hex values used within our products were assembled into primitive/base tokens which will later be used to create semantic tokens which are more complex, intricate tokens used for more specific use cases. Also, thinking about how to help other designers discover the color they want efficiently in the future and understanding the complexity of our surfaces, we made a decision to establish three separate color component libraries with semantic libraries: Games Home Surfaces, Games Brand, Gameplay Color libraries.</p><ul><li><em>Games Home colors </em>are general, foundational colors primarily used for utilitarian purposes for text, background, and stroke.</li><li><em>Game Brand colors</em> consist of design tokens used for brand purposes, such as Spelling Bee Yellow, Connections Purple, The Mini Blue, etc.</li><li><em>Gameplay Color</em> tokens are color tokens used for gameboards and game interactions.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Rd4eTzPLsAVUyGsUyY3kIw.png"></figure><p>When the time came for diving into <strong>Exploration</strong>, we approached each game as a separate project. We held each other accountable by reviewing each others’ design tokens. We discussed and consulted with one another on names for alignment — beginning the development of a ‘shared language’ for the system that we could leverage cross-functionally. We put strong emphasis on <em>playability</em> in gameplay through multiple rounds of prototypes to make sure the game experience of a light mode feels the same as the dark mode. For example, tiles within Connections have a very distinct beige color and do pass the accessibility test on a dark black background. However, it can feel overly bright on a dark background, so we adjusted the saturation of the beige to have a consistent game experience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*a1bT8n8qu-ltL9a3Uehf3A.png"></figure><p>As we were getting close to handing off the designs to engineers, we also implemented a way for users to switch preferences within Settings since not all users prefer to have Dark Mode at night or they would prefer to have only certain games in Dark Mode. We wanted to deliver a flexible game experience where users can have a choice and be in control of what mode they want for each game.</p><h3>Putting the Pieces Together</h3><p>Our design system was engineered with the primary goal of ensuring consistency and scalability across both our internal and external products, beginning with our games. By providing a unified set of design tokens and reusable components, it bridges the gap between design and development, enabling our team to deliver a cohesive user experience. While still in development, the system is already proven to be a valuable tool for maintaining visual and functional consistency across our products. Collaboration has been at the heart of this effort, with several members of our engineering, product, and design functions working closely to align on requirements, standards and best practices.</p><p>The design system is built using React with CSS modules for styling, and it is documented in Storybook to ensure ease of use for all stakeholders. We leverage TypeScript for type safety, Vite as a build tool for fast and efficient development, and Playwright for visual regression testing to maintain quality. Design tokens, such as spacing, colors (used to implement dark mode) and typography are implemented using CSS variables to ensure scalability and flexibility. To enforce code quality and consistency, we use Stylelint and ESLint, integrated with Git hooks via tools like lint-staged and husky. These tools ensure that every contribution adheres to our standards, making the system reliable and maintainable. We then created a React Provider and utilized React hooks, which enabled us to roll out the new palette per game and per surface, to ensure we did not have to add the new feature to all surfaces and games at once. Overall our implementation strategy worked, allowing us to incrementally add color tokens without users noticing the difference. Many of the challenges we faced in the project related to our previous css and styles decisions in our code base.</p><p>One of the most rewarding aspects of building the design system has been the collaborative process. Weekly and ad-hoc meetings with engineers, engineering managers, product managers, and designers allowed us to align on requirements, share knowledge, and roadmap future improvements. This has fostered a shared sense of ownership and ensured that the system meets the needs of all users. Looking ahead, our vision is for the design system to become the single source of truth for all design-related information, encompassing both design tokens and shared components. By continuing to iterate and expand, we aim to make the system an indispensable resource for our team and a foundation for scalable, high-quality product development.</p><h3>Takeaways</h3><p>Building Dark Mode for The New York Times Games revealed two significant wins. First, what started as a focused effort to improve workflow through design systems evolved into a powerful tool for consistency and scalability across our products. We’re now extending this foundational work to other elements like fonts, spacing, buttons and shared patterns.</p><p>Second, the data clearly shows the positive impact of Dark Mode on our players. Users who engage with Dark Mode exhibit higher engagement, playing and completing more puzzles. Our strategic decision to prioritize the user-facing experience allowed us to deliver immediate value while systematically addressing underlying design debt.</p><p>Our efforts have delivered a feature that directly addresses our players’ long-standing desire for a more comfortable nighttime solving experience, allowing them to enjoy their favorite puzzles well into the evening.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6CY9TY3d82kFNCDWeAe8nw.png"></figure><p><em>Special thanks to:</em></p><p><em>Jennifer Scheerer &amp; Jessica Gerson for design support and leadership. Michael Beach &amp; Blake Spikestein for product support and leadership. William Frohn for motion design. Ian Hipschman, Ashby Thornwell, Lauren Yew, Goran Svorcan, Ihor Shamin, Katie Leavitt and the entire Games App Squad for their partnership. Emily Ngo for the Data Insights and Experimentation Support. Nick Ritenour, Coryn Brown and The New York Times Marketing team for their partnership</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=345dfe464e1a" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/the-new-york-times-games-path-to-dark-mode-345dfe464e1a">The New York Times Games’ Path to Dark Mode</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/the-new-york-times-games-path-to-dark-mode-345dfe464e1a</link>
      <guid>https://open.nytimes.com/the-new-york-times-games-path-to-dark-mode-345dfe464e1a</guid>
      <pubDate>Thu, 25 Sep 2025 17:25:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Using Provocations to Shake the Status Quo]]></title>
      <description><![CDATA[<div class="hp ii ij ik il ac cb ci bh hv hw hx hy"><figure class="ok ol om on oo op oh oi paragraph-image"><div role="button" tabindex="0" class="oq or fl os bh ot">Zoom image will be displayed<div class="oh oi oj"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*hOaZxaNhjA2fAFt9Dz2H_Q.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw oz c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div></div>
<figcaption class="pa ff pb oh oi pc pd bf b bg ab du">Illustration by Ben Denzer</figcaption></figure><p id="b1b2" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk"><strong class="pg ip">By Jayne Lee</strong></p><p id="3da6" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">In The New York Times Cooking, “cards,” or the containers that represent our content, are the first impression of our brand. They’re the window into our recipes and users rely on them to evaluate and choose what to cook.</p><p id="f94f" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">NYT Cooking users are particularly attracted to our appetizing food photos. In every research session, participants get distracted by a delicious-looking dish while answering the moderator’s questions. People tend to browse with their stomachs first and then see if the recipe specifications meet their personal criteria (For example, do I have enough time to cook this?).</p><figure class="ok ol om on oo op oh oi paragraph-image"><div role="button" tabindex="0" class="oq or fl os bh ot">Zoom image will be displayed<div class="oh oi px"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*puGPGkTNj0c0zIUN 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*puGPGkTNj0c0zIUN 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*puGPGkTNj0c0zIUN 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*puGPGkTNj0c0zIUN 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*puGPGkTNj0c0zIUN 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*puGPGkTNj0c0zIUN 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*puGPGkTNj0c0zIUN 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*puGPGkTNj0c0zIUN 640w, https://miro.medium.com/v2/resize:fit:720/0*puGPGkTNj0c0zIUN 720w, https://miro.medium.com/v2/resize:fit:750/0*puGPGkTNj0c0zIUN 750w, https://miro.medium.com/v2/resize:fit:786/0*puGPGkTNj0c0zIUN 786w, https://miro.medium.com/v2/resize:fit:828/0*puGPGkTNj0c0zIUN 828w, https://miro.medium.com/v2/resize:fit:1100/0*puGPGkTNj0c0zIUN 1100w, https://miro.medium.com/v2/resize:fit:1400/0*puGPGkTNj0c0zIUN 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw oz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div></div>
</figure><p id="8fed" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">A problem we encountered: our beautiful photography was muddied by the page’s gray background. The white card containers sitting on top of the gray page forced your eyes to focus on the container instead of the photo. The visual hierarchy was at odds with the preferred reading and browsing order of our audience: photo first, then recipe information.</p><p id="28c0" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Recipe information varies, so the card needs to afford that variability. Using containers forced us to keep our cards the same height, resulting in unnecessary whitespace. Since the cards were so tall, this limited the amount of recipes a user could see at once, increasing the time users scanned for recipes.</p><p id="df87" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">We needed to highlight our photography, modernize the format and streamline the recipe evaluation process.</p><p id="f754" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">While designing solutions, I realized that I had more questions than answers. Answering each question would have significantly bloated the project scope. Some examples were: What order of recipe information is most helpful when deciding between recipes? Are recipe bylines important? Which presentation of ratings is more effective?</p><p id="3ca5" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Because the priority was to update the format rather than improve comprehension, and to avoid bloating the scope of the project, I started with design <strong class="pg ip">provocations</strong> over design specs. Because cards are systematic, they appear across many surfaces of our product. Provocations gave me confidence in my design decisions without having to design every card for every context.</p><p id="b9b4" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Provocations are high-fidelity designs that may look and feel like design specs, but only gesture at solving a problem. The solutions are rough concepts that haven’t been validated with research and data.</p><p id="9545" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Temporarily solving my questions via provocations gave me enough information to focus on my main objective: highlight the photography and modernize the format. Think of it like Ikea’s approach to building furniture: you nail pieces together just enough for the furniture to be stable temporarily. This way you can make adjustments at the end if pieces are misaligned, before final assembly. I knew that I could return to properly solve the questions later on.</p><p id="a448" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Provocations can inspire more creative and unexpected solutions because they liberate me from the constraints momentarily. To make the provocations useful and not just beautiful rough concepts, I came up with principles that mapped to each provocation.</p><p id="2e99" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Codifying the ideas into principles allows the team, especially non-designers, to understand the intention and goals of the new ideas.</p><p id="be2c" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Here is an example:</p><figure class="ok ol om on oo op oh oi paragraph-image"><div role="button" tabindex="0" class="oq or fl os bh ot">Zoom image will be displayed<div class="oh oi px"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*rasbtN43QxxOm_2Q 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*rasbtN43QxxOm_2Q 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*rasbtN43QxxOm_2Q 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*rasbtN43QxxOm_2Q 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*rasbtN43QxxOm_2Q 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*rasbtN43QxxOm_2Q 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*rasbtN43QxxOm_2Q 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*rasbtN43QxxOm_2Q 640w, https://miro.medium.com/v2/resize:fit:720/0*rasbtN43QxxOm_2Q 720w, https://miro.medium.com/v2/resize:fit:750/0*rasbtN43QxxOm_2Q 750w, https://miro.medium.com/v2/resize:fit:786/0*rasbtN43QxxOm_2Q 786w, https://miro.medium.com/v2/resize:fit:828/0*rasbtN43QxxOm_2Q 828w, https://miro.medium.com/v2/resize:fit:1100/0*rasbtN43QxxOm_2Q 1100w, https://miro.medium.com/v2/resize:fit:1400/0*rasbtN43QxxOm_2Q 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw oz c" width="700" height="389" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div></div>
</figure><ul class=""><li id="c3e8" class="pe pf io pg b jm qs pi pj jp qt pl pm go qu po pp gr qv pr ps gu qw pu pv pw qx qy qz bk"><strong class="pg ip">Make our visuals do the heavy-lifting.<br /></strong>Cooking is a sensorial experience. Highlighting our delicious photography and showing how easy our recipes are to make, will inspire users and help them make decisions faster.</li>
<li id="50d6" class="pe pf io pg b jm ra pi pj jp rb pl pm go rc po pp gr rd pr ps gu re pu pv pw qx qy qz bk"><strong class="pg ip">Our visuals speak the loudest.<br /></strong>Ensure visuals are displayed at a large enough scale to entice users, while still giving users the ability to choose. Text is supplementary to the visual, not in competition.</li>
</ul><p id="9f87" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">These provocations served as a vision for how our cards should evolve over time. They allowed us to see where our cards were headed in the future and reverse-engineer small, conservative tweaks we could make to our product now. The expectation of the first iteration was not to move the needle, but to improve the overall product’s quality of life. We removed the old card containers, changed the page background color, grouped the recipe information together and rounded the corners on our photography.</p><figure class="ok ol om on oo op oh oi paragraph-image"><div role="button" tabindex="0" class="oq or fl os bh ot">Zoom image will be displayed<div class="oh oi px"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*ndMQY3qsDsJALpzS 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*ndMQY3qsDsJALpzS 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*ndMQY3qsDsJALpzS 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*ndMQY3qsDsJALpzS 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*ndMQY3qsDsJALpzS 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*ndMQY3qsDsJALpzS 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*ndMQY3qsDsJALpzS 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*ndMQY3qsDsJALpzS 640w, https://miro.medium.com/v2/resize:fit:720/0*ndMQY3qsDsJALpzS 720w, https://miro.medium.com/v2/resize:fit:750/0*ndMQY3qsDsJALpzS 750w, https://miro.medium.com/v2/resize:fit:786/0*ndMQY3qsDsJALpzS 786w, https://miro.medium.com/v2/resize:fit:828/0*ndMQY3qsDsJALpzS 828w, https://miro.medium.com/v2/resize:fit:1100/0*ndMQY3qsDsJALpzS 1100w, https://miro.medium.com/v2/resize:fit:1400/0*ndMQY3qsDsJALpzS 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw oz c" width="700" height="537" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div></div>
</figure><ul class=""><li id="7edd" class="pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw qx qy qz bk">The old card containers were a fixed height, regardless of the amount of content within it. This created unnecessary whitespace, made our cards taller, and required users to scroll more to see more recipes.</li>
<li id="35d7" class="pe pf io pg b jm ra pi pj jp rb pl pm go rc po pp gr rd pr ps gu re pu pv pw qx qy qz bk">Removing those meant some recipe information would look disconnected from the card. Grouping all of the information together allows users to scan and make decisions faster.</li>
<li id="3a69" class="pe pf io pg b jm ra pi pj jp rb pl pm go rc po pp gr rd pr ps gu re pu pv pw qx qy qz bk">We rounded the corners of our photography to signify the clickability affordance, now that the card container was no longer visually present. The rounded corners introduce an overall sense of warmth to the product and visually aligns with the other products within the NYT suite.</li>
</ul><p id="c689" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Making these small tweaks put the focus more on our photography, captivating more stomachs and eyes. Our early data shows users can now find and cook new recipes at a much faster rate. And our research participants can stay happily distracted.</p><p id="bb3a" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk">Provocations helped us define a direction for how our cards would evolve over time. It showed us what could be shipped now and how to continue building toward the future. Shifting to provocations allowed us to be more innovative and set a confident, clear strategy of where to go next.</p></div><div class="hp ii ij ik il ac cb ci bh hv hw hx hy"><p id="7c27" class="pw-post-body-paragraph pe pf io pg b jm ph pi pj jp pk pl pm go pn po pp gr pq pr ps gu pt pu pv pw hp bk"><em class="rm">Jayne Lee is a lead product designer for The New York Times Cooking app, driving innovation through design. She strives to create experiences that are both functional and beautiful.</em></p></div>]]></description>
      <link>https://open.nytimes.com/using-provocations-to-shake-the-status-quo-7e884b866310</link>
      <guid>https://open.nytimes.com/using-provocations-to-shake-the-status-quo-7e884b866310</guid>
      <pubDate>Tue, 22 Jul 2025 18:23:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Developing an Internal Tool for Our Puzzle Editor]]></title>
      <description><![CDATA[<div><h2 id="7958" class="pw-subtitle-paragraph jl in io bf b jm jn jo jp jq jr js jt ju jv jw jx jy jz ka cq du">How we developed a dashboard tool created to help ease the workflow of managing puzzles for our Connections editor.</h2></div><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo op"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*hHwPctJuLkCU-hW_nurB_g.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*hHwPctJuLkCU-hW_nurB_g.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*hHwPctJuLkCU-hW_nurB_g.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*hHwPctJuLkCU-hW_nurB_g.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*hHwPctJuLkCU-hW_nurB_g.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*hHwPctJuLkCU-hW_nurB_g.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*hHwPctJuLkCU-hW_nurB_g.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*hHwPctJuLkCU-hW_nurB_g.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pb ff pc on oo pd pe bf b bg ab du">Illustration by Su Yun Song</figcaption></figure><p id="4b17" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">By Shafik Quoraishee and Wyna Liu</strong></p><p id="846a" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">In the game Connections, every puzzle is a meticulously crafted challenge designed to captivate our audience and spark intellectual curiosity. Developing these puzzles can sometimes be a time consuming and intricate task. Each puzzle requires planning, beginning with conceptualizing fresh categories and plausible misleads, followed by testing the combinations for balance and solvability, and concluding with refinement and publication-ready formatting. The process requires both creativity and quality control.</p><p id="3998" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><a class="ag hb" href="https://en.wikipedia.org/wiki/Wyna_Liu" rel="noopener ugc nofollow" target="_blank">Wyna Liu</a>, the editor of Connections has the responsibility of constructing and reviewing multiple puzzles spanning various dates, ensuring that each board remains consistent, fresh and challenging to our puzzle solvers. This is a challenging endeavor where there isn’t much room for error. In order to address the challenge, we developed the Connections Reference Dashboard — an in company tool aimed at streamlining data management while providing the puzzle editor with an intuitive, aesthetically pleasing interface that enhances the daily workflow.</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*bleB6X_GIsHXBv7E 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*bleB6X_GIsHXBv7E 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*bleB6X_GIsHXBv7E 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*bleB6X_GIsHXBv7E 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*bleB6X_GIsHXBv7E 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*bleB6X_GIsHXBv7E 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*bleB6X_GIsHXBv7E 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*bleB6X_GIsHXBv7E 640w, https://miro.medium.com/v2/resize:fit:720/0*bleB6X_GIsHXBv7E 720w, https://miro.medium.com/v2/resize:fit:750/0*bleB6X_GIsHXBv7E 750w, https://miro.medium.com/v2/resize:fit:786/0*bleB6X_GIsHXBv7E 786w, https://miro.medium.com/v2/resize:fit:828/0*bleB6X_GIsHXBv7E 828w, https://miro.medium.com/v2/resize:fit:1100/0*bleB6X_GIsHXBv7E 1100w, https://miro.medium.com/v2/resize:fit:1400/0*bleB6X_GIsHXBv7E 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="386" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="f492" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">There were two considerations in developing this tool. Firstly was technical work in handling a dynamically changing payload of puzzle data. We wanted to create a rich and visually resonating interface that was easy to navigate and gave a bit of the feel of the Connections game itself.</p><p id="5d08" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Therefore, everything from the board results to the search interface was designed with these ergonomics in mind. We wanted to create a level of tactility to the tool which was reminiscent of and which reduced the number of manual steps needed to cross reference both categories and words in individual boards.</p><p id="cb56" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">The primary functionality that Wyna was after was the ability to quickly identify words that have appeared in previous Connections boards, as well as their contexts — the categories they were members of, and the other categories that belonged to that board. Connections is a puzzle built around the novel ‘misleads’. A “mislead” in the game refers to the specific way words are presented or combined within a particular puzzle that might tempt a player to form an incorrect group. An example is the word “ARCHER”, which might mislead you to group it with “BOW”, “ARROW”, and “TARGET” (for “archery terms”), when its intended category is actually “TV SHOWS” with words like “LOST” and “FRASIER.” While words and categories can be repeated over time, the misleads ideally should not. With more than 700 puzzles, keeping track of what has run, on what date, and in what context, has been a vital part of the construction workflow.</p><p id="4e5f" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Previously, there was no comprehensive search view to assist in checking this easily, either in Google Sheets, where the game is constructed, or in our internal admin tool, where the game is published. The dashboard tool provides all the necessary information at-a-glance, which has been an enormous time saver, especially since searching for words that have previously run is done multiple times while constructing each Connections board.</p><p id="5429" class="pw-post-body-paragraph pf pg io ph b jm qt pj pk jp qu pm pn go qv pp pq gr qw ps pt gu qx pv pw px hp bk">The backend, built with <a class="ag hb" href="https://flask.palletsprojects.com/en/stable/" rel="noopener ugc nofollow" target="_blank">Flask</a>, serves as the cornerstone of the dashboard. It is responsible for fetching puzzle data from external sources, caching it locally, and ensuring that the data is available in real time for the frontend. One of the key components of our backend is the data caching mechanism, which minimizes unnecessary network calls by checking if data for a given date is already available. If it is not, the system fetches the data from the NYT Connections API and caches it on disk. This not only speeds up subsequent requests but also provides redundancy against network issues. For example, consider the function below, which checks for cached data before fetching new data:</p><pre class="oq or os ot ou qy qz ra bp rb bb bk">if resp.status_code == 200:<br />data = resp.json()<br />if data and isinstance(data.get("categories"), list):<br />puzzle_obj = {}<br />ALL_PUZZLES[date_str] = puzzle_obj<br />try:<br />with open(cache_filename, "w", encoding="utf-8") as f:<br />json.dump(puzzle_obj, f, ensure_ascii=False, indent=2)<br />except Exception as e:<br />print(f"[fetch_puzzle_and_cache] Write error {date_str}: {e}")<br />return puzzle_obj</pre><p id="afe2" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">In addition to this caching strategy, an auto-fetch mechanism has been implemented to preload upcoming puzzles. This ensures that even future, unpublished boards are available for planning and review. The auto-fetch function calculates a date range that includes several weeks into the future and then iterates through that range to fetch and cache each puzzle.</p><pre class="oq or os ot ou qy qz ra bp rb bb bk">&lt;script setup&gt;<br />import { reactive, watch, onMounted } from 'vue';<br />import axios from 'axios';<br />const state = reactive({<br />includeUnpublished: true,<br />puzzles: [],<br />loading: false,<br />});<br />const fetchPuzzles = async () =&gt; {<br />state.loading = true;<br />try {<br />const { data } = await axios.get(‘api’', {<br />params: {<br />start: state.dateRange.start,<br />end: state.dateRange.end,<br />includeUnpublished: state.includeUnpublished,<br />},<br />});<br />state.puzzles = data.puzzleData;<br />} catch (error) {<br />console.error('Error fetching puzzles:', error);<br />}<br />state.loading = false;<br />};<br />onMounted(fetchPuzzles);<br />watch(<br />[() =&gt; state.dateRange, () =&gt; state.includeUnpublished],<br />fetchPuzzles<br />);<br />&lt;/script&gt;</pre><p id="86db" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">The above snippet is an example of how the front end communicates with the server component we set up, through the data api, and all updates occur seamlessly, and allow the addition of filtering parameters that allow for checking whether the results should contain unpublished boards.</p><p id="2160" class="pw-post-body-paragraph pf pg io ph b jm qt pj pk jp qu pm pn go qv pp pq gr qw ps pt gu qx pv pw px hp bk">The layout is created using <a class="ag hb" href="https://en.wikipedia.org/wiki/Vue.js" rel="noopener ugc nofollow" target="_blank">Vue.js</a>, employing a grid system to structure four vertical columns, each containing a heading and a list of related items. Each column is encapsulated as an individual Vue component or dynamically rendered from an array of category objects. Data management typically involves an array of objects, with each object containing a category label (e.g., “CONSUMED”, “ALSO”) and an associated list of terms.</p><p id="d231" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Components such as &lt;CategoryColumn&gt; accept props like title and items, displaying each entry within styled containers. Conditional styling for special cells, such as highlighting “HORSE” in yellow, is managed through props or reactive state, signaling active or selected items.</p><p id="f0d0" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><a class="ag hb" href="https://unocss.dev/" rel="noopener ugc nofollow" target="_blank">UnoCSS</a> is utilized for styling, ensuring uniformity and rapid development with concise, utility-first CSS classes. The grid layout leverages CSS Grid or Flexbox, providing clear borders, appropriate padding, and interactive hover states.</p><p id="54b8" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">On the frontend, the choice of Vue.js significantly contributes to a clean, responsive design. The Vue-based interface is intuitive, adapting smoothly across multiple devices and screen sizes. Its reactive nature ensures immediate reflection of changes from the puzzle editor — such as adjustments in date ranges or toggling puzzle visibility — with no noticeable delay.</p><pre class="oq or os ot ou qy qz ra bp rb bb bk">&lt;template&gt;<br />&lt;div class="my-4 p-4 border rounded-lg bg-white shadow"&gt;<br />&lt;input<br />v-model="searchTerm"<br />type="text"<br />placeholder="Search for a word..."<br />class="w-full p-2 border rounded focus:outline-none focus:ring focus:border-blue-300"<br />/&gt;<br />&lt;ul v-if="filteredWords.length" class="mt-4 space-y-2"&gt;<br />&lt;li<br />v-for="word in filteredWords"<br />:key="word"<br />@click="selectWord(word)"<br />class="cursor-pointer p-2 bg-blue-100 hover:bg-blue-200 rounded"<br />&gt;<br />{{ word }} (found in {{ getFrequency(word) }} puzzles)<br />&lt;/li&gt;<br />&lt;/ul&gt;<br />&lt;div v-else class="mt-4 text-gray-500"&gt;No words match your search.&lt;/div&gt;<br />&lt;/div&gt;<br />&lt;/template&gt;</pre><p id="8266" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Vue’s built-in directives like <a class="ag hb" href="https://vuejs.org/guide/components/v-model.html" rel="noopener ugc nofollow" target="_blank">v-model</a>, <a class="ag hb" href="https://www.w3schools.com/vue/vue_v-if.php" rel="noopener ugc nofollow" target="_blank">v-if</a>, <a class="ag hb" href="https://vuejs.org/guide/essentials/list" rel="noopener ugc nofollow" target="_blank">v-for</a>, and <a class="ag hb" href="https://vuejs.org/guide/essentials/event-handling" rel="noopener ugc nofollow" target="_blank">@click</a> dramatically simplify the process of building interactive components. In our live word search feature, these directives let us handle input binding, conditional rendering, list generation, and event handling — all in a few lines of clean, declarative markup. This approach reduces boilerplate and eliminates manual DOM manipulation, allowing the puzzle editor to interact with a responsive, real-time interface without the overhead of complex logic or state wiring.</p><p id="331b" class="pw-post-body-paragraph pf pg io ph b jm qt pj pk jp qu pm pn go qv pp pq gr qw ps pt gu qx pv pw px hp bk">An advancement in the puzzle review process brought about by this dashboard is the ability to look up the construction history of puzzles in terms of how often duplicate words occurred. What was once a time-consuming procedure has been streamlined into an efficient workflow. We are able to, through the backend, look up duplicates through the use of a word-frequency count. This allows one to observe how often puzzles with recurring words are present and the spacing in time of puzzles with duplicate words occur. Take for instance ‘BALL’, which occurred 23 times so far through the history of connections.</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*Lv-et845769XCaxq 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*Lv-et845769XCaxq 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*Lv-et845769XCaxq 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*Lv-et845769XCaxq 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*Lv-et845769XCaxq 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*Lv-et845769XCaxq 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*Lv-et845769XCaxq 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*Lv-et845769XCaxq 640w, https://miro.medium.com/v2/resize:fit:720/0*Lv-et845769XCaxq 720w, https://miro.medium.com/v2/resize:fit:750/0*Lv-et845769XCaxq 750w, https://miro.medium.com/v2/resize:fit:786/0*Lv-et845769XCaxq 786w, https://miro.medium.com/v2/resize:fit:828/0*Lv-et845769XCaxq 828w, https://miro.medium.com/v2/resize:fit:1100/0*Lv-et845769XCaxq 1100w, https://miro.medium.com/v2/resize:fit:1400/0*Lv-et845769XCaxq 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="128" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="96c9" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">We also created a convenient method of looking up the frequency count of all words used in connections in descending order of their usage. This not only provides interesting construction information about connections, but could also lead to interesting statistical analysis, such as separation distance between words over time, least frequency used words, and most frequently used words.</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo rh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*xr-RAjBVp7510g69 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*xr-RAjBVp7510g69 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*xr-RAjBVp7510g69 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*xr-RAjBVp7510g69 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*xr-RAjBVp7510g69 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*xr-RAjBVp7510g69 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*xr-RAjBVp7510g69 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*xr-RAjBVp7510g69 640w, https://miro.medium.com/v2/resize:fit:720/0*xr-RAjBVp7510g69 720w, https://miro.medium.com/v2/resize:fit:750/0*xr-RAjBVp7510g69 750w, https://miro.medium.com/v2/resize:fit:786/0*xr-RAjBVp7510g69 786w, https://miro.medium.com/v2/resize:fit:828/0*xr-RAjBVp7510g69 828w, https://miro.medium.com/v2/resize:fit:1100/0*xr-RAjBVp7510g69 1100w, https://miro.medium.com/v2/resize:fit:1400/0*xr-RAjBVp7510g69 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="882" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo ri"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*pz4b-7OYJRzWBXfT 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*pz4b-7OYJRzWBXfT 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*pz4b-7OYJRzWBXfT 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*pz4b-7OYJRzWBXfT 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*pz4b-7OYJRzWBXfT 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*pz4b-7OYJRzWBXfT 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*pz4b-7OYJRzWBXfT 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*pz4b-7OYJRzWBXfT 640w, https://miro.medium.com/v2/resize:fit:720/0*pz4b-7OYJRzWBXfT 720w, https://miro.medium.com/v2/resize:fit:750/0*pz4b-7OYJRzWBXfT 750w, https://miro.medium.com/v2/resize:fit:786/0*pz4b-7OYJRzWBXfT 786w, https://miro.medium.com/v2/resize:fit:828/0*pz4b-7OYJRzWBXfT 828w, https://miro.medium.com/v2/resize:fit:1100/0*pz4b-7OYJRzWBXfT 1100w, https://miro.medium.com/v2/resize:fit:1400/0*pz4b-7OYJRzWBXfT 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="827" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="89d6" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">The search itself is multi-facetted with several capabilities. The user can search through all the words in all the boards over the duration and lifetime of Connections through using a basic word search for exact matches, and for words contained as parts of other words through the use of regex search. Not only words on their own can be searched for, but categories and category titles as well, which present different snapshots into how words were previously used and in what combination with other words in specific groupings. This can help with organizing future puzzles and providing insights to new category possibilities.</p><figure class="oq or os ot ou ov on oo paragraph-image"><div class="on oo rj"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 1100w, https://miro.medium.com/v2/resize:fit:1200/format:webp/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 1200w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 600px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 1100w, https://miro.medium.com/v2/resize:fit:1200/1*ZgdW6v_QTbTNgxHFZ0w9NQ.gif 1200w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 600px" /><img alt="" class="bh fw pa c" width="600" height="293" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="7531" class="pw-post-body-paragraph pf pg io ph b jm qt pj pk jp qu pm pn go qv pp pq gr qw ps pt gu qx pv pw px hp bk">I was excited to collaborate with Wyna on this opportunity as it was an amazing experience in working with editorial to make useful tools to come to life, and give me as a developer the feeling im building something positive that contributes to the mission of the Games Team bringing joy to our users by helping the creative process (in addition to working on the actual games).</p><p id="dee7" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">In order to build the tool to be as useful to Wyna as possible, I had to make sure to really work the board to be rapidly prototypable so different combinations of optimal systems could be swapped in and out. Sometimes the optimal product and tool isn’t known until you go through several iterations.</p><p id="556c" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">And unsurprisingly to me, the process was not only an incredible learning experience, and an opportunity to work with Wyna, but also a ton of fun, and an opportunity to exercise my skills in tool building, which as a developer I feel compelled to build systems that provide joy to others.</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo rk"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*NTSnOZ9kJlSGNzG4 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*NTSnOZ9kJlSGNzG4 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*NTSnOZ9kJlSGNzG4 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*NTSnOZ9kJlSGNzG4 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*NTSnOZ9kJlSGNzG4 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*NTSnOZ9kJlSGNzG4 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*NTSnOZ9kJlSGNzG4 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*NTSnOZ9kJlSGNzG4 640w, https://miro.medium.com/v2/resize:fit:720/0*NTSnOZ9kJlSGNzG4 720w, https://miro.medium.com/v2/resize:fit:750/0*NTSnOZ9kJlSGNzG4 750w, https://miro.medium.com/v2/resize:fit:786/0*NTSnOZ9kJlSGNzG4 786w, https://miro.medium.com/v2/resize:fit:828/0*NTSnOZ9kJlSGNzG4 828w, https://miro.medium.com/v2/resize:fit:1100/0*NTSnOZ9kJlSGNzG4 1100w, https://miro.medium.com/v2/resize:fit:1400/0*NTSnOZ9kJlSGNzG4 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="978" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pb ff pc on oo pd pe bf b bg ab du">The original dashboard specs. Figma has nothing on pencil and paper.</figcaption></figure><p id="ecc6" class="pw-post-body-paragraph pf pg io ph b jm qt pj pk jp qu pm pn go qv pp pq gr qw ps pt gu qx pv pw px hp bk">Looking ahead, the architecture of the Connections Reference Dashboard is designed to be future-proof and scalable. The modular approach — where the backend and frontend operate as separate yet integrated components — allows for easy enhancements and the addition of new features over time. This flexibility means that as the needs of the puzzle editor evolve or as new challenges arise, the dashboard can be updated and expanded without disrupting the existing workflow</p><p id="5676" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Happy puzzling!</p>]]></description>
      <link>https://open.nytimes.com/developing-an-internal-tool-for-our-puzzle-editor-d5dc7a9a6464</link>
      <guid>https://open.nytimes.com/developing-an-internal-tool-for-our-puzzle-editor-d5dc7a9a6464</guid>
      <pubDate>Mon, 02 Jun 2025 17:54:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How New York Times Game Designer Heidi Erwin Creates Variety Puzzles]]></title>
      <description><![CDATA[<div class="hp ii ij ik il ac cb ci bh hv hw hx hy"><div><h2 id="ecdb" class="pw-subtitle-paragraph jl in io bf b jm jn jo jp jq jr js jt ju jv jw jx jy jz ka cq du">An in-depth look at the process of making the weekly “Brain Ticklers” for The New York Times Gameplay newsletter.</h2></div><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo op"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*VXoc787GGktvYR_M-3FC_g.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*VXoc787GGktvYR_M-3FC_g.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*VXoc787GGktvYR_M-3FC_g.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*VXoc787GGktvYR_M-3FC_g.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*VXoc787GGktvYR_M-3FC_g.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*VXoc787GGktvYR_M-3FC_g.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*VXoc787GGktvYR_M-3FC_g.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*VXoc787GGktvYR_M-3FC_g.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pb ff pc on oo pd pe bf b bg ab du">Claire Merchlinsky</figcaption></figure><p id="0977" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">By Heidi Erwin</strong></p><p id="40eb" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Most of my work as a Senior Game Designer at The New York Times is oriented around the design and development of larger puzzle games, but one unexpected and delightful part of my job for the past two years has been writing variety riddles for The New York Times Gameplay <a class="ag hb" href="https://www.nytimes.com/newsletters/gameplay" rel="noopener ugc nofollow" target="_blank">newsletter</a>. As someone who loves to see the process behind the scenes of the media I enjoy, I wanted to share the experience of creating Brain Ticklers.</p><p id="7e6e" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">What are Brain Ticklers?</strong></p><p id="0840" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">“Brain Ticklers” is inherited from Will Shortz, and how his variety puzzles have run over the years. Will’s variety puzzles are typically word puzzles, and ask solvers to anagram phrases or build words from other words, for instance. In fact, I sometimes catch myself writing “Brian Tickler” by accident in my TODO list; I guess Brian’s a hidden fictional character associated with these puzzles who exists only in my mind.</p><p id="6539" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Brain Ticklers are variety puzzles that could run in print (do not require a digital interactive format to be solved), whether that puzzle asks the solver to use deductive logic, wordplay, lateral thinking, visual analysis, or something else. We run one each week in The New York Times Gameplay newsletter, as well as in other parts of the print paper. Here’s one that ran shortly after my puzzles began running in the newsletter in January of 2023:</p><p id="2781" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">Move the following five letters into the grid below, such that you spell two words that form a phrase meaning “personal perspective.” Be creative!</strong></p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*o8UzQIPkeTQ3wpA1 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*o8UzQIPkeTQ3wpA1 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*o8UzQIPkeTQ3wpA1 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*o8UzQIPkeTQ3wpA1 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*o8UzQIPkeTQ3wpA1 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*o8UzQIPkeTQ3wpA1 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*o8UzQIPkeTQ3wpA1 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*o8UzQIPkeTQ3wpA1 640w, https://miro.medium.com/v2/resize:fit:720/0*o8UzQIPkeTQ3wpA1 720w, https://miro.medium.com/v2/resize:fit:750/0*o8UzQIPkeTQ3wpA1 750w, https://miro.medium.com/v2/resize:fit:786/0*o8UzQIPkeTQ3wpA1 786w, https://miro.medium.com/v2/resize:fit:828/0*o8UzQIPkeTQ3wpA1 828w, https://miro.medium.com/v2/resize:fit:1100/0*o8UzQIPkeTQ3wpA1 1100w, https://miro.medium.com/v2/resize:fit:1400/0*o8UzQIPkeTQ3wpA1 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="487" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pb ff pc on oo pd pe bf b bg ab du">The answer to this one is at the end of this blog post!</figcaption></figure><p id="f5e0" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">Process Overview</strong></p><p id="9bf9" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">The end-to-end process for creating a Brain Tickler generally involves the following:</p><ul class=""><li id="3324" class="pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px pz qa qb bk">A source of inspiration</li>
<li id="c513" class="pf pg io ph b jm qc pj pk jp qd pm pn go qe pp pq gr qf ps pt gu qg pv pw px pz qa qb bk">A first draft</li>
<li id="8ea2" class="pf pg io ph b jm qc pj pk jp qd pm pn go qe pp pq gr qf ps pt gu qg pv pw px pz qa qb bk">Editing</li>
<li id="bac2" class="pf pg io ph b jm qc pj pk jp qd pm pn go qe pp pq gr qf ps pt gu qg pv pw px pz qa qb bk">A final graphic.</li>
</ul><p id="6d04" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">More on each of those steps…</p><p id="a2ac" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">Inspiration</strong></p><p id="5471" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Inspiration could be anywhere! One of my favorite parts of writing these puzzles is that I feel encouraged to look at the world through different lenses when I’m out and about.</p><p id="ea5f" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Inspiration could come from a sign on the street in the real world (that’s right gamers, I’m touching grass), a format restriction, a puzzle I play online — the world is full of puzzle potential.</p><p id="ab43" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Three contexts in which ideas for Brain Ticklers spawn for me are 1. Being out and about interacting with the world, 2. NYT Games team activities that prompt thinking about puzzles, and 3. other media (art, books, games, puzzles).</p><p id="ca28" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">For example, here’s a Brain Tickler from 2024:</p><p id="abb0" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">What item might be seen with each of these five shapes?</strong></p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*T-J3n2mlFCnAovFw 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*T-J3n2mlFCnAovFw 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*T-J3n2mlFCnAovFw 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*T-J3n2mlFCnAovFw 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*T-J3n2mlFCnAovFw 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*T-J3n2mlFCnAovFw 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*T-J3n2mlFCnAovFw 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*T-J3n2mlFCnAovFw 640w, https://miro.medium.com/v2/resize:fit:720/0*T-J3n2mlFCnAovFw 720w, https://miro.medium.com/v2/resize:fit:750/0*T-J3n2mlFCnAovFw 750w, https://miro.medium.com/v2/resize:fit:786/0*T-J3n2mlFCnAovFw 786w, https://miro.medium.com/v2/resize:fit:828/0*T-J3n2mlFCnAovFw 828w, https://miro.medium.com/v2/resize:fit:1100/0*T-J3n2mlFCnAovFw 1100w, https://miro.medium.com/v2/resize:fit:1400/0*T-J3n2mlFCnAovFw 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="509" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="ad2c" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Solution: A bicycle. They’re all bike rack shapes!</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*ZfozppVYrkUleh8N 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*ZfozppVYrkUleh8N 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*ZfozppVYrkUleh8N 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*ZfozppVYrkUleh8N 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*ZfozppVYrkUleh8N 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*ZfozppVYrkUleh8N 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*ZfozppVYrkUleh8N 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*ZfozppVYrkUleh8N 640w, https://miro.medium.com/v2/resize:fit:720/0*ZfozppVYrkUleh8N 720w, https://miro.medium.com/v2/resize:fit:750/0*ZfozppVYrkUleh8N 750w, https://miro.medium.com/v2/resize:fit:786/0*ZfozppVYrkUleh8N 786w, https://miro.medium.com/v2/resize:fit:828/0*ZfozppVYrkUleh8N 828w, https://miro.medium.com/v2/resize:fit:1100/0*ZfozppVYrkUleh8N 1100w, https://miro.medium.com/v2/resize:fit:1400/0*ZfozppVYrkUleh8N 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="204" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="4ac9" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">This puzzle was inspired by the bike racks I was seeing on runs around Queens. I started photographing them for reference; you can tell that the puzzle graphic pulls pretty directly from these!</p><p id="8dc7" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">There are several opportunities to participate in new game ideation within The New York Times Games team. One of these is the game jams the team hosts, where people on the team put aside their other work for a couple days to ideate, prototype, and pitch. At one point, some work friends and I pitched a Venn diagram puzzle game during game jam, which did not turn into a full game, but did inspire this Brain Tickler (solution at end):</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*q_wJ0Q3wZA0xjk6_ 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*q_wJ0Q3wZA0xjk6_ 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*q_wJ0Q3wZA0xjk6_ 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*q_wJ0Q3wZA0xjk6_ 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*q_wJ0Q3wZA0xjk6_ 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*q_wJ0Q3wZA0xjk6_ 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*q_wJ0Q3wZA0xjk6_ 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*q_wJ0Q3wZA0xjk6_ 640w, https://miro.medium.com/v2/resize:fit:720/0*q_wJ0Q3wZA0xjk6_ 720w, https://miro.medium.com/v2/resize:fit:750/0*q_wJ0Q3wZA0xjk6_ 750w, https://miro.medium.com/v2/resize:fit:786/0*q_wJ0Q3wZA0xjk6_ 786w, https://miro.medium.com/v2/resize:fit:828/0*q_wJ0Q3wZA0xjk6_ 828w, https://miro.medium.com/v2/resize:fit:1100/0*q_wJ0Q3wZA0xjk6_ 1100w, https://miro.medium.com/v2/resize:fit:1400/0*q_wJ0Q3wZA0xjk6_ 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="604" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="bd58" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">I’ve also been inspired by the formats of other cool puzzles out in the world. In March 2023, we ran 5 puzzles for a “March Matchsticks” puzzle series (like March Madness). These puzzles riff off of the classic matchstick puzzle format. Here are two from our month of matches (answers at the end of this blog post):</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*raSNMBAc4fCszOGP 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*raSNMBAc4fCszOGP 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*raSNMBAc4fCszOGP 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*raSNMBAc4fCszOGP 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*raSNMBAc4fCszOGP 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*raSNMBAc4fCszOGP 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*raSNMBAc4fCszOGP 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*raSNMBAc4fCszOGP 640w, https://miro.medium.com/v2/resize:fit:720/0*raSNMBAc4fCszOGP 720w, https://miro.medium.com/v2/resize:fit:750/0*raSNMBAc4fCszOGP 750w, https://miro.medium.com/v2/resize:fit:786/0*raSNMBAc4fCszOGP 786w, https://miro.medium.com/v2/resize:fit:828/0*raSNMBAc4fCszOGP 828w, https://miro.medium.com/v2/resize:fit:1100/0*raSNMBAc4fCszOGP 1100w, https://miro.medium.com/v2/resize:fit:1400/0*raSNMBAc4fCszOGP 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="522" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="ccab" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">In the puzzle below, 18 matches spell out the word “sled.” Rotate one thing to ‘make friends.’</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*6k1iGvkEz3KHovv- 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*6k1iGvkEz3KHovv- 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*6k1iGvkEz3KHovv- 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*6k1iGvkEz3KHovv- 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*6k1iGvkEz3KHovv- 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*6k1iGvkEz3KHovv- 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*6k1iGvkEz3KHovv- 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*6k1iGvkEz3KHovv- 640w, https://miro.medium.com/v2/resize:fit:720/0*6k1iGvkEz3KHovv- 720w, https://miro.medium.com/v2/resize:fit:750/0*6k1iGvkEz3KHovv- 750w, https://miro.medium.com/v2/resize:fit:786/0*6k1iGvkEz3KHovv- 786w, https://miro.medium.com/v2/resize:fit:828/0*6k1iGvkEz3KHovv- 828w, https://miro.medium.com/v2/resize:fit:1100/0*6k1iGvkEz3KHovv- 1100w, https://miro.medium.com/v2/resize:fit:1400/0*6k1iGvkEz3KHovv- 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="303" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="5909" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><strong class="ph ip">Editing</strong></p><p id="e8e3" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Every few weeks or so, when I have anywhere from three to eight new puzzles drafted, I hop on call with our Puzzle Editor Sam Ezersky, where he plays the puzzles in real time.</p><p id="1ebc" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Watching someone else solve a puzzle in real time is helpful in shaping it further: Sometimes it becomes immediately obvious that the setup of a puzzle is unclear if I observe Sam heading down an unintended path. But on top of that playtester feedback, it’s awesome to witness Sam’s puzzle brain in action.</p><p id="a9f8" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">A recent example: I proposed a Brain Tickler where solvers were asked to untangle letter sequences to reveal four phrases of the format “____ in ____.” Sam took one look at “TJIUMSTE” and said, “Just in time.” This was followed by seeing “WLAIAITIDNYG,” immediately thinking out loud, “Lying in wait? No! Lady in waiting!” and then rapid-fire recognizing “CEDHITIOERF” and “LSOANW” as “Editor in chief” and “Son in law.” Sometimes I wonder if Sam solving a puzzle really says anything about whether the puzzle is fair to the average solver, but fortunately he definitely also has puzzle design sensibilities tailored to a general audience. Reviewing puzzles with Sam is a moment to test the accessibility of a puzzle so we can adjust the framing, presentation, or even concept, as needed.</p><p id="6e87" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Here’s another recent puzzle that became more elegant during the editing process.</p><p id="7537" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">What I initially presented to Sam:</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qi"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*dwLgoGCNpNZlQXiw 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*dwLgoGCNpNZlQXiw 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*dwLgoGCNpNZlQXiw 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*dwLgoGCNpNZlQXiw 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*dwLgoGCNpNZlQXiw 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*dwLgoGCNpNZlQXiw 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*dwLgoGCNpNZlQXiw 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*dwLgoGCNpNZlQXiw 640w, https://miro.medium.com/v2/resize:fit:720/0*dwLgoGCNpNZlQXiw 720w, https://miro.medium.com/v2/resize:fit:750/0*dwLgoGCNpNZlQXiw 750w, https://miro.medium.com/v2/resize:fit:786/0*dwLgoGCNpNZlQXiw 786w, https://miro.medium.com/v2/resize:fit:828/0*dwLgoGCNpNZlQXiw 828w, https://miro.medium.com/v2/resize:fit:1100/0*dwLgoGCNpNZlQXiw 1100w, https://miro.medium.com/v2/resize:fit:1400/0*dwLgoGCNpNZlQXiw 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="260" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qi"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*hSnkT0eG5Cn6m6-B 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*hSnkT0eG5Cn6m6-B 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*hSnkT0eG5Cn6m6-B 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*hSnkT0eG5Cn6m6-B 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*hSnkT0eG5Cn6m6-B 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*hSnkT0eG5Cn6m6-B 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*hSnkT0eG5Cn6m6-B 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*hSnkT0eG5Cn6m6-B 640w, https://miro.medium.com/v2/resize:fit:720/0*hSnkT0eG5Cn6m6-B 720w, https://miro.medium.com/v2/resize:fit:750/0*hSnkT0eG5Cn6m6-B 750w, https://miro.medium.com/v2/resize:fit:786/0*hSnkT0eG5Cn6m6-B 786w, https://miro.medium.com/v2/resize:fit:828/0*hSnkT0eG5Cn6m6-B 828w, https://miro.medium.com/v2/resize:fit:1100/0*hSnkT0eG5Cn6m6-B 1100w, https://miro.medium.com/v2/resize:fit:1400/0*hSnkT0eG5Cn6m6-B 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="260" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="5adf" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">[Spoiler Warning] The solution is that Marie likes Juliet, because Marie likes words that start with a shortened month name: aprons (Apr), mayonnaise (May), jungles (Jun), and Juliet (Jul).</p><p id="99c6" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">He noticed that April, May, and June were all consecutive, and offered up “Romeo and Juliet” as an alternate fourth pair to continue the consecutive months using the “Jul” in “Juliet” for July. This is the kind of small adjustment that makes a puzzle that’s mostly solid feel tighter and more elegant.</p><p id="b0d0" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">For this type of puzzle, I include an easter egg where the character’s name hints at the quality of words they like. In this case, Marie also begins with a shortened month name: Mar.</p><p id="ab76" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Here are two more of this puzzle format for you to solve.</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qi"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*8srogUMgBEzfRXR1 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*8srogUMgBEzfRXR1 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*8srogUMgBEzfRXR1 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*8srogUMgBEzfRXR1 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*8srogUMgBEzfRXR1 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*8srogUMgBEzfRXR1 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*8srogUMgBEzfRXR1 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*8srogUMgBEzfRXR1 640w, https://miro.medium.com/v2/resize:fit:720/0*8srogUMgBEzfRXR1 720w, https://miro.medium.com/v2/resize:fit:750/0*8srogUMgBEzfRXR1 750w, https://miro.medium.com/v2/resize:fit:786/0*8srogUMgBEzfRXR1 786w, https://miro.medium.com/v2/resize:fit:828/0*8srogUMgBEzfRXR1 828w, https://miro.medium.com/v2/resize:fit:1100/0*8srogUMgBEzfRXR1 1100w, https://miro.medium.com/v2/resize:fit:1400/0*8srogUMgBEzfRXR1 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="260" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qi"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*g_SuIX7dBiXV8OvR 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*g_SuIX7dBiXV8OvR 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*g_SuIX7dBiXV8OvR 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*g_SuIX7dBiXV8OvR 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*g_SuIX7dBiXV8OvR 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*g_SuIX7dBiXV8OvR 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*g_SuIX7dBiXV8OvR 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*g_SuIX7dBiXV8OvR 640w, https://miro.medium.com/v2/resize:fit:720/0*g_SuIX7dBiXV8OvR 720w, https://miro.medium.com/v2/resize:fit:750/0*g_SuIX7dBiXV8OvR 750w, https://miro.medium.com/v2/resize:fit:786/0*g_SuIX7dBiXV8OvR 786w, https://miro.medium.com/v2/resize:fit:828/0*g_SuIX7dBiXV8OvR 828w, https://miro.medium.com/v2/resize:fit:1100/0*g_SuIX7dBiXV8OvR 1100w, https://miro.medium.com/v2/resize:fit:1400/0*g_SuIX7dBiXV8OvR 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="260" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="b796" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">In terms of graphics, the Brain Tickler graphics are fairly simple, and typically I make them in Figma. For some puzzles, being precise with graphics matters more:</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*wpK38mAn7VDbUTSO 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*wpK38mAn7VDbUTSO 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*wpK38mAn7VDbUTSO 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*wpK38mAn7VDbUTSO 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*wpK38mAn7VDbUTSO 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*wpK38mAn7VDbUTSO 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*wpK38mAn7VDbUTSO 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*wpK38mAn7VDbUTSO 640w, https://miro.medium.com/v2/resize:fit:720/0*wpK38mAn7VDbUTSO 720w, https://miro.medium.com/v2/resize:fit:750/0*wpK38mAn7VDbUTSO 750w, https://miro.medium.com/v2/resize:fit:786/0*wpK38mAn7VDbUTSO 786w, https://miro.medium.com/v2/resize:fit:828/0*wpK38mAn7VDbUTSO 828w, https://miro.medium.com/v2/resize:fit:1100/0*wpK38mAn7VDbUTSO 1100w, https://miro.medium.com/v2/resize:fit:1400/0*wpK38mAn7VDbUTSO 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="372" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure></div><div class="hp ii ij ik il ac cb ci bh hv hw hx hy"><p id="0cba" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">My younger self would be in awe at the opportunity to work with so many brilliant puzzle minds, all in one place. Working on these puzzles has made me a stronger designer and solver, and I feel gratitude for all of the thought that goes into puzzles across the team, and all of the thought solvers put into playing our games: Humans make our puzzles what they are.</p></div><div class="hp ii ij ik il ac cb ci bh hv hw hx hy"><p id="6961" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><em class="qq">Below is the answer to the puzzle from the start of this piece:</em></p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*EsQZ1XcyN3g3VEfl 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*EsQZ1XcyN3g3VEfl 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*EsQZ1XcyN3g3VEfl 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*EsQZ1XcyN3g3VEfl 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*EsQZ1XcyN3g3VEfl 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*EsQZ1XcyN3g3VEfl 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*EsQZ1XcyN3g3VEfl 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*EsQZ1XcyN3g3VEfl 640w, https://miro.medium.com/v2/resize:fit:720/0*EsQZ1XcyN3g3VEfl 720w, https://miro.medium.com/v2/resize:fit:750/0*EsQZ1XcyN3g3VEfl 750w, https://miro.medium.com/v2/resize:fit:786/0*EsQZ1XcyN3g3VEfl 786w, https://miro.medium.com/v2/resize:fit:828/0*EsQZ1XcyN3g3VEfl 828w, https://miro.medium.com/v2/resize:fit:1100/0*EsQZ1XcyN3g3VEfl 1100w, https://miro.medium.com/v2/resize:fit:1400/0*EsQZ1XcyN3g3VEfl 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="487" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="1553" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk"><em class="qq">And here are other answers to puzzles in this post:</em></p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*nfN_Iq7Tie65f2o0 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*nfN_Iq7Tie65f2o0 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*nfN_Iq7Tie65f2o0 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*nfN_Iq7Tie65f2o0 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*nfN_Iq7Tie65f2o0 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*nfN_Iq7Tie65f2o0 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*nfN_Iq7Tie65f2o0 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*nfN_Iq7Tie65f2o0 640w, https://miro.medium.com/v2/resize:fit:720/0*nfN_Iq7Tie65f2o0 720w, https://miro.medium.com/v2/resize:fit:750/0*nfN_Iq7Tie65f2o0 750w, https://miro.medium.com/v2/resize:fit:786/0*nfN_Iq7Tie65f2o0 786w, https://miro.medium.com/v2/resize:fit:828/0*nfN_Iq7Tie65f2o0 828w, https://miro.medium.com/v2/resize:fit:1100/0*nfN_Iq7Tie65f2o0 1100w, https://miro.medium.com/v2/resize:fit:1400/0*nfN_Iq7Tie65f2o0 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="642" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="cc48" class="pw-post-body-paragraph pf pg io ph b jm pi pj pk jp pl pm pn go po pp pq gr pr ps pt gu pu pv pw px hp bk">Rotate the image 180 degrees. It now reads as “pals.”</p><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*HIJN7LtpDU-R_j0_ 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*HIJN7LtpDU-R_j0_ 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*HIJN7LtpDU-R_j0_ 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*HIJN7LtpDU-R_j0_ 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*HIJN7LtpDU-R_j0_ 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*HIJN7LtpDU-R_j0_ 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*HIJN7LtpDU-R_j0_ 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*HIJN7LtpDU-R_j0_ 640w, https://miro.medium.com/v2/resize:fit:720/0*HIJN7LtpDU-R_j0_ 720w, https://miro.medium.com/v2/resize:fit:750/0*HIJN7LtpDU-R_j0_ 750w, https://miro.medium.com/v2/resize:fit:786/0*HIJN7LtpDU-R_j0_ 786w, https://miro.medium.com/v2/resize:fit:828/0*HIJN7LtpDU-R_j0_ 828w, https://miro.medium.com/v2/resize:fit:1100/0*HIJN7LtpDU-R_j0_ 1100w, https://miro.medium.com/v2/resize:fit:1400/0*HIJN7LtpDU-R_j0_ 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="303" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*uzpmYG3uZ-mYmEtb 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*uzpmYG3uZ-mYmEtb 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*uzpmYG3uZ-mYmEtb 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*uzpmYG3uZ-mYmEtb 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*uzpmYG3uZ-mYmEtb 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*uzpmYG3uZ-mYmEtb 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*uzpmYG3uZ-mYmEtb 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*uzpmYG3uZ-mYmEtb 640w, https://miro.medium.com/v2/resize:fit:720/0*uzpmYG3uZ-mYmEtb 720w, https://miro.medium.com/v2/resize:fit:750/0*uzpmYG3uZ-mYmEtb 750w, https://miro.medium.com/v2/resize:fit:786/0*uzpmYG3uZ-mYmEtb 786w, https://miro.medium.com/v2/resize:fit:828/0*uzpmYG3uZ-mYmEtb 828w, https://miro.medium.com/v2/resize:fit:1100/0*uzpmYG3uZ-mYmEtb 1100w, https://miro.medium.com/v2/resize:fit:1400/0*uzpmYG3uZ-mYmEtb 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="462" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="oq or os ot ou ov on oo paragraph-image"><div role="button" tabindex="0" class="ow ox fl oy bh oz on oo qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*RGuXnZFNAnHdv5nh 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*RGuXnZFNAnHdv5nh 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*RGuXnZFNAnHdv5nh 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*RGuXnZFNAnHdv5nh 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*RGuXnZFNAnHdv5nh 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*RGuXnZFNAnHdv5nh 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*RGuXnZFNAnHdv5nh 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*RGuXnZFNAnHdv5nh 640w, https://miro.medium.com/v2/resize:fit:720/0*RGuXnZFNAnHdv5nh 720w, https://miro.medium.com/v2/resize:fit:750/0*RGuXnZFNAnHdv5nh 750w, https://miro.medium.com/v2/resize:fit:786/0*RGuXnZFNAnHdv5nh 786w, https://miro.medium.com/v2/resize:fit:828/0*RGuXnZFNAnHdv5nh 828w, https://miro.medium.com/v2/resize:fit:1100/0*RGuXnZFNAnHdv5nh 1100w, https://miro.medium.com/v2/resize:fit:1400/0*RGuXnZFNAnHdv5nh 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pa c" width="700" height="372" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure></div>]]></description>
      <link>https://open.nytimes.com/how-new-york-times-game-designer-heidi-erwin-creates-variety-puzzles-41b9bf0abb2b</link>
      <guid>https://open.nytimes.com/how-new-york-times-game-designer-heidi-erwin-creates-variety-puzzles-41b9bf0abb2b</guid>
      <pubDate>Tue, 27 May 2025 17:13:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Accessibility: Requirements, Not Features]]></title>
      <description><![CDATA[<div><h2 id="cd15" class="pw-subtitle-paragraph jk im in bf b jl jm jn jo jp jq jr js jt ju jv jw jx jy jz cr dv">Shipping fast often means shrinking scope — but accessibility deserves permanence, not compromise. At The New York Times, product managers embedded it into how our teams think, build, and deliver using the power of <strong class="am">the three P’s: People, Process and Products.</strong></h2></div><figure class="or os ot ou ov ow oo op paragraph-image"><div role="button" tabindex="0" class="ox oy fl oz bh pa oo op oq"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*EBM2JcEWi0Kt0lWnfSCqgw.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pb c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pc fg pd oo op pe pf bf b bg z dv">Illustration by Klaus Kremmerz</figcaption></figure><p id="b6e4" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk"><strong class="pi io">By Erica Vendetti, Rachel Dixon, David Leininger and Matt Argomaniz</strong></p><p id="7c28" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">As Product Managers, we’re always trying to deepen how we meet the needs of our users and the future of our business. To deliver the features our users want, we’re always thinking about both who uses our products and how our products are used. For our Platform Product Managers, that can mean thinking about the needs of our colleagues — other Product Managers, Data Analysts, Program Managers, Engineers, and Designers. And for our User-Facing Product Managers, that can mean thinking about our readers. <strong class="pi io">To make products accessible to all, accessibility should be a requirement, not a feature.</strong></p><p id="7592" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">But when you build at the <a class="ag hb" href="https://medium.com/timesopen/design-at-the-speed-of-news-7394cb37110f" rel="noopener">speed of news</a>, teams must streamline features as they build. To launch a feature quickly, teams continuously refine the scope of feature development. And defining what’s a feature vs a requirement is a delicate dance for Agile teams. Shifting our teams’ perspective so accessibility is a requirement in all development work is a major undertaking. <strong class="pi io">To become champions of accessibility in tech, we focused on the three P’s: People, Process and Products.</strong></p><p id="024d" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po go qv pq pr gr qw pt pu gu qx pw px py ho bk">The New York Times aims to foster a culture that enables our mission, business and people to thrive. Finding both the time and opportunity to share knowledge is a top down priority, and the company has several staff-led groups that work to connect and uplift diverse perspectives. Three of these groups — which are invested in making technology more inclusive and accessible — came together to share knowledge and best practices:</p><ul class=""><li id="771a" class="pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py qy qz ra bk">The Product function’s DEI Speaker Series Squad, which organizes discussions around building accessible products and being inclusive product managers,</li>
<li id="ef33" class="pg ph in pi b jl rb pk pl jo rc pn po go rd pq pr gr re pt pu gu rf pw px py qy qz ra bk">Women+ in Tech, which focuses on diversity in the technology, and</li>
<li id="51c6" class="pg ph in pi b jl rb pk pl jo rc pn po go rd pq pr gr re pt pu gu rf pw px py qy qz ra bk">The Accessibility Team, which empowers teams to build world leading digital products that are accessible from the start.</li>
</ul><p id="73e8" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">Sometimes, the key to success is simply connecting the right people. By leveraging these internal communities, we can build on existing efforts and share knowledge quickly in multiple spaces. This approach helps us tap into the time people were already dedicating for learning and a large engaged community of folks already interested in inclusive practices.</p><p id="61f2" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po go qv pq pr gr qw pt pu gu qx pw px py ho bk">Making digital resources accessible means taking steps to prevent and eliminate obstacles that limit some users from fully using our digital products and tools. When it comes to technology, that means being able to support diverse abilities — including temporary, situational, and age related disabilities. And, of course, improving accessibility improves the user experience for everyone! If you’ve ever increased the brightness on your screen or used dark mode, you’re benefiting from accessibility tooling.</p><p id="5600" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">To share our knowledge about accessibility requirements, we hosted internal talks, certifications, and created self-guided syllabus learning for various levels. In our first talk, we shared four tips to help standardize accessibility across any product. These tips can easily be added as acceptance criteria from Product to Engineering to make accessible features.</p><figure class="or os ot ou ov ow oo op paragraph-image"><div role="button" tabindex="0" class="ox oy fl oz bh pa oo op rg"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*itfcRc8viExy0K1I 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*itfcRc8viExy0K1I 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*itfcRc8viExy0K1I 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*itfcRc8viExy0K1I 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*itfcRc8viExy0K1I 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*itfcRc8viExy0K1I 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*itfcRc8viExy0K1I 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*itfcRc8viExy0K1I 640w, https://miro.medium.com/v2/resize:fit:720/0*itfcRc8viExy0K1I 720w, https://miro.medium.com/v2/resize:fit:750/0*itfcRc8viExy0K1I 750w, https://miro.medium.com/v2/resize:fit:786/0*itfcRc8viExy0K1I 786w, https://miro.medium.com/v2/resize:fit:828/0*itfcRc8viExy0K1I 828w, https://miro.medium.com/v2/resize:fit:1100/0*itfcRc8viExy0K1I 1100w, https://miro.medium.com/v2/resize:fit:1400/0*itfcRc8viExy0K1I 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pb c" width="700" height="747" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pc fg pd oo op pe pf bf b bg z dv"><em class="rh">Four tips to standardize accessibility for any product. (1) The heading hierarchy must follow a logical sequence. (2) Button and link text must make sense on their own so the call to action is clear. (3) Keyboard only navigation must be fully functional with tab, shift+tab, space and arrow keys. (4) Use voice over with your product to improve navigation for blind readers.</em></figcaption></figure><p id="b612" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">In our second talk, we shared how to adapt these tips for Platform teams. This helped us build cohesion across the Product and Engineering functions. We were now effectively bridging gaps between user-interface accessibility and internal tooling accessibility.</p><p id="8ebb" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">In our final session, we organized a self-led certificate program that was open to all staff during <a class="ag hb" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/innovating-from-home-maker-week-at-the-new-york-times-50ecfa38aca1">Maker Week</a>. Maker Week is an annual event where staff can take a break from their usual work and focus on creative self-directed projects. Our Product experts shared steps for how to perform an accessibility audit for web-based products. Hosting the training at the same time that folks were already building a lot of new tools and applications meant that people also had space to explore accessibility requirements. It was a win-win!</p><figure class="or os ot ou ov ow oo op paragraph-image"><div role="button" tabindex="0" class="ox oy fl oz bh pa oo op ri"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*FXoICpld6CO0GemH 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*FXoICpld6CO0GemH 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*FXoICpld6CO0GemH 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*FXoICpld6CO0GemH 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*FXoICpld6CO0GemH 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*FXoICpld6CO0GemH 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*FXoICpld6CO0GemH 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*FXoICpld6CO0GemH 640w, https://miro.medium.com/v2/resize:fit:720/0*FXoICpld6CO0GemH 720w, https://miro.medium.com/v2/resize:fit:750/0*FXoICpld6CO0GemH 750w, https://miro.medium.com/v2/resize:fit:786/0*FXoICpld6CO0GemH 786w, https://miro.medium.com/v2/resize:fit:828/0*FXoICpld6CO0GemH 828w, https://miro.medium.com/v2/resize:fit:1100/0*FXoICpld6CO0GemH 1100w, https://miro.medium.com/v2/resize:fit:1400/0*FXoICpld6CO0GemH 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pb c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pc fg pd oo op pe pf bf b bg z dv"><em class="rh">Accessibility Audit report indicating what tests passed, failed, or not yet run</em></figcaption></figure><p id="5692" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">Product: Create Internal Tools to Standardize Accessible Features</p><p id="a4f7" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">Our technology teams have invested in creating an internal Accessibility Guide, a resource maintained by a team of internal specialists who monitor Web Content Accessibility Guidelines (WCAG) standards. This guide outlines how designers, engineers and product managers across all platforms can meet WCAG 2.2 AA standards.</p><figure class="or os ot ou ov ow oo op paragraph-image"><div role="button" tabindex="0" class="ox oy fl oz bh pa oo op ri"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*Nrwl0RNlbloTyF3c 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*Nrwl0RNlbloTyF3c 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*Nrwl0RNlbloTyF3c 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*Nrwl0RNlbloTyF3c 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*Nrwl0RNlbloTyF3c 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*Nrwl0RNlbloTyF3c 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*Nrwl0RNlbloTyF3c 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*Nrwl0RNlbloTyF3c 640w, https://miro.medium.com/v2/resize:fit:720/0*Nrwl0RNlbloTyF3c 720w, https://miro.medium.com/v2/resize:fit:750/0*Nrwl0RNlbloTyF3c 750w, https://miro.medium.com/v2/resize:fit:786/0*Nrwl0RNlbloTyF3c 786w, https://miro.medium.com/v2/resize:fit:828/0*Nrwl0RNlbloTyF3c 828w, https://miro.medium.com/v2/resize:fit:1100/0*Nrwl0RNlbloTyF3c 1100w, https://miro.medium.com/v2/resize:fit:1400/0*Nrwl0RNlbloTyF3c 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fw pb c" width="700" height="358" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pc fg pd oo op pe pf bf b bg z dv"><em class="rh">Times Product Language accessibility guidance on writing good accessible names for elements</em></figcaption></figure><p id="8753" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">By sharing this guide in all of our learning sessions, we’ve removed one of the biggest barriers — finding the right resources. And because accessibility needs can change with each project, the Product Function’s DEI Speaker Series Squad wanted to make sure there was a sustainable way for people to continue their journey. As folks learn how to use the accessibility audit tool, they can volunteer to become a team and department accessibility lead by joining the Accessibility Champions Program. This internal program has three levels to guide learning from general interest all the way to subject matter experts.</p><p id="83e2" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po go pp pq pr gr ps pt pu gu pv pw px py ho bk">The Product function’s DEI Speaker Series Squad, Women+ In Tech, and the Accessibility Team are among many internal champions aiming to create spaces where curious learners and teams can make technology even more inclusive. This is just our starting point — we’re excited to keep building and sharing more together.</p>]]></description>
      <link>https://open.nytimes.com/accessibility-requirements-not-features-76d9758665cd</link>
      <guid>https://open.nytimes.com/accessibility-requirements-not-features-76d9758665cd</guid>
      <pubDate>Fri, 25 Apr 2025 17:31:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How The New York Times systematically migrated from Enzyme into React Testing Library]]></title>
      <description><![CDATA[<div class="ho ih ii ij ik ab cb ci bh hu hv hw hx"><figure class="or os ot ou ov ow oo op paragraph-image"><div role="button" tabindex="0" class="ox oy fj oz bh pa oo op oq"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*7ckdNuajj6YKWl1MoUznpg.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*7ckdNuajj6YKWl1MoUznpg.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*7ckdNuajj6YKWl1MoUznpg.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*7ckdNuajj6YKWl1MoUznpg.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*7ckdNuajj6YKWl1MoUznpg.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*7ckdNuajj6YKWl1MoUznpg.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*7ckdNuajj6YKWl1MoUznpg.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*7ckdNuajj6YKWl1MoUznpg.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh fu pb c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="pc ff pd oo op pe pf bf b bg z du">Illustration by Iris Lei</figcaption></figure><p id="0032" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk"><strong class="pi io">By Felipe Buenaño</strong></p><p id="e473" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">As part of our efforts to maintain and improve the functionality and performance of The New York Times core website, we recently upgraded our React library from <a class="af hb" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/enhancing-the-new-york-times-web-performance-with-react-18-d6f91a7c5af8">React 16 into React 18</a>. One of the biggest challenges we faced in the process was transforming our codebase from the <a class="af hb" href="https://enzymejs.github.io/enzyme/" rel="noopener ugc nofollow" target="_blank">Enzyme</a> test utility into the <a class="af hb" href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener ugc nofollow" target="_blank">React Testing Library</a>.</p><p id="77a3" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">There are some major key differences in unit testing between these two libraries. Enzyme generates a string representation of the DOM tree. React objects are accessible through Enzyme methods. On the other hand, React Testing Library generates an actual representation of the DOM tree, where React elements are no longer reachable but are rendered as part of the DOM as a whole.</p><p id="91f2" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">When making updates to our codebase’s testing library, we needed to ensure that site traffic was steady and there were no disruptions. With millions of visitors reaching out to our site daily, we had to be extra cautious. In order to successfully migrate our testing library, we implemented a systematic approach that updated test files individually in a consistent manner.</p><p id="c3b9" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Our project had relied on Enzyme since its very beginning in May of 2016. However, given the push by the React platform to <a class="af hb" href="https://www.piotrstaniow.pl/goodbye-enzyme" rel="noopener ugc nofollow" target="_blank">shift towards the React Testing Library</a>, we needed to make this transition soon. In addition to migrating hundreds of files within our core codebase, our roadmap had other priorities with higher user impact.</p><p id="8933" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po gm qv pq pr gp qw pt pu gs qx pw px py ho bk">So, how do you move hundreds of files from one testing philosophy to another?</p><p id="ce0e" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">There are three ways:</p><ol class=""><li id="df6a" class="pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py qy qz ra bk">The bulldozer approach</li>
<li id="b287" class="pg ph in pi b jl rb pk pl jo rc pn po gm rd pq pr gp re pt pu gs rf pw px py qy qz ra bk">The consensus approach</li>
<li id="262a" class="pg ph in pi b jl rb pk pl jo rc pn po gm rd pq pr gp re pt pu gs rf pw px py qy qz ra bk">The piecemeal approach</li>
</ol><p id="30b7" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po gm qv pq pr gp qw pt pu gs qx pw px py ho bk">The bulldozer approach is a top-down solution that updates all the files in one fell swoop. What that means is opening a single pull request that contains multiple changes across hundreds of files. This is a good solution when working in isolation. But because the code base it’s updated constantly we run the risk of having to resolve conflicts at high frequency. Also, this approach does not invite collaboration with others who may also be interested in helping deprecate Enzyme.</p><p id="97a9" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po gm qv pq pr gp qw pt pu gs qx pw px py ho bk">The consensus approach is a highly collaborative approach that requires ownership by engineers for each file. This is a great solution for new or highly visible projects.</p><p id="d596" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po gm qv pq pr gp qw pt pu gs qx pw px py ho bk">This approach requires working on individual files and making strategic, impactful changes continuously until we reach the last corner of the codebase. The strategy here is to start with the most basic file, that is, the file that requires few changes. Then move on to the next most <em class="rg">basic file</em>. When these updates are made on a consistent basis i.e. when a change is made daily, momentum will start to build up to a point that making changes becomes part of the daily routine.</p><p id="711d" class="pw-post-body-paragraph pg ph in pi b jl qt pk pl jo qu pn po gm qv pq pr gp qw pt pu gs qx pw px py ho bk">We decided to go with the piecemeal approach. It allows you to create momentum and consensus at the same time. This approach has an important requirement: work needs to start at the most basic file, which, in this context, is the file that requires only one or two lines of change, or the file with the least number of tests. Once this file is updated, the first step in the migration process begins. For instance when you need to assert the visibility of an element in React Testing Library vs Enzyme, you must figure out how to retrieve the element then test for visibility.</p><p id="a3e9" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Here is an example of how that may look like:</p><p id="0135" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Given a react component:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />function Content() {<br />return &lt;div&gt;Important content goes here!&lt;/div&gt;;<br />}<br />export default Content;</pre><p id="7a86" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">This is how unit tests for this code might look like using Enzyme:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />import Adapter from 'enzyme-adapter-react-16';<br />import { shallow, configure } from 'enzyme';<br />import Content from '../Content';<br />configure({ adapter: new Adapter() });</pre><pre class="hn rh ri rj bp rk bb bk">describe('Content', () =&gt; {<br />test('renders a component', () =&gt; {<br />const content = shallow(&lt;Content /&gt;);<br />const div = content.find('div');<br />expect(div.text()).toBe('Important content goes here!');<br />});<br />});</pre><p id="d1da" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">This is how that same code would look like for React Testing Library:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />import { render } from '@testing-library/react';<br />import '@testing-library/jest-dom';<br />import Content from '../Content';<br />describe('Content', () =&gt; {<br />test('renders a component', () =&gt; {<br />const content = render(&lt;Content /&gt;);<br />const div = content.container.querySelector('div');<br />expect(div.innerHTML).toBe('Important content goes here!');<br />});<br />});</pre><p id="17b4" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Notice that aside from the obvious changes around the methods used to access the component, React Testing Library leverages the DOM to access the elements within the component.</p><p id="5832" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Later, when working on a test that requires you to click an element, you would already know how to find an element using the previous test as a template. At this point, you would need to figure out now how to fire the event.</p><p id="9931" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Given the following React component:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React, { useState } from 'react';<br />function ButtonContent() {<br />const [count, setCount] = useState(0);<br />return (<br />&lt;div&gt;<br />&lt;button id="btn" onClick={() =&gt; setCount(count + 1)}&gt;<br />Button count {count}<br />&lt;/button&gt;<br />&lt;/div&gt;<br />);<br />}<br />export default ButtonContent;</pre><p id="d04c" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">This is how unit tests for this code might look like using Enzyme:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />import Adapter from 'enzyme-adapter-react-16';<br />import { mount, configure } from 'enzyme';<br />import ButtonContent from '../ButtonContent';<br />configure({ adapter: new Adapter() });</pre><pre class="hn rh ri rj bp rk bb bk"> test('how element content changes by updating the state of the component', () =&gt; {<br />const buttonContent = mount(&lt;ButtonContent /&gt;);<br />const button = buttonContent.find('#btn');<br />button.simulate('click', {<br />preventDefault() {},<br />});<br />expect(button.html()).toContain('Button count 1');<br />});<br />});</pre><p id="3014" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">This is how that same code would look like for React Testing Library:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />import { render } from '@testing-library/react';<br />import '@testing-library/jest-dom';<br />import ButtonContent from '../ButtonContent';<br />describe('ButtonContent', () =&gt; {<br />test('how element content changes by updating the state of the component', () =&gt; {<br />const buttonContent = render(&lt;ButtonContent /&gt;);<br />const button = buttonContent.container.querySelector('#btn');<br />button.click();<br />expect(button.innerHTML).toBe('Button count 1');<br />});<br />});</pre><p id="c74e" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Notice the similarities with the first test. When it comes to this test, you need to focus on clicking the element.</p><p id="a8f9" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Later when more complexity is required by a test that evaluates visibility, interactivity and network interaction you would use the previous two tests as templates then figure out how to retrieve the response to evaluate it.</p><p id="51c2" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Given the following React component:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React, { useState } from 'react';<br />function InteractiveContent() {<br />const [isVisible, setIsVisible] = useState(false);<br />function loadImage(event) {<br />const img = event.target.previousElementSibling;<br />img.src = 'https://placehold.co/400';<br />img.onload = () =&gt; {<br />setIsVisible(true);<br />};<br />}<br />return (<br />&lt;div&gt;<br />&lt;img id="myImg" alt="load image" is-visible={isVisible.toString()} /&gt;<br />&lt;button id="btn" onClick={loadImage}&gt;<br />Click to show an image<br />&lt;/button&gt;<br />&lt;/div&gt;<br />);<br />}<br />export default InteractiveContent;</pre><p id="a013" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">This is how unit tests for this code might look like using Enzyme:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />import Adapter from 'enzyme-adapter-react-16';<br />import { mount, configure } from 'enzyme';<br />import InteractiveContent from '../InteractiveContent';<br />configure({ adapter: new Adapter() });<br />describe('InteractiveContent', () =&gt; {<br />test('should load an image after a button is clicked', () =&gt; {<br />const interactiveContent = mount(&lt;InteractiveContent /&gt;);<br />const button = interactiveContent.find('#btn');<br />button.simulate('click', {<br />preventDefault() {},<br />});<br />const image = interactiveContent.find('img');<br />image.simulate('load');<br />expect(image.html()).toContain('https://placehold.co/400');<br />});<br />});</pre><p id="8c5f" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">This is how that same code would look like for React Testing Library:</p><pre class="or os ot ou ov rh ri rj bp rk bb bk">import React from 'react';<br />import { render, act } from '@testing-library/react';<br />import '@testing-library/jest-dom';<br />import InteractiveContent from '../InteractiveContent';<br />describe('InteractiveContent', () =&gt; {<br />test('should load an image after a button is clicked', () =&gt; {<br />act(() =&gt; {<br />const interactiveContent = render(&lt;InteractiveContent /&gt;);<br />const button = interactiveContent.container.querySelector('#btn');<br />button.click();<br />const image = interactiveContent.container.querySelector('#myImg');<br />image.onload();<br />expect(image.src).toBe('https://placehold.co/400');<br />});<br />});<br />});</pre><p id="2618" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Although this test is more complex than the first two tests, all you need to do is focus on firing the onload event for the image since you’ve already shown how to access an element and click it from the previous tests.</p><p id="60d2" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">By the time a couple of files have been updated the differences between Enzyme and React Testing Library become trivial to resolve. Also a clear <em class="rg">pattern</em> of work will be established. Every time you make changes to a single test, you will start to identify ways you have updated your code to accommodate the new library. Solving more complex test cases becomes easier once the process has undergone several interactions. As the files become more difficult to resolve, solutions can often be found by looking back at previous work.</p><p id="5e25" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Since the updates are small and well-documented in the previous tests, integrating people into this work requires little effort. Because of this ability to onboard new people, consensus is built naturally as people can join in and help contribute to completing the migration.</p><p id="3dc5" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">The piecemeal approach was time-consuming since it required us to work on a single file at the time but allowed us to migrate with minimal disruption. This approach also gave maintainable progress, which meant that no bug was introduced while migrating. Most importantly, though, this process allowed for collaboration. It gave people interested in joining this project a template they could follow, making the process more manageable and less stressful. It allowed us to maintain our development pace for other critical features.</p><p id="096b" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk">Migrating from Enzyme to React Testing Library was a significant but impactful undertaking for our core web application. We could complete the migration without disrupting our roadmap by choosing a methodical, piecemeal approach. This experience taught us the value of strategic planning and balancing technical debt with ongoing development needs.</p></div><div class="ho ih ii ij ik ab cb ci bh hu hv hw hx"><p id="4b53" class="pw-post-body-paragraph pg ph in pi b jl pj pk pl jo pm pn po gm pp pq pr gp ps pt pu gs pv pw px py ho bk"><em class="rg">Felipe Buenaño is a senior software engineer on the core Web Platforms team at The New York Times. He brings fifteen years of experience in web development. He is known for his strong passion for code refactoring. His contributions have been recognized with awards, including the 2023 NYT Maker’s Week Best of Use AI and the Q1 NYT Publisher’s Award for AMP Decommission.</em></p></div>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-systematically-migrated-from-enzyme-into-react-testing-library-b3ea538d001c</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-systematically-migrated-from-enzyme-into-react-testing-library-b3ea538d001c</guid>
      <pubDate>Mon, 03 Mar 2025 18:59:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How The New York Times Incorporates Editorial Judgement in Algorithms to Curate Home Screen Content]]></title>
      <description><![CDATA[<div class="gn go gp gq gr ab cb ci bh fz ga gb gc"><div><h2 id="03ff" class="pw-subtitle-paragraph hr gt gu bf b hs ht hu hv hw hx hy hz ia ib ic id ie if ig cq du">A look into how editorially-driven algorithms assist content curation on The New York Times home page.</h2></div><figure class="nl nm nn no np nq ni nj paragraph-image"><div role="button" tabindex="0" class="nr ns fj nt bh nu ni nj nk"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*WTljcsMoiN2pMl9KKfTI0g.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*WTljcsMoiN2pMl9KKfTI0g.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*WTljcsMoiN2pMl9KKfTI0g.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*WTljcsMoiN2pMl9KKfTI0g.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*WTljcsMoiN2pMl9KKfTI0g.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*WTljcsMoiN2pMl9KKfTI0g.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*WTljcsMoiN2pMl9KKfTI0g.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*WTljcsMoiN2pMl9KKfTI0g.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh mp nv c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nw ff nx ni nj ny nz bf b bg z du">Illustration by Vivek Thakker</figcaption></figure><p id="65c1" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk"><strong class="oc gv">By Zhen Yang</strong></p><p id="a2c2" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">Whether on the web or the app, the home page of The New York Times is a crucial gateway, setting the stage for readers’ experiences and guiding them to the most important news of the day. The Times publishes over 250 stories daily, far more than the 50 to 60 stories that can be featured on the home page at a given time. Traditionally, editors have manually selected and programmed which stories appear, when and where, multiple times daily. This manual process presents challenges:</p><ul class=""><li id="7e00" class="oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov ow ox oy bk">How can we provide readers a relevant, useful, and fresh experience each time they visit the home page?</li>
<li id="db8f" class="oa ob gu oc b hs oz oe of hv pa oh oi oj pb ol om on pc op oq or pd ot ou ov ow ox oy bk">How can we make our editorial curation process more efficient and scalable?</li>
<li id="bf6d" class="oa ob gu oc b hs oz oe of hv pa oh oi oj pb ol om on pc op oq or pd ot ou ov ow ox oy bk">How do we maximize the reach of each story and expose more stories to our readers?</li>
</ul><p id="4e31" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">To address these challenges, The Times has been actively developing and testing editorially-driven algorithms to assist in curating home page content. These algorithms are editorially driven in that a human editor’s judgment or input is incorporated into every aspect of the algorithm — including deciding where on the home page the stories are placed, informing the rankings, and potentially influencing and overriding algorithmic outputs when necessary. From the get-go, we’ve designed algorithmic programming to elevate human curation, not to replace it.</p><p id="a166" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">The Times began using algorithms for content recommendations <a class="af qf" href="https://www.niemanlab.org/2011/02/you-are-what-you-read-nyt-cto-marc-frons-on-the-papers-new-article-recommendation-engine/" rel="noopener ugc nofollow" target="_blank">in 2011</a> but only recently started applying them to home page modules. For years, we only had one algorithmically-powered module, “Smarter Living”, on the home page, and later “Popular in The Times.” Both were positioned relatively low on the page. Three years ago, the formation of <a class="af qf" href="https://www.nytco.com/press/introducing-the-experiments-and-personalization-team/" rel="noopener ugc nofollow" target="_blank">a cross-functional team</a> — including newsroom editors, product managers, data scientists, data analysts, and engineers — brought the momentum needed to advance our responsible use of algorithms. Today, nearly half of the home page is programmed with assistance from algorithms that help promote news, features, and sub-brand content, such as The Athletic and Wirecutter (see Figure 1 for the position of algorithmic modules on the home page). Some of these modules, such as the Features Module located at the top right of the home page on the web version, are in highly visible locations. During major news moments, editors can also deploy algorithmic modules to display additional coverage to complement a main module of stories near the top of the page (the topmost news package of Figure 1 is an example of this in action).</p><figure class="nl nm nn no np nq ni nj paragraph-image"><div class="ni nj qg"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*5qcQl1qM-U9ukVAT 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*5qcQl1qM-U9ukVAT 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*5qcQl1qM-U9ukVAT 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*5qcQl1qM-U9ukVAT 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*5qcQl1qM-U9ukVAT 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*5qcQl1qM-U9ukVAT 1100w, https://miro.medium.com/v2/resize:fit:1120/format:webp/0*5qcQl1qM-U9ukVAT 1120w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 560px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*5qcQl1qM-U9ukVAT 640w, https://miro.medium.com/v2/resize:fit:720/0*5qcQl1qM-U9ukVAT 720w, https://miro.medium.com/v2/resize:fit:750/0*5qcQl1qM-U9ukVAT 750w, https://miro.medium.com/v2/resize:fit:786/0*5qcQl1qM-U9ukVAT 786w, https://miro.medium.com/v2/resize:fit:828/0*5qcQl1qM-U9ukVAT 828w, https://miro.medium.com/v2/resize:fit:1100/0*5qcQl1qM-U9ukVAT 1100w, https://miro.medium.com/v2/resize:fit:1120/0*5qcQl1qM-U9ukVAT 1120w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 560px" /><img alt="" class="bh mp nv c" width="560" height="798" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="2d12" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">Algorithmic programming comprises three steps (Figure 2): (1) Pooling: creating a pool of eligible stories for the specific module; (2) Ranking: sorting stories by a ranking mechanism; and (3) Finishing: applying editorial guardrails and business rules to ensure the final output of stories meets our standards. Editorial judgment is incorporated into all of these steps, in different ways.</p><figure class="nl nm nn no np nq ni nj paragraph-image"><div class="ni nj qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*PPp5-yzTSoFtIpG8 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*PPp5-yzTSoFtIpG8 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*PPp5-yzTSoFtIpG8 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*PPp5-yzTSoFtIpG8 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*PPp5-yzTSoFtIpG8 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*PPp5-yzTSoFtIpG8 1100w, https://miro.medium.com/v2/resize:fit:1372/format:webp/0*PPp5-yzTSoFtIpG8 1372w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 686px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*PPp5-yzTSoFtIpG8 640w, https://miro.medium.com/v2/resize:fit:720/0*PPp5-yzTSoFtIpG8 720w, https://miro.medium.com/v2/resize:fit:750/0*PPp5-yzTSoFtIpG8 750w, https://miro.medium.com/v2/resize:fit:786/0*PPp5-yzTSoFtIpG8 786w, https://miro.medium.com/v2/resize:fit:828/0*PPp5-yzTSoFtIpG8 828w, https://miro.medium.com/v2/resize:fit:1100/0*PPp5-yzTSoFtIpG8 1100w, https://miro.medium.com/v2/resize:fit:1372/0*PPp5-yzTSoFtIpG8 1372w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 686px" /><img alt="" class="bh mp nv c" width="686" height="836" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="8ea9" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">To make an algorithmic recommendation, we first need a pool of articles eligible to appear in a given home page module. A pool can be either manually curated by editors or automatically generated via a query based on rules set by the newsroom.</p><p id="d23b" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">A pool typically includes more stories than the number of slots available in the module, so we need a mechanism to rank them to determine which ones to show first and in what order. While there are various ways to rank stories, the algorithm we frequently use on the home page is a <em class="qi">contextual bandit</em>, a reinforcement learning method (see our previous <a class="af qf" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/how-the-new-york-times-is-experimenting-with-recommendation-algorithms-562f78624d26">blog post</a> for more information). While in its simplest form, a bandit recommends the same set of engaging articles to all users; the “contextual” version uses additional reader information (e.g., reading history or geographical location) to adjust the recommendations and make the experience more relevant for each reader. For an example of the geo-personalized bandit, see our previous <a class="af qf" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/how-the-new-york-times-is-experimenting-with-recommendation-algorithms-562f78624d26">blog post</a>.</p><p id="4675" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">To prioritize mission-driven and significant stories, we use several approaches to quantify editorial importance. One approach is having editors assign a rank to each story in the pool, with more recent and newsworthy stories generally considered more important. Another method infers a story’s importance based on its past promotion on the homepage, where stories that remain in prominent positions for longer are rated as more important. Regardless of the approach, editorial importance can be combined with the bandit to ensure that editorial judgment is incorporated into the ranking process, thus prioritizing stories deemed important by the newsroom.</p><p id="1515" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">Once we have a ranked list of stories, we make final adjustments based on predetermined rules developed with our newsroom partners before stories are shown to readers. One such intervention we developed is a <em class="qi">Pinning</em> function that allows editors to override the algorithm and pin important stories at the top. Other important examples are our “<em class="qi">Already-Read</em>” and <em class="qi">“Already-Seen”</em> filters, which deprioritize stories that the user has already read or seen a certain number of times (Figure 2). This finishing step ensures that editorial judgment shapes the final output and that we maintain a dynamic and fresh user experience.</p><p id="adb0" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">The process begins with clearly defining editorial intentions, standards and boundaries as well as reader goals, and then designing algorithms appropriately. To illustrate the process, consider the above-mentioned Features Module (Figure 1): Content in this module is among the most widely-read on the home page. The goal of algorithmic programming for this module is to increase engagement by presenting readers with freshly published features and columns and also to ensure that the most relevant and engaging stories are subsequently displayed.</p><p id="9e41" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">After several rounds of experimentation and extensive collaboration with editors, we realized that more features had to be built to achieve the intended reader experience and for the newsroom to be comfortable with integrating algorithms into their process for programming the home page. Together, we built and launched the following features, which are cornerstones in accelerating the use of algorithmic programming on the home page:</p><p id="a12a" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">While pinning is an effective tool for increasing the exposure of important stories, it is also a rather blunt one: a pinned story is shown to all readers until unpinned by an editor. To meet a desire by home page editors for a “softer” and more dynamic solution, we developed an <em class="qi">Exposure Boosting</em> capability. While a “boosted” story also initially appears at the top of the module, it gradually moves down the slots over time — at a rate predetermined by editors — until it becomes subject to the algorithm’s bandit again (Figure 3: Exposure Boosting).</p><p id="187c" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">Another way to increase the exposure of our stories while ensuring that readers are presented with fresh content is by removing articles that the user has seen several times but has not clicked on — this assumes that the reader is not interested in the story displayed and the algorithm instead shows the next story on the list. When an article is shown to a user, whether they click on it or not, it’s called an impression. This rather rudimentary logic has its drawbacks: Frequent visitors might experience recommendations refreshing too often, causing a disorienting “slot machine” effect. They could also quickly exhaust all recommendations, resulting in a static module. At the same time, infrequent users, who don’t reach the impression limit, might see the same stories on distant subsequent visits, leading to a home page that would feel stale.</p><p id="26e8" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">These potential issues were especially of concern for high-traffic modules like the Features Module. To address them, we developed a capability called <em class="qi">Smart Refreshing</em>. This feature creates a more stable experience for frequent visitors by only increasing the impression counter if a certain amount of time has passed since the last impression. Effectively, impressions occurring less than that amount of time are collapsed into a single impression (Figure 3: Smart Refreshing). For infrequent visitors, Smart Refreshing limits staleness by automatically refreshing recommendations after a set period since their first impression, even if the impression limit was not reached. Home page editors decide on the interval between impressions and the maximum duration a story remains after its initial view based on editorial judgment and A/B testing.</p><figure class="nl nm nn no np nq ni nj paragraph-image"><div role="button" tabindex="0" class="nr ns fj nt bh nu ni nj qj"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*99DKNHW7guqB_0-g 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*99DKNHW7guqB_0-g 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*99DKNHW7guqB_0-g 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*99DKNHW7guqB_0-g 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*99DKNHW7guqB_0-g 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*99DKNHW7guqB_0-g 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*99DKNHW7guqB_0-g 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*99DKNHW7guqB_0-g 640w, https://miro.medium.com/v2/resize:fit:720/0*99DKNHW7guqB_0-g 720w, https://miro.medium.com/v2/resize:fit:750/0*99DKNHW7guqB_0-g 750w, https://miro.medium.com/v2/resize:fit:786/0*99DKNHW7guqB_0-g 786w, https://miro.medium.com/v2/resize:fit:828/0*99DKNHW7guqB_0-g 828w, https://miro.medium.com/v2/resize:fit:1100/0*99DKNHW7guqB_0-g 1100w, https://miro.medium.com/v2/resize:fit:1400/0*99DKNHW7guqB_0-g 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh mp nv c" width="700" height="374" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="59f3" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">In response to concerns from editors that some stories risk not getting enough exposure under purely algorithmic programming, we developed Exposure Minimums. This capability gives the newsroom the reassurance that all stories (particularly less popular ones) receive a minimum number of impressions on the home page before the algorithm takes over their programming. This guarantee helps set editorial expectations for story exposure and has enabled the rollout of algorithms on prominent sections of the home page, such as the Features Module. Typically, higher minimum values increase story exposure but can interfere with algorithm optimization, reducing overall engagement. To find the right balance between exposure and engagement, the exposure minimum is determined in collaboration with our newsroom partners and through A/B testing.</p><p id="957d" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">One blocker we encountered while trying to scale algorithmic programming was the lack of visibility for editors regarding reader experience and story performance. One of the biggest challenges was feedback from the newsroom that editors and reporters couldn’t tell if their stories would appear in an algorithmic module on the home page. With the “Already-Read” filter in place, their stories, which they would have read, wouldn’t show up on the home page.</p><p id="ee88" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">To address this, our product designer, engineers and data scientists partnered with home page editors to conceptualize and build a browser extension that allows editors to track all the algorithmic modules on the home page, preview different A/B testing variants, and review all the stories that have been selected and eligible for promotion for each module. Our engineers also built a tool that sends automated alerts to editors about changes in algorithmic programming, including new stories added to the pool and any headline or summary updates. Additionally, the Data Science team developed a dashboard to provide near-real-time analytics for stories that were algorithmically programmed.</p><p id="e51a" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">After rigorously testing each of these new features and getting editors familiar with these tools and concepts, we permanently implemented algorithmic programming for the Features Module in the spring of 2024. This approach not only streamlined the editorial workflow (daily updates to the module were reduced by a third), it also gave stories that had a longer shelf life more time on the home page, lifting overall engagement. Our product colleagues were delighted that powering the Features Module with an algorithm also helped increase engagement with our sub-brands such as Wirecutter and Cooking.</p><p id="89ef" class="pw-post-body-paragraph oa ob gu oc b hs qa oe of hv qb oh oi oj qc ol om on qd op oq or qe ot ou ov gn bk">The strong foundation we built by incorporating editorial thinking into our algorithms, coupled with the trust we cultivated, led to more demand from the newsroom for more algorithmic programming tools. Today, editors are also using a tailored set of algorithmic modules to power a secondary set of stories for a topic or news event. These modules are completely self-service for editors, and have been particularly useful during major news events, when the volume of coverage produced often exceeds the amount of real estate on the home page (See Figure 4 for a couple of examples).</p><figure class="nl nm nn no np nq ni nj paragraph-image"><div role="button" tabindex="0" class="nr ns fj nt bh nu ni nj qk"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*9vz24V3cTO_VcWXK 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*9vz24V3cTO_VcWXK 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*9vz24V3cTO_VcWXK 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*9vz24V3cTO_VcWXK 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*9vz24V3cTO_VcWXK 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*9vz24V3cTO_VcWXK 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*9vz24V3cTO_VcWXK 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*9vz24V3cTO_VcWXK 640w, https://miro.medium.com/v2/resize:fit:720/0*9vz24V3cTO_VcWXK 720w, https://miro.medium.com/v2/resize:fit:750/0*9vz24V3cTO_VcWXK 750w, https://miro.medium.com/v2/resize:fit:786/0*9vz24V3cTO_VcWXK 786w, https://miro.medium.com/v2/resize:fit:828/0*9vz24V3cTO_VcWXK 828w, https://miro.medium.com/v2/resize:fit:1100/0*9vz24V3cTO_VcWXK 1100w, https://miro.medium.com/v2/resize:fit:1400/0*9vz24V3cTO_VcWXK 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bh mp nv c" width="700" height="444" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="0891" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">Currently, algorithmic programming recommends stories within individual modules on the home page. Next, we want to explore and test reordering modules based on a mix of editorial importance, engagement, and personalization signals. We believe this approach can further improve a reader’s experience and amplify our journalism.</p><p id="d0c0" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk">Zhen Yang is a Data Scientist on the Algorithmic Recommendations team at The New York Times. Outside of work, Zhen enjoys playing ping pong, rope adventure, and traveling.</p></div><div class="gn go gp gq gr ab cb ci bh fz ga gb gc"><p id="c00d" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk"><em class="qi">Celia Eddy, Alex Saez, Derrick Ho, and Christopher Wiggins contributed to this post.</em></p><p id="32df" class="pw-post-body-paragraph oa ob gu oc b hs od oe of hv og oh oi oj ok ol om on oo op oq or os ot ou ov gn bk"><strong class="oc gv"><em class="qi">Acknowledgements:</em></strong> <em class="qi">We acknowledge the invaluable contributions of SubX Programmed Surfaces (Product), Home Personalization and Experiments (Newsroom), Algorithmic Recommendations (Data Science), Machine Learning Platform (Engineering), Personalization (Engineering), Programming (Engineering), and Messaging and Personalization (Engineering) team. Together, we designed and built these editorially-driven algorithms, advancing our use of algorithms on the home page to assist content curation. This achievement would not have been possible without their dedication and teamwork.</em></p></div>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-incorporates-editorial-judgement-in-algorithms-to-curate-home-screen-content-85f48209fdad</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-incorporates-editorial-judgement-in-algorithms-to-curate-home-screen-content-85f48209fdad</guid>
      <pubDate>Wed, 02 Oct 2024 20:27:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Enhancing The New York Times Web Performance with React 18]]></title>
      <description><![CDATA[<div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><div><h2 id="85c4" class="pw-subtitle-paragraph hq gs gt be b hr hs ht hu hv hw hx hy hz ia ib ic id ie if cp dt">How upgrading to React 18 energized The New York Times website — and how we tackled some of the challenges we faced along the way.</h2></div><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fi nx bg ny nm nn no"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*rT1gMg-9ensw1FDxaAaq_Q.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*rT1gMg-9ensw1FDxaAaq_Q.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*rT1gMg-9ensw1FDxaAaq_Q.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*rT1gMg-9ensw1FDxaAaq_Q.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*rT1gMg-9ensw1FDxaAaq_Q.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*rT1gMg-9ensw1FDxaAaq_Q.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*rT1gMg-9ensw1FDxaAaq_Q.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*rT1gMg-9ensw1FDxaAaq_Q.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mt nz c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fe ob nm nn oc od be b bf z dt">Illustration by Ben Hickey</figcaption></figure><p id="42be" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">By Ilya Gurevich</strong></p><p id="ce86" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">As software engineers at The New York Times, we place a high value on page performance, SEO, and keeping up to date with the latest technology. With those priorities in mind, the release of React 18 stood out to us as a significant and tangible leap forward in the ever-expanding world of web development. For our React-based sites, the upgrade promised a performance boost and access to exciting new features. Last winter, we set out to embrace the powers of React 18 on our flagship core news site. Along the way, we encountered some unique peculiarities — both in React and in our own site — that we had to learn to navigate through. In the end, we achieved big performance gains and unlocked a world of future improvements that we’re still exploring.</p><p id="8b94" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Before we dive into our process for upgrading, let’s take a look at a few of the major benefits and changes in React 18:</p><ul class=""><li id="439a" class="oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz pa pb pc bj"><strong class="og gu">Smoother Rendering with Concurrent Mode:</strong> React 18 introduces Concurrent Mode, a paradigm shift that allows for simultaneous rendering of updates and user interactions. This translates to smoother animations, less screen jank and cumulative layout shift, and a more responsive user experience.</li>
<li id="4224" class="oe of gt og b hr pd oi oj hu pe ol om on pf op oq or pg ot ou ov ph ox oy oz pa pb pc bj"><strong class="og gu">Automatic Batching and Transitions:</strong> To take full advantage of concurrency, React 18 automatically batches state updates within a single render cycle, optimizing performance. It does so by breaking up tasks in the main thread, which is a big shift from prior mechanics, where almost all tasks were synchronously executed. The introduction of new <a class="af pi" href="https://react.dev/reference/react/useTransition" rel="noopener ugc nofollow" target="_blank">useTransition</a> hooks also allows engineers to ensure that certain states will update without blocking the UI.</li>
<li id="877e" class="oe of gt og b hr pd oi oj hu pe ol om on pf op oq or pg ot ou ov ph ox oy oz pa pb pc bj"><strong class="og gu">Exciting New Features:</strong> React 18 paves the way for exciting functionalities like server-side rendering and streaming updates through <a class="af pi" href="https://react.dev/reference/rsc/server-components" rel="noopener ugc nofollow" target="_blank">react server components</a> and selective hydration, opening doors to innovative UI patterns and faster initial renders.</li>
</ul><p id="b405" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">The performance gains were particularly important to us because they promised significant improvements in our Interaction to Next Paint (INP) scores. INP is a measure of page responsiveness and is the newest Core Web Vital, a set of metrics that Google uses to rank websites in search results. SEO scores are vital for a news organization, and improving our INP scores had been a difficult challenge for us, making the React upgrade a high-priority (and high-stakes) initiative.</p><ol class=""><li id="3df0" class="oe of gt og b hr qf oi oj hu qg ol om on qh op oq or qi ot ou ov qj ox oy oz qk pb pc bj"><strong class="og gu">Removing Deprecated Dependencies</strong></li>
</ol><p id="d224" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Before we could get started with the migration itself, we needed to remove a deprecated Enzyme testing library that was incompatible with React 18. To do that, we had to manually migrate all of our test files to the more up-to-date library, <a class="af pi" href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener ugc nofollow" target="_blank"><strong class="og gu">@testing-library/react</strong></a><strong class="og gu">.</strong> In terms of time commitment, this might have been the biggest piece of the entire project. Enzyme was used in hundreds of test files across our repository, and it required a significant manual effort and dozens of pull requests to fully replace it. We accomplished this effort over the course of several months with incremental pull requests in order to accommodate other product work and avoid developer fatigue. At the end of the effort, we definitely felt like experts in the <a class="af pi" href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener ugc nofollow" target="_blank"><strong class="og gu">@testing-library/react</strong></a>API, and we were thankful to move on to the React 18 upgrade itself.</p><p id="e8f3" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">2. Foundation Setting</strong></p><p id="5c1a" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">With the test file migration out of the way, we could begin work on integrating React 18. In order to accomplish this safely, we first started by upgrading all of our major dependencies, types and tests to conform to React 18, without implementing the latest features themselves. This involved simply upgrading everything from @types/react, react-test-renderer, react-dom, and @testing-library to the latest versions in our package.json files across our repository. Upgrading all major dependencies also involved refactoring some test and type definitions to conform to the latest versions as well.</p><p id="5e19" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">3. Turning on the Engines</strong></p><p id="94d7" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Once we felt confident in our package upgrades, we were ready to safely integrate the new functionality of React 18. To turn the features into reality, we needed to utilize the latest APIs: <a class="af pi" href="https://react.dev/reference/react-dom/client/createRoot" rel="noopener ugc nofollow" target="_blank">createRoot</a> and <a class="af pi" href="https://react.dev/reference/react-dom/client/hydrateRoot" rel="noopener ugc nofollow" target="_blank">hydrateRoot</a>. We have several instances across multiple web servers where we’ve integrated React Hydration, with a set of shared UI components rendered between all of them, so it was important for us to enable React 18 functionality in as many places as we could. At first glance, it looks as simple as changing references from <strong class="og gu">ReactDOM.hydrate</strong> to <strong class="og gu">hydrateRoot.</strong> But was it really?</p><p id="615a" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">Unexpected Challenges</strong></p><p id="cbb3" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">As developers, it’s easy to get overconfident when you hit the “deploy to production” button. Your end-to-end integration and unit tests are passing, you’ve covered QA across various surfaces and devices, and you’re moments away from getting that latest feature out the door. We all felt that way when we initially deployed the latest version of React to The New York Times website. Soon after our initial deployment of the new upgrades, we encountered a problem with some highly trafficked content, namely on a content-type we call “embedded interactives”.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fi nx bg ny nm nn ql"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*yqosD8m1lIRtZRh4 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*yqosD8m1lIRtZRh4 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*yqosD8m1lIRtZRh4 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*yqosD8m1lIRtZRh4 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*yqosD8m1lIRtZRh4 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*yqosD8m1lIRtZRh4 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*yqosD8m1lIRtZRh4 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*yqosD8m1lIRtZRh4 640w, https://miro.medium.com/v2/resize:fit:720/0*yqosD8m1lIRtZRh4 720w, https://miro.medium.com/v2/resize:fit:750/0*yqosD8m1lIRtZRh4 750w, https://miro.medium.com/v2/resize:fit:786/0*yqosD8m1lIRtZRh4 786w, https://miro.medium.com/v2/resize:fit:828/0*yqosD8m1lIRtZRh4 828w, https://miro.medium.com/v2/resize:fit:1100/0*yqosD8m1lIRtZRh4 1100w, https://miro.medium.com/v2/resize:fit:1400/0*yqosD8m1lIRtZRh4 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mt nz c" width="700" height="609" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fe ob nm nn oc od be b bf z dt">A custom embedded interactive built by our graphics developers: <a class="af pi" href="https://www.google.com/url?q=https%3A%2F%2Fwww.nytimes.com%2Farticle%2Fhurricane-norma-baja-california.html&amp;sa=D&amp;ust=1719425021820790&amp;usg=AOvVaw0Wy7DlTRRsTiyaAjg31xhe" rel="noopener ugc nofollow" target="_blank">https://www.nytimes.com/article/hurricane-norma-baja-california.html</a></figcaption></figure><p id="40c8" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">At The New York Times, we use custom embedded interactives rendered server-side with <a class="af pi" href="https://react.dev/reference/react-dom/components/common#dangerously-setting-the-inner-html" rel="noopener ugc nofollow" target="_blank">dangerouslySetInnerHTML</a>. These interactives have their own HTML, links, and scripts, running independently of the React tree. This allows editors and journalists to inject one-off, self-contained visual and <a class="af pi" href="https://www.nytimes.com/2023/10/27/business/kanye-west-adidas-yeezy.html" rel="noopener ugc nofollow" target="_blank">interactive elements</a> into our pages without having to alter or re-deploy core infrastructure. Embedded interactives are the key to some of our most impactful reporting, but they can also pose real challenges for developers.</p><p id="f3dd" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">A simplified example might look something like this (where script tags will modify the DOM as soon as the page has opened):</p><pre class="np nq nr ns nt qm qn qo bo qp ba bj">const embeddedInteractiveString = `<br />&lt;div id="server-test"&gt;server&lt;/div&gt;<br />&lt;script&gt;<br />document.addEventListener("DOMContentLoaded", () =&gt; {<br />const serverTestElement = document.getElementById("server-test");<br />serverTestElement.textContent = "client";<br />});<br />&lt;/script&gt;<br />`;<br />return &lt;div dangerouslySetInnerHTML={{ __html: embeddedInteractiveString }} /&gt;;</pre><p id="9107" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">In this setup, the script modifies the “server-test” element’s content from “server” to “client” after page load. This works because browser-rendered scripts execute before React hydrates the DOM. It’s essentially a “black box,” where we trust the injected HTML and its scripts to behave as intended.</p><p id="dd59" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">The Hydration Hurdle</strong></p><p id="8d40" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Enter React 18, with its stricter hydration mismatch requirements. Under the new rules, any DOM modifications between the initial browser load and client-side hydration trigger a fallback to client-side rendering. In our example, even though the script tag modifies the “server-test” element before hydration, in a hydration mismatch, React will discard the server-rendered content and fall back to client-side rendering, essentially nullifying the script’s impact. In previous versions of React, even if there was a hydration mismatch, the React team opted to leave the version of the DOM in an <a class="af pi" href="https://github.com/facebook/react/issues/27848#issuecomment-1883713988" rel="noopener ugc nofollow" target="_blank">invalid state</a> as opposed to re-rendering entirely on the client, which is why we didn’t experience any issues in the past.</p><p id="3279" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">In practice, what does this mean? Well, when rendering components on the client using the dangerouslySetInnerHTML prop, any bit of HTML containing a &lt;script&gt; tag inside of it will not run due to browser security considerations. This means that any embedded interactive that is re-rendered on the client due to hydration mismatches using the dangerouslySetInnerHTML prop will essentially render as if the javascript had never been executed. In our example above, the text content will change from “server” to “client,” but on a hydration mismatch, it will re-render as “server.” This ended up making some of our embedded interactives look wildly different from the expected render.</p><p id="84b1" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">Expected:</strong></p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fi nx bg ny nm nn qv"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*iL0ORQWV_QeM9ty5 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*iL0ORQWV_QeM9ty5 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*iL0ORQWV_QeM9ty5 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*iL0ORQWV_QeM9ty5 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*iL0ORQWV_QeM9ty5 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*iL0ORQWV_QeM9ty5 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*iL0ORQWV_QeM9ty5 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*iL0ORQWV_QeM9ty5 640w, https://miro.medium.com/v2/resize:fit:720/0*iL0ORQWV_QeM9ty5 720w, https://miro.medium.com/v2/resize:fit:750/0*iL0ORQWV_QeM9ty5 750w, https://miro.medium.com/v2/resize:fit:786/0*iL0ORQWV_QeM9ty5 786w, https://miro.medium.com/v2/resize:fit:828/0*iL0ORQWV_QeM9ty5 828w, https://miro.medium.com/v2/resize:fit:1100/0*iL0ORQWV_QeM9ty5 1100w, https://miro.medium.com/v2/resize:fit:1400/0*iL0ORQWV_QeM9ty5 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mt nz c" width="700" height="683" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="1a7e" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">Actual:</strong></p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fi nx bg ny nm nn qw"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*kcvw3Bu9X7OLN-1x 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*kcvw3Bu9X7OLN-1x 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*kcvw3Bu9X7OLN-1x 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*kcvw3Bu9X7OLN-1x 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*kcvw3Bu9X7OLN-1x 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*kcvw3Bu9X7OLN-1x 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*kcvw3Bu9X7OLN-1x 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*kcvw3Bu9X7OLN-1x 640w, https://miro.medium.com/v2/resize:fit:720/0*kcvw3Bu9X7OLN-1x 720w, https://miro.medium.com/v2/resize:fit:750/0*kcvw3Bu9X7OLN-1x 750w, https://miro.medium.com/v2/resize:fit:786/0*kcvw3Bu9X7OLN-1x 786w, https://miro.medium.com/v2/resize:fit:828/0*kcvw3Bu9X7OLN-1x 828w, https://miro.medium.com/v2/resize:fit:1100/0*kcvw3Bu9X7OLN-1x 1100w, https://miro.medium.com/v2/resize:fit:1400/0*kcvw3Bu9X7OLN-1x 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mt nz c" width="700" height="879" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="b9cc" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">So what do we do?</strong></p><p id="b57d" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Given that React 18 was significantly more sensitive to hydration mismatches than React 16, we essentially had two choices in front of us. The first was to fix all potential hydration mismatches in our website. The second was to adapt embedded interactives to re-mount on the client as a fallback should a hydration mismatch occur. This left us in a bit of a dilemma. The New York Times has published millions of articles with hundreds of different components and tens of thousands of custom embedded interactives. Of course we wanted to fix all of our hydration mismatches, but how could we do so safely?</p><p id="20f0" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">In the end, we decided to tackle both problems at the same time.</p><p id="76e4" class="pw-post-body-paragraph oe of gt og b hr qf oi oj hu qg ol om on qh op oq or qi ot ou ov qj ox oy oz gm bj">We know that script tags, when added via the innerHTML prop (or during a client-side re-render), will not run automatically because of browser security considerations. So how do we get around this? Script tags will only run when manually appended or replaced as a childNode to another element in the DOM. This means that in order to properly run script tags, we must first extract and remove them from the interactive HTML and then <strong class="og gu">append them back into the right location in the embedded interactive</strong> HTML when the component re-renders.</p><pre class="np nq nr ns nt qm qn qo bo qp ba bj">// This function replaces script tags in generic html with empty placeholders.<br />// This allows us to replace the script tag reference in-place later on client-mount with the actual script.<br />export const addsPlaceholderScript = (scriptText, id, scriptCounter) =&gt; {<br />let replacementToken = '';<br />let hoistedText = scriptText;<br />replacementToken = `&lt;script id="${id}-script-${scriptCounter}"&gt;&lt;/script&gt;`;<br />hoistedText = hoistedText.replace('&lt;script', `&lt;script id="${id}-script-${scriptCounter}"`);<br />return {<br />replacementToken,<br />hoistedText,<br />};<br />};<br />// This function extracts and removes `&lt;script&gt;` tags from an interactive HTML string<br />// and returns an object containing:<br />// - `scriptsToRunOnClient`: An array of script texts to be run on client-mount.<br />// - `scriptlessHtml`: The modified HTML string with scripts removed with empty script references.<br />export const extractAndReplace = (html, id) =&gt; {<br />const SCRIPT_REGEX = /&lt;script[\s\S]*?&gt;[\s\S]*?&lt;\/script&gt;/gi;<br />let lastMatchAdjustment = 0;<br />let scriptlessHtml = html;<br />let match;<br />const scriptsToRunOnClient = [];<br />let scriptCounter = 0;<br />while ((match = SCRIPT_REGEX.exec(html))) {<br />const [matchText] = match;<br />if (matchText) {<br />let hoistedText = matchText;<br />let replacementToken = '';<br />({ hoistedText, replacementToken } = addsPlaceholderScript(hoistedText, id, scriptCounter));<br />scriptCounter += 1;<br />const start = match.index - lastMatchAdjustment;<br />const end = match.index + matchText.length - lastMatchAdjustment;<br />scriptlessHtml = `${scriptlessHtml.substring(<br />0,<br />start<br />)}${replacementToken}${scriptlessHtml.substring(end, scriptlessHtml.length)}`;<br />scriptsToRunOnClient.push(hoistedText);<br />lastMatchAdjustment += matchText.length - replacementToken.length;<br />}<br />}<br />return {<br />scriptsToRunOnClient,<br />scriptlessHtml,<br />};<br />};<br />// Run script on client<br />const runScript = (clonedScript) =&gt; {<br />const script = document.getElementById(document.getElementById(`${clonedScript.id}`))<br />script.parentNode.replaceChild(clonedScript, script);<br />}</pre><p id="abc3" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">You may be asking, <em class="qx">why not keep scripts on the server and then re-run them on the client</em>? One reason why this is not possible in some scenarios is that some script tags declare variables globally instead of within a function closure. If you were to pre-render those script tags on the server and then re-run them on the client, you would encounter errors due to redeclaration of global variables, which is not possible.</p><p id="2fb3" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">That initial solution fixed many of our embedded interactives. Unfortunately, not every interactive plays well with arbitrarily-ordered script execution. Here’s where we navigate some nuances:</p><p id="b3e9" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">Script Load Ordering</strong></p><p id="dddc" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Some interactive scripts, when appended back to the embedded interactive HTML, must be loaded in the correct order. Previous script execution strategies automatically assumed that all &lt;script&gt; tags had already been declared and pre-rendered on the server. Now that we are stripping out script tags and re-mounting them on the client, some inherent logic based on these principles are going to break. Let’s walk through an example.</p><pre class="np nq nr ns nt qm qn qo bo qp ba bj">&lt;script&gt;<br />const <br />results = document.getElementById("RESULTS_MANIFEST").innerHTML.ELECTION_RESULTS;<br />// do additional logic with results<br />&lt;/script&gt;<br />&lt;div&gt;<br />Interactive DOM Content Goes here<br />&lt;/&gt;div&gt;<br />&lt;script id="RESULTS_MANIFEST&gt;{"ELECTION_RESULTS": ['result1', 'result2', ....]}&lt;/script&gt;</pre><p id="6d2e" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">In the scenario above, we have an initial script that searches for another script tag by ID and then utilizes some existing logic based on the innerHTML of the second script tag. In previous iterations, since script tags used to be pre-rendered on the server, there wouldn’t be any issue referencing a script tag by ID as the script tag would be available in the DOM by default.</p><p id="eabd" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">For optimal interaction, script execution needs to follow a specific order when re-appended to the DOM. This involves:</p><ol class=""><li id="9fd3" class="oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz qk pb pc bj">Appending non-functional manifest scripts containing static data first.</li>
<li id="b211" class="oe of gt og b hr pd oi oj hu pe ol om on pf op oq or pg ot ou ov ph ox oy oz qk pb pc bj">Executing scripts with src attributes asynchronously next.</li>
<li id="8eb2" class="oe of gt og b hr pd oi oj hu pe ol om on pf op oq or pg ot ou ov ph ox oy oz qk pb pc bj">Finally, appending and executing scripts with vanilla JavaScript in their innerHTML.</li>
</ol><p id="c206" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">This sequencing prevents scripts from referencing each other before they’re properly loaded.</p><pre class="np nq nr ns nt qm qn qo bo qp ba bj">// Parses the provided script tag, returning a priority for sorting.<br />// Priority 1: for JSON or other metadata content.<br />// Priority 2: for other vanilla JS or src contents<br />export const getPriority = template =&gt; {<br />let priority;<br />try {<br />JSON.parse(template.innerHTML);<br />priority = 1;<br />} catch (err) {<br />priority = 2;<br />}<br />return priority;<br />};<br />scripts.sort((a, b) =&gt; getPriority(a) - getPriority(b));</pre><p id="6c2e" class="pw-post-body-paragraph oe of gt og b hr qf oi oj hu qg ol om on qh op oq or qi ot ou ov qj ox oy oz gm bj">After integrating these very fine-tuned — almost surgical — manipulations of our embedded interactive code, we felt that we were able to safely release React 18 into the wild again. While we would never be able to extensively QA nearly 40,000 custom-created embedded interactives, we were able to rely on a few reusable templates that the graphics team often returns to. This let us validate specific behavior within our Svelte or Adobe Illustrator-based embedded interactives. In the long term, we’re committed to squashing our remaining hydration mismatches and achieving complete peace of mind. But in the short term, we were ready to push the “deploy” button again.</p><p id="f782" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Once we released the new features (and spent an hour nervously monitoring internal alerts for any issues), we saw almost immediate performance improvements.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fi nx bg ny nm nn qy"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*MtMev3JHmEYYsbne 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*MtMev3JHmEYYsbne 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*MtMev3JHmEYYsbne 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*MtMev3JHmEYYsbne 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*MtMev3JHmEYYsbne 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*MtMev3JHmEYYsbne 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*MtMev3JHmEYYsbne 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*MtMev3JHmEYYsbne 640w, https://miro.medium.com/v2/resize:fit:720/0*MtMev3JHmEYYsbne 720w, https://miro.medium.com/v2/resize:fit:750/0*MtMev3JHmEYYsbne 750w, https://miro.medium.com/v2/resize:fit:786/0*MtMev3JHmEYYsbne 786w, https://miro.medium.com/v2/resize:fit:828/0*MtMev3JHmEYYsbne 828w, https://miro.medium.com/v2/resize:fit:1100/0*MtMev3JHmEYYsbne 1100w, https://miro.medium.com/v2/resize:fit:1400/0*MtMev3JHmEYYsbne 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mt nz c" width="700" height="377" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="2b45" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">As you can see from this chart, INP scores in the p75 range dropped by roughly 30%!</p><p id="6f65" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Before the upgrade, one of our biggest challenges had been the frequent re-renders our news site went through as it loaded pages. That caused a poor user experience (and sub-par INP scores) when the user tried to interact with the still-loading page.</p><p id="dbb7" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">After the React 18 upgrade, our re-renders were cut essentially in half!</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fi nx bg ny nm nn qz"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*_jaE9Y5ugAi1TfSS 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*_jaE9Y5ugAi1TfSS 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*_jaE9Y5ugAi1TfSS 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*_jaE9Y5ugAi1TfSS 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*_jaE9Y5ugAi1TfSS 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*_jaE9Y5ugAi1TfSS 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*_jaE9Y5ugAi1TfSS 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*_jaE9Y5ugAi1TfSS 640w, https://miro.medium.com/v2/resize:fit:720/0*_jaE9Y5ugAi1TfSS 720w, https://miro.medium.com/v2/resize:fit:750/0*_jaE9Y5ugAi1TfSS 750w, https://miro.medium.com/v2/resize:fit:786/0*_jaE9Y5ugAi1TfSS 786w, https://miro.medium.com/v2/resize:fit:828/0*_jaE9Y5ugAi1TfSS 828w, https://miro.medium.com/v2/resize:fit:1100/0*_jaE9Y5ugAi1TfSS 1100w, https://miro.medium.com/v2/resize:fit:1400/0*_jaE9Y5ugAi1TfSS 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mt nz c" width="700" height="358" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="d2a9" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">These two very visible and important improvements are the direct result of React 18’s automatic batching and concurrency features. This gave us a very clear and positive indication that we were moving in the right direction.</p><p id="de3c" class="pw-post-body-paragraph oe of gt og b hr qf oi oj hu qg ol om on qh op oq or qi ot ou ov qj ox oy oz gm bj">The integration of React 18 has already resulted in significant improvements for us, opening the door to a wealth of previously unavailable possibilities. We are now focused on exploring the potential benefits of new features such as <a class="af pi" href="https://react.dev/reference/react/startTransition" rel="noopener ugc nofollow" target="_blank">startTransition</a> and <a class="af pi" href="https://react.dev/reference/rsc/server-components" rel="noopener ugc nofollow" target="_blank">React Server Components</a>. Our core intention is to continuously bring our INP scores down and improve overall functionality. However, we’re mindful of questions we still need to answer about these enhancements. For now, our primary commitment is ensuring the stable and reliable performance of the current React version we use.</p><p id="12a6" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Based on our results on the news site, we felt confident to pursue upgrades for some of our other sites, where we saw similar performance gains. We were able to get our INP scores out of the “poor” zone before <a class="af pi" href="https://developers.google.com/search/blog/2023/05/introducing-inp" rel="noopener ugc nofollow" target="_blank">Google’s March deadline</a>, and saw no negative SEO results when it became part of their search algorithm. We like to think that our readers are enjoying the slightly-snappier experience. And our newsroom continues to put out <a class="af pi" href="https://www.nytimes.com/2024/03/24/world/asia/india-sugar-cane-fields-child-labor-hysterectomies.html" rel="noopener ugc nofollow" target="_blank">powerful</a> and <a class="af pi" href="https://www.nytimes.com/2024/05/02/arts/music/song-copyright-sheet-music-ed-sheeran-marvin-gaye.html" rel="noopener ugc nofollow" target="_blank">interesting</a> interactives every day, without having to give their rendering framework a second thought.</p></div><div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><p id="6f45" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><em class="qx">Ilya Gurevich is a Senior Software Engineer with over 10 years of experience in both startup and enterprise environments. He is currently part of the core Web Platforms Team since joining the Times in 2019. He manages the centralized NodeJS platform that powers the main site, and also works on the developer experience, tooling, and build process for a multi-workspace monorepo with over a hundred active contributors. Previously, he worked on the Times’ cutting-edge real-time collaborative text editor tailored for reporters and editors.</em></p></div>]]></description>
      <link>https://open.nytimes.com/enhancing-the-new-york-times-web-performance-with-react-18-d6f91a7c5af8</link>
      <guid>https://open.nytimes.com/enhancing-the-new-york-times-web-performance-with-react-18-d6f91a7c5af8</guid>
      <pubDate>Wed, 26 Jun 2024 20:03:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Journey as a Product Design Intern at The New York Times]]></title>
      <description><![CDATA[<figure class="nd ne nf ng nh ni na nb paragraph-image"><div role="button" tabindex="0" class="nj nk fi nl bg nm na nb nc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*MjSbn_DUcRfjWIBrqHwfOQ.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mh nn c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="no fe np na nb nq nr be b bf z dt">Illustration by Claire Merchlinsky.</figcaption></figure><p id="4c57" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj"><strong class="nu gu">By Graciela Smet</strong></p><p id="1ce7" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">My name is Graciela and I’m a senior at Stanford University, studying Product Design and Computer Science (Human-Computer Interaction). Last summer, I was a Product Design intern at The New York Times. The experience taught me a lot about what it’s like to work in a fast paced, growing company. I learned the importance of being surrounded by a culture of curious, collaborative, and smart people as well as the career value of gaining experience within the inner workings of a large organization.</p><p id="a06f" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">When I started my internship search last year, my criteria was as simple as finding a role related to digital design. I was initially drawn to the Times, however, by what I realized were stronger criteria: I wanted my work to contribute to a cause that I deeply believed in. I’ve been a lifelong Times reader and am incredibly passionate about storytelling, journalism, and the importance of trustworthy spaces on the internet. Also, I’m an <em class="oq">avid</em> Spelling Bee and Wordle player (and now Connections, too), so that was a big plus.</p><p id="da74" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">I was assigned to work on the Publishing team, and at first I was honestly confused about what that meant. As a reader, I had only been exposed to The Times’s user-facing products, but being on the Publishing team gave me the privilege of seeing the operation from the inside: I learned <em class="oq">so much</em> about all the tools we use to publish hundreds of stories every day. I worked primarily on Ink, the in-house design system that’s used on all internal tools and platforms.</p><p id="378d" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Over the summer, my projects included creating centralized Figma resources for new Ink users, writing component documentation, and designing a dashboard to track component health and usage across the teams that incorporate Ink. I had never worked with design systems before. My projects allowed me to experiment with and sharpen this skill set while giving me opportunities to grow more deeply as a designer.</p><p id="3666" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">My team was small, but included people with roles that complimented each other: six software engineers, four other product designers, an engineering manager, and a product director. As I learned later, this type of cross-functional team is set up intentionally to help support the tools and platforms that power our journalism. Outside my immediate team, I got to work closely with the other designers who were building tools for the newsroom. These designers immediately took me under their wing. They answered all of my questions, let me see into their design process, and even brought me along to their user interviews with top Times reporters and editors. I learned some fascinating things about how our newsroom operates, including one editor sharing tips on how he keeps a pulse on what’s happening all over the world. All so he can stay on top of his coverage and be ahead of everyone else.</p><p id="a2ed" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Beyond the cool projects I worked on, my favorite part of the internship was absolutely the people and culture. The internship program included dedicated time to work with and get to know the other five product design interns, and I’m so lucky to have grown so close to such a talented group of like minded individuals. I also got to be a part of Maker Week, the Times’s annual hackathon event, spending time with designers who were working on their stretch projects — some of which have evolved to be part of team roadmaps this year. Throughout the summer, it really felt like anywhere I turned, I could find growth and inspiration.</p><p id="9b83" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Continuing my internship into the school year felt like a no brainer. It can be incredibly difficult to find an internship opportunity that’s rewarding in both career and personal growth while giving you a real taste of what it’s like to work in a big company. After accepting my extension offer, I moved to a different team, where I get to work on Moderator, the Times’s comment moderation tool, designing new features and workflows that help surface all the incredible insights that our readers offer by sharing their thoughts on our coverage. Some especially exciting projects included designing the editorial workflow to reintroduce Times Picks in the comments panel and designing more support for the Reporter Reply program, which set The Times apart as a more thoughtful place to discuss the news.</p><p id="4b1b" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">To designers earlier in their career, whether you want to work at The Times or not, I would absolutely recommend taking a step back to identify what exactly you might want from your career and internship experiences. This may be easier said than done, but the real magic happens when the experience aligns with your own priorities and when you’re able to grow in more ways than just career advancement. For me, the values and the culture of The Times were a perfect fit for what I wanted out of my summer, and I couldn’t recommend it more strongly.</p>]]></description>
      <link>https://open.nytimes.com/journey-as-a-product-design-intern-nyt-4f7fda248739</link>
      <guid>https://open.nytimes.com/journey-as-a-product-design-intern-nyt-4f7fda248739</guid>
      <pubDate>Mon, 20 May 2024 18:09:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Milestones on our Journey to Standardize Experimentation at The New York Times]]></title>
      <description><![CDATA[<div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><figure class="nd ne nf ng nh ni na nb paragraph-image"><div role="button" tabindex="0" class="nj nk fi nl bg nm na nb nc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*epNuh3t89yFj5IF7DeDrFA.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*epNuh3t89yFj5IF7DeDrFA.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*epNuh3t89yFj5IF7DeDrFA.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*epNuh3t89yFj5IF7DeDrFA.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*epNuh3t89yFj5IF7DeDrFA.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*epNuh3t89yFj5IF7DeDrFA.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*epNuh3t89yFj5IF7DeDrFA.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*epNuh3t89yFj5IF7DeDrFA.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mh nn c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="no fe np na nb nq nr be b bf z dt">Illustration by <a class="af ns" href="https://henricampea.com/work" rel="noopener ugc nofollow" target="_blank">Henri Campeã</a></figcaption></figure><p id="731d" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><strong class="nv gu">By Kathy Yang</strong></p><p id="83a9" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Experimentation is an important part of product development at The New York Times — it helps us measure the impact of our changes, ship features safely, and gain insight into user behavior. Experiments are conducted by many different teams working across a diverse portfolio of products and projects, from Wordle to The Times’s Audio app to backend migrations. In the early days, this meant that teams would often develop their own approach to experimentation to address their specific requirements.</p><p id="766b" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Over the past year, we have been on a journey toward standardization. There are many benefits to centralizing experimentation — having a single source of truth, observability into how all experiments impact important metrics, and easier comprehension of results from other teams (not to mention the time saved for individuals who would otherwise maintain their own pipelines!). On the flip side, teams had originally developed their own methodologies and processes for a reason — they were tailored for their unique needs.</p><p id="0532" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">At The New York Times, most product experiments use our internal experimentation platform, ABRA, which is short for A/B Reporting and Allocation architecture. Here’s a look at an <a class="af ns" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/abra-an-enterprise-framework-for-experimentation-at-the-times-57f8931449cd">early version</a>. A lot has changed since those days, and we want to share some of the things we’ve learned on our standardization journey. While we use other types of experimentation, such as <a class="af ns" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/how-the-new-york-times-is-experimenting-with-recommendation-algorithms-562f78624d26">contextual multi-armed bandits</a>, this article is focused specifically around the ways we’ve improved our A/B testing processes.</p><p id="c44b" class="pw-post-body-paragraph nt nu gt nv b nw pp ny nz oa pq oc od oe pr og oh oi ps ok ol om pt oo op oq gm bj">As we all know, experiment results are only as trustworthy as the underlying metrics. A/B testing depends on the availability of high-quality metrics to analyze, and you cannot underestimate the importance of having a proper structure in place to manage these metrics.</p><p id="2dfb" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">We should anticipate that metric definitions are ever-evolving as our understanding of user behavior and business needs change. Thus, metric data and definitions should live <em class="pu">outside</em> of the experimentation platform. In ABRA, we have a clear delineation of responsibility for the data sources that feed ABRA’s Stats Engine (more on this in the next section): The platform team manages the exposure and assignment data and experiment configuration information, and analysts on other teams manage their metric data and definitions.</p><figure class="pw px py pz qa ni na nb paragraph-image"><div role="button" tabindex="0" class="nj nk fi nl bg nm na nb pv"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*hsVDWBEpbYpQMFss 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*hsVDWBEpbYpQMFss 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*hsVDWBEpbYpQMFss 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*hsVDWBEpbYpQMFss 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*hsVDWBEpbYpQMFss 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*hsVDWBEpbYpQMFss 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*hsVDWBEpbYpQMFss 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*hsVDWBEpbYpQMFss 640w, https://miro.medium.com/v2/resize:fit:720/0*hsVDWBEpbYpQMFss 720w, https://miro.medium.com/v2/resize:fit:750/0*hsVDWBEpbYpQMFss 750w, https://miro.medium.com/v2/resize:fit:786/0*hsVDWBEpbYpQMFss 786w, https://miro.medium.com/v2/resize:fit:828/0*hsVDWBEpbYpQMFss 828w, https://miro.medium.com/v2/resize:fit:1100/0*hsVDWBEpbYpQMFss 1100w, https://miro.medium.com/v2/resize:fit:1400/0*hsVDWBEpbYpQMFss 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mh nn c" width="700" height="591" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="no fe np na nb nq nr be b bf z dt">High-level schematic of how data source maintenance responsibilities are split between the experimentation platform and the product teams that use it</figcaption></figure><p id="7209" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">We set things up this way because it is crucial that the people who use these metrics on a day-to-day basis — for reporting, experimentation, modeling and other analytics — are the same ones who are responsible for creating, updating and deprecating them. Whether you are building or buying your Stats Engine, the individuals who use the experimentation metrics should be involved in their governance to help ensure they stay accurate and useful.</p><p id="85c2" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">ABRA uses both enterprise metrics (think subscriber and revenue metrics), which are provided top-down from our central Enterprise Analytics team, as well as team metrics, which are provided by analysts on individual product teams. This dual-tiered structure ensures that enterprise metrics are defined consistently across all teams, while giving individual teams the freedom to add metrics specific to their domain.</p><p id="c081" class="pw-post-body-paragraph nt nu gt nv b nw pp ny nz oa pq oc od oe pr og oh oi ps ok ol om pt oo op oq gm bj">While there are many more advanced techniques to explore, we found that we already began to feel the benefits of standardization once we had the basics down. This included conducting daily <a class="af ns" href="https://en.wikipedia.org/wiki/Welch%27s_t-test" rel="noopener ugc nofollow" target="_blank">t-tests</a> to estimate the difference in means between variants, and generating the point estimate, confidence interval, p-value, and the minimum detectable effect (<a class="af ns" href="https://blog.twitter.com/engineering/en_us/a/2016/power-minimal-detectable-effect-and-bucket-size-estimation-in-ab-tests" rel="noopener ugc nofollow" target="_blank">MDE</a>). At this point, teams that have their metrics hooked up to the platform have somewhere they can go to get automated results for their experiments, saving them from building their own.</p><p id="b413" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Providing standardized reporting can be a catalyst for adopting best practices, but there is a significant cultural aspect to standardization as well. Consistent training, collaboration, and ongoing discussions with teams are essential to changing the way both technical and non-technical people think about experimentation. For example, if a team wasn’t consistently calculating confidence intervals or MDE before, the new results make it possible to quantify uncertainty in a way that was previously much more difficult. This needs to be paired with educating individuals on how to interpret these values, training analysts to conduct <a class="af ns" href="https://en.wikipedia.org/wiki/Power_of_a_test" rel="noopener ugc nofollow" target="_blank">power analyses</a> ahead of time, and changing stakeholders’ expectations to anticipate (and even insist on) seeing these values when presented with experiment results.</p><p id="f2f3" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">A lot has been written about ensuring data quality, including checking for <a class="af ns" href="https://en.wikipedia.org/wiki/Sample_ratio_mismatch" rel="noopener ugc nofollow" target="_blank">sample ratio mismatch</a> and capping <a class="af ns" href="https://exp-platform.com/Documents/2014%20experimentersRulesOfThumb.pdf" rel="noopener ugc nofollow" target="_blank">skewed metrics</a>. I want to expand on a couple more calculations that are particularly relevant at The Times:</p><p id="5917" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><strong class="nv gu">Scaled impact</strong></p><p id="e96e" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">An increase of +1 page view per week per user can mean different things, depending on the population we’re experimenting on (e.g., all readers vs. international readers). Scaled impact is a useful way to present results when you want to compare experiments on different populations. It represents the estimated global increase we would have seen during the experiment if the treatment variant had been given to 100% of users, compared to if the control variant had been given to 100% of users.</p><p id="f957" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">To calculate scaled impact, you first start with the absolute difference in means between the treatment and control variants:</p><figure class="pw px py pz qa ni na nb paragraph-image"><div class="na nb qb"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*CI1p9sDw1fliBNKW 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*CI1p9sDw1fliBNKW 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*CI1p9sDw1fliBNKW 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*CI1p9sDw1fliBNKW 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*CI1p9sDw1fliBNKW 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*CI1p9sDw1fliBNKW 1100w, https://miro.medium.com/v2/resize:fit:220/format:webp/0*CI1p9sDw1fliBNKW 220w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 110px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*CI1p9sDw1fliBNKW 640w, https://miro.medium.com/v2/resize:fit:720/0*CI1p9sDw1fliBNKW 720w, https://miro.medium.com/v2/resize:fit:750/0*CI1p9sDw1fliBNKW 750w, https://miro.medium.com/v2/resize:fit:786/0*CI1p9sDw1fliBNKW 786w, https://miro.medium.com/v2/resize:fit:828/0*CI1p9sDw1fliBNKW 828w, https://miro.medium.com/v2/resize:fit:1100/0*CI1p9sDw1fliBNKW 1100w, https://miro.medium.com/v2/resize:fit:220/0*CI1p9sDw1fliBNKW 220w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 110px" /><img alt="" class="bg mh nn c" width="110" height="23" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="834f" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">You then scale this up by the estimated number of users who were eligible for the experiment. This can be done by multiplying by the number of users exposed to the experiment <em class="pu">n</em>, and then dividing by the percent of users allocated to the experiment <em class="pu">a</em> (e.g., if you ran an experiment with a 20% control variant and a 20% treatment variant, <em class="pu">a</em> would be 40%):</p><figure class="pw px py pz qa ni na nb paragraph-image"><div class="na nb qc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*oijHYPMjQhfUkjTi 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*oijHYPMjQhfUkjTi 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*oijHYPMjQhfUkjTi 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*oijHYPMjQhfUkjTi 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*oijHYPMjQhfUkjTi 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*oijHYPMjQhfUkjTi 1100w, https://miro.medium.com/v2/resize:fit:336/format:webp/0*oijHYPMjQhfUkjTi 336w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 168px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*oijHYPMjQhfUkjTi 640w, https://miro.medium.com/v2/resize:fit:720/0*oijHYPMjQhfUkjTi 720w, https://miro.medium.com/v2/resize:fit:750/0*oijHYPMjQhfUkjTi 750w, https://miro.medium.com/v2/resize:fit:786/0*oijHYPMjQhfUkjTi 786w, https://miro.medium.com/v2/resize:fit:828/0*oijHYPMjQhfUkjTi 828w, https://miro.medium.com/v2/resize:fit:1100/0*oijHYPMjQhfUkjTi 1100w, https://miro.medium.com/v2/resize:fit:336/0*oijHYPMjQhfUkjTi 336w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 168px" /><img alt="" class="bg mh nn c" width="168" height="28" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="d6b9" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><strong class="nv gu">Calculating impact on log-in rate</strong></p><p id="bb3c" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">When a user is logged in, their activity is associated with their user ID. However, they can also have activity that is not tied to a user ID. For example, visiting the home page and playing Wordle can both be done without logging in or creating an account.</p><p id="bd02" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">For these behaviors that can be done either while logged-out or logged-in, just looking at the impact on the metric itself may not tell the whole story. If a treatment variant increases (or decreases) users’ likelihood of logging in, they can end up with more (or less) of their activity associated with their user ID, even if their total activity didn’t change. When we see a statistically significant change in the log-in rate metric, this tells us that the results for these metrics may not be reliable, and we should not interpret them.</p><p id="2b38" class="pw-post-body-paragraph nt nu gt nv b nw pp ny nz oa pq oc od oe pr og oh oi ps ok ol om pt oo op oq gm bj">Even with a robust experimentation platform, there will always be situations that require ad hoc analyses. In these cases, providing lightweight tooling or methodology guidelines can help teams move forward with a common approach. Here are some of the practices we use at The New York Times outside of ABRA:</p><p id="4fa6" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><strong class="nv gu">Analyzing ad hoc metrics</strong></p><p id="16a7" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Sometimes, the metrics that analysts need to examine are not in ABRA when they run the experiment. To make it easier to calculate the impact on these metrics after the fact, we have a Python notebook tool that approximates the calculations in ABRA’s Stats Engine. While Analysts need to provide their metrics manually, they can be confident that they’re using the agreed upon analysis methodology.</p><p id="8902" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><strong class="nv gu">Quantile metrics</strong></p><p id="70b6" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">T-tests aren’t suitable for quantile metrics, which are often needed for <a class="af ns" href="https://developers.google.com/search/docs/appearance/core-web-vitals" rel="noopener ugc nofollow" target="_blank">Core Web Vitals</a> (e.g., 90th percentile First Input Delay). To address this, we have a separate pipeline that uses a <a class="af ns" href="https://en.wikipedia.org/wiki/Bootstrapping_(statistics)" rel="noopener ugc nofollow" target="_blank">bootstrapping</a> technique to construct confidence intervals, which teams can use to check their experiments’ impact on Core Web Vitals. (Shoutout to The Times’s Ads Analytics team for building and scaling this resource!)</p><p id="4790" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><strong class="nv gu">Non-inferiority testing</strong></p><p id="1d3b" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Not every experiment aims to improve metrics; sometimes, we just want to know that they aren’t degraded. In such cases, conducting a <a class="af ns" href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3019319/" rel="noopener ugc nofollow" target="_blank">non-inferiority test</a>, which tests whether the treatment is not worse than the control by at least some margin, can be more appropriate. Although ABRA was originally built for superiority testing, we have guidelines for adapting workflows to accommodate the non-inferiority approach. For example, even though the calculated p-value may not be relevant in this context, analysts can still rely on the confidence interval and assess whether the lower bound is greater than non-inferiority margin.</p><p id="c43e" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Eventually, some of these ad hoc tools might find their way onto the platform’s roadmap. Others might not. The key is to stay close to the practitioners on the ground, so that you develop a deep understanding of the common problems they face. Whether you are building or buying an experimentation platform, this will help you provide your analysts with the tooling and guidelines they need.</p><p id="cf9c" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj">Experimentation is a core part of how we drive innovation here at the Times. There is still a lot of exploration to be done to standardize experimentation on all fronts, but we have learned some useful tips along the way. We’ve found establishing proper metric governance, prioritizing a short list of methodology essentials, and addressing some analysis needs off-platform to be important ingredients to success. We hope this sparks some ideas for your own experimentation journey!</p></div><div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><p id="953b" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><em class="pu">Thank you to The Times’s Visualization and Experimentation team for their work on ABRA, the Ads Analytics team for pioneering early standardization work, the Analysts on the Experimentation work stream for helping develop analysis guidelines, and Kentaro Kaji and Mariam Melikadze for reviewing this post.</em></p><p id="8701" class="pw-post-body-paragraph nt nu gt nv b nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq gm bj"><em class="pu">Kathy Yang is the director of Experimentation in the Data and Insights Group at The New York Times, where she works on developing experimentation methodologies, tooling and culture. Outside of work, Kathy enjoys yoga, traveling and reading.</em></p></div>]]></description>
      <link>https://open.nytimes.com/milestones-on-our-journey-to-standardize-experimentation-at-the-new-york-times-2c6d32db0281</link>
      <guid>https://open.nytimes.com/milestones-on-our-journey-to-standardize-experimentation-at-the-new-york-times-2c6d32db0281</guid>
      <pubDate>Tue, 26 Mar 2024 15:17:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Rethinking How We Evaluate The New York Times Subscription Performance]]></title>
      <description><![CDATA[<div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><div><h2 id="6749" class="pw-subtitle-paragraph hq gs gt be b hr hs ht hu hv hw hx hy hz ia ib ic id ie if cp dt">An exploration into The New York Times Growth Data team’s process of designing and building a new subscription reporting model.</h2></div><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm nn"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*PxyV5YNspBycFiv34xRjIg.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*PxyV5YNspBycFiv34xRjIg.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*PxyV5YNspBycFiv34xRjIg.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*PxyV5YNspBycFiv34xRjIg.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*PxyV5YNspBycFiv34xRjIg.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*PxyV5YNspBycFiv34xRjIg.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*PxyV5YNspBycFiv34xRjIg.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*PxyV5YNspBycFiv34xRjIg.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Illustration by <a class="af od" href="https://www.giuliobonasera.com/" rel="noopener ugc nofollow" target="_blank">Giulio Bonasera</a></figcaption></figure><p id="93d7" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><strong class="og gu">By Amir Malek</strong></p><p id="75af" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">The New York Times digital subscription offering is a complex service that has evolved significantly since we started selling digital subscriptions in 2011. Over time, we’ve added products beyond News, such as Games, Cooking, Wirecutter, and The Athletic, and made it easier for people to purchase both individual products and the combinations (including the All Access bundle that grants access to all of them) from different sources. Today a user can purchase the All Access bundle (now the primary subscription offering) from our mobile website, desktop website, News app, Games app, or Cooking app.</p><p id="f7d0" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Moving to a bundle-first subscription strategy across all products made it more challenging to differentiate where subscriptions were originating from. We needed a deeper and more nuanced understanding of where and how users were subscribing, one that was compatible with the many variations of the user journey. The path to subscribing depends heavily on how a user gets to the site, the pages they interact with during their session, whether they’re logged in, and even more granular factors. To make sense of these paths, we had to align on several key aspects — how we defined attribution, how we organized our data, how we tracked our events, and how we mapped the data.</p><h2 id="7bba" class="pa pb gt be pc pd pe dx pf pg ph dz pi on pj pk pl or pm pn po ov pp pq pr ps bj">Defining an attribution model</h2><p id="1148" class="pw-post-body-paragraph oe of gt og b hr pt oi oj hu pu ol om on pv op oq or pw ot ou ov px ox oy oz gm bj">Our objective was to avoid creating fragmented metrics to observe every known variation of this journey. Instead, we wanted to develop a unified model that aligned subscriptions with various onsite and offsite metadata, allowing us to segment subscription performance in a scalable manner and derive valuable metrics that are not dependent on the current user experience.</p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ZiY7MenU7JKqhhWxiLwUjQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*ZiY7MenU7JKqhhWxiLwUjQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*ZiY7MenU7JKqhhWxiLwUjQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*ZiY7MenU7JKqhhWxiLwUjQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*ZiY7MenU7JKqhhWxiLwUjQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*ZiY7MenU7JKqhhWxiLwUjQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*ZiY7MenU7JKqhhWxiLwUjQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*ZiY7MenU7JKqhhWxiLwUjQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="394" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Figure 1. Shifting from a series of fragmented aggregate tables to a unified, canonical data model</figcaption></figure><p id="dd18" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">We started by collaborating with partners in product, strategy and marketing to consider several subscription attribution models — these are models that assess and assign credit to the touch-points responsible for subscription conversion in a user’s journey.</p><p id="3d2d" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">As illustrated in Figure 2, we found first click and last click attribution models to be too narrow in scope, only considering a single touchpoint in the user journey. Position-based and time decay models were too prescriptive and rigid to meet the needs of a rapidly developing user experience. In fact, we wanted to avoid assigning weights to any particular touchpoint so that the resulting data would be serviceable for teams across the company. As a result, we moved forward with a neutral, multi-touch attribution model that allows for custom or even algorithmic attribution logic to be derived later on, making it a flexible option that would scale more easily.</p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*whHUT-UdKBmiKz8WL_ps8A.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*whHUT-UdKBmiKz8WL_ps8A.png 640w, https://miro.medium.com/v2/resize:fit:720/1*whHUT-UdKBmiKz8WL_ps8A.png 720w, https://miro.medium.com/v2/resize:fit:750/1*whHUT-UdKBmiKz8WL_ps8A.png 750w, https://miro.medium.com/v2/resize:fit:786/1*whHUT-UdKBmiKz8WL_ps8A.png 786w, https://miro.medium.com/v2/resize:fit:828/1*whHUT-UdKBmiKz8WL_ps8A.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*whHUT-UdKBmiKz8WL_ps8A.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*whHUT-UdKBmiKz8WL_ps8A.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="394" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Figure 2. Types of attribution models</figcaption></figure><h2 id="309b" class="pa pb gt be pc pd pe dx pf pg ph dz pi on pj pk pl or pm pn po ov pp pq pr ps bj">Identifying sources and building the logic</h2><p id="9b44" class="pw-post-body-paragraph oe of gt og b hr pt oi oj hu pu ol om on pv op oq or pw ot ou ov px ox oy oz gm bj">To build the model, we started with selecting a source for subscription data. Growth teams historically rely on front-end subscription events — data captured from user interactions on-site, such as purchasing or updating a subscription. The near real-time availability of this data paired with relevant metadata (like page and session-level identifiers and attributes) makes it a suitable choice for experimentation and analysis. Given that this subscription attribution model had to be exceedingly precise and aligned with enterprise-wide metrics, we had to rely on financial subscriber reporting data instead. Using this data source meant more reliable subscription records, but also limited metadata. We needed to invest additional effort to define and build subscription metadata that would expand on our existing reporting.</p><p id="b12e" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">To define these dimensions, we collaborated with our cross-functional partners to surface the most important business questions (e.g., What product was a user interacting with before entering the subscription process? Did the user encounter a paywall during their session? How did the user get to the site that day?)</p><p id="232b" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">As shown in Figure 3, while no single question would encompass the entirety of the user journey, the ensemble helps paint a clearer picture of how users interact with The New York Times prior to subscribing.</p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*H1FJilpRaLpm2IisDAmkPA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*H1FJilpRaLpm2IisDAmkPA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*H1FJilpRaLpm2IisDAmkPA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*H1FJilpRaLpm2IisDAmkPA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*H1FJilpRaLpm2IisDAmkPA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*H1FJilpRaLpm2IisDAmkPA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*H1FJilpRaLpm2IisDAmkPA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*H1FJilpRaLpm2IisDAmkPA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="394" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Figure 3. User subscription journey</figcaption></figure><p id="4efa" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">While it was important to build the attribution model using a flexible architecture so that dimensions could be easily modified, a positive byproduct of this exercise was that we settled on several standardized dimensions (e.g. product, channel, platform, etc.) that were universally agreed upon by our stakeholders.</p><h2 id="9217" class="pa pb gt be pc pd pe dx pf pg ph dz pi on pj pk pl or pm pn po ov pp pq pr ps bj">Tracking on-site events</h2><p id="696d" class="pw-post-body-paragraph oe of gt og b hr pt oi oj hu pu ol om on pv op oq or pw ot ou ov px ox oy oz gm bj">A major component of building these standardized dimensions was not only creating reproducible code, but also ensuring that our onsite event tracking was robust. Prior to this initiative, the impression tracking across various paywalls wasn’t totally consistent —The New York Times Cooking recipe paywalls, article paywalls, and The New York Times Games paywalls all had slightly differing specifications. To build the dimension which would capture whether a user encountered a paywall in their journey would have involved gathering and querying for every distinct paywall impression event on site. So instead of hard coding the classification of these individual events, we first examined our existing impression tracking and worked with engineers to implement a single, unified tracking specification so that any paywall (now or in the future), regardless of where on the site it is rendered, would be more easily identifiable. We then repeated this exercise for other dimensions when necessary, which greatly contributed to the resilience and reliability of the model long-term.</p><h2 id="4a42" class="pa pb gt be pc pd pe dx pf pg ph dz pi on pj pk pl or pm pn po ov pp pq pr ps bj">Navigating between front-end and back-end data</h2><p id="1060" class="pw-post-body-paragraph oe of gt og b hr pt oi oj hu pu ol om on pv op oq or pw ot ou ov px ox oy oz gm bj">The final step was to map our dimensions (such as product, channel and platform) to subscriber records. As with most data environments, this involved matching data across multiple systems such that the records would resolve cleanly and allow for new dimensions to be added later. We tested a variety of matches, and ultimately found that working collaboratively with the engineering team helped tremendously in being able to minimize redundant tracking and ultimately create the best possible join.</p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm py"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*TMFFbig_Q_SuDqfeuoZWQQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*TMFFbig_Q_SuDqfeuoZWQQ.png 640w, https://miro.medium.com/v2/resize:fit:720/1*TMFFbig_Q_SuDqfeuoZWQQ.png 720w, https://miro.medium.com/v2/resize:fit:750/1*TMFFbig_Q_SuDqfeuoZWQQ.png 750w, https://miro.medium.com/v2/resize:fit:786/1*TMFFbig_Q_SuDqfeuoZWQQ.png 786w, https://miro.medium.com/v2/resize:fit:828/1*TMFFbig_Q_SuDqfeuoZWQQ.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*TMFFbig_Q_SuDqfeuoZWQQ.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*TMFFbig_Q_SuDqfeuoZWQQ.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="394" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Figure 4. Navigating between front-end and back-end data</figcaption></figure><h2 id="801a" class="pa pb gt be pc pd pe dx pf pg ph dz pi on pj pk pl or pm pn po ov pp pq pr ps bj">Applying the model</h2><p id="0bb3" class="pw-post-body-paragraph oe of gt og b hr pt oi oj hu pu ol om on pv op oq or pw ot ou ov px ox oy oz gm bj">After months of scoping, designing and building, the first iteration of the subscription attribution model was complete. Teams from product, strategy, marketing and beyond were now able to leverage the mapped dimensions to more accurately report which areas of the business were driving subscriptions. And collectively, we began to uncover less-evident subscription trends with minimal effort.</p><p id="c03c" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">From this data came more initiatives, namely pairing the attribution model with our subscriber retention data to learn more about subscriber churn — getting a better understanding of how a user’s subscription journey impacts their future propensity to churn. For the data teams in our subscription conversion group, layering audience metrics on top of subscription cohorts unlocked even more insight into highly-dimensional subscription conversion rates.</p><p id="e9f8" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">We also garnered learnings with respect to planning and executing data projects. One of the most important elements we uncovered was that the build process for data projects could mirror that of product development, where you deliver a minimal viable product and iterate on it in a phased manner. This approach allowed us to rigorously test each element of our pipeline without introducing an overwhelming number of dependencies and complexities. We also learned that the value in improving event tracking on site — as opposed to finding a logical workaround or including additional transformations in the pipeline — is evergreen. Collaborating with engineers to implement more consistent tracking made it so that the data worked <em class="pz">for</em> us, rather than us working for <em class="pz">it</em>.</p><p id="ae0d" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">Moving forward, this attribution model will serve not only as an effective tool to answer a wide range of business questions, but also as a foundation upon which other models and tools can be developed. Thanks to careful architecting, the model lends itself to future scalability, allowing for seamless expansion and improvement as more business questions arise.</p><p id="888e" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj">This project is just one of many that showcases why working in the Data and Insights Group at The New York Times is so unique and impactful. As a team, we are not only able to experiment and find new ways to enhance our data capabilities, but we also get to collaborate with a variety of teams and stakeholders who collectively help us make improvements and deliver on business objectives that help reshape and support how we deliver our journalism and other products to the world.</p></div><div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><p id="7e18" class="pw-post-body-paragraph oe of gt og b hr oh oi oj hu ok ol om on oo op oq or os ot ou ov ow ox oy oz gm bj"><em class="pz">Many thanks to Tom Souhlas, Melody Song, Melanie Hudock and Amanda Drath for their invaluable support and integral contributions to this project.</em></p></div>]]></description>
      <link>https://open.nytimes.com/rethinking-how-we-evaluate-new-york-times-subscription-performance-eb5f3b251400</link>
      <guid>https://open.nytimes.com/rethinking-how-we-evaluate-new-york-times-subscription-performance-eb5f3b251400</guid>
      <pubDate>Fri, 08 Mar 2024 17:55:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How the New York Times Games Data Team Revamped Its Reporting]]></title>
      <description><![CDATA[<div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><figure class="nc nd ne nf ng nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na nb"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*T8hz1WpaL8xps8cOZB0E_w.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*T8hz1WpaL8xps8cOZB0E_w.gif 640w, https://miro.medium.com/v2/resize:fit:720/1*T8hz1WpaL8xps8cOZB0E_w.gif 720w, https://miro.medium.com/v2/resize:fit:750/1*T8hz1WpaL8xps8cOZB0E_w.gif 750w, https://miro.medium.com/v2/resize:fit:786/1*T8hz1WpaL8xps8cOZB0E_w.gif 786w, https://miro.medium.com/v2/resize:fit:828/1*T8hz1WpaL8xps8cOZB0E_w.gif 828w, https://miro.medium.com/v2/resize:fit:1100/1*T8hz1WpaL8xps8cOZB0E_w.gif 1100w, https://miro.medium.com/v2/resize:fit:1400/1*T8hz1WpaL8xps8cOZB0E_w.gif 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt">Illustration by: <a class="af nr" href="https://timpeacock.com/" rel="noopener ugc nofollow" target="_blank">Tim Peacock</a></figcaption></figure><p id="cc87" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj"><strong class="nu gu">By CJ Robinson</strong></p><p id="0539" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">The acquisition of Wordle in 2022 propelled New York Times Games to new heights, with more people playing our games than ever before.</p><p id="79f4" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">As the team of product data analysts who support Games stakeholders, we had to contend with tens of millions of players flowing into our pipeline each day. New York Times Games users generate data from actions like starting or finishing a game, getting the Spelling Bee pangram, or being tricked by the red herrings in Connections. Previously, we worked with raw data and constructed ad hoc tables to build reports. Without a proper data architecture to support the increased volume of data we were receiving, we could not quickly uncover valuable insights hidden inside. So, we had to reconsider our approach.</p><p id="6950" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">To increase analyst speed, democratize our data, and build a comprehensive dashboard suite, we spent months in 2022 building new tables with explicit aggregation layers, resulting in a 3x increase in dashboard usage and quicker data pulls as we began to launch more hit games like Connections. In sharing our process, we want to show the aspects of gameplay we measure and how rewarding it is to work with the data we wrangle each day. We also hope to help other product teams learn how to build a data environment that fits their needs.</p><p id="6816" class="pw-post-body-paragraph ns nt gt nu b nv po nx ny nz pp ob oc od pq of og oh pr oj ok ol ps on oo op gm bj">Before this project, we commonly pulled insights directly from raw data. Our product team needs consistent information to track metrics like user retention and the impact of new features. The need was especially apparent as Wordle was first integrated into our portfolio and built into the Games app.</p><p id="2223" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Since we did not have a concrete infrastructure, each request from a product manager or Games team member resulted in us having to write long, arduous, and inefficient queries to understand simple trends or usage across our site.</p><p id="aea8" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">As a team, this led to significant work and the creation of new scheduled jobs to process data. At the time, these jobs were built without a long-term vision, so we contended with inconsistent practices, incomplete aggregations, and accidentally duplicated jobs. We felt unable to move forward meaningfully and were bogged down by what was asked of us. Creating a new data architecture was our solution.</p><figure class="pu pv pw px py nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na pt"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*QnzKL4brOn2eQNYc 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*QnzKL4brOn2eQNYc 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*QnzKL4brOn2eQNYc 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*QnzKL4brOn2eQNYc 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*QnzKL4brOn2eQNYc 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*QnzKL4brOn2eQNYc 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*QnzKL4brOn2eQNYc 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*QnzKL4brOn2eQNYc 640w, https://miro.medium.com/v2/resize:fit:720/0*QnzKL4brOn2eQNYc 720w, https://miro.medium.com/v2/resize:fit:750/0*QnzKL4brOn2eQNYc 750w, https://miro.medium.com/v2/resize:fit:786/0*QnzKL4brOn2eQNYc 786w, https://miro.medium.com/v2/resize:fit:828/0*QnzKL4brOn2eQNYc 828w, https://miro.medium.com/v2/resize:fit:1100/0*QnzKL4brOn2eQNYc 1100w, https://miro.medium.com/v2/resize:fit:1400/0*QnzKL4brOn2eQNYc 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="362" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="pz">Our old infrastructure</em></figcaption></figure><p id="9699" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">What We Did</p><p id="03be" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">As we went through the process of creating a fresh data architecture, here’s what helped us the most:</p><ul class=""><li id="8e10" class="ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op qa qb qc bj"><strong class="nu gu">Starting with a data review to understand the needs</strong>: When we looked through our datasets, we saw opportunities to better curate and manage data flows.</li>
<li id="ca7f" class="ns nt gt nu b nv qd nx ny nz qe ob oc od qf of og oh qg oj ok ol qh on oo op qa qb qc bj"><strong class="nu gu">Creating consistency:</strong> We needed a common naming convention and language standards for data, field names, and tables to help ensure that our data pipeline would remain adaptable and evergreen when we add new games or features. We also thought about which levels of data were necessary to answer questions from our stakeholders and to ease our workflows as analysts. In the end, we came up with a proposal for an ideal end state with precise steps to structure the data available.</li>
<li id="d3ee" class="ns nt gt nu b nv qd nx ny nz qe ob oc od qf of og oh qg oj ok ol qh on oo op qa qb qc bj"><strong class="nu gu">Getting buy-in early:</strong> Since this was a significant undertaking and would take months to build, we needed to get buy-in from executive leadership. We spoke to leads across Games to ensure they understood the process and would help make this a priority. We also worked with other teams within our Data and Insights Group (DIG) to ensure that we would not create inconsistencies with other data and to solicit any technical or architectural feedback on our approach.</li>
<li id="d595" class="ns nt gt nu b nv qd nx ny nz qe ob oc od qf of og oh qg oj ok ol qh on oo op qa qb qc bj"><strong class="nu gu">Prioritizing flexibly:</strong> We dedicated 20% of our team’s bandwidth to the project, working in ticketed sprints, which allowed us to be flexible but accountable to deadlines and other requests. We made incremental progress in creating and modeling these tables for several months using GitHub for version control and code review. We also took that moment to improve our overall triaging of analytics requests using a Slack workflow. Instead of one-off DMs to analysts, stakeholders sent all messages to a central channel, which our team lead used to prioritize the work more effectively.</li>
<li id="c773" class="ns nt gt nu b nv qd nx ny nz qe ob oc od qf of og oh qg oj ok ol qh on oo op qa qb qc bj"><strong class="nu gu">Communicating expectations:</strong> We faced unexpected setbacks throughout the project, whether they were due to our routine responsibilities or data quality issues. We provided updates within our internal analytics team and the larger Games and DIG teams to remedy this. At more significant milestones, we sought feedback and managed expectations when making changes to the initial plan.</li>
</ul><figure class="pu pv pw px py nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na pt"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*5UFeuRU3im0T7Blz 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*5UFeuRU3im0T7Blz 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*5UFeuRU3im0T7Blz 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*5UFeuRU3im0T7Blz 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*5UFeuRU3im0T7Blz 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*5UFeuRU3im0T7Blz 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*5UFeuRU3im0T7Blz 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*5UFeuRU3im0T7Blz 640w, https://miro.medium.com/v2/resize:fit:720/0*5UFeuRU3im0T7Blz 720w, https://miro.medium.com/v2/resize:fit:750/0*5UFeuRU3im0T7Blz 750w, https://miro.medium.com/v2/resize:fit:786/0*5UFeuRU3im0T7Blz 786w, https://miro.medium.com/v2/resize:fit:828/0*5UFeuRU3im0T7Blz 828w, https://miro.medium.com/v2/resize:fit:1100/0*5UFeuRU3im0T7Blz 1100w, https://miro.medium.com/v2/resize:fit:1400/0*5UFeuRU3im0T7Blz 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="389" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="pz">Our new infrastructure!</em></figcaption></figure><p id="534e" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">After five months, we had the first version of the new data architecture. It included four layers of aggregation that resulted in a clearer summary of relevant data for the team to utilize.</p><p id="c99d" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Now, for analyses that might have taken us many lines of code that we would repeat, with a single line, we could easily rewrite queries.</p><p id="04e5" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">We also designed our underlying tables for each game to be consistent so that we could easily duplicate dashboards for new game launches and display our standard metrics. We published an access-controlled data dashboard for Connections on the launch date. The dashboard was especially useful during the Connections beta phase, where we worked with Games stakeholders to evaluate whether we would continue to invest in Connections based on early gameplay trends.</p><p id="bc3b" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">The dashboards had consistent layouts and metrics. They refreshed daily and loaded quickly, which meant that our product managers and designers could rely on this data to monitor performance each day.</p><figure class="pu pv pw px py nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na qi"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*edkBg1NjAwfYpeVHxEzHAA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*edkBg1NjAwfYpeVHxEzHAA.png 640w, https://miro.medium.com/v2/resize:fit:720/1*edkBg1NjAwfYpeVHxEzHAA.png 720w, https://miro.medium.com/v2/resize:fit:750/1*edkBg1NjAwfYpeVHxEzHAA.png 750w, https://miro.medium.com/v2/resize:fit:786/1*edkBg1NjAwfYpeVHxEzHAA.png 786w, https://miro.medium.com/v2/resize:fit:828/1*edkBg1NjAwfYpeVHxEzHAA.png 828w, https://miro.medium.com/v2/resize:fit:1100/1*edkBg1NjAwfYpeVHxEzHAA.png 1100w, https://miro.medium.com/v2/resize:fit:1400/1*edkBg1NjAwfYpeVHxEzHAA.png 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="512" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="pz">Our dashboards were scalable and consistent across games</em></figcaption></figure><p id="4c32" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Anomaly detection, or the process of automated alerts when something goes wrong with data, was another goal we wanted to work toward in this process. To do that, we used a third-party data observability tool that allowed us to create fine-tuned and custom monitors that alerted us to two data outages in the first few months after adoption.</p><figure class="pu pv pw px py nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na qj"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*oUBvc1rUm7qK4mcn 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*oUBvc1rUm7qK4mcn 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*oUBvc1rUm7qK4mcn 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*oUBvc1rUm7qK4mcn 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*oUBvc1rUm7qK4mcn 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*oUBvc1rUm7qK4mcn 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*oUBvc1rUm7qK4mcn 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*oUBvc1rUm7qK4mcn 640w, https://miro.medium.com/v2/resize:fit:720/0*oUBvc1rUm7qK4mcn 720w, https://miro.medium.com/v2/resize:fit:750/0*oUBvc1rUm7qK4mcn 750w, https://miro.medium.com/v2/resize:fit:786/0*oUBvc1rUm7qK4mcn 786w, https://miro.medium.com/v2/resize:fit:828/0*oUBvc1rUm7qK4mcn 828w, https://miro.medium.com/v2/resize:fit:1100/0*oUBvc1rUm7qK4mcn 1100w, https://miro.medium.com/v2/resize:fit:1400/0*oUBvc1rUm7qK4mcn 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="399" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="pz">Dashboard usage tripled after our redesign</em></figcaption></figure><p id="19ee" class="pw-post-body-paragraph ns nt gt nu b nv po nx ny nz pp ob oc od pq of og oh pr oj ok ol ps on oo op gm bj">Our team continually works to make improvements and changes to our data infrastructure — plus, with every new feature or game that the New York Times Games produces, we update our pipeline! We’re currently migrating this architecture off of proprietary in-house pipelining tech to a cloud-based solution for even more transparency and reliability; an exciting prospect that will help us streamline our data even further! Additionally, we utilize a backlog of issues and requests we find as we use the new data for future tasks.</p><p id="cd0b" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">Ultimately, our goal is to make the data generation, ingestion, processing, and reporting pipeline as effortless and evergreen as possible. Now that the heavy lifting of that effort is over, the team can dedicate more time to finding interesting, fun, and actionable insights to make your Games experience better each day — which is what we want to do most and what makes working at The Times so fulfilling. It was immensely rewarding to work on a project that was intellectually stimulating and also made a large impact on the lives of the internal users of this data (which also includes ourselves).</p><p id="3f0d" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj">What would you do with this data at your fingertips?</p></div><div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><p id="f988" class="pw-post-body-paragraph ns nt gt nu b nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op gm bj"><em class="qs">Thanks to Hunter Calvert for proposing, initiating, and supporting the project, and to Natalie Erjavec, Daniel Lim and Emily Ngo for their invaluable contributions!</em></p></div>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-games-data-team-revamped-its-reporting-8af7e7c7bc97</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-games-data-team-revamped-its-reporting-8af7e7c7bc97</guid>
      <pubDate>Wed, 21 Feb 2024 16:08:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Design at the Speed of News]]></title>
      <description><![CDATA[<div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><div><h2 id="90c6" class="pw-subtitle-paragraph hq gs gt be b hr hs ht hu hv hw hx hy hz ia ib ic id ie if cp dt">Our design colleagues, Jay Guillermo and Chen Wu spoke at Figma’s annual Config Conference in San Francisco and shared what’s it like designing the home and live story pages for The New York Times.</h2></div><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm nn"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*LdvqFJnZTPD0iB8Y.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*LdvqFJnZTPD0iB8Y.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/0*LdvqFJnZTPD0iB8Y.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/0*LdvqFJnZTPD0iB8Y.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/0*LdvqFJnZTPD0iB8Y.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/0*LdvqFJnZTPD0iB8Y.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/0*LdvqFJnZTPD0iB8Y.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/0*LdvqFJnZTPD0iB8Y.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Illustration by Claire Merchlinsky</figcaption></figure><p id="ab20" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><strong class="of gu">By Jay Guillermo and Chen Wu</strong></p><p id="9107" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">Getting to design the home and story pages for The New York Times web and app is an exciting and unique experience for designers. In July 2023 at Figma’s annual Config Conference in San Francisco, we were honored to have the opportunity to share what’s that like and how we design at the speed of news.</p><figure class="no np nq nr ns nt">
</figure><p id="6dd8" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">The conference attracted about 8,000 people, with about 500 attending our session in person and more virtually. We discussed the process of designing <a class="af pc" href="https://www.nytimes.com/" rel="noopener ugc nofollow" target="_blank">the home page</a> and <a class="af pc" href="https://www.nytimes.com/live/2024/01/17/us/election-news-new-hampshire-trump" rel="noopener ugc nofollow" target="_blank">live story pages</a> while the news is continuously evolving, and how we meet the needs of the newsroom, our business and our readers. Similar to creating the home and story pages, presenting at the conference was a huge team effort. We worked closely with our colleagues in Design, Product, External Communications, Legal at The Times and our partners at Figma to make it happen, and we are grateful for their help and support.</p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm pd"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*U1VEx_HSXvvuJks0 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*U1VEx_HSXvvuJks0 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*U1VEx_HSXvvuJks0 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*U1VEx_HSXvvuJks0 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*U1VEx_HSXvvuJks0 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*U1VEx_HSXvvuJks0 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*U1VEx_HSXvvuJks0 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*U1VEx_HSXvvuJks0 640w, https://miro.medium.com/v2/resize:fit:720/0*U1VEx_HSXvvuJks0 720w, https://miro.medium.com/v2/resize:fit:750/0*U1VEx_HSXvvuJks0 750w, https://miro.medium.com/v2/resize:fit:786/0*U1VEx_HSXvvuJks0 786w, https://miro.medium.com/v2/resize:fit:828/0*U1VEx_HSXvvuJks0 828w, https://miro.medium.com/v2/resize:fit:1100/0*U1VEx_HSXvvuJks0 1100w, https://miro.medium.com/v2/resize:fit:1400/0*U1VEx_HSXvvuJks0 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt">Chen Wu and Jay Guillermo on stage at the Figma conference. Photo Credit: Meredith Black Brant</figcaption></figure><p id="f07b" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">Here’s a recap of our key takeaways:</p><p id="da7d" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><strong class="of gu">Build a Flexible Foundation</strong></p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm pd"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*DykEegABEoaCgR-J 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*DykEegABEoaCgR-J 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*DykEegABEoaCgR-J 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*DykEegABEoaCgR-J 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*DykEegABEoaCgR-J 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*DykEegABEoaCgR-J 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*DykEegABEoaCgR-J 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*DykEegABEoaCgR-J 640w, https://miro.medium.com/v2/resize:fit:720/0*DykEegABEoaCgR-J 720w, https://miro.medium.com/v2/resize:fit:750/0*DykEegABEoaCgR-J 750w, https://miro.medium.com/v2/resize:fit:786/0*DykEegABEoaCgR-J 786w, https://miro.medium.com/v2/resize:fit:828/0*DykEegABEoaCgR-J 828w, https://miro.medium.com/v2/resize:fit:1100/0*DykEegABEoaCgR-J 1100w, https://miro.medium.com/v2/resize:fit:1400/0*DykEegABEoaCgR-J 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="347" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt"><em class="pe">The team designed a modular system of layouts, called Spotlight 2.0, to allow editors to package and stack stories by importance.</em></figcaption></figure><p id="0b83" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">When news is your product, it’s inherently complex and constantly changing — you must balance the needs of the newsroom and readers, as well as those of The Times’s business. The products we design and build have to accommodate a wide range of topics and events, from planned, such as Election Days, to unplanned/breaking news, such as natural disasters and wars. Because of the constantly changing world around us, we need to build a stable and flexible foundation for presenting and programming the “News of the Day” — a base that can be used for all instances and events.</p><p id="2774" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">By building a solid foundation, we can iterate on this system to meet our ever-changing news needs, as well as new media sizes and content types, such as vertical videos and photographs.</p><p id="8b31" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><strong class="of gu">Be Agile</strong></p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm pd"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*BUMshnoDnVvO8t8x 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*BUMshnoDnVvO8t8x 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*BUMshnoDnVvO8t8x 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*BUMshnoDnVvO8t8x 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*BUMshnoDnVvO8t8x 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*BUMshnoDnVvO8t8x 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*BUMshnoDnVvO8t8x 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*BUMshnoDnVvO8t8x 640w, https://miro.medium.com/v2/resize:fit:720/0*BUMshnoDnVvO8t8x 720w, https://miro.medium.com/v2/resize:fit:750/0*BUMshnoDnVvO8t8x 750w, https://miro.medium.com/v2/resize:fit:786/0*BUMshnoDnVvO8t8x 786w, https://miro.medium.com/v2/resize:fit:828/0*BUMshnoDnVvO8t8x 828w, https://miro.medium.com/v2/resize:fit:1100/0*BUMshnoDnVvO8t8x 1100w, https://miro.medium.com/v2/resize:fit:1400/0*BUMshnoDnVvO8t8x 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="360" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt"><em class="pe">Here’s an example of the different types of news that our design has to accommodate.</em></figcaption></figure><p id="6cd5" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">When news is your core product, everything is a work in progress and always changing. Being agile and open-minded goes a long way.</p><p id="9c79" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">A lot of our work requires evolving the shape of the product and the journalism at the same time, which means that we are not only doing UX and UI design, we are also doing content design, or helping to shape how stories are presented to readers. This means that we need to be flexible and iterative, understand how the newsroom works, how reporters and editors work, what their challenges are, what opportunities they see, and what they are preparing for. We need to understand the basics of various news events and work effectively alongside our reporters and editors as they shape their coverage.</p><p id="55c4" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><strong class="of gu">Build Trust With Your Partners</strong></p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm pf"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*VqA64sqyEMJ-SRv5 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*VqA64sqyEMJ-SRv5 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*VqA64sqyEMJ-SRv5 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*VqA64sqyEMJ-SRv5 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*VqA64sqyEMJ-SRv5 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*VqA64sqyEMJ-SRv5 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*VqA64sqyEMJ-SRv5 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*VqA64sqyEMJ-SRv5 640w, https://miro.medium.com/v2/resize:fit:720/0*VqA64sqyEMJ-SRv5 720w, https://miro.medium.com/v2/resize:fit:750/0*VqA64sqyEMJ-SRv5 750w, https://miro.medium.com/v2/resize:fit:786/0*VqA64sqyEMJ-SRv5 786w, https://miro.medium.com/v2/resize:fit:828/0*VqA64sqyEMJ-SRv5 828w, https://miro.medium.com/v2/resize:fit:1100/0*VqA64sqyEMJ-SRv5 1100w, https://miro.medium.com/v2/resize:fit:1400/0*VqA64sqyEMJ-SRv5 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="452" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt"><em class="pe">Here are some of the many colleagues we partnered with on our work.</em></figcaption></figure><p id="0193" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">One of the key learnings from our presentation is making sure to build trust with your cross-functional partners and stakeholders. They should be your soundboard and your rock.</p><p id="a477" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">We are able to roll out features and adjust designs quickly by having constant and open communication with our engineers. Our engineers are incredibly open minded and flexible when we have to shift priorities due to news events and urgent tasks.</p><p id="fada" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">We are also able to roll out features and get buy-in quickly by maintaining a constant and open communication channel with our stakeholders — including newsroom editors, reporters and visual editors. We prioritize making sure we are aligned on our goals and the directions and problems we want to solve, and events we need to be preparing for. Over time, because of the trust we’ve built, we can align quickly and move as fast as the news demands.</p><p id="52b9" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">We share the mindset of “our work, our responsibility” vs. “my work, my responsibility.” When we all take ownership of a feature and product, we work more closely together, make decisions together, trust each other more, and have more courage to try new ideas.</p><p id="156f" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><strong class="of gu">Don’t Be Afraid to Experiment</strong></p><figure class="no np nq nr ns nt nl nm paragraph-image"><div role="button" tabindex="0" class="nu nv fi nw bg nx nl nm pg"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*bTbR-l-eNJ-pN3uz 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*bTbR-l-eNJ-pN3uz 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*bTbR-l-eNJ-pN3uz 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*bTbR-l-eNJ-pN3uz 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*bTbR-l-eNJ-pN3uz 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*bTbR-l-eNJ-pN3uz 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*bTbR-l-eNJ-pN3uz 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*bTbR-l-eNJ-pN3uz 640w, https://miro.medium.com/v2/resize:fit:720/0*bTbR-l-eNJ-pN3uz 720w, https://miro.medium.com/v2/resize:fit:750/0*bTbR-l-eNJ-pN3uz 750w, https://miro.medium.com/v2/resize:fit:786/0*bTbR-l-eNJ-pN3uz 786w, https://miro.medium.com/v2/resize:fit:828/0*bTbR-l-eNJ-pN3uz 828w, https://miro.medium.com/v2/resize:fit:1100/0*bTbR-l-eNJ-pN3uz 1100w, https://miro.medium.com/v2/resize:fit:1400/0*bTbR-l-eNJ-pN3uz 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg ms ny c" width="700" height="578" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nz fe oa nl nm ob oc be b bf z dt"><em class="pe">Here are two examples of design features that didn’t quite work.</em></figcaption></figure><p id="7490" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">It’s important to test, iterate and repeat.</p><p id="aaa2" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">Live, a story format for dynamic coverage of the major news of the day, is an area where we often roll out features quickly as tests and, later, we fully adopt and improve them. Sometimes it takes less than two weeks to get an idea from design sketches, newsroom alignment, engineering, and QA into production.</p><p id="f21e" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">We seek to keep in mind the long-term vision for how a feature can evolve and be used for other news events, so it’s never a one-time use.</p><p id="3f1d" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">And, of course, not everything we test proves to be working as expected, and it’s OK! The beauty of working at a place like The Times is that we get the space to experiment and try new things. We’re encouraged to test the art of the possible and learn from the insights we gather along the way. Sometimes the things that don’t work are what help us the most in making better products. A spirit that every designer at The Times is encouraged to embody.</p><p id="3d09" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><strong class="of gu">Hear the Whole Story</strong></p><p id="6707" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj">To learn more and get the full experience, watch Jay and Chen’s talk at <a class="af pc" href="https://www.youtube.com/watch?v=akW_l3me3UE&amp;t=62s" rel="noopener ugc nofollow" target="_blank">“Design at the Speed of News.”</a></p></div><div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><p id="380a" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><em class="pp">Jay Guillermo is a seasoned product designer in the publishing/media space. He has over 20 years’ experience from print to product design for a range of clients, including New York Magazine, Vulture, Huffington Post, Men’s Health and Awake New York, in addition to The New York Times. With an art director’s eye and strong typography skills, he’s brought his editorial background and attention to detail to The New York Times as a Lead Product Designer on Home. Since joining The Times in 2019, he works on new features, layouts and systems for the core news app and home page.</em></p><p id="06c4" class="pw-post-body-paragraph od oe gt of b hr og oh oi hu oj ok ol om on oo op oq or os ot ou ov ow ox oy gm bj"><em class="pp">Chen Wu is a Lead Product Designer at The New York Times, where she designs for live coverage and sharing experience across the web and app platforms. Since graduating from Columbia University’s master’s journalism program and working as a sports reporter in Shanghai, she has designed digital and broadcast news products for news organizations, including NBC News and Ad Age magazine, in addition to The Times. An award-winning designer, Chen joined The Times in 2021 and is an avid runner who hopes to complete all the major marathons in the world.</em></p></div>]]></description>
      <link>https://open.nytimes.com/design-at-the-speed-of-news-7394cb37110f</link>
      <guid>https://open.nytimes.com/design-at-the-speed-of-news-7394cb37110f</guid>
      <pubDate>Wed, 14 Feb 2024 16:53:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How The New York Times Games Data Team Revamped Its Reporting]]></title>
      <description><![CDATA[<div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><figure class="nc nd ne nf ng nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na nb"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*hQ_8YRsQiuuT8z31.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*hQ_8YRsQiuuT8z31.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/0*hQ_8YRsQiuuT8z31.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/0*hQ_8YRsQiuuT8z31.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/0*hQ_8YRsQiuuT8z31.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/0*hQ_8YRsQiuuT8z31.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/0*hQ_8YRsQiuuT8z31.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/0*hQ_8YRsQiuuT8z31.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt">Illustration by Claire Merchlinsky</figcaption></figure><p id="f2fc" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj"><strong class="nt gu">By CJ Robinson</strong></p><p id="12fc" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">The acquisition of Wordle in 2022 propelled New York Times Games to new heights, with more people playing our games than ever before.</p><p id="eb3d" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">As the team of product data analysts who support Games stakeholders, we had to contend with tens of millions of players flowing into our pipeline each day. New York Times Games users generate data from actions like starting or finishing a game, getting the Spelling Bee pangram, or being tricked by the red herrings in Connections. Previously, we worked with raw data and constructed ad hoc tables to build reports. Without a proper data architecture to support the increased volume of data we were receiving, we could not quickly uncover valuable insights hidden inside. So, we had to reconsider our approach.</p><p id="820e" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">To increase analyst speed, democratize our data, and build a comprehensive dashboard suite, we spent months in 2022 building new tables with explicit aggregation layers, resulting in a 3x increase in dashboard usage and quicker data pulls as we began to launch more hit games like Connections. In sharing our process, we want to show the aspects of gameplay we measure and how rewarding it is to work with the data we wrangle each day. We also hope to help other product teams learn how to build a data environment that fits their needs.</p><p id="53f6" class="pw-post-body-paragraph nr ns gt nt b nu pn nw nx ny po oa ob oc pp oe of og pq oi oj ok pr om on oo gm bj">Before this project, we commonly pulled insights directly from raw data. Our product team needs consistent information to track metrics like user retention and the impact of new features. The need was especially apparent as Wordle was first integrated into our portfolio and built into the Games app.</p><p id="3932" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">Since we did not have a concrete infrastructure, each request from a product manager or Games team member resulted in us having to write long, arduous, and inefficient queries to understand simple trends or usage across our site.</p><p id="a75d" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">As a team, this led to significant work and the creation of new scheduled jobs to process data. At the time, these jobs were built without a long-term vision, so we contended with inconsistent practices, incomplete aggregations, and accidentally duplicated jobs. We felt unable to move forward meaningfully and were bogged down by what was asked of us. Creating a new data architecture was our solution.</p><figure class="pt pu pv pw px nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na ps"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*j4xrqlINYmK9ARll 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*j4xrqlINYmK9ARll 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*j4xrqlINYmK9ARll 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*j4xrqlINYmK9ARll 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*j4xrqlINYmK9ARll 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*j4xrqlINYmK9ARll 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*j4xrqlINYmK9ARll 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*j4xrqlINYmK9ARll 640w, https://miro.medium.com/v2/resize:fit:720/0*j4xrqlINYmK9ARll 720w, https://miro.medium.com/v2/resize:fit:750/0*j4xrqlINYmK9ARll 750w, https://miro.medium.com/v2/resize:fit:786/0*j4xrqlINYmK9ARll 786w, https://miro.medium.com/v2/resize:fit:828/0*j4xrqlINYmK9ARll 828w, https://miro.medium.com/v2/resize:fit:1100/0*j4xrqlINYmK9ARll 1100w, https://miro.medium.com/v2/resize:fit:1400/0*j4xrqlINYmK9ARll 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="362" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="py">Our old infrastructure</em></figcaption></figure><p id="c91e" class="pw-post-body-paragraph nr ns gt nt b nu pn nw nx ny po oa ob oc pp oe of og pq oi oj ok pr om on oo gm bj">As we went through the process of creating a fresh data architecture, here’s what helped us the most:</p><ul class=""><li id="2cea" class="nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo pz qa qb bj"><strong class="nt gu">Starting with a data review to understand the needs</strong>: When we looked through our datasets, we saw opportunities to better curate and manage data flows.</li>
<li id="6af6" class="nr ns gt nt b nu qc nw nx ny qd oa ob oc qe oe of og qf oi oj ok qg om on oo pz qa qb bj"><strong class="nt gu">Creating consistency:</strong> We needed a common naming convention and language standards for data, field names, and tables to help ensure that our data pipeline would remain adaptable and evergreen when we add new games or features. We also thought about which levels of data were necessary to answer questions from our stakeholders and to ease our workflows as analysts. In the end, we came up with a proposal for an ideal end state with precise steps to structure the data available.</li>
<li id="0cd4" class="nr ns gt nt b nu qc nw nx ny qd oa ob oc qe oe of og qf oi oj ok qg om on oo pz qa qb bj"><strong class="nt gu">Getting buy-in early:</strong> Since this was a significant undertaking and would take months to build, we needed to get buy-in from executive leadership. We spoke to leads across Games to ensure they understood the process and would help make this a priority. We also worked with other teams within our Data and Insights Group (DIG) to ensure that we would not create inconsistencies with other data and to solicit any technical or architectural feedback on our approach.</li>
<li id="3be8" class="nr ns gt nt b nu qc nw nx ny qd oa ob oc qe oe of og qf oi oj ok qg om on oo pz qa qb bj"><strong class="nt gu">Prioritizing flexibly:</strong> We dedicated 20% of our team’s bandwidth to the project, working in ticketed sprints, which allowed us to be flexible but accountable to deadlines and other requests. We made incremental progress in creating and modeling these tables for several months using GitHub for version control and code review. We also took that moment to improve our overall triaging of analytics requests using a Slack workflow. Instead of one-off DMs to analysts, stakeholders sent all messages to a central channel, which our team lead used to prioritize the work more effectively.</li>
<li id="0dee" class="nr ns gt nt b nu qc nw nx ny qd oa ob oc qe oe of og qf oi oj ok qg om on oo pz qa qb bj"><strong class="nt gu">Communicating expectations:</strong> We faced unexpected setbacks throughout the project, whether they were due to our routine responsibilities or data quality issues. We provided updates within our internal analytics team and the larger Games and DIG teams to remedy this. At more significant milestones, we sought feedback and managed expectations when making changes to the initial plan.</li>
</ul><figure class="pt pu pv pw px nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na ps"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*2MH0xMQtot1H85c8 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*2MH0xMQtot1H85c8 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*2MH0xMQtot1H85c8 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*2MH0xMQtot1H85c8 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*2MH0xMQtot1H85c8 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*2MH0xMQtot1H85c8 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*2MH0xMQtot1H85c8 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*2MH0xMQtot1H85c8 640w, https://miro.medium.com/v2/resize:fit:720/0*2MH0xMQtot1H85c8 720w, https://miro.medium.com/v2/resize:fit:750/0*2MH0xMQtot1H85c8 750w, https://miro.medium.com/v2/resize:fit:786/0*2MH0xMQtot1H85c8 786w, https://miro.medium.com/v2/resize:fit:828/0*2MH0xMQtot1H85c8 828w, https://miro.medium.com/v2/resize:fit:1100/0*2MH0xMQtot1H85c8 1100w, https://miro.medium.com/v2/resize:fit:1400/0*2MH0xMQtot1H85c8 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="389" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="py">Our new infrastructure</em></figcaption></figure><p id="2a43" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">After five months, we had the first version of the new data architecture. It included four layers of aggregation that resulted in a clearer summary of relevant data for the team to utilize.</p><p id="436f" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">Now, for analyses that might have taken us many lines of code that we would repeat, with a single line, we could easily rewrite queries.</p><p id="dc05" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">We also designed our underlying tables for each game to be consistent so that we could easily duplicate dashboards for new game launches and display our standard metrics. We published an access-controlled data dashboard for Connections on the launch date. The dashboard was especially useful during the Connections beta phase, where we worked with Games stakeholders to evaluate whether we would continue to invest in Connections based on early gameplay trends.</p><p id="6da1" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">The dashboards had consistent layouts and metrics. They refreshed daily and loaded quickly, which meant that our product managers and designers could rely on this data to monitor performance each day.</p><figure class="pt pu pv pw px nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na ps"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*GtdMTjT6UjPTMriG 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*GtdMTjT6UjPTMriG 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*GtdMTjT6UjPTMriG 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*GtdMTjT6UjPTMriG 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*GtdMTjT6UjPTMriG 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*GtdMTjT6UjPTMriG 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*GtdMTjT6UjPTMriG 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*GtdMTjT6UjPTMriG 640w, https://miro.medium.com/v2/resize:fit:720/0*GtdMTjT6UjPTMriG 720w, https://miro.medium.com/v2/resize:fit:750/0*GtdMTjT6UjPTMriG 750w, https://miro.medium.com/v2/resize:fit:786/0*GtdMTjT6UjPTMriG 786w, https://miro.medium.com/v2/resize:fit:828/0*GtdMTjT6UjPTMriG 828w, https://miro.medium.com/v2/resize:fit:1100/0*GtdMTjT6UjPTMriG 1100w, https://miro.medium.com/v2/resize:fit:1400/0*GtdMTjT6UjPTMriG 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="579" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="py">Our dashboards were scalable and consistent across games</em></figcaption></figure><p id="9c34" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">Anomaly detection, or the process of automated alerts when something goes wrong with data, was another goal we wanted to work toward in this process. To do that, we used a third-party data observability tool that allowed us to create fine-tuned and custom monitors that alerted us to two data outages in the first few months after adoption.</p><figure class="pt pu pv pw px nh mz na paragraph-image"><div role="button" tabindex="0" class="ni nj fi nk bg nl mz na qh"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*Sn1NcqEUIn_jY5-X 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*Sn1NcqEUIn_jY5-X 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*Sn1NcqEUIn_jY5-X 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*Sn1NcqEUIn_jY5-X 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*Sn1NcqEUIn_jY5-X 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*Sn1NcqEUIn_jY5-X 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*Sn1NcqEUIn_jY5-X 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*Sn1NcqEUIn_jY5-X 640w, https://miro.medium.com/v2/resize:fit:720/0*Sn1NcqEUIn_jY5-X 720w, https://miro.medium.com/v2/resize:fit:750/0*Sn1NcqEUIn_jY5-X 750w, https://miro.medium.com/v2/resize:fit:786/0*Sn1NcqEUIn_jY5-X 786w, https://miro.medium.com/v2/resize:fit:828/0*Sn1NcqEUIn_jY5-X 828w, https://miro.medium.com/v2/resize:fit:1100/0*Sn1NcqEUIn_jY5-X 1100w, https://miro.medium.com/v2/resize:fit:1400/0*Sn1NcqEUIn_jY5-X 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mg nm c" width="700" height="399" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nn fe no mz na np nq be b bf z dt"><em class="py">Dashboard usage tripled after our redesign</em></figcaption></figure><p id="bae5" class="pw-post-body-paragraph nr ns gt nt b nu pn nw nx ny po oa ob oc pp oe of og pq oi oj ok pr om on oo gm bj">Our team continually works to make improvements and changes to our data infrastructure — plus, with every new feature or game that the New York Times Games produces, we update our pipeline! We’re currently migrating this architecture off of proprietary in-house pipelining tech to a cloud-based solution for even more transparency and reliability; an exciting prospect that will help us streamline our data even further! Additionally, we utilize a backlog of issues and requests we find as we use the new data for future tasks.</p><p id="c4e3" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">Ultimately, our goal is to make the data generation, ingestion, processing, and reporting pipeline as effortless and evergreen as possible. Now that the heavy lifting of that effort is over, the team can dedicate more time to finding interesting, fun, and actionable insights to make your Games experience better each day — which is what we want to do most and what makes working at The Times so fulfilling. It was immensely rewarding to work on a project that was intellectually stimulating and also made a large impact on the lives of the internal users of this data (which also includes ourselves).</p><p id="a2e9" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj">What would you do with this data at your fingertips?</p></div><div class="gm gn go gp gq ab ca ch bg fy fz ga gb"><p id="ad70" class="pw-post-body-paragraph nr ns gt nt b nu nv nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo gm bj"><em class="qq">Thanks to Hunter Calvert for proposing and initiating the project, and to Natalie Erjavec, Daniel Lim, and Emily Ngo for their contributions!</em></p></div>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-games-data-team-revamped-its-reporting-03d80e66db94</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-games-data-team-revamped-its-reporting-03d80e66db94</guid>
      <pubDate>Tue, 13 Feb 2024 17:04:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Experimenting with Handwriting Recognition for The New York Times Crossword]]></title>
      <description><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fnRTJpam-cGan7LWE2SXgA.jpeg"><figcaption>Illustration by <a href="https://www.eddieperrote.com/">Eddie Perrote</a></figcaption></figure><p><strong>By Shafik Quoraishee</strong></p><h4><strong>Introduction</strong></h4><p>As part of MakerWeek 2023, the New York Times annual hackathon, iOS and Android Mobile engineers explored the ability to write in the New York Times Crosswords app on each respective platform.</p><p>As an Android engineer who participated in the experiment, I’m excited to share my platform specific experience implementing <a href="https://arxiv.org/abs/1911.00623">On Device ML</a> onto the Android Crosswords.</p><p><strong>Note: </strong>This exploration is for a future feature, which hasn’t been released yet.</p><h4><strong>Initial Setup and Requirements</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/374/0*iEYnoVS6-CxzktlN"></figure><p>The New York Times Crossword has a custom software keyboard built into the app. When a user types their letter on the keyboard, it appears on that square.</p><p>To allow for handwriting, the first thing we needed to do was to ensure that the user could actually enter text manually, via a stylus or their finger. We took each crossword square on both the Mini and the Daily, and we transformed it into a custom component we called ‘SketchBox’. This component captures each stroke made by the user’s finger or stylus as they write on the screen, and is specially designed to listen for touch and drag events to display drawn letter strokes.</p><p>After our Sketchbox captured the resultant letter pixels from the canvas, we could then send the data to the machine learning algorithm of our choice.</p><h4>Pencil Timing</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/146/0*3CR6gkTwOlMdR7n6"></figure><p>Before we get to the actual handwriting detection, we need to address a subtle but important point.</p><p>As a user writes on the Sketchbox, they typically lift their finger or the stylus off the canvas, especially to complete letters like K, A, H, etc. This means we needed to determine when exactly a user was done writing, between each stroke. For example, if they enter the stem of the “K,” if we try to detect what letter this may be as soon as they lift their writing utensil off the canvas, it might be interpreted as an “I”.</p><p>So how long do we wait between strokes?</p><p>For our initial implementation, we introduced the concept of a <a href="https://developer.android.com/reference/java/util/concurrent/CountDownLatch">mutex-like</a> input locking system. Between each stroke we experimented with values around 500 to 1000 milliseconds depending on certain conditions. We didn’t want to wait too long before unlocking the stylus, otherwise the user input experience would seem degraded and choppy.</p><p>This is one of the many complexities we had to consider as we were designing the writing mechanic; and something that will be open for refinement in the future.</p><h4><strong>Data Preparation, Conditioning and Normalization</strong></h4><p>Before exploring conversion of images into text, we had to consider our input: letters from various devices with different screen sizes and resolutions.</p><p>An essential pre-processing step included getting the simplest form of the data that the algorithm needs for accurate learning. In the case of image data, this means getting rid of non-essential noise, and “frivolous geometry”. We downscaled and <a href="https://reference.wolfram.com/language/ref/Binarize.html">binarized</a> the letter data, and then converted 128x128 raw input letters to much smaller, efficient and simplified 28x28 images.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oWPlRhmFt8nZjLWT"><figcaption>An image next to a black/white binarized version to reduce unnecessary detail for easier character detection.</figcaption></figure><p>Once we did that, we could finally begin to discuss how we translate the <a href="https://en.wikipedia.org/wiki/Rasterisation">rasterized</a> canvas image data to an actual character that our crossword app understands.</p><p>Handwriting recognition is a classic machine learning challenge within <a href="https://en.wikipedia.org/wiki/Optical_character_recognition">Optical Character Recognition (OCR)</a>. It has seen substantial advancements over the years, notably with Dr. Yann LeCun’s <a href="https://en.wikipedia.org/wiki/LeNet">LeNet-5</a> architecture in 1998, which significantly improved digit recognition on the <a href="https://en.wikipedia.org/wiki/MNIST_database">Modified National Institute of Standards and Technology (MNIST) dataset</a>. The MNIST dataset contains thousands of variations of the digits 1–9, and is the de facto standard database for digit recognition.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1ikaPILBGn26AEK_"><figcaption>Snapshot of several digits from the MNIST data set</figcaption></figure><p>The system we were trying to build looks like this high-level architecture diagram:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*uJQn8fJFcUCeb3Yz"></figure><p>The machine learning algorithm we chose was intended to provide the best separation of character data into recognition clusters as idealized below. This way it would be easy for our system to determine if the user wanted, for example, to enter an ‘A’ vs a ‘C’. We explored several other options that I won’t go into detail about here, before settling on the use of a Deep Convolutional Neural Network architecture, which proved up to the task.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*I5__3gyaTMD8RKBz"></figure><h4><strong>Building A Deep Convolutional Network</strong></h4><p>The Deep-CNN ((<a href="https://en.wikipedia.org/wiki/Convolutional_neural_network">Convolutional Neural Network</a>) is the cornerstone of any legitimate modern day image based machine learning system. It is a special kind of neural network that examines sections of image data, and using its learning mechanic, intelligently finds important features that help identify and classify images.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*UacII8sF994dsaww"></figure><p>In the example presented above, the neural network takes in an input image of a bird, and detects structures that correspond to different qualitative elements of the bird. It can detect portions of the image that correspond to feathers, eyes, edges of the beak, internal beak geometry, and a whole host of traits that a person would have difficulty designing an algorithm from scratch to do.</p><p>Using the most important features, it can determine if it’s looking at a bird, and what kind of bird it is. We can even determine things like what direction the bird is flying in or looking at–provided the network is trained properly. We apply the same principle to letters that a user inputs into our crossword app.</p><p>The basic CNN is a combination of the following elemental layers. By intelligently mixing and matching these structures with the proper parameters, there’s very little imagewise that we can’t detect:</p><ul><li><a href="https://www.databricks.com/glossary/convolutional-layer">Convolutional </a>layers allow the model to extract features automatically</li><li><a href="https://computersciencewiki.org/index.php/Max-pooling_/_Pooling">Max pooling</a> layers narrow down the features obtained from the Conv Layers</li><li><a href="https://en.wikipedia.org/wiki/Rectifier_(neural_networks)">ReLU</a> layers introduce non-linearity and allow for complex pattern discrimination</li><li><a href="https://en.wikipedia.org/wiki/Dilution_(neural_networks)">Dropout</a> layers mitigate overfitting of the network to the training data</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Kr4p9UCztPDTz0l6"></figure><h4><strong>TensorFlow Lite and Ingesting our Model</strong></h4><p>In addition to building the model, we also had to find a way to deliver it to our device. We chose to use <a href="https://www.tensorflow.org/lite">Tensorflow Lite</a>, a mobile framework used to install Python compiled ML models into an Android or iOS device.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/970/0*_5tgJLlluZc71nQM"><figcaption>The TensorFlow Lite framework for on-device model ingestion.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Ly6YfZf-lyfNSS0i"></figure><p>Once we were satisfied with our model, we compiled it to a .tflite file and baked it into our application, then built a shunt for listening to letter writing events coming from the crossword squares. We iterated several times through different models and different configurations until we were satisfied with the final result, which turned into a trained file of only 100K or so–perfect for a mobile application, where space considerations are important.</p><h4><strong>Digit Recognition</strong></h4><p>Before approaching the problem of full-blown letter recognition, we decided to start simple and tackle the well studied and foundational problem of numerical digit recognition. The core section of code below provides the basic CNN setup we implemented:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*oW6A-x01ZI7Bgmhu"></figure><h4><strong>First Digit Based CNN Model Failure: What Went wrong?</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/146/0*CVyYY1vIS4xKzxVe"></figure><p>Despite abundant training data obtained from the MNIST, our recognition results were poor.</p><p>We ascertained the training data was “too perfect”. All the digits were only minor variations of each other, and all of them were mostly in the center of the box.</p><p>This is not the way people enter data into a crossword square. People have different handwriting styles and ways of tilting and placing the characters in the squares off center.</p><p>To solve this, we needed to employ a well known machine learning technique called <a href="https://en.wikipedia.org/wiki/Data_augmentation">Data Augmentation</a>.</p><p>Data augmentation automatically generates off-center and distorted versions of our training data, bypassing the need for manual adjustments and skewing. This allows for many variations of our initial data set, including significantly off-centered versions of our characters.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Nn4UqcjQz8BJP4J7"><figcaption>The image to the left is the original digits without much variation, and to the right are the skewed, stretched and off center digits created by data augmentation.</figcaption></figure><p>By applying data augmentation techniques, we expanded our dataset from thousands to over 1 million samples with off-center minor shifts, rotations, and scaling — also called <a href="https://en.wikipedia.org/wiki/Affine_transformation">affine transformations</a>.</p><h4><strong>Data Augmented Digit Model Success against Digits</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/148/0*4Taq3RO_cG7KP69V"></figure><p>As you can see, the digit recognition has improved significantly on the real crossword — a milestone in our work!</p><h4><strong>Moving to Full Blown Letter Recognition</strong></h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/772/0*TcSRuBm6V-NudDFP"></figure><p>Now that we solved digits, the next step was to solve letters. This includes lowercase and capital letters and all of their variations. Instead of just ten digits, we are now dealing with 26 lowercase, 26 capital letters and ten digits, which equates to 62 characters.</p><p>We can use the <a href="https://www.nist.gov/itl/products-and-services/emnist-dataset">EMNIST</a> dataset (Dataset source: <a href="http://arxiv.org/abs/1702.05373">http://arxiv.org/abs/1702.05373</a>), an expanded version of the MNIST set, that includes both letters and digits and even punctuation, to help train the model better.</p><p>However, even with the enhanced dataset, the digit specific model isn’t sufficient for our needs. This is intuitively not surprising, because while the digit recognition model was powerful, it is surely not “intelligent” enough for the greatly expanded variation in character structure that is introduced by looking at letters.</p><h4><strong>Hyper Powering The Model through Parameter Optimization</strong></h4><p>To increase the power of our model, we added much more depth to our network in the form of several additional layers. We also employed Stratified K<a href="https://en.wikipedia.org/wiki/Cross-validation_(statistics)">-Fold cross-validation</a> to diversify our training by using randomized subsets of our augmented training/validation data.</p><p>To ensure that our layers were optimally designed, we employed a <a href="https://en.wikipedia.org/wiki/Hyperparameter_optimization">randomized parametric search</a> along with enhanced statistical testing, which allowed us to find the optimal hyperparameters for our model. This proved to be an enhancement from our previous strategy of guessing the right parameters.</p><p>In our testing phase, we attained an average validation accuracy of ~91% on the Augmented EMNIST dataset. This gave us faith that our model would work.</p><p>FINALLY: SUCCESS!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/146/0*nuyWn_cKwvbG-Agt"></figure><p>After a long journey of exploring the landscape of ML model building, we finally arrived at a working crossword model–which was exciting. Even though we attained stellar results, there is still much work to do for the complete crossword experience, including dealing with partial letters, and letters that are spaced at irregular intervals.</p><h4><strong>Conclusion</strong></h4><p>Implementing handwriting recognition on the Android crossword app was an exciting adventure, even in an experimental context. Aside from handwriting, there’s also the potential for interactive features like “Scribble-to-Erase” detection and the possibility of in-app self-training mechanisms, and a whole host of other doors that On-Device ML in the Games App can open.</p><p>Having the opportunity to experiment with new techniques and amplifications to our existing products is a core part of why working at the Times as an engineer is so unique and so worth it. We hope one day to turn this into a feature that amplifies the Games experience for our current users and attracts new subscribers.</p><p><em>Shafik Quoraishee is a Senior Android Engineer on the Games Team at The New York Times. He is an avid machine learning/A.I. Enthusiast. Outside of work, he enjoys playing guitar, writing, and running quirky experiments.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&amp;referrerSource=full_rss&amp;postId=a78e08fec08f" width="1" height="1" alt=""><hr><p><a href="https://open.nytimes.com/experimenting-with-handwriting-recognition-for-new-york-times-crossword-a78e08fec08f">Experimenting with Handwriting Recognition for The New York Times Crossword</a> was originally published in <a href="https://open.nytimes.com/">NYT Open</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
      <link>https://open.nytimes.com/experimenting-with-handwriting-recognition-for-new-york-times-crossword-a78e08fec08f</link>
      <guid>https://open.nytimes.com/experimenting-with-handwriting-recognition-for-new-york-times-crossword-a78e08fec08f</guid>
      <pubDate>Mon, 08 Jan 2024 17:26:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Designing an App for Audio Journalism — From the Ground Up]]></title>
      <description><![CDATA[<figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn no"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*MjABVL6ekH7KPDL1swwI9Q.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt">Illustration by <a class="af oe" href="https://www.ranzhengart.com/" rel="noopener ugc nofollow" target="_blank">Ran Zheng</a></figcaption></figure><p id="2791" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj"><strong class="oh gs">By Rimar Villasenor, Grace LaRosa, Bon Champion, Daman Chatha and Lavi Tang</strong></p><p id="38c3" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">It’s not often that you get to build a new product from the ground up. At The New York Times, cross-disciplinary collaboration is at the heart of many of the company’s digital innovations, and design played a pivotal role in imagining, expressing, and validating the various avenues a to-be-defined product might take.</p><p id="3682" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Most recently, this was demonstrated via the launch of <a class="af oe" href="https://www.nytimes.com/audio/app" rel="noopener ugc nofollow" target="_blank">New York Times Audio</a> — an app that embodies our idea on how best to represent journalism in audio form <em class="pb">(in other words — “what if The New York Times was just a play button”?)</em>.</p><p id="72dd" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">This new product is home to New York Times produced podcasts and some of the industry’s most iconic shows such as This American Life and Serial, along with select read-aloud articles from partnering publishers. It also includes reporter-narrated articles that give listeners a human, first person account of what went into some of our front page reporting — a unique new format that helps listeners connect to our journalism and get a sense of the story behind the story.</p><p id="7dce" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Here is a look at how we worked together with colleagues across the business and newsroom to bring this audio-first experience to life.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*GrjInPzbJfy-OEe- 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*GrjInPzbJfy-OEe- 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*GrjInPzbJfy-OEe- 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*GrjInPzbJfy-OEe- 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*GrjInPzbJfy-OEe- 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*GrjInPzbJfy-OEe- 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*GrjInPzbJfy-OEe- 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*GrjInPzbJfy-OEe- 640w, https://miro.medium.com/v2/resize:fit:720/0*GrjInPzbJfy-OEe- 720w, https://miro.medium.com/v2/resize:fit:750/0*GrjInPzbJfy-OEe- 750w, https://miro.medium.com/v2/resize:fit:786/0*GrjInPzbJfy-OEe- 786w, https://miro.medium.com/v2/resize:fit:828/0*GrjInPzbJfy-OEe- 828w, https://miro.medium.com/v2/resize:fit:1100/0*GrjInPzbJfy-OEe- 1100w, https://miro.medium.com/v2/resize:fit:1400/0*GrjInPzbJfy-OEe- 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="2500" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">At the start of the project, we pulled together a cross-functional team to focus solely on bringing our vision to life: a streaming app dedicated to the world’s best audio journalism. This meant shaping new tools and processes, like building up a new audio-centric design system and CMS, along with immersing ourselves in audio best practices and approaches taken elsewhere to understand where our biggest opportunities were.</p><p id="1596" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">As we scaled our team and set these foundations, we had to solve for specific design challenges that varied greatly from the ones tackled by other music and podcast apps.</p><p id="c0e6" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Our product needed to:</p><ul class=""><li id="537b" class="of og gr oh b hp oi oj ok hs ol om on oo qe oq or os qf ou ov ow qg oy oz pa qh qi qj bj">Ensure that our audio journalism feels timely, evolving by day of the week, even time of day.</li>
<li id="0a19" class="of og gr oh b hp qk oj ok hs ql om on oo qm oq or os qn ou ov ow qo oy oz pa qh qi qj bj">Emphasize the role human editorial and curation plays.</li>
<li id="3c25" class="of og gr oh b hp qk oj ok hs ql om on oo qm oq or os qn ou ov ow qo oy oz pa qh qi qj bj">Create a clarity in what can feel like an overwhelming choice of playlists, titles, and content.</li>
<li id="7516" class="of og gr oh b hp qk oj ok hs ql om on oo qm oq or os qn ou ov ow qo oy oz pa qh qi qj bj">Meet diverse listener news needs, whether they just wanted to quickly get caught up on the news of the day or go deep in a pressing topic.</li>
<li id="1608" class="of og gr oh b hp qk oj ok hs ql om on oo qm oq or os qn ou ov ow qo oy oz pa qh qi qj bj">Feel like an extension of the Times brand, while also creating a distinct visual language and interface that caters to listeners over readers.</li>
</ul><p id="2b3a" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">In order to develop an experience that delivered on these ambitions, our design team invested heavily in discovery sprints, weighing the effectiveness of drastically different approaches and iterating at a rapid pace. And, perhaps most notably, we conducted the majority of these efforts in tandem with our editorial partners.</p><p id="4a6e" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">From the very beginning of our design process, newsroom partners were by our side — sharing what was important to them, highlighting gaps in their toolkit, and informing the direction our concepts took. They participated in brainstorms and co-creation sessions, provided feedback in design critiques, and kept us close to their most important needs when programming and presenting our journalism.</p><p id="c2db" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">This early, ongoing collaboration demonstrated the value of designing as closely to editorial as possible: with their intimate understanding of our coverage, we were able to create a product experience that was both sensitive to their journalistic approach and innovative for our users. Our working together even opened the door for brand new shows and product features that would eventually be woven into the app’s core offering.</p><p id="453f" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Some examples of this are The Headlines, a short morning show developed exclusively for the app, and the daily playlist: a programmed package of must-listen audio stories that tops our homescreen. Each of these was sparked by a user need (<em class="pb">more short listens to fit into my day</em>) or design concept (<em class="pb">“the essentials” in audio</em>) and brought to fruition via our partnership. Additionally, we relied heavily on editorial feedback when creating our card system. They helped inform which tools were needed to effectively respond to the news cycle and communicate the appropriate content hierarchy, and evaluated them in context when programming early versions of the app to help us understand what might be missing.</p><p id="f649" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">All in all, we’ve forged a unique relationship with the newsroom that has continued to shape our work. Our collaboration helped make us feel like one team — editors informing design iterations and the needs of our designs themselves, and designers pitching concepts that ultimately inspire a new editorial approach.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*_PMzuL7qd4Y51d8N 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*_PMzuL7qd4Y51d8N 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*_PMzuL7qd4Y51d8N 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*_PMzuL7qd4Y51d8N 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*_PMzuL7qd4Y51d8N 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*_PMzuL7qd4Y51d8N 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*_PMzuL7qd4Y51d8N 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*_PMzuL7qd4Y51d8N 640w, https://miro.medium.com/v2/resize:fit:720/0*_PMzuL7qd4Y51d8N 720w, https://miro.medium.com/v2/resize:fit:750/0*_PMzuL7qd4Y51d8N 750w, https://miro.medium.com/v2/resize:fit:786/0*_PMzuL7qd4Y51d8N 786w, https://miro.medium.com/v2/resize:fit:828/0*_PMzuL7qd4Y51d8N 828w, https://miro.medium.com/v2/resize:fit:1100/0*_PMzuL7qd4Y51d8N 1100w, https://miro.medium.com/v2/resize:fit:1400/0*_PMzuL7qd4Y51d8N 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt"><em class="qp">A low-fi worksheet we created to understand how our editors might program. We used this as one of the first inputs to inform design directions for our cards and homescreen.</em></figcaption></figure><p id="c7f7" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">We spent quite a bit of time on research and testing. Early on, we partnered closely with our insights team to user test several divergent app prototypes, with different architectures, content strategies, and design aesthetics. In parallel, our research leads conducted user interviews to gain a deeper understanding of listening habits and the role audio plays in our audiences’ daily lives.</p><p id="1201" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">In each stage of testing, we gathered direct commentary and feedback from real listeners. We connected our feedback form to Slack, giving us real-time updates on what people were saying. It was a constant source of inspiration. Every day, we would see what users were thinking about the product we were building — how they were using the product; what their pain points were; what features they were asking for. Their feedback helped give us a sense of what they cared about, and what they wanted the evolution of NYT Audio to be.</p><p id="848b" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">We shaped our priorities and product roadmap around this input, guiding us towards our MVP.</p><p id="e7a2" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">We had a lot of initial conversations at the beginning of the project where we analyzed market research and debated product strategy. These often resulted in many more questions. As designers, we focused on translating insights and ideas into artifacts that would help bring clarity to these meetings, driving us to decisions faster. Artifacts varied from simple diagrams to more complex, visually-rich prototypes.</p><p id="5171" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">These prototypes also inspired our editorial team to think through possible content ideas, helping give shape to assets we have in the app today.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn qq"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*udKM_5SRygp0HH3F 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*udKM_5SRygp0HH3F 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*udKM_5SRygp0HH3F 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*udKM_5SRygp0HH3F 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*udKM_5SRygp0HH3F 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*udKM_5SRygp0HH3F 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*udKM_5SRygp0HH3F 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*udKM_5SRygp0HH3F 640w, https://miro.medium.com/v2/resize:fit:720/0*udKM_5SRygp0HH3F 720w, https://miro.medium.com/v2/resize:fit:750/0*udKM_5SRygp0HH3F 750w, https://miro.medium.com/v2/resize:fit:786/0*udKM_5SRygp0HH3F 786w, https://miro.medium.com/v2/resize:fit:828/0*udKM_5SRygp0HH3F 828w, https://miro.medium.com/v2/resize:fit:1100/0*udKM_5SRygp0HH3F 1100w, https://miro.medium.com/v2/resize:fit:1400/0*udKM_5SRygp0HH3F 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="694" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt"><em class="qp">A prototype showing an early UX concept for</em> <a class="af oe" href="https://www.youtube.com/watch?v=QYoMzVJmEQU" rel="noopener ugc nofollow" target="_blank"><em class="qp">The Headlines</em></a><em class="qp">, which helped inspire the structure of the show and future product ideas around chaptering and transcripts.</em></figcaption></figure><p id="4d09" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">One of the most exciting and unique aspects of the prototyping included experimenting with sound. Using music and our own voices, we’ve played around with ways a user might navigate the app using sonic cues.</p><p id="19f1" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Rather than just viewing artifacts and prototypes as the end result of our design thinking around a problem, we began using them earlier in the process to inspire conversation, which helped give the work a greater sense of direction.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*NucYDWlqH9S2xVPX 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*NucYDWlqH9S2xVPX 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*NucYDWlqH9S2xVPX 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*NucYDWlqH9S2xVPX 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*NucYDWlqH9S2xVPX 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*NucYDWlqH9S2xVPX 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*NucYDWlqH9S2xVPX 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*NucYDWlqH9S2xVPX 640w, https://miro.medium.com/v2/resize:fit:720/0*NucYDWlqH9S2xVPX 720w, https://miro.medium.com/v2/resize:fit:750/0*NucYDWlqH9S2xVPX 750w, https://miro.medium.com/v2/resize:fit:786/0*NucYDWlqH9S2xVPX 786w, https://miro.medium.com/v2/resize:fit:828/0*NucYDWlqH9S2xVPX 828w, https://miro.medium.com/v2/resize:fit:1100/0*NucYDWlqH9S2xVPX 1100w, https://miro.medium.com/v2/resize:fit:1400/0*NucYDWlqH9S2xVPX 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="381" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt"><em class="qp">An audio prototyping showing how we might use sound to give users a sense of orientation as they listen.</em></figcaption></figure><p id="b52d" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">Given that audio is by nature a format that renders our journalism accessible for low and no vision users, we wanted to ensure that the interface was optimized for VoiceOver. In helping establish a set of design and product principles to guide our work, we prioritized accessibility as one of them. This brought a11y to the front of our process and baked it into our product thinking from the beginning.</p><p id="abfd" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">With our engineering team, we set out to learn as much as we could. We started by conducting an audit of VoiceOver experiences in other apps, and combed through Apple’s guidelines for building for accessibility. Taking a look at an early build of our app, we identified where accessibility was currently working and where it needed to be enhanced. We explored different ways we might improve the experience to make it seamless to navigate using only audio cues. <em class="pb">How might we group cues and actions together to reduce the amount of taps and swipes to a listen?</em></p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*DnYIs8yZfeEVZTAu 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*DnYIs8yZfeEVZTAu 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*DnYIs8yZfeEVZTAu 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*DnYIs8yZfeEVZTAu 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*DnYIs8yZfeEVZTAu 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*DnYIs8yZfeEVZTAu 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*DnYIs8yZfeEVZTAu 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*DnYIs8yZfeEVZTAu 640w, https://miro.medium.com/v2/resize:fit:720/0*DnYIs8yZfeEVZTAu 720w, https://miro.medium.com/v2/resize:fit:750/0*DnYIs8yZfeEVZTAu 750w, https://miro.medium.com/v2/resize:fit:786/0*DnYIs8yZfeEVZTAu 786w, https://miro.medium.com/v2/resize:fit:828/0*DnYIs8yZfeEVZTAu 828w, https://miro.medium.com/v2/resize:fit:1100/0*DnYIs8yZfeEVZTAu 1100w, https://miro.medium.com/v2/resize:fit:1400/0*DnYIs8yZfeEVZTAu 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="523" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt"><em class="qp">An experiment in grouping components to reduce the amount of swipes a user has to make to navigate through a feed of content.</em></figcaption></figure><p id="50fe" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Another part of the challenge was figuring out how to annotate our designs for VoiceOver. Seeing a gap in our documentation kit, we created a reusable Figma template for preparing work for development. Now a permanent part of our documentation, the template has since been adopted by other teams at the Times.</p><p id="a865" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Moving closer to launch, we organized accessibility-focused user research sessions with no and low vision users to get ongoing feedback for how our optimizations were working, which helped us hone the experience prior to release.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*KmJJWRMtw1Zd1E-_ 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*KmJJWRMtw1Zd1E-_ 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*KmJJWRMtw1Zd1E-_ 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*KmJJWRMtw1Zd1E-_ 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*KmJJWRMtw1Zd1E-_ 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*KmJJWRMtw1Zd1E-_ 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*KmJJWRMtw1Zd1E-_ 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*KmJJWRMtw1Zd1E-_ 640w, https://miro.medium.com/v2/resize:fit:720/0*KmJJWRMtw1Zd1E-_ 720w, https://miro.medium.com/v2/resize:fit:750/0*KmJJWRMtw1Zd1E-_ 750w, https://miro.medium.com/v2/resize:fit:786/0*KmJJWRMtw1Zd1E-_ 786w, https://miro.medium.com/v2/resize:fit:828/0*KmJJWRMtw1Zd1E-_ 828w, https://miro.medium.com/v2/resize:fit:1100/0*KmJJWRMtw1Zd1E-_ 1100w, https://miro.medium.com/v2/resize:fit:1400/0*KmJJWRMtw1Zd1E-_ 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt"><em class="qp">A Figma template we created for annotating VoiceOver functionality.</em></figcaption></figure><p id="7a5d" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">One of our goals was to distinguish NYT Audio visually, while retaining the quality and essence of The New York Times brand. To do so, we worked closely with brand designers, art directors and photo editors that work across various Times products to sharpen and align our visual approach for launch.</p><p id="7105" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Leveraging a core competency of the Times — our photojournalism — we knew we wanted to prioritize images in the experience. To capture the essence of each piece of audio journalism and to pique listeners’ curiosity, we coupled our audio with compelling art direction. Alongside our photo editors, we refined the shapes of our content cards and scrutinized the aspect ratio for images to ensure that the art was given the right amount of visual priority in relation to the other elements on screen. It was important for us to land on a system of containers that elevated imagery and made our photo editors’ workflow seamless.</p><p id="dd11" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">Given that our content architecture is relatively complex with many different types — from podcasts to narrated articles, longer-form pieces and shorts — we spent a lot of time refining our information design. We looked through everything from iconography to the relationship of typographical elements. Together with our brand team, we went through many iterations of our component library. This manifested in changes to our type system, padding, and even the broader color system we applied across our cards (originally, we were extracting color from album art to apply to the card UI, but refined our approach to be more intentional given the visual noise this created).</p><p id="fd15" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">We also worked to establish a distinguishable identity while connecting NYT Audio to the rest of the Times product portfolio. The brand team helped define a distinct brand color that sat comfortably within our product bundle, and established usage guidelines around typography in accordance with the greater Times design system.</p><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*oyYUyT5DySDtSDCH 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*oyYUyT5DySDtSDCH 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*oyYUyT5DySDtSDCH 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*oyYUyT5DySDtSDCH 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*oyYUyT5DySDtSDCH 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*oyYUyT5DySDtSDCH 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*oyYUyT5DySDtSDCH 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*oyYUyT5DySDtSDCH 640w, https://miro.medium.com/v2/resize:fit:720/0*oyYUyT5DySDtSDCH 720w, https://miro.medium.com/v2/resize:fit:750/0*oyYUyT5DySDtSDCH 750w, https://miro.medium.com/v2/resize:fit:786/0*oyYUyT5DySDtSDCH 786w, https://miro.medium.com/v2/resize:fit:828/0*oyYUyT5DySDtSDCH 828w, https://miro.medium.com/v2/resize:fit:1100/0*oyYUyT5DySDtSDCH 1100w, https://miro.medium.com/v2/resize:fit:1400/0*oyYUyT5DySDtSDCH 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*ZiF9yWhbcLdF4oXg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*ZiF9yWhbcLdF4oXg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*ZiF9yWhbcLdF4oXg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*ZiF9yWhbcLdF4oXg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*ZiF9yWhbcLdF4oXg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*ZiF9yWhbcLdF4oXg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*ZiF9yWhbcLdF4oXg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*ZiF9yWhbcLdF4oXg 640w, https://miro.medium.com/v2/resize:fit:720/0*ZiF9yWhbcLdF4oXg 720w, https://miro.medium.com/v2/resize:fit:750/0*ZiF9yWhbcLdF4oXg 750w, https://miro.medium.com/v2/resize:fit:786/0*ZiF9yWhbcLdF4oXg 786w, https://miro.medium.com/v2/resize:fit:828/0*ZiF9yWhbcLdF4oXg 828w, https://miro.medium.com/v2/resize:fit:1100/0*ZiF9yWhbcLdF4oXg 1100w, https://miro.medium.com/v2/resize:fit:1400/0*ZiF9yWhbcLdF4oXg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="np nq nr ns nt nu nm nn paragraph-image"><div role="button" tabindex="0" class="nv nw fg nx bg ny nm nn pc"><picture><source srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/0*vZbKMiq9Uqiix7Ej 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/0*vZbKMiq9Uqiix7Ej 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/0*vZbKMiq9Uqiix7Ej 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/0*vZbKMiq9Uqiix7Ej 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/0*vZbKMiq9Uqiix7Ej 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/0*vZbKMiq9Uqiix7Ej 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/0*vZbKMiq9Uqiix7Ej 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" type="image/webp" /><source data-testid="og" srcset="https://miro.medium.com/v2/resize:fit:640/0*vZbKMiq9Uqiix7Ej 640w, https://miro.medium.com/v2/resize:fit:720/0*vZbKMiq9Uqiix7Ej 720w, https://miro.medium.com/v2/resize:fit:750/0*vZbKMiq9Uqiix7Ej 750w, https://miro.medium.com/v2/resize:fit:786/0*vZbKMiq9Uqiix7Ej 786w, https://miro.medium.com/v2/resize:fit:828/0*vZbKMiq9Uqiix7Ej 828w, https://miro.medium.com/v2/resize:fit:1100/0*vZbKMiq9Uqiix7Ej 1100w, https://miro.medium.com/v2/resize:fit:1400/0*vZbKMiq9Uqiix7Ej 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" /><img alt="" class="bg mu nz c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="oa fc ob nm nn oc od be b bf z dt"><em class="qp">[Above Images] Brand assets</em></figcaption></figure><p id="dbc9" class="pw-post-body-paragraph of og gr oh b hp pz oj ok hs qa om on oo qb oq or os qc ou ov ow qd oy oz pa gk bj">From an ambitious idea to a real tangible product, designing and helping launch the NYT Audio App was a fun and challenging experience. We truly had a seat at the table alongside our newsroom, brand, product and engineering partners, and there is a direct line from our discovery work to the live experience our users engage with day.</p><p id="5b46" class="pw-post-body-paragraph of og gr oh b hp oi oj ok hs ol om on oo op oq or os ot ou ov ow ox oy oz pa gk bj">This experience is a reflection of how Design fits into the fabric of the Times. The product development organization here empowers the design function to play a pivotal role in setting direction. We shift across altitudes, from collaborating on research and test design, to prototyping with editors, to partnering with product on defining the big opportunities for our roadmap. We’re excited to continue having an impact as we evolve what the audio product, and our approach to elevating audio journalism, will become in the future.</p>]]></description>
      <link>https://open.nytimes.com/designing-an-app-for-audio-journalism-from-the-ground-up-5e6a8c8fddaf</link>
      <guid>https://open.nytimes.com/designing-an-app-for-audio-journalism-from-the-ground-up-5e6a8c8fddaf</guid>
      <pubDate>Tue, 21 Nov 2023 16:37:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How The New York Times Cooking Team Makes Personalized Recipe Recommendations]]></title>
      <description><![CDATA[<div class="gk gl gm gn go ab ca ch bg fw fx fy fz"><div><h2 id="9f8b" class="pw-subtitle-paragraph ho gq gr be b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id cp dt">A look into how recommendation algorithms are used to help readers find the right recipes for themselves.</h2></div><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div role="button" tabindex="0" class="no np fg nq bg nr nf ng nh"><picture><img alt="" class="bg ns nt c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nu fc nv nf ng nw nx be b bf z dt">Illustration by JooHee Yoon</figcaption></figure><p id="630a" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj"><strong class="oa gs">By Kyelee Fitts and Celia Eddy</strong></p><p id="714d" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">With tens of thousands of recipes in our catalog, The New York Times Cooking team faces a challenging task — how can we serve the best recipes for our users, taking into account their varying preferences, including diet, nutrition, cook time, cuisine, and ingredients? Each week, The New York Times Cooking editors manually curate a set of recipes and collections to promote on the homepage and in email newsletters. To enhance our editorial curation, we have been experimenting with personalized recipe recommendations with the goal of making sure our users find the right recipes for them.</p><p id="272a" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">In August, we launched a new personalized homepage in The New York Times Cooking mobile app. This new homepage includes both editorially and algorithmically programmed content that is grouped into different carousels. Examples of editorially-curated content include the recipe of the day, recipes from Sam Sifton and Melissa Clark’s newsletter, or editorially-curated collections.</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div role="button" tabindex="0" class="no np fg nq bg nr nf ng ou"><picture><img alt="" class="bg ns nt c" width="700" height="362" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nu fc nv nf ng nw nx be b bf z dt"><em class="ov">Left: Example of an editorially curated carousel on the Web. Right: Carousels on the iOS app.</em></figcaption></figure><p id="82a8" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">Other carousels are powered by algorithmic recommendations; for example the <strong class="oa gs">We Think You’ll Love</strong> carousel recommends recipes based on what users have engaged with in the past.</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div class="nf ng ow"><picture><img alt="" class="bg ns nt c" width="616" height="1044" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="7428" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">In this post, we’ll focus on how we use machine learning algorithms to deliver recipe recommendations for our users. Different algorithms serve different user needs, and we’ll walk through a few examples of how we apply different algorithms across The New York Times Cooking website and mobile app.</p><p id="ad5d" class="pw-post-body-paragraph ny nz gr oa b hp pt oc od hs pu of og oh pv oj ok ol pw on oo op px or os ot gk bj">First, we need to define a poolof eligible content to recommend to users. Pools can be manually curated by editors or can be generated via a query of our recipe database, using a set of rules we determine for each recommendation carousel. Next, we use an algorithm to rankthe items in that pool according to a ranking algorithm that we define. This ranking algorithm can be as simple as ordering recipes by popularity, but we can also use <a class="af pz" href="https://en.wikipedia.org/wiki/Reinforcement_learning" rel="noopener ugc nofollow" target="_blank">reinforcement learning methods</a> or natural language processing techniques. Let’s go into a few different ranking algorithms that we use to power some of our different carousels, each of which fulfills a different user need.</p><p id="7d74" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj"><strong class="oa gs">Recipe Recirculation</strong></p><p id="43ff" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">One tool we often use in our ranking algorithms is text embedding. Embeddings are structured numeric representations of words or documents that enable us to use text as input to machine learning models. Once we represent our recipes as fixed-length vector embeddings, we can take the distance between the vector embeddings for any pair of recipes as a measurement of how similar the recipes are to each other. For example, if we were representing these three recipes as a length-2 vector embedding, we can plot them in 2 dimensions and get an idea of how “far apart” the recipes are:</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div role="button" tabindex="0" class="no np fg nq bg nr nf ng qa"><picture><img alt="" class="bg ns nt c" width="700" height="386" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="9a8b" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">In practice, these embeddings encompass more than just two values, allowing them to capture the multifaceted nuances of recipes. We use several different parts of the recipe text to generate these embeddings: the title, the description, the ingredients, and the cooking steps.</p><p id="84a3" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">We’ve experimented with many different methods for embedding recipes. Recently, we upgraded our recipe embeddings to use a pre-trained sentence transformer model that is optimal for measuring similarity between two pieces of text. These models are easy to use, fast to score, and most importantly, outperform other embedding methods in our experiments in terms of engagement with our content.</p><p id="0276" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">We use these embeddings directly on the <strong class="oa gs">Similar Recipes</strong> ribbon (pictured below),a recirculation module that appears below the recipe steps. It directs users to recipes that are similar to the one that they are currently viewing.</p><p id="07e2" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">Once we generate embeddings for all the recipes we want to consider for the carousel, we compute the similarity to every other recipe in the catalog using a metric called <a class="af pz" href="https://en.wikipedia.org/wiki/Cosine_similarity" rel="noopener ugc nofollow" target="_blank">cosine similarity</a>. The cosine similarity varies from -1 to 1, where a number closer to 1 means the recipes are more similar. We can then sort all the recipes by cosine similarity to find the ones that are most similar. On this carousel, we use a weighted combination of the similarity and number of page views recipes have recently received, so the top recipes shown are both similar to the current recipe and fairly popular.</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div role="button" tabindex="0" class="no np fg nq bg nr nf ng qb"><picture><img alt="" class="bg ns nt c" width="700" height="98" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nu fc nv nf ng nw nx be b bf z dt"><em class="ov">Recirculation ribbon for</em> <a class="af pz" href="https://cooking.nytimes.com/recipes/1023336-stone-fruit-caprese" rel="noopener ugc nofollow" target="_blank"><em class="ov">Stone Fruit Caprese Salad</em></a></figcaption></figure><p id="4033" class="pw-post-body-paragraph ny nz gr oa b hp pt oc od hs pu of og oh pv oj ok ol pw on oo op px or os ot gk bj">The model we use to power the majority of our algorithmic carousels is a contextual multi-armed banditalgorithm. As a quick recap (see our previous <a class="af pz" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/how-the-new-york-times-is-experimenting-with-recommendation-algorithms-562f78624d26">blog post</a> for more information), a bandit is a reinforcement learning algorithm that suggests the best decision (i.e., an article or recipe) among a list of options (in our case, a pool of content that’s eligible to be recommended in a certain location) in order to maximize a reward. We use a modified version of a model that predicts the “reward” (in our case, a user clicking on a piece of recommended content) of showing a particular article or recipe to a user as a linear combination of contextual features plus a term that estimates the uncertainty of the prediction. The bandit balances exploitingknown high-CTR content with exploringnew content, and over time it learns what recommendations to make in order to optimize reader engagement. We have made several modifications to the bandit algorithm that we’re using, including introducing stochasticity and “forgetfulness” to ensure we can model changes in article and recipe CTR over time. Through experimentation, we determined that these model updates improved reader engagement and recommendation freshness.</p><p id="4f4a" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">A bandit with no contextual features will typically recommend the most engaging articles or recipes to all users. This is the algorithm that we currently use to power the <strong class="oa gs">Most Popular This Week</strong> carousel on the mobile app and the web (pictured below). The pool consists of the recipes that received the most pageviews over the last week. This allows us to show the recipes that have been most popular recently and order them efficiently in terms of what will drive the most engagement on the carousel.</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div class="nf ng qc"><picture><img alt="" class="bg ns nt c" width="694" height="518" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="2a48" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">We also have the ability to add features to our bandits to help them learn what content will likely result in a click. One contextual feature we use frequently is something we’ll call the personalization feature, which tells us how similar a recommendation candidate is to the recipes a user has engaged with in the past. To create this feature, we first calculate embeddings for all our recipes using a sentence transformer model, as described above. Then, we use prior engagement data to generate user vectorsfor each of our users. In our case, we have chosen recipe saves as a strong indication of a user’s interest in a recipe, since a user saves a recipe if they intend to cook it or return to it later. For a given user, we take all of the recipes that they have saved, get the embeddings of those recipes, and average them pointwise to create a user history vector. Then, we can measure what recipes are closest to that user history vector according to cosine similarity. We use the cosine similarity score as a contextual feature in the bandit and let it learn how much weight to give the feature as a predictor of clicks.</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div role="button" tabindex="0" class="no np fg nq bg nr nf ng qd"><picture><img alt="" class="bg ns nt c" width="700" height="506" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nu fc nv nf ng nw nx be b bf z dt"><em class="ov">For a user (yellow smiley face) who has saved the 3 red dots, we can find their average user history vector (yellow dot) and recommend the Cucumber Salad over the Roast Chicken recipe.</em></figcaption></figure><p id="6bd0" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">When we first tested this bandit personalization feature on the <strong class="oa gs">We Think You’ll Love</strong> carousel, we realized that the same popularrecipes tended to be recommended to the majority of users. In other words, the bandit was not paying as much attention to each individual user’s preferences as much as we’d like for a carousel that’s explicitly personalized. To ensure that our recommendations were aligned with the business goals for this carousel, we decided to make a modification to the bandit reward. Instead of rewarding the bandit on every click it got equally, we rewarded it more if it got a click <em class="py">and</em> the recipe was similar to recipes the user had engaged with in the past. Modifying the reward increased the diversity of the recipes we were showing between users and resulted in more personalized recommendations. We have found via experimentation that a bandit with this personalized reward drove more engagement than our previous approach, which involved ranking recipes based purely on the similarity between candidate recipes and a user’s saved recipes.</p><p id="20b7" class="pw-post-body-paragraph ny nz gr oa b hp pt oc od hs pu of og oh pv oj ok ol pw on oo op px or os ot gk bj">Many users are interested in cooking recipes with ingredients that use produce that is seasonal to their areas. To meet this need, we developed a seasonality score to match the seasonal ingredients in different regions in the US with the ingredients in our recipes and scored each recipe based on how seasonal it is in each region at each time of the year. The seasonality score is based on several factors, including the number of seasonal ingredients the recipe contains, the percentage of total ingredients that are seasonal, and whether the recipe contains ingredients that are newlyin season.</p><p id="85ca" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">This method of ranking recipes by seasonality allows us to build pools of recipes that are locally seasonal in different regions of the US. Instead of just ranking by the seasonality score, we use a bandit on top of the seasonal pool in order to optimize engagement within that locally seasonal pool of recipes.</p><p id="f800" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">This algorithm is what powers the <strong class="oa gs">In Season Near You</strong> carouselon the personalized homepage (pictured below).</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div class="nf ng qe"><picture><img alt="" class="bg ns nt c" width="674" height="512" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="f7ce" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">Finally, let’s cover dietary needs and preferences. Dietary preferences are a huge aspect of recipe personalization: Users want their New York Times Cooking app to cater to their specific dietary needs. We don’t currently collect data from users on their explicit dietary preferences, so instead we use signals about their preferences based on their activity within the product so we can more effectively provide the personalized recommendations people expect. In the new, more personalized homepage, we introduced <strong class="oa gs">Dietary Preference</strong> carousels (pictured below).</p><p id="265f" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">When our recipe developers and editors create a recipe, they tag it with a variety of tags, including cuisine, main ingredients, and whether it adheres to a specific diet. The dietary preference carousels use contextual bandits to recommend a set of the most popular diet-tagged (in particular, vegetarian, vegan, dairy-free, or gluten-free) recipes for users. These carousels only appear if the users have saved to their recipe box a certain number of those diet-tagged recipes.</p><figure class="ni nj nk nl nm nn nf ng paragraph-image"><div role="button" tabindex="0" class="no np fg nq bg nr nf ng qf"><picture><img alt="" class="bg ns nt c" width="700" height="509" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="c6e0" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">Another way that we’ve used dietary preferences is as a contextual feature in our bandits. This is a feature we’ve introduced recently to the <strong class="oa gs">We Think You’ll Love</strong> carousel. To create this feature, we first count how many recipes are of a particular diet in a user’s saved recipes. We then construct a vector with these counts and normalize them:</p><pre class="ni nj nk nl nm qg qh qi bo qj ba bj"># [vegetarian, vegan, gluten-free, dairy-free]# For user “Jane”: diet_vector_counts = [10, 5, 5, 0]diet_vector_normalized = [0.5, 0.25, 0.25, 0]</pre><p id="6378" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">The bandit feature is the cosine similarity between this dietary preference vector and a vector of the recipe’s diet tags. So for a vegetarian recipe, the recipe diet tag vector is:</p><pre class="ni nj nk nl nm qg qh qi bo qj ba bj">recipe_diet_vector = [1, 0, 0, 0]</pre><p id="8635" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">And the feature that the bandit would use to predict whether or not user Jane clicks on this particular vegetarian recipe is ~0.82. Adding this contextual feature about diet tag similarity enables the bandit to make recipe recommendations that are more in line with users’ implicit dietary preferences.</p><p id="76bf" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">These were just a couple of examples of how we’re improving our recipe recommendations to better meet reader needs. As we learn more about our users’ preferences, we are continuing to refine our algorithms to improve the personalization within The New York Times Cooking app, working closely with our newsroom editors to ensure that we are always bringing our users a curated, enjoyable Cooking experience.</p><p id="5f0b" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj">Happy Cooking!</p></div><div class="gk gl gm gn go ab ca ch bg fw fx fy fz"><p id="2a70" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj"><em class="py">Kyelee Fitts is a former Senior Data Scientist on the Algorithmic Recommendations team at The New York Times, and she is currently a data scientist at Google. Outside of work, Kyelee likes to dance, travel, and cook.</em></p><p id="2ea1" class="pw-post-body-paragraph ny nz gr oa b hp ob oc od hs oe of og oh oi oj ok ol om on oo op oq or os ot gk bj"><em class="py">Celia Eddy is a Lead Data Scientist on the Algorithmic Recommendations team at the New York Times. Outside of work, Celia enjoys board games, reading, and watercolor painting.</em></p></div>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-cooking-team-makes-personalized-recipe-recommendations-7b86df9b22ec</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-cooking-team-makes-personalized-recipe-recommendations-7b86df9b22ec</guid>
      <pubDate>Fri, 13 Oct 2023 18:14:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[A Week in the Life of a Team during The New York Times Annual Hackathon]]></title>
      <description><![CDATA[<div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><div class=""><h2 id="9228" class="pw-subtitle-paragraph hn gp gq be b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic cp dt"><em class="id">A team of engineers and product leads led by software engineer,</em> <a class="af ie" href="https://www.linkedin.com/in/helen-dempsey/" rel="noopener ugc nofollow" target="_blank"><em class="id">Helen Dempsey</em></a><em class="id">, reimagine a new way of reading The New York Times with Vision Pro during The New York Times annual hackathon, called Maker Week.</em></h2></div><figure class="nk nl nm nn no np nh ni paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt nh ni nj"><picture><img alt="" class="bg nu nv c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="nw nx ny nh ni nz oa be b bf z dt">Illustration by Andrew Haener</figcaption></figure><h2 id="2b38" class="ob oc gq be od oe of dx og oh oi dz oj ok ol om on oo op oq or os ot ou ov ow bj">Every year, The New York Times hosts an annual hackathon event called Maker Week. Technology teams, across engineering, product, design, data and insights and cyber technology, have the opportunity to unleash their creativity and work together to explore new products, ideas, and technologies.</h2><h2 id="d20b" class="ob oc gq be od oe of dx og oh oi dz oj ok ol om on oo op oq or os ot ou ov ow bj">It is a chance for Times employees to collaborate with their colleagues, either within their immediate teams or cross functionally, to build an app, tool, analysis, business plan, or anything else. Additionally, teams host peer-to-peer talks and interactive workshops focused on hot topics throughout the week, such as Generative AI, Data Visualizations, and Engineering hacks, just to name a few.</h2></div><div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><p id="4e98" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">Monday, July 17, 2023 — Forming a Team and an Idea</strong></p><p id="e439" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">10 a.m.</strong></p><p id="8be3" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">It’s day one of Maker Week! I headed up to the 15th floor to grab a Maker Week t-shirt and to meet with <a class="af ie" href="https://www.linkedin.com/in/ziyun-liang-a6333884/" rel="noopener ugc nofollow" target="_blank">Lindsey Liang</a>, a lead product designer on the Ad Experience team.</p><p id="781e" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">Noon</strong></p><p id="fe16" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Lindsey and I attended the Maker Week kickoff together at the 15th floor Conference Center. Our project got a mention in the hackathon kick off, which led <a class="af ie" href="https://www.linkedin.com/in/paulbonneville/" rel="noopener ugc nofollow" target="_blank">Paul Bonneville</a>, a staff iOS engineer on the Newsreader team, to join our project team! We then met with the rest of our teammates — <a class="af ie" href="https://www.linkedin.com/in/evankirkiles/" rel="noopener ugc nofollow" target="_blank">Evan Kirkiles</a>, an intern on the Engineering team, and <a class="af ie" href="https://www.linkedin.com/in/lord-crawford/" rel="noopener ugc nofollow" target="_blank">Lord Crawford</a>, an associate product manager for Advertising Experience. The four of us broke the ice with lunch!</p><p id="00ae" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">2 p.m.</strong></p><p id="4914" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We all gathered in a conference room along with <a class="af ie" href="https://www.linkedin.com/in/denise-wang/" rel="noopener ugc nofollow" target="_blank">Denise Wang</a>, a Software engineer on our Reader Experience team as well as <a class="af ie" href="https://www.linkedin.com/in/jasonthong/" rel="noopener ugc nofollow" target="_blank">Jason Thong</a>, a product manager in Advertising. We gave brief intros, and I talked about where I got my inspiration for the project. Earlier this year, I got to attend Apple’s 2023 Worldwide Developer Conference, where I witnessed the announcement of the Vision Pro in person. As they showcased the <a class="af ie" href="https://www.apple.com/apple-vision-pro/" rel="noopener ugc nofollow" target="_blank">new technology</a>, I imagined what The New York Times reading experience could be like and I figured Maker Week would be a great time to experiment. We then brainstormed the ideal Vision Pro experience, before finally defining what our goals and practical MVPs (minimum viable products) would be.</p><p id="4411" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We settled on three ideas:</p><ol class=""><li id="d70b" class="pf pg gq ph b ho pi pj pk hr pl pm pn py po pp pq pz pr ps pt qa pu pv pw px qb qc qd bj">Render a 3-D model from an Interactive article in an XR (Extended Reality) space</li>
<li id="27f0" class="pf pg gq ph b ho qe pj pk hr qf pm pn py qg pp pq pz qh ps pt qa qi pv pw px qb qc qd bj">Create an immersive space for the user to see and interact with the model</li>
<li id="e171" class="pf pg gq ph b ho qe pj pk hr qf pm pn py qg pp pq pz qh ps pt qa qi pv pw px qb qc qd bj">Improve the experience for users of the New York Times app in Vision Pro.</li>
</ol><p id="679d" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">The first concept was the easiest to implement so we agreed to start there. We quickly divided up tasks and responsibilities based on individual strengths and scheduled a regroup in the morning.</p><p id="8ef0" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">2:30 p.m.</strong></p><p id="4476" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">The first idea required embedding a link of the 3-D model from <a class="af ie" href="https://www.nytimes.com/interactive/2023/06/21/us/titanic-submersible-titan-3d-model.html" rel="noopener ugc nofollow" target="_blank">this article</a> in its code. This would make the 3-D model clickable and allow it to render in your real-world space as an AR object. We would need to add only about 2–3 lines of code, but first we had to locate the source file. We spent the rest of our day downloading the necessary software and getting access to codebases.</p><figure class="nk nl nm nn no np nh ni paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt nh ni qj"><picture><img alt="" class="bg nu nv c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="6712" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">5 p.m.</strong></p><p id="63a3" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Although we didn’t have the source code, we decided to call it a day. I decided to work a bit more at home, hoping I could find the code by inspecting the webpage in more detail. I experimented with some formatting options but everything I tried gave me an error code, so I decided to debrief with my teammates tomorrow.</p></div><div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><p id="1fd6" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">Tuesday, July 18 — Getting Technical</strong></p><p id="d7b4" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">10 a.m.</strong></p><p id="5396" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Lindsey, Lord, Evan, Jason and I regrouped so we could sync with Paul. We also got a new member — <a class="af ie" href="https://www.linkedin.com/in/hyunsookim2/" rel="noopener ugc nofollow" target="_blank">Madeline Kim</a>, an iOS engineer — to join us! Knowing her expertise, I had been bugging Madeline to join our project for weeks. My persistence paid off!</p><p id="8bb4" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We talked through our technical issues with Paul, and he suggested we explore what an immersive experience viewing videos in an article could look like. We all thought that was a good idea, so we pivoted!</p><figure class="nk nl nm nn no np nh ni paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt nh ni qj"><picture><img alt="" class="bg nu nv c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="09ef" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">12:45 p.m.</strong></p><p id="5191" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">After lunch, Evan and I talked through the issue with the 3-D object not rendering and ultimately decided to scrap the HTML route after discovering that visionOS did not support this Apple feature. We pivoted to an idea that had initially been a stretch goal — recreating the NYT interface as its own visionOS app, with full support for immersive, XR-only features.</p><p id="c081" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Evan and Paul got to work fleshing out the functionality of the visionOS NYT interface itself — wrapping our web platform in native Apple containers. We quickly realized that, while having many individual windows open at once looks great from a design perspective, it is difficult to manage in practice on the current visionOS beta. We ultimately settled on just two scoped windows: a “navigation” window with high-level pages of The Times, and an “article” window where you can cycle through articles intuitively.</p><p id="aca1" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">The rest of us focused on the “immersives,” unique experiences linked to articles that extended reality beyond the current visionOS reader. I tried to render the 3-D object with the help of Evan’s button. Madeline and Lindsey reviewed the feasibility of the immersive scene in this time frame. They decided to play an article video on full screen with text overlay, and use the bamboo image as the immersive background. Madeline started building out this scene while we all were constantly referencing the new SwiftUI documentation for visionOS, which was scarce.</p><figure class="nk nl nm nn no np nh ni paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt nh ni qk"><picture><img alt="" class="bg nu nv c" width="700" height="934" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="babe" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">4:30 p.m.</strong></p><p id="89f6" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">The engineers ended early and went to the happy hour. We had made a large amount of progress, and were all feeling good!</p><p id="0b88" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">7:30 p.m.</strong></p><p id="6969" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">I wanted to help out with Madeline’s work, so I played around with adding a dummy immersive scene to her VideoView. We didn’t like how the SwiftUI warped the image, so I spent most of the evening trying to mock Lindsey’s immersive panoramic image design.</p></div><div class="gj gk gl gm gn"><div class="ab ca ch bg fv fw fx fy"><p id="6e69" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">Wednesday, July 19 — Pivoting Direction</strong></p><p id="4457" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">10 a.m.</strong></p><p id="bdce" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">While most of the team attended a breakfast, Evan and I attended a coffee tasting event hosted by one of our many Employee Resource Groups, Young Professionals Network. There were five types of coffee labeled A to E. Participants were to blind-taste test each of them and then vote on their most to least favorite. Coffee C won, which turned out to be Starbucks, but personally my favorite was B, which was coffee from a local café. Evan’s was A, which was revealed to be Dunkin’.</p><p id="075e" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">11 a.m.</strong></p><p id="0209" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We regrouped on final action items. Madeline achieved an immersive view for <a class="af ie" href="https://www.nytimes.com/interactive/2023/travel/52-places-travel-2023.html" rel="noopener ugc nofollow" target="_blank">this article</a> and was able to create a VideoView to play in the simulator. Lindsey experimented with the possibility of rendering a globe, so that users could interact with the locations featured in a simulated space. Meanwhile, Evan worked on User Interface (UI) enhancements, and refactored much of the codebase with an improved understanding about <a class="af ie" href="https://developer.apple.com/xcode/swiftui/" rel="noopener ugc nofollow" target="_blank">SwiftUI</a> design patterns. This led to an issue that ran deeper than unoptimized code — and thus began our list of visionOS beta bugs.</p><p id="caa0" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">1 p.m.</strong></p><p id="7e45" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">After lunch, it was crunch time. As we prepped for our presentation, which was scheduled for Friday morning, our team felt very much like a start-up.</p><p id="bde5" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">5 p.m.</strong></p><p id="e1b1" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Some of us reset with additional social events, organized by the hackathon planning team, and agreed to get back on later in the evening.</p><p id="7ef9" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">11 p.m.</strong></p><p id="c7d6" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">I ended up diverging from the original MVP design for the 3-D model and implementing something similar to one of Apple’s tutorials, in which the model appears next to the article text. I figured this would be easier because I could also copy how they made the model interactive.</p><p id="b0e6" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">Thursday, July 20 — Tackling Roadblocks</strong></p><p id="3772" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">11 a.m.</strong></p><p id="5397" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We started a little late today, but we went over leftover code, possible demo recordings from the Xcode simulator and what we may need to rely on mockups for. Lord asked if there was time to render a 3-D model in a user’s physical space, so I spent the morning working on that.</p><p id="6d30" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">2 p.m.</strong></p><p id="7a79" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">After lunch, we had one last sync with Paul. Overall, we felt like we were in a good place for tomorrow, and excited to be near the finish line.</p><figure class="nk nl nm nn no np nh ni paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt nh ni qj"><picture><img alt="" class="bg nu nv c" width="700" height="461" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="6d5d" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">3 p.m.</strong></p><p id="7175" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We reverted to the original 3-D model concept design. The article and model rendered together, but the submersible was rendering strangely under the couch! I spent a solid hour trying to figure out how to move it to the middle of the room with different commands. Evan, meanwhile, made navigation design changes that implemented our own custom containers. Madeline added the 3-D model of the globe into the VideoView. She was having some difficulties maneuvering it on the screen. With Lindsey’s guidance, we removed the 3-D globe and the title of the article to provide a focused experience of the immersive video. Lord, Lindsey and Jason continued putting the presentation slides together, adding images and placeholder content.</p><p id="286d" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">6:30 p.m.</strong></p><p id="f951" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">We finally went home prepared to work into the night (see energy drinks). I was trying to figure out how to time the presentation perfectly; I recorded the first demo, but my computer crashed before I could record the rest.</p></div><div class="np ab ca ql qm qn qo qp qq ce qr cf qs ch bg nk nl nm nn no ab ll"><figure class="mj np qt qu qv qw qx paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt"><picture><img alt="" class="bg nu nv c" width="484" height="1204" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><figure class="mj np qy qu qv qw qx paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt"><picture><img alt="" class="bg nu nv c" width="517" height="1125" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure></div></div><div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><p id="8e87" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">Friday, July 21 — Adding Final Touches and Presentation!</strong></p><p id="ac54" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">6 a.m.</strong></p><p id="d3f0" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">I woke up a little early so that I could record the second and third demos, as well as finish typing out my presentation notes.</p><p id="e2be" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">8 a.m.</strong></p><p id="135c" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Commuted over to the office, still typing out notes.</p><p id="3d7f" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">9 a.m.</strong></p><p id="0871" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Let my team know that I was still typing notes, while simultaneously talking through them.</p><p id="e396" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">9:45 a.m.</strong></p><p id="bcf3" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Finally finished writing out the notes! I made my way over to The Times Center, our biggest event venue and where the presentation ceremony would take place! Meanwhile Lord, Evan and Lindsey were making finishing touches to the slides.</p><p id="52a3" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">1 p.m.</strong></p><p id="ab7d" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">Presenting our project!</p><figure class="nk nl nm nn no np nh ni paragraph-image"><div role="button" tabindex="0" class="nq nr ff ns bg nt nh ni qj"><picture><img alt="" class="bg nu nv c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="0769" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj"><strong class="ph gr">2 p.m.</strong></p><p id="e44d" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">After the last presentation, Lord, Madeline, Evan and I got lunch, before finally parting ways. We were all relieved to be done, but felt that we accomplished a lot in a matter of days while also getting to know one another.</p><p id="a8f2" class="pw-post-body-paragraph pf pg gq ph b ho pi pj pk hr pl pm pn ok po pp pq oo pr ps pt os pu pv pw px gj bj">I’m very lucky and proud to have worked with such a great group of people who were willing to experiment and had such a vested interest in delivering a new way of reading our journalism. The project definitely stretched both our skills and our imaginations, giving us the space to collaborate and be creative. What an energizing week!</p></div>]]></description>
      <link>https://open.nytimes.com/a-week-in-the-life-of-a-team-during-the-new-york-times-annual-hackathon-91b793dc51ab</link>
      <guid>https://open.nytimes.com/a-week-in-the-life-of-a-team-during-the-new-york-times-annual-hackathon-91b793dc51ab</guid>
      <pubDate>Mon, 28 Aug 2023 22:19:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Estimation Isn’t for Everyone]]></title>
      <description><![CDATA[<div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><figure class="ng nh ni nj nk nl nd ne paragraph-image"><div role="button" tabindex="0" class="nm nn ff no bg np nd ne nf"><picture><img alt="" class="bg nq nr c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ns nt nu nd ne nv nw be b bf z dt">Illustration by <a class="af nx" href="https://anchenillustration.com/" rel="noopener ugc nofollow" target="_blank">An Chen</a></figcaption></figure><p id="3c6c" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj"><strong class="oa gr">By John Nevins and Eric Chima</strong></p><p id="5924" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">As an engineering manager, I once led a traditional Scrum team, living the mainstream Agile culture. We spent hours defining, refining, and estimating work so that we could feed it into our fine-tuned productivity machine. We were all veterans of Agile Scrum — so why did it seem like this machine wasn’t as fine-tuned as we thought?</p><p id="9b19" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">“Ro-sham-bo, throw!” our Scrum Master would shout, as fingertip estimates darted into the air. Inevitably, a few of those numbers would match, a few wouldn’t, and then the discussion would really kick off.</p><p id="8166" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">“That’ll take a week,” an astute engineer would offer.</p><p id="f534" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">“Ah-ah! That’s a measure of time and not complexity,” I would remind the group. We would then take time to recite the ethos of complexity points, before revisiting the all-too-familiar topic of developer capabilities as they related to the estimate. Back and forth we’d go, always talking about how we described the work, rather than the actual work itself.</p><p id="36cf" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">By the time one such session was complete, we had refined three user stories worth of work, totalling 13 points. We still needed another 10 points of work to make a full sprint at our average velocity. We agreed to meet again to be ready for Sprint Planning.</p><p id="5c6b" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">This whole process seemed very important, because these stories comprised a large body of work. It had elevated in profile enough that I needed to forecast a completion window for our stakeholders. The problem was, without knowing the estimate for each ticket, I had very little way of projecting a date without committing the team to an arbitrary deadline.</p><p id="70d5" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">I started to look at past performance data. We were on the Fibonacci system, measuring complexity by our <em class="ou">guts</em> at 1, 2, 3, 5, and 8 points. 13 was too big, and 21 was unforgivable. I looked at all of the stories that crossed the finish line in the six weeks prior, and saw that the average ticket was 4 points. That’s an abomination in a Fibonacci system, I know, but the numbers don’t lie, so I went with it. I put a <em class="ou">4</em> on every ticket in the Epic, added 20% for good measure, projected a date, and handed it over.</p><p id="1daf" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">We delivered within one week of my projection. And it wasn’t a fluke.</p><p id="3eae" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">We continued to shape our projects that way, and delivered consistently. It got me thinking about where we spend our time in the software development lifecycle.</p><p id="7c80" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">I really started to question the system.</p><p id="6dfe" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">I came back to the topic several years later, when my new team was struggling with velocity. It was the most senior team I had ever led, brimming with potential, but still we were stalled. We transitioned from Scrum to Kanban, trying to go lean, but the team was still spinning its wheels in meetings, debating the size of tasks we had never tried before. Refined work wasn’t making it into the “To Do” column fast enough. I couldn’t shake the sense that if we just put the time and effort we were spending on estimates into actually completing tasks, we would get a lot more done. When I suggested it to the team, I learned they felt the same way. We stopped estimating and never looked back.</p><p id="41fb" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">By the time 2022 rolled around, I was confident that estimations were a crutch that strong teams didn’t need anymore. As long as your engineers are skilled at breaking down problems — a key muscle for any Agile team — you can keep the work flowing. If a ticket takes too long, you can learn from it and break it down better next time. And if you need to do some long-term planning, well, all you need is a little math.</p><p id="731d" class="pw-post-body-paragraph ny nz gq oa b ho pr oc od hr ps of og oh pt oj ok ol pu on oo op pv or os ot gj bj">Since the <a class="af nx" href="https://agilemanifesto.org/" rel="noopener ugc nofollow" target="_blank">Agile Manifesto</a> was first signed back in the early 2000s, software teams have built upon new norms of working. At that point, they were no longer bound to the waterfall method of …</p><p id="7a9d" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">Requirements — Design — Implementation — Test (and fix!) — Deliver</p><p id="af8f" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">… but rather could hedge risk by fitting that entire cycle into two weeks. The struggle is real — I once worked on a waterfall-based team that operated on a one-year cycle, and that test phase really gets frantic when six months worth of work is supposed to function without issue.</p><p id="388b" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">Now, throughout the industry, software teams plan their calendar around the same familiar ceremonies: refine, estimate, plan, retro, and repeat. There’s a reason these processes are so commonplace: They keep teams organized and they get work done. But every hour spent in a ceremony is 2.5% of a developer’s work week gone. Gathering six people in a meeting works out to be surprisingly expensive, and most engineers would rather be doing the work than sitting on a videoconference talking about it. The cruft of ceremonies, discussions, and meetings has spawned a term — “metawork” — has <a class="af nx" href="https://www.urbandictionary.com/define.php?term=metawork" rel="noopener ugc nofollow" target="_blank">made its way to Urban Dictionary</a>.</p><p id="10e3" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">Eliminating estimations, then, isn’t about revolutionizing Agile. It’s about simplifying it. As Agile moves deeper into its 20s, methods that seemed groundbreaking in 2001 are familiar and easy now. Many developers have been breaking down work and iterating for their entire careers. If your team has been working together for a while, they should be used to cracking chunks of their problem space into manageable tickets. And once that problem has been solved, a few key metrics can track and even predict how quickly that work is finished.</p><p id="5fb7" class="pw-post-body-paragraph ny nz gq oa b ho pr oc od hr ps of og oh pt oj ok ol pu on oo op pv or os ot gj bj">We’ll come right out and say it: Velocity is still the single most important metric to your team. Traditionally, that’s tracked in terms of story points, but it doesn’t have to be. Velocity is simply a measure of throughput, so why not leverage your issue tracking system and track the number of work items you complete each week? If your team finishes six tickets per week, and they’re breaking down tickets well, that’s your velocity right there.</p><p id="d62e" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">“But wait,” you say. “Breaking down tickets isn’t perfect! Some of our stories are <em class="ou">8</em>s and some are <em class="ou">3</em>s!”</p><p id="38ad" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">Sure they are. But in the long run, they’ll all average, so why spend the time to debate each individual ticket? What matters most is the predictable output of the team, and that’s going to be the same regardless of the number you assign to the task. If you find your velocity fluctuating too much, that just means you need to get better at breaking down problems.</p><p id="490d" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">Let’s make the example more concrete: If 80% of your stories are 3s and the other 20% are 8s (as an example), on a backlog of 10 tickets, your average story size is <em class="ou">4</em>.</p><p id="99e6" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">If you put a <em class="ou">4</em> on every story, or ticket, you’ve still reflected the accuracy of the backlog on average. If you complete 20 points every 2 weeks, on an average story size of 4 points, you’re going to complete 10 story points every week, regardless of the relative size of the individual task.</p><p id="dd11" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">So, if you skip this whole exercise and put a <em class="ou">4</em> on each ticket, you’ve saved yourself the hassle. The number on each ticket is starting to feel less useful, right? Let’s just go ahead and delete it, because if your team has broken its work down efficiently, you don’t need it. Your velocity is now the number of tickets per week, or throughput.</p><p id="2f1a" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">If you’re worried that your team isn’t reducing its stories well enough, just turn to a concept from the Kanban method of Agile: Cycle Time. Track the time your stories spend between <em class="ou">In progress</em> and <em class="ou">Done</em> and you can tell how well you’re breaking down tickets. If the average cycle time of a task increases from, say, 36 hours to 7 or 10 days, use that as a catalyst for a conversation about work breakdown in those all important team retrospectives.</p><p id="d665" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">It’s important to note, though, that the throughput metric applies to <em class="ou">teams.</em> An <em class="ou">individual</em> does not complete a certain number of points per week. This is an important distinction, because you don’t want your developers to feel judged by the system, or to try to game it by engineering the tickets they take on. Remember, at the end of the day, it’s not about the number of story points or even the number of tickets, but rather getting real value in the hands of users. Velocity is a tool for planning projects, not a scorecard for evaluating employees.</p><p id="f83c" class="pw-post-body-paragraph ny nz gq oa b ho pr oc od hr ps of og oh pt oj ok ol pu on oo op pv or os ot gj bj">Story estimations and velocity measurements all boil down to one thing, right? At some point in a project, someone with a manager title (product, project, engineering or otherwise) is going to ask, <em class="ou">what is the level of effort?</em> Or, put more plainly, <em class="ou">how long is this going to take?</em></p><p id="e50c" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">In that sense, it’s easy to see why those manager types would lean on estimations. Precision feels better when you know you’re going to be judged on it, even if it’s the faux precision of story points. But you can plan a project just as easily using the hard data of your team’s past performance.</p><p id="5301" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">To start, calculate your team’s velocity. Say, for example, that your team has completed six tickets per week over the last six months. If you break down your new project, and see that it has 35 tickets, you can reasonably say that it will take about six weeks to complete. Then, you’ll want to add in a margin of error for phenomena like scope growth and debugging. You can base that buffer on your team and your experience with past projects. It might feel like a bit of a guess at first, but after you complete a few projects, you’ll learn just how much inflation tends to happen. It’s data, just like anything else.</p><p id="6080" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">Above all, this is an iterative process, just like everything in Agile. The more you do it, the better your data will be, and the more accurate your projections. As people join or leave the team, it might take a few cycles to refine your velocity again — but that happened with estimations, too. The important thing is that you can get better at it without any extra effort from your developers — they get to focus on the work.</p><p id="a2e7" class="pw-post-body-paragraph ny nz gq oa b ho pr oc od hr ps of og oh pt oj ok ol pu on oo op pv or os ot gj bj">Meta has dubbed 2023 the <a class="af nx" href="https://www.nytimes.com/2023/02/01/technology/meta-restructuring-charge.html" rel="noopener ugc nofollow" target="_blank">Year of Efficiency</a>, though for many of us it feels like we’ve been in the <em class="ou">Age of Efficiency</em> for a while now. As leaders of Agile teams, our role is to point engineers toward more of the work that matters and less of the work that doesn’t. Here at The Times, as a subscriber-based business, we have an obligation to our readers to ship meaningful value early and often. That extends from our newsrooms to our engineering teams, and we’ll embrace any approach that aids in that agenda. For some of our teams, eliminating estimations is a strategy that works.</p><p id="c5f8" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">With that in mind, we’ll admit that this method isn’t for everyone. If your team is still building the muscle for work breakdown, struggling with process discipline, or is new to Agile altogether (where have you been?), the traditional approach might still be best for you. And teams that work on very tight, week-to-week deadlines might find that they need a bit more precision than we’re suggesting.</p><p id="9723" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">But for most teams, we think, eliminating estimations will be an easy win. And even if your team isn’t ready quite yet, that doesn’t mean they can’t be soon. Agile is designed for iteration and experimentation. Give it a try and see how it goes, then make changes that work best for your team. We’re guessing you won’t have many engineers clamoring to get that meeting back on the calendar.</p><p id="e1a9" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj">We wish you all the best in your Agile adventures. And with that, we’re going to slide this post into the <em class="ou">Done</em> column.</p></div><div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><p id="706d" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj"><em class="ou">Eric Chima is a senior technical product manager for the Web Platforms team at The New YorkTimes. He has worked with Agile teams for thirteen years in web, IP telephony and virtual collaboration. His team stopped using estimations this year.</em></p><p id="866b" class="pw-post-body-paragraph ny nz gq oa b ho ob oc od hr oe of og oh oi oj ok ol om on oo op oq or os ot gj bj"><em class="ou">John Nevins is a Senior Engineering Manager who leads the GraphQL Platform team for The New York Times. Throughout his career, he has led software teams in a variety of industries and methods and considers himself a student of the evolving ways of working. He stopped using estimations with his teams years ago.</em></p></div>]]></description>
      <link>https://open.nytimes.com/estimation-isnt-for-everyone-a72484f88b27</link>
      <guid>https://open.nytimes.com/estimation-isnt-for-everyone-a72484f88b27</guid>
      <pubDate>Tue, 13 Jun 2023 15:24:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Day in the Life of a Senior Software Engineer on the Photo Publishing Team]]></title>
      <description><![CDATA[<div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><p id="9924" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">8:15 a.m.</strong></p><p id="2d42" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">I start off most mornings by taking my dog, Goose, to Prospect Park’s off-leash hours. It’s dog heaven!</p><figure class="pl pm pn po pp mz mr ms paragraph-image"><div class="mr ms pk"><picture><img alt="" class="bg ne nf c" width="514" height="680" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ng nh ni mr ms nj nk be b bf z dt">Goose and me at Prospect Park last fall</figcaption></figure><p id="b39a" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">9 a.m.</strong></p><p id="c6c1" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">When we get back from the park, I make myself coffee and do Spelling Bee and Wordle, my morning ritual.</p><p id="5ff2" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">9:15 a.m.</strong></p><p id="9012" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">I work from my apartment in Brooklyn, so I make my way over to my desk to get started for the day. I always check Slack and my emails first thing. I’m “on call” this week, so I also check our alerts Slack channel and the Loupe feedback tool channel to make sure everything is working as expected.</p><p id="d31b" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">I have an unusually meeting-heavy day today, so I have to manage my time well so that I still have room to work on my tickets (the tasks our larger projects are broken down into!). We launched Loupe* to the newsroom at the end of 2022, so we’re now iterating it and prioritizing work in response to user feedback. So much of the journalism we publish relies on visual storytelling through photos. Before Loupe, photo editors were working with a very old system that couldn’t keep up with the needs of a modern newsroom. Loupe is a much more resilient tool and was built to be compatible with newsroom workflows.</p><figure class="pl pm pn po pp mz mr ms paragraph-image"><div role="button" tabindex="0" class="na nb ff nc bg nd mr ms pq"><picture><img alt="" class="bg ne nf c" width="700" height="393" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ng nh ni mr ms nj nk be b bf z dt">Loupe, our in-house content management system that hosts the entire archive of Times photos</figcaption></figure><p id="4d20" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">We have a pretty active Slack channel with the photo editors who use Loupe, and it’s great to be able to communicate directly with our users. That’s one of the things I love about the Photo team. We also have bi-weekly demo meetings with our stakeholders to update them on any new features and get their feedback.</p><p id="f4de" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">We’re also tackling two other big projects right now: replacing the system used to manage photographers and photo assignments and migrating some of our systems off an in-house inventory and provisioning tool for organizing A.W.S. (Amazon Web Services) resources.</p><p id="34e5" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">10:15 a.m.</strong></p><p id="e099" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">We have standup* every morning with the whole team — engineers, designers and program managers. We go through our list of tickets, give updates, and commiserate about how long the new operating system upgrade is taking to complete on all of our computers.</p><p id="820a" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">My manager, Sherry Gao, shares pictures of her new baby on Slack! There are lots of emoji reactions.</p><p id="67b2" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">10:30 a.m.</strong></p><p id="34bc" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">It’s back to tickets for a while until my next meeting. (I first have to decide which Taylor Swift album I’ll listen to on repeat today. I’m going with “<a class="af pr" href="https://www.youtube.com/watch?v=Odh9ddPUkEY" rel="noopener ugc nofollow" target="_blank">Midnights</a>.”)</p><p id="fe44" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">Today, I’m working on a couple of tickets for our photo assignment replacement tool. I’m working on fetching all of the photographer assignments from our database to display in Loupe. I’m primarily a front-end engineer, so this ticket is getting me out of my comfort zone by working with our database. Our code goes through multiple stages of peer review, from writing it to releasing it. This way, we can be confident that by the time a feature gets released, there won’t be any unexpected issues.</p><p id="0866" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">Of course, we can’t anticipate everything, so we have robust automated alerts so we can be notified immediately if anything in our system is going awry. First, engineers review the code. Then Jenny Hottle, our designer, will do a visual Quality Assurance (Q.A.) check, and Shonta’ Singleton does Q.A. testing. Our product manager, Kate Harman, does a final product review, and then it’s good to go. It’s now ready to get deployed to production! Kate gives me the go-ahead.</p><p id="28b8" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">Now I have some time to review a couple of my teammates’ pull requests before my next meeting.</p><p id="960b" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">Noon</strong></p><p id="3fdb" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">I head to my design system working group meeting, where we talk about the launch of version two of the system, which includes a full conversion to TypeScript*. TypeScript is being widely adopted across The Times, because it makes for a more resilient application and a better developer experience. It was one of our most requested features. (P.S.: We successfully launched the following week and were met with lots of excitement across our engineering and product teams!)</p><p id="0b18" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">1 p.m.</strong></p><p id="1e5c" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">I join our bi-weekly “stack chat” meeting with the Photo engineers. It’s always an open agenda, so anyone can bring in a topic they want to discuss with the group, whether it’s directly related to in-flight tickets or a more general technical concept. This week, a senior software engineer, Sherman Hewitt, led a discussion about state management in Loupe, which we’re hoping will lead to a big simplification of parts of our codebase. We aim to balance building new features with making our existing code better.</p><p id="ef2a" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">2 p.m.</strong></p><p id="3fba" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">It’s a marathon day of meetings. This one is another working group, where we’re redesigning the data structures and algorithms portion of our technical interview process for new hires and replacing it with a code review-style format. Today, we aligned on themes around what types of skills we want to evaluate candidates for — collaboration was a big one.</p><p id="2ad1" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">3 p.m.</strong></p><p id="c33f" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">It’s been a while since I’ve taken a break, so I pause for a late lunch.</p><p id="f18b" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">5:20 p.m.</strong></p><p id="ab7d" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj">Time to wrap up for the day after working some more on my tickets for the last couple of hours. I have a little bit of time to unwind before I head to pottery class.</p><figure class="pl pm pn po pp mz mr ms paragraph-image"><div class="mr ms ps"><picture><img alt="" class="bg ne nf c" width="664" height="864" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="29ba" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><strong class="or gr">* What does it all mean?</strong></p><ul class=""><li id="7144" class="op oq gq or b os ot ou ov ow ox oy oz pt pa pb pc pu pd pe pf pv pg ph pi pj pw px py bj"><strong class="or gr">Loupe</strong>: The in-house content management system that hosts the entire archive of Times photos</li>
<li id="4c46" class="op oq gq or b os pz ou ov ow qa oy oz pt qb pb pc pu qc pe pf pv qd ph pi pj pw px py bj"><strong class="or gr">Standup</strong>: Part of agile development, a daily meeting at which the team gives status updates on in-flight work</li>
<li id="bf9a" class="op oq gq or b os pz ou ov ow qa oy oz pt qb pb pc pu qc pe pf pv qd ph pi pj pw px py bj"><strong class="or gr">Typescript:</strong> A programming language and extension of JavaScript that helps developers write more reliable and understandable code for building software applications</li>
</ul></div><div class="gj gk gl gm gn ab ca ch bg fv fw fx fy"><p id="10fb" class="pw-post-body-paragraph op oq gq or b os ot ou ov ow ox oy oz nu pa pb pc ny pd pe pf oc pg ph pi pj gj bj"><em class="qe">Editor’s note: After this was written, Gaby took an interim role as an engineering manager on a newly formed team. She plans to return to working as an engineer in July 2023.</em></p></div>]]></description>
      <link>https://open.nytimes.com/day-in-the-life-of-a-senior-software-engineer-on-the-photo-publishing-team-8227e5a41fb6</link>
      <guid>https://open.nytimes.com/day-in-the-life-of-a-senior-software-engineer-on-the-photo-publishing-team-8227e5a41fb6</guid>
      <pubDate>Tue, 30 May 2023 20:32:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Bringing Dark Mode to our News Apps]]></title>
      <description><![CDATA[<figure class="kd ke kf kg gt kh gh gi paragraph-image"><div role="button" tabindex="0" class="ki kj di kk bf kl gh gi kc"><picture><img alt="" class="bf km kn c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ko kp gj gh gi kq kr bd b be z dk">Illustration by Eve Liu</figcaption></figure><p id="a674" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi"><strong class="ku io">By Akasha Archer, Angelique De Castro, Audrey Valbuena, Danielle Zhu, Joseph Kohlmann, Kika Gilbert, Mark Murray, Nate Clancy, Rachel Dixon and Véronique Brossier</strong></p><p id="0aa4" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">The New York Times recently rolled out the long-awaited dark mode functionality for iOS and Android news apps.</p><p id="74a7" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">For years, the case for dark mode was well-supported by both our business goals and user requests. Launching dark mode would help us achieve our long-term vision of producing a high-quality product that is valuable and worth paying for. Furthermore, our research found that dark mode was identified as a “must-have” feature for both subscribers and non-subscribers, many of whom had been requesting the feature with our Customer Care team. We knew that as a content-forward app, having accessible ways of viewing New York Times journalism was important, and we wanted to consider the high standards of our brand when implementing this feature.</p><p id="6963" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">There was no denying dark mode was a priority feature we wanted to make happen for our in-app readers. But as our teams discovered early on, it was easier said than done. The path to dark mode meant two major challenges:</p><p id="ab73" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">First, creating a set of core colors to use for dark mode. And second, implementing those colors across platforms.</p><p id="8d38" class="pw-post-body-paragraph ks kt in ku b kv mg jo kx ky mh jr la lb mi ld le lf mj lh li lj mk ll lm ln ig bi">In late 2020, iOS engineers working on the News app team began investigating what it would take to introduce dark mode to the app and drafted a Request for Comment (RFC). They proposed an org-wide color library that would publish to independent libraries for each of the three relevant platforms: Android, iOS, and Hybrid Web.</p><p id="3a87" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">At the same time, a Design Systems team was organizing, with an early goal of building a design system for our editorial surfaces, including the News app. We realized the design system’s color tokens could be a key to unlocking dark mode implementation across platforms and teams.</p><p id="8c9c" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">The design system’s refreshed set of core color tokens would help to achieve greater consistency, more efficient workflows, and a heightened focus on accessibility. Prior to our design system work, there was little consistency related to color usage throughout our product. Without a core color system, different designers and engineers would ultimately end up using different sets of color values. As a result, users would be exposed to inconsistent colors as they moved through the experience.</p><p id="c25a" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">After conducting an extensive organization-wide audit, our design team worked to update our palette to a more intentional set of core colors, each with a specific target (e.g. for content, backgrounds, strokes) and a semantic name based on usage or hierarchy (e.g. primary, secondary, accent).</p><p id="47ee" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">Aside from other requirements we had for our color system, we wanted our colors to be capable of rendering in two different themes: light and dark. Therefore, each color really has two definitions, a light value and a dark value.</p><figure class="kd ke kf kg gt kh gh gi paragraph-image"><div role="button" tabindex="0" class="ki kj di kk bf kl gh gi ml"><picture><img alt="" class="bf km kn c" width="700" height="310" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ko kp gj gh gi kq kr bd b be z dk"><em class="mm">The light theme provides dark content colors for use on light backgrounds, and the dark theme provides light content colors for use on dark backgrounds.</em></figcaption></figure><p id="2e1c" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">When successful, attaching two different values to each semantic color means that a design system user can trust that the colors they use will convert as an entire group, and retain their intended hierarchical and contrast differences, regardless of theme.</p><p id="af3a" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">We also solved for a number of edge cases in which the theme we wanted to use wouldn’t be solely dependent on a user’s device setting. This means that when necessary, we can modify colors such that they render sections of a screen in the dark theme, even if a user is in light mode on their device.</p><p id="91c2" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">When we were finished defining and naming our colors, we published them in various libraries for our designers and engineers to start working with. Our color system will likely continue to evolve, but our current version enabled us to get to the next step of implementing dark mode.</p><figure class="kd ke kf kg gt kh gh gi paragraph-image"><div role="button" tabindex="0" class="ki kj di kk bf kl gh gi mn"><picture><img alt="" class="bf km kn c" width="700" height="222" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ko kp gj gh gi kq kr bd b be z dk"><em class="mm">The color palette defined in 2016 when the News app was created.</em></figcaption></figure><figure class="kd ke kf kg gt kh gh gi paragraph-image"><div role="button" tabindex="0" class="ki kj di kk bf kl gh gi mo"><picture><img alt="" class="bf km kn c" width="700" height="274" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ko kp gj gh gi kq kr bd b be z dk"><em class="mm">A piece of our simplified and more intentional color palette, with light and dark themes.</em></figcaption></figure><p id="8ae4" class="pw-post-body-paragraph ks kt in ku b kv mg jo kx ky mh jr la lb mi ld le lf mj lh li lj mk ll lm ln ig bi">The adaptation of dark mode was fairly straightforward in our iOS and Android native apps after standardizing our palette across our code base using the design system’s color tokens.</p><p id="ff42" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">However, our apps also adopt a hybrid approach to rendering, with a native shell and webview content. This allows us to more closely match the appearance of news content in-app and on nytimes.com, while also letting us iterate on news content design and features more quickly. Thus, much of what a reader sees in the app — story articles, live blogs, interactives, etc. — is a customized version of our main website.</p><p id="2a51" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">Thus, we encountered a paradox: To ship dark mode in our <em class="mp">native</em> apps, major parts of our <em class="mp">web</em> apps needed dark mode support.</p><figure class="kd ke kf kg gt kh gh gi paragraph-image"><div role="button" tabindex="0" class="ki kj di kk bf kl gh gi mq"><picture><img alt="" class="bf km kn c" width="700" height="741" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ko kp gj gh gi kq kr bd b be z dk"><em class="mm">Screenshots of the NYT iOS app’s Today tab and news article view in dark mode. The blue overlay shows which part of the screen is web content. In both screenshots, the blue overlay covers the screen from the status bar and top toolbar to the bottom toolbar.</em></figcaption></figure><p id="6ae6" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">Which parts of our web apps did we need to update for dark mode? To answer this question, the design systems team audited the colors we use in our web apps. We first looked all over the iOS and Android apps to broadly confirm which web content appears in-app. Then we built a custom source code search tool to find color values within the affected web apps. Then we identified equivalent color tokens for each color while also refining the search tool until its results were representative.</p><p id="5298" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">We found that migrating to dark mode compatible color tokens would ultimately span many codebases and teams. Thus, we put together a guide, which identified the existing colors and source files belonging to a given team, plus the recommended tokens to migrate to. We also beefed up our documentation, opened up Slack channels and scheduled open hours meetings to offer support and answer questions about the migration process.</p><p id="78d0" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">With all of the above in place, different teams across the technology organization began migrating to color tokens. Beyond color token implementation, we also worked with publishing platforms teams and the newsroom to come up with solutions for making graphics and interactive assets compatible for dark mode.</p><p id="bfb0" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">Before launching publicly, we released dark mode as an internal beta to give ourselves the opportunity to test, catch and fix any bugs, as well as get others in the organization familiar with dark mode.</p><figure class="kd ke kf kg gt kh gh gi paragraph-image"><div role="button" tabindex="0" class="ki kj di kk bf kl gh gi mr"><picture><img alt="" class="bf km kn c" width="700" height="553" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ko kp gj gh gi kq kr bd b be z dk"><em class="mm">The app in light mode (left) and dark mode (right).</em></figcaption></figure><p id="53ee" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">After launching to our users, the impact was immediate, and many readers wrote in thanking us for the feature. What started out as an initiative of one or two teams evolved into a massive effort across the technology organization and the newsroom, involving high collaboration between engineering, design, product, program management, product marketing and more.</p><p id="f17a" class="pw-post-body-paragraph ks kt in ku b kv kw jo kx ky kz jr la lb lc ld le lf lg lh li lj lk ll lm ln ig bi">Our design systems continue to evolve, and teams continue to build using our color tokens. We’ll also look to make improvements to the feature, ensuring teams on both the business and newsroom sides have the easiest way possible to make content dark mode compatible. Though dark mode is officially out to the public, behind the scenes, our teams continue to work towards making our NYT news apps the best possible experience for our users.</p>]]></description>
      <link>https://open.nytimes.com/bringing-dark-mode-to-our-news-apps-409266136ed4</link>
      <guid>https://open.nytimes.com/bringing-dark-mode-to-our-news-apps-409266136ed4</guid>
      <pubDate>Mon, 24 Apr 2023 17:48:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Day in the Life of a Senior Analyst in the Data and Insights Group]]></title>
      <description><![CDATA[<div class="ij ik il im in"><figure class="gl gn jo jp jq jr gh gi paragraph-image"><div role="button" tabindex="0" class="js jt di ju bf jv gh gi jn"><picture><img alt="" class="bf jw jx c" width="700" height="234" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="jy jz gj gh gi ka kb bd b be z dk">Illustration by Claire Merchlinsky</figcaption></figure><h2 id="9a5a" class="kc kd iq bd ke kf kg dn kh ki kj dp kk kl km kn ko kp kq kr ks kt ku kv kw kx bi">Natalia Bell is a senior analyst in the Data and Insights Group (DIG) supporting the Storytelling and Publishing mission, which aims to build a more dynamic, visual and trustworthy digital news report that transforms how our newsroom covers the news and our audience engages with us.</h2></div><div class="ij ik il im in"><p id="d9f0" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">6:30 a.m.</strong></p><p id="13e6" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">Good morning, Los Angeles! ☀️</p><figure class="ma mb mc md gt jr gh gi paragraph-image"><div role="button" tabindex="0" class="js jt di ju bf jv gh gi jn"><picture><img alt="" class="bf jw jx c" width="700" height="307" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="8ba9" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">My mornings start early as a remote worker on the West Coast. I like to ease into the day with a Flat White coffee and then I wander around the block with my Goldendoodle, Arlo. I really admire how he relishes the world around him — with a big inhale of morning dew and a lingering smell of bunnies who roamed the lawn in the night!</p><figure class="ma mb mc md gt jr gh gi paragraph-image"><div role="button" tabindex="0" class="js jt di ju bf jv gh gi me"><picture><img alt="" class="bf jw jx c" width="700" height="934" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="7761" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">7:30 a.m.</strong></p><p id="4a5a" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">Log on ? I don’t need a reason to read The New York Times, but I love that it’s my job to be acquainted with the top stories. Sometimes I’ll use “The Daily” or The Morning or the home page to guide me. Or, I’ll go right to the source (an internal perk haha) with Live Admin, our internal platform where we build live news. Through the Live product, the newsroom can break stories in real time, report on them as they evolve throughout the day, or directly from reporters on the ground wherever the news takes place. Last year’s <a class="ae mf" href="https://www.nytimes.com/live/2022/05/02/fashion/met-gala-2022" rel="noopener ugc nofollow" target="_blank">Met Gala</a> was one of my favorite Live coverage moments.</p><p id="4a87" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">9 a.m.</strong></p><p id="9b1d" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">My brilliant teammate Gillian Eigo and I check in with our manager. After some very productive dog talk (I need to stay briefed on Gillian’s dog, Nena’s, activities!), we discuss the week’s priorities and project updates. Today, we discussed a presentation we will preview with our product partners in the next meeting.</p><p id="1601" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">9:30 a.m.</strong></p><p id="6569" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">We meet with our product partners weekly to share work and make sure our priorities are in alignment with the team’s sprint goals. We have been working on a project to identify our most impactful behaviors to drive this year, and we’re ready to share our insights!</p><p id="8473" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">At my core, I am a storyteller. In this role, I really enjoy collecting a mix of information (like data, cross-team insights and enterprise goals) and reconciling it with a data story that inspires clarity and forward action. Hearing folks ask clarifying questions about our presentation makes me feel ? — like folks are following along and digesting our insights well. ?</p><figure class="ma mb mc md gt jr gh gi paragraph-image"><div role="button" tabindex="0" class="js jt di ju bf jv gh gi jn"><picture><img alt="" class="bf jw jx c" width="700" height="467" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="7ba8" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">10 a.m.</strong></p><p id="ab6a" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">Now, I’m starving! I make papas con huevos and Facetime my grandmother. Working remotely has enabled me to spend more time with my family. Over the holidays, I lived and worked from my family’s home, and my grandmother frequently made me breakfast tacos (yes, I was very pampered). Especially as my grandparents and parents age, these little moments — un cafecito, un taco, a word of encouragement or sharing the same space — mean so much to me. ♥️</p><figure class="ma mb mc md gt jr gh gi paragraph-image"><div role="button" tabindex="0" class="js jt di ju bf jv gh gi jn"><picture><img alt="" class="bf jw jx c" width="700" height="525" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="a18a" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">10:30 a.m.</strong></p><p id="4557" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">A long stretch of time to work independently. During this time, I address some of the feedback received earlier from the presentation and explore a few questions raised. It’s common to receive questions without clear answers from our curious partners. So, I take a beat to consider what information and tools we have accessible to speak to them.</p><p id="5e45" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">1 p.m.</strong></p><p id="9f79" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">Another meeting with our product partners! This time, they will be sharing recent trends and how experiments are performing. I enjoy this meeting because it prompts us to learn together, and I don’t need to prepare anything (haha). Instead, our partners use the tools and dashboards we built for them to explore and evaluate performance. I’m here more to listen, brainstorm ideas, and help with data interpretation.</p><p id="4ff8" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">While talking about a new feature, I’m reminded of how one of my tasks working in product analytics is the cross-functional collaboration with product managers, designers, engineers, researchers, editors and executives. So many people make the news report happen!</p><figure class="ma mb mc md gt jr gh gi paragraph-image"><div role="button" tabindex="0" class="js jt di ju bf jv gh gi me"><picture><img alt="" class="bf jw jx c" width="700" height="934" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="e548" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">1:30 p.m.</strong></p><p id="3430" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">Oh, hey, boss! I report to Arran Bardige, who leads data that informs newsroom and product leadership. His schedule is quite busy, but I admire how present he is to listen to what’s on my mind. Today, he suggested that I lead a workshop on presentational skills and storytelling for DIG. I block out time for that this week.</p><p id="5889" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">2 p.m.</strong></p><p id="8c27" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">I catch up on Slack threads by contributing things like data requirements, code reviews or discoveries from past projects. Naturally, I also brief myself on the latest in my favorite channels: #outdoorspeople, #dogsofnyt and #houseplants.</p><p id="78f3" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">3:15 p.m.</strong></p><p id="7409" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">Log off ⚪ Throughout the pandemic, it’s become a healthy practice for myself to consistently log off “on time,” and I’m glad my team supports that. It is also a way I try to demonstrate respect for my colleagues, many of whom are on the East Coast where it’s 6 p.m. Like many workplaces, we’re continually having conversations about working hours, when each of us works best and meeting the needs of demanding news moments. I greatly appreciate the ways my team is inclusive of me as a remote worker and the flexibility we extend to each other. I try to visit them in New York City at key moments and I look forward to seeing them soon!</p><p id="5533" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi">But for now — I’m off to a boxing class ? and then writing my screenplay ✒️!</p></div><div class="ij ik il im in"><p id="c37e" class="pw-post-body-paragraph lf lg iq lh b li mx lk ll lm my lo lp kl mz lr ls kp na lu lv kt nb lx ly lz ij bi">As you get to know more of your colleagues through the lens of a single day, you are bound to encounter terms, departments and strategies that are new to you. Here we hope to clear things up so you’ll know what your colleagues actually do and how it fits into our mission.</p><p id="bd38" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">Data and Insights Group</strong> — One of the departments within XFun, our technology and product organization.</p><p id="7704" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">Product Team</strong> — One of the departments within XFun, our technology and product organization. The Product team is responsible for helping to envision and build how our readers discover and consume our journalism across all platforms.</p><p id="aa3d" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">Sprint</strong> — A two-week-long effort by a team to accomplish a specific goal.</p><p id="fac5" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">Storytelling and Publishing mission</strong> — A dedicated team in XFun, our technology and product organization, which aims to build a more dynamic, visual and trustworthy digital news report that transforms how our newsroom covers the news and our audience engages with us.</p><p id="e225" class="pw-post-body-paragraph lf lg iq lh b li lj lk ll lm ln lo lp kl lq lr ls kp lt lu lv kt lw lx ly lz ij bi"><strong class="lh ir">XFun</strong> — Our technology and product organization, where we build all the features on our website, apps and the tools used to produce our journalism there.</p></div>]]></description>
      <link>https://open.nytimes.com/day-in-the-life-of-a-senior-analyst-in-the-data-and-insights-group-626c5e1e94f1</link>
      <guid>https://open.nytimes.com/day-in-the-life-of-a-senior-analyst-in-the-data-and-insights-group-626c5e1e94f1</guid>
      <pubDate>Mon, 20 Mar 2023 21:22:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Technical Takeaways from Building an Animated Image Carousel on The New York Times iOS Core News…]]></title>
      <description><![CDATA[<div class="ii ij ik il im"><p></p><h2 id="1e12" class="pw-subtitle-paragraph jm io ip bd b jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd dk">An in-depth look at how an animated image carousel was built to expose users to the breadth of NYT content.</h2><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div role="button" tabindex="0" class="kk kl di km bf kn gg gh ke"><picture><img alt="" class="bf ko kp c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">Illustration by <a class="ae ku" href="https://www.brianscagnelli.com/" rel="noopener ugc nofollow" target="_blank">Brian Scagnelli</a></figcaption></figure><p id="53b3" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">By Elizabeth Levosinski</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div class="gg gh lr"><picture><img alt="" class="bf ko kp c" width="304" height="648" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">iPhone version of the animated image carousel</figcaption></figure><p id="3af9" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">As an iOS developer at The New York Times, I’ve worked on building features using <a class="ae ku" href="https://developer.apple.com/documentation/swiftui/" rel="noopener ugc nofollow" target="_blank">SwiftUI</a>, Apple’s latest UI framework, in an ecosystem built with its original one, <a class="ae ku" href="https://developer.apple.com/documentation/uikit" rel="noopener ugc nofollow" target="_blank">UIKit</a>. Both of these frameworks are used to build iPhone, iPad and Apple TV applications.</p><p id="48b5" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Our team has turned to SwiftUI for building out new features because the framework allows a developer to build out features faster with less code. When it comes to implementing this framework, my colleagues and I are learning what it can support and what workarounds we need to build for our app’s needs.</p><p id="3d65" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Our team supports the Core News App, the flagship app of The New York Times, by continuing to build valuable new experiences and improve its technical quality for our users.</p><p id="2f74" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">For this post, I chose an animated carousel I built with SwiftUI in the News app to document my thought process and technical challenges I encountered along the way.</p><p id="e825" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Download this <a class="ae ku" href="https://github.com/nytimes/open-blog-projects" rel="noopener ugc nofollow" target="_blank">repo</a> with a simplified version of the carousel (located under “<strong class="kx iq">projects/carousel</strong>”) to give more context as I explain its functionality in pieces. The demo emulates some of the same layouts as the NYT carousel with images from: <a class="ae ku" href="https://placekitten.com/" rel="noopener ugc nofollow" target="_blank">https://placekitten.com/</a></p><p id="518e" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">CarouselView</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div class="gg gh lr"><picture><img alt="" class="bf ko kp c" width="304" height="648" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">The red outline above highlights the boundary ofthe TabView (carousel) feature that this article focuses on</figcaption></figure><p id="1a5c" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">CarouselView</strong> is a custom View that contains a TabView (the carousel) and initializes with the containing view’s size and paths to images. In the core news app, we use the TabView to showcase different news stories, including feature images from a story itself. The image above highlights the boundary of this feature.</p><p id="51ff" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Implementation of the CarouselView Inside CarouselView.swift:</strong></p><p id="6fe9" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">The <strong class="kx iq">pagesState</strong> property contains models for the TabView created from the image paths. It’s set when the view first appears using the <a class="ae ku" href="https://twitter.com/mecid/status/1380471693697806337" rel="noopener ugc nofollow" target="_blank">onFirstAppear</a> view modifier. In SwiftUI a “view modifier” is a modifier you can apply to a view which will return a completely different view (or views) based on the values in that modifier.</p><p id="1921" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Both <strong class="kx iq">@StateObject</strong> and <strong class="kx iq">@State</strong> property wrappers are used when a view owns the data. To keep track of the array of the TabView pages’ state I chose <strong class="kx iq">@StateObject</strong> instead of the <strong class="kx iq">@State</strong> property wrapper because the page data is an array of a more complex reference data type (Classes) vs a simpler value type like a <strong class="kx iq">String</strong> or a <strong class="kx iq">Bool</strong>.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">struct CarouselView: View {.../// Models for the pages@StateObjectprivate var pagesState = PagesState()....onFirstAppear {pagesState.models = createModels(from: pagesContent)}...}</pre><p id="5ef0" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Note: Added <strong class="kx iq">@MainActor</strong> to any <strong class="kx iq">ObservableObject</strong> classes to ensure that the code will be thread safe and run on the main dispatch queue.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">extension CarouselView {@MainActorfinal class PagesState: ObservableObject {@Publishedvar models = [CollagePageViewModel]()}}</pre><p id="83d3" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">TabView</strong></p><p id="1791" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">The TabView builds each page from the <strong class="kx iq">pagesState.models</strong> array. This allows for the data to render as To make a TabView a paginating carousel add <strong class="kx iq">tabViewStyle(.page).</strong></p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">struct CarouselView: View {...TabView(selection: $selectedIndex) {ForEach(pagesState.models, id: \.pageIndex) { viewModel inCollagePage(viewModel: viewModel, totalPages: pagesContent.count)}}.tabViewStyle(.page)...}</pre><p id="3ad5" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">selectedIndex property</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div class="gg gh lr"><picture><img alt="" class="bf ko kp c" width="304" height="648" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">The outline above highlights the selected index value whichis displayed to the user by the pagination dots.</figcaption></figure><p id="a65d" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">The selectedIndex is updated whenever a user swipes through the TabView. Visually, the selectedIndex value is displayed in the pagination. It’s an important part of the carousel’s state, as it also triggers animations on each carousel page.</p><p id="3c2c" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Subheading: Notes on using onAppear</strong></p><p id="805a" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Initially I used the <strong class="kx iq">onAppear</strong> method to detect when a TabView’s page was selected as I thought it would behave similarly to UIKit’s <strong class="kx iq">viewDidAppear</strong> method, which you can use to trigger logic when a view is added to a UITableViewController’s view hierarchy. However, after working with it and reading <a class="ae ku" href="https://developer.apple.com/documentation/charts/chart/onappear%28perform:%29" rel="noopener ugc nofollow" target="_blank">Apple’s documentation</a> which stated when <strong class="kx iq">onAppear</strong> is called can vary:</p><p id="b3c5" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">“The exact moment that SwiftUI calls this method depends on the specific view type that you apply it to, but the action closure completes before the first rendered frame appears.”</p><p id="5b4b" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">This was problematic as sometimes <strong class="kx iq">onAppear</strong> would be called before the page’s view was displayed, triggering our animations too early so the user would never see them. So while I still use <strong class="kx iq">onAppear</strong> in other instances to trigger logic for our UI, be cautious when using it as when it’s called it can be unpredictable.</p><p id="da09" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">onChange(of: windowSize)</strong></p><p id="796b" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">This ensures the carousel’s templates will be redrawn whenever the device’s windowSize updates (like when a user rotates an iPad) by updating the TabView view models each time.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">struct CarouselView: View {.../// The device's window sizeprivate let windowSize: CGSize....onChange(of: windowSize) { newWindowSize inpagesState.models = pagesState.models.map { model inmodel.windowSize = newWindowSizereturn model}}}</pre><p id="9215" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Templates for Multiple Layouts</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div role="button" tabindex="0" class="kk kl di km bf kn gg gh md"><picture><img alt="" class="bf ko kp c" width="700" height="303" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="3c71" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Our carousel needed to support several template layouts for iPhones and iPads in portrait mode and needed to be able to update to completely different layouts for iPads in landscape mode.</p><p id="9a6c" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Initially I placed images using HStacks and VStacks with position offsets. HStacks are SwiftUI views that arrange their subviews horizontally and VStacks arrange their subviews vertically. However, with this approach I was fighting against layout constraints and eventually refactored the templates to place images inside a ZStack instead.</p><p id="7fd4" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Inside CollagePage.swift:</strong></p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">...ZStack(alignment: .topLeading) {if !imagesLoaded.isEmpty {ForEach(Array(zip(viewModel.content.imagePaths.indices, viewModel.content.imagePaths)), id: \.0) { imageIndex, imagePath inlet imageLayout = CollageImageLayoutProvider(elementIndex: .init(rawValue: imageIndex) ?? .zero,elementCount: viewModel.content.imagePaths.count,isCompact: isCompact,isLandscape: isLandscape,windowSize: viewModel.windowSize)/// Is the current page the selected one or/// have the images already been loaded onceif (selectedIndex == pageIndex) || imagesLoaded.contains(true) {AsyncImageContainer(imagePath: imagePath, imageLoadedClosure: {imagesLoaded[imageIndex] = true}).positioned(with: imageLayout,isSelected: selectedIndex == pageIndex,isImageLoaded: imagesLoaded[imageIndex])}}}}...</pre><p id="ee21" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">To keep track of the loaded state of the AsyncImages, views for loading and displaying images asynchronously, I added a <strong class="kx iq">@State</strong> array object called <strong class="kx iq">imagesLoaded</strong>. To force the AsyncImages to not load prematurely in the TabView, I added logic to only load or display the AsyncImage if the page is currently selected or if the images have already been loaded once for that page. This solution forces the TabView to load its SwiftUI views more like the root views in UITableViewController’s <strong class="kx iq">viewDidAppear</strong> method, which I mentioned earlier.</p><p id="b395" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Reacting to Device orientation changes</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div role="button" tabindex="0" class="kk kl di km bf kn gg gh md"><picture><img alt="" class="bf ko kp c" width="700" height="331" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">iPad landscape and portrait orientations from the Newsreader app</figcaption></figure><p id="645c" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">When the <strong class="kx iq">onAppear</strong> method is called, the <strong class="kx iq">isLandscape</strong> property is set. This property is used in the template logic to determine the position of images in the various template versions. I’m also updating this property when a user rotates an iPad using the <a class="ae ku" href="https://www.hackingwithswift.com/quick-start/swiftui/how-to-detect-device-rotation" rel="noopener ugc nofollow" target="_blank"><strong class="kx iq">onRotate</strong></a> view modifier.</p><p id="1916" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Note: For this demo I used <a class="ae ku" href="https://fabisevi.ch/" rel="noopener ugc nofollow" target="_blank"><strong class="kx iq">AppOrientationDelegate</strong></a> to lock the iPhone orientation to portrait because in the Core News App we don’t support landscape mode.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">struct CollagePage: View {....onAppear {updateOrientationStatus(from: UIDevice.current.orientation)}.onRotate { orientation inupdateOrientationStatus(from: orientation)}/// A method that updates the 'isLandscape' state variable for determining portrait vs landscapeprivate func updateOrientationStatus(from orientation: UIDeviceOrientation) {isLandscape = orientation.isLandscape}}</pre><p id="2d3c" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Layouts Determined by Data</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div role="button" tabindex="0" class="kk kl di km bf kn gg gh md"><picture><img alt="" class="bf ko kp c" width="700" height="310" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="ab9d" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">The template a TabView page uses is determined by the number of images passed in inside the <strong class="kx iq">CollageImageLayoutProvider</strong> struct.</p><p id="3802" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Having the layout values change dynamically, based on the number of images, allows our code to be more reusable with a single source of truth rather than other solutions with more repeated SwiftUI view code. This also gave our designers more freedom to create many layout variations for this feature, that we could then update from a repo without having to create a new release.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">struct CollageImageLayoutProvider {private enum Kind {case singlecase triplecase quad}let elementIndex: ElementIndexlet elementCount: Intlet isCompact: Boollet isLandscape: Boollet windowSize: CGSizeenum ElementIndex: Int {case zero = 0, one, two, three}private var type: Kind {switch elementCount {case 1: return .singlecase 3: return .triplecase 4: return .quaddefault:return .single}}}</pre><p id="b766" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Below is an example of calculating an image’s offset for a three image template. Each image’s offset is determined by:</p><ul class=""><li id="0532" class="me mf ip kx b ky kz lb lc le mg li mh lm mi lq mj mk ml mm bi"><strong class="kx iq">Template type</strong> <strong class="kx iq">(number of images):</strong> .single, .triple, or <strong class="kx iq">.</strong>quad</li>
<li id="21c2" class="me mf ip kx b ky mn lb mo le mp li mq lm mr lq mj mk ml mm bi"><strong class="kx iq">isCompact</strong>: If the device is an iPhone</li>
<li id="30b7" class="me mf ip kx b ky mn lb mo le mp li mq lm mr lq mj mk ml mm bi"><strong class="kx iq">isLandscape</strong>: If the device’s orientation is landscape</li>
<li id="0603" class="me mf ip kx b ky mn lb mo le mp li mq lm mr lq mj mk ml mm bi"><strong class="kx iq">elementIndex</strong>: The image’s index in the array when passed in</li>
</ul><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">extension CollageImageLayoutProvider {.../// The x and y positions of each image in the templatesvar offset: CGSize {switch type {...case .triple:switch elementIndex {case .zero:if isCompact {return CGSize(width: 0,height: 0)} else if isLandscape {return CGSize(width: 0,height: (24 / iPadWidth) * windowHeight)} else {return CGSize(width: 0,height: (24 / iPadHeight) * windowHeight)}case .one:...}</pre><p id="2441" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">The offset property’s <strong class="kx iq">width</strong> and <strong class="kx iq">height</strong> values are then used for SwiftUI’s <strong class="kx iq">x</strong> and <strong class="kx iq">y</strong> offset values inside a custom view modifier called <strong class="kx iq">CollageImageModifier</strong>:</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">.offset(x: layout.offset.width,y: isAnimatingPosition ? layout.offset.height : (layout.offset.height + layout.verticalAnimationOffset))</pre><p id="62e6" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><strong class="kx iq">Image Animations</strong></p><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div class="gg gh lr"><picture><img alt="" class="bf ko kp c" width="304" height="648" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">iPhone version of the animated image carousel.</figcaption></figure><p id="0435" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Each template image is asynchronously loaded and then animated with the <strong class="kx iq">CollageImageModifier’s “positioned”</strong> extension method. You can see these animations in the GIF above. They are vertically animating the images up while also animating their opacity by fading them in. I’ll explain how these animations are built below.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">extension View {func positioned(with layout: CollageImageLayoutProvider,isSelected: Bool,isImageLoaded: Bool) -&gt; some View{modifier(CollageImageModifier(layout: layout,isSelected: isSelected,isImageLoaded: isImageLoaded))}}</pre><p id="7ea2" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">This view modifier gets its frame, offset, zIndex and animation values from the <strong class="kx iq">CollageImageLayoutProvider</strong> mentioned earlier:</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">private struct CollageImageModifier: ViewModifier {...func body(content: Content) -&gt; some View {content.frame(width: layout.frame.0.width,height: layout.frame.0.height,alignment: layout.frame.1).clipped().zIndex(layout.zIndex).opacity(isAnimatingOpacity ? 1 : layout.opacityValue).offset(x: layout.offset.width,y: isAnimatingPosition ? layout.offset.height : (layout.offset.height + layout.verticalAnimationOffset)).onChange(of: isSelected) { newSelectedValue in/// Animates the page images when the page is selected or deselectedimageAnimations(isAnimating: newSelectedValue)}.onChange(of: isImageLoaded) { isLoaded inif isLoaded {imageAnimations(isAnimating: true)}}}...}</pre><p id="99c9" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Above the <strong class="kx iq">isImageLoaded</strong> property triggers a fade in animation one time when the image first loads in the TabView. Watching for this change was necessary to ensure the animations didn’t fire too early.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">private struct CollageImageModifier: ViewModifier {....onChange(of: isImageLoaded) { isLoaded inif isLoaded {imageAnimations(isAnimating: true)}}...}</pre><p id="14d6" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Afterwards, every time a user swipes through the carousel, it updates the carousel’s <strong class="kx iq">isSelected</strong> property, which causes the <strong class="kx iq">onChange</strong> method to trigger a side effect for fading and vertical animations.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">private struct CollageImageModifier: ViewModifier {....onChange(of: isSelected) { newSelectedValue in/// Animates the page images when the page is selected or deselectedimageAnimations(isAnimating: newSelectedValue)}...}</pre><p id="d830" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">Below, the <strong class="kx iq">isAnimatingPosition</strong> and <strong class="kx iq">isAnimatingOpacity</strong> properties automatically animate the opacity and vertical positioning of the images because they are explicit animations. Explicit animations in SwiftUI are animations that react to specific state changes inside of the <strong class="kx iq">withAnimation</strong> function.</p><pre class="kf kg kh ki gs ls lt lu bn lv lw bi">private struct CollageImageModifier: ViewModifier {.../// This property changing is what 'animates' the opacity/// of the image in the carousel@Stateprivate var isAnimatingOpacity = false/// This property changing is what 'animates' the position/// of the image in the carousel@Stateprivate var isAnimatingPosition = false....opacity(isAnimatingOpacity ? 1 : layout.opacityValue).offset(x: layout.offset.width,y: isAnimatingPosition ? layout.offset.height : (layout.offset.height + layout.verticalAnimationOffset)).../// Animations for the image's opacity and vertical positioningprivate func imageAnimations(isAnimating: Bool) {let animationDelay = layout.animationDelaywithAnimation(Animation.linear(duration: layout.opacityAnimationDuration).delay(animationDelay)) {self.isAnimatingOpacity = isAnimating}withAnimation(Animation.linear(duration: layout.verticalAnimationDuration).delay(animationDelay)) {self.isAnimatingPosition = isAnimating}}}</pre><p id="e855" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi">These are some of the main takeaways with SwiftUI that I learned as an iOS developer working on the News Core App. From building this feature in particular, I learned when it’s appropriate to use certain SwiftUI property wrappers, how to create dynamic templates which update on device rotation and how to use view modifiers to animate views each time a TabView’s state changed. I hope people can take away some useful information to use in their own work. Happy coding!</p></div><div class="ii ij ik il im"><p id="70c7" class="pw-post-body-paragraph kv kw ip kx b ky kz jq la lb lc jt ld le lf lg lh li lj lk ll lm ln lo lp lq ii bi"><em class="mz">Elizabeth Levosinski is an iOS engineer for The New York Times. Her team maintains and develops new features for the Core News App to ensure users have an optimal native experience. Prior to her current role, she worked as an iOS developer, front-end developer and designer in different digital agencies.</em></p></div>]]></description>
      <link>https://open.nytimes.com/technical-takeaways-from-building-an-animated-image-carousel-on-the-new-york-times-ios-core-news-3819934af625</link>
      <guid>https://open.nytimes.com/technical-takeaways-from-building-an-animated-image-carousel-on-the-new-york-times-ios-core-news-3819934af625</guid>
      <pubDate>Fri, 24 Feb 2023 22:33:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Making Reporting Effortless, Especially for Security Researchers]]></title>
      <description><![CDATA[<div class="ii ij ik il im"><p></p><h2 id="b379" class="pw-subtitle-paragraph jm io ip bd b jn jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd dk">Improving visibility of our responsible disclosure program through implementation of the security.txt standard.</h2><figure class="kf kg kh ki gs kj gg gh paragraph-image"><div role="button" tabindex="0" class="kk kl di km bf kn gg gh ke"><picture><img alt="" class="bf ko kp c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="kq kr gi gg gh ks kt bd b be z dk">Illustration by Vivek Thakker, Special Operations Studio</figcaption></figure><p id="0e90" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi"><strong class="kw iq">By Nick Leghorn</strong></p><p id="5474" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">There’s really no replacement in the information security space for real people using live systems when it comes to finding vulnerabilities and bugs. No matter how many static and dynamic testing systems are used or how often we perform penetration testing on our systems, there are always going to be edge cases and interesting interactions that are only revealed when millions of live users are interacting with our sites on a daily basis. The challenge we face at The New York Times is encouraging our users to report the issues that they find.</p><p id="5d55" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">So at the end of 2022, The New York Times Cyber Security Team deployed a single text file to the main nytimes.com website with the hopes of not only improving the ability for people to find out where to submit these kinds of vulnerabilities, but also encouraging more organizations to implement the same standard themselves.</p><p id="8a31" class="pw-post-body-paragraph ku kv ip kw b kx mi jq kz la mj jt lc ld mk lf lg lh ml lj lk ll mm ln lo lp ii bi">Back when the internet was still relatively young, Congress passed the <a class="ae mn" href="https://en.wikipedia.org/wiki/Computer_Fraud_and_Abuse_Act" rel="noopener ugc nofollow" target="_blank">Computer Fraud and Abuse Act</a>, a law that made it a crime to “exceed authorized access” of a computer system. It made logical sense — if someone maliciously hacks into your website, that should be a crime — but it came with an unintended consequence.</p><p id="eb13" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">I recall experiencing this myself the hard way. One day back in my college years in the early 2000’s I was trying to pay some bills online through my bank’s online portal when I noticed an odd behavior — it wasn’t actually invalidating my session when I clicked the link to log out. I could head back to the account dashboard and see all of my accounts, interacting with them as if I were still logged in, despite having clicked the clearly marked “Log Out” button. Even worse: this persisted for a period of time, meaning that if I had just used a library computer to access my bank account, the next person to use that computer might be able to quickly pull up my account without the username or password.</p><p id="a143" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">It’s at this point that the unintended consequences of the Computer Fraud and Abuse Act kicked in.</p><p id="3a13" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">As a concerned customer of this bank, my first instinct was to let them know about this issue by reporting it, but that can be a dangerous path. <a class="ae mn" href="https://www.nytimes.com/1995/11/27/business/technology-net-intel-computer-security-expert-runs-afoul-law-so-much-for-hacker.html" rel="noopener ugc nofollow" target="_blank">Back in 1995</a>, Intel prosecuted one of its own employees in their IT division for performing some common security checks and finding weaknesses to report. One contemporary security researcher Jeffrey Kegler said at the time that “[i]f I saw someone on the Internet with a security weakness, at this point I would be reluctant to act the Good Samaritan and report it.”</p><p id="7742" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">That wasn’t an isolated instance — there have been a number of situations over the years where security researchers had been prosecuted for reporting security vulnerabilities, or even just the act of looking for them. That fact was front and center in my mind when I was trying to decide what to do with my newly found security vulnerability on that banking website.</p><p id="37fb" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">So while I remain a free man after reporting the issue later that day, many other security minded users who might want to report vulnerabilities that they have found, the possibility of things going poorly and ending up facing federal charges has been and continues to be a very real specter haunting those potential reporters and preventing them from submitting their findings. (For those wondering, the bank fixed the issue quickly.)</p><p id="aa21" class="pw-post-body-paragraph ku kv ip kw b kx mi jq kz la mj jt lc ld mk lf lg lh ml lj lk ll mm ln lo lp ii bi">You can’t fix unknown issues. Over the last few decades numerous scanning tools have come online from vendors, offering to try and find issues in your systems before the hackers can find them. The problem with these tools is that there is no room for improvisation or discovery — they only look for known issues that match a certain pattern. Security teams generally back this up with “penetration testing,” where they hire a team of humans to try and break into their systems. This is better, but once again these tests typically try to rush through the assessment to remain cost effective and only try a set number of exploits. The end result is a false sense of security, that the systems are fully hardened when in reality there might be something still lurking in the shadows.</p><p id="fe1a" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">The Infinite Monkey Theorem states that, purely by entropy, a sufficiently large number of monkeys and typewriters will eventually reproduce the complete works of William Shakespeare. The same kind of theory applies to finding vulnerabilities in systems: eventually, with enough people using the systems in different enough ways, some of them will find vulnerabilities, even if purely by accident.</p><p id="b801" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">Over the course of the last few decades the security industry has started to recognize the benefit of these kinds of stochastic good samaritan reports and has shifted to try and enable these individuals to report their findings in a safe and responsible manner. The result of that shift has been the rise of so-called “Responsible Disclosure,” which is a process where security researchers collaborate with businesses and organizations to report issues, help fix them, and in return gain reputation and credibility for the discovery.</p><p id="bde9" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">Here at The New York Times, like many other companies with a large internet presence, the company has had a responsible disclosure program in one flavor or another for some time specifically designed to enable anyone on the internet to safely alert us to issues without fear of reprisal or prosecution. That mechanism has been used to great effect in just the time since I’ve been here, with some fantastic reports leading us to fix vulnerabilities that were so obscure and specific to our technology that finding them through other means may have been impossible. Unfortunately not every security researcher has been able to find the correct location to submit those reports, which results in more work for other customer-facing teams to handle and potential delays in assessing and remediating the issue.</p><p id="249e" class="pw-post-body-paragraph ku kv ip kw b kx mi jq kz la mj jt lc ld mk lf lg lh ml lj lk ll mm ln lo lp ii bi">The New York Times is not the only company facing this issue, with security researchers unable to find the correct location to report their discoveries or even understand if the organization in question has an appropriate program that will protect them. Within the last couple years a solution has started to emerge, and it is one that The New York Times has decided to sign on and implement: the security.txt file.</p><p id="538f" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">The concept borrows from another well established and well used practice of placing something known as a “robots.txt” file on the root directory of your site. This is a document that describes how search engines should proceed on your site, whether they are allowed to “crawl” the entire contents or if there are certain areas that they should not explore. These files are respected and honored by all of the major search engines, and have been around for quite some time. One of the reasons why the practice is so successful is the simplicity of configuration: the file is always in the exact same place for every site. Unlike needing to go and search for a privacy policy or similar document every time that could be in a number of strange locations, the search engine knows exactly where to find it.</p><p id="4445" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">With the security.txt file, the concept is the same — that it is a simple document placed in a well known location that should make it very easy for someone to find. The standard was recently proposed and documented on <a class="ae mn" href="https://securitytxt.org/" rel="noopener ugc nofollow" target="_blank">https://securitytxt.org/</a>, and specifically intends to make it easy for someone (such as a security researcher trying to report a vulnerability) to identify how and where to contact the organization’s security team. It also should provide the location where they can go to learn more about the organization’s protection from prosecution or “safe harbor” that they offer for security researchers.</p><p id="86d7" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">In September 2022 The New York Times joined the growing number of organizations who have deployed a security.txt file, which can be found on our website: <a class="ae mn" href="https://www.nytimes.com/security.txt" rel="noopener ugc nofollow" target="_blank">https://www.nytimes.com/security.txt</a></p><p id="5a72" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi">We take the safety and security of The Times and our readers seriously. We make every effort to find and fix vulnerabilities, including ensuring that good samaritans wanting to report issues they find are able to do that quickly and easily. Through the implementation of this security.txt file we hope not only to make that process easier and more transparent, but we hope to encourage other organizations to follow this trend and deploy these files on their own sites.</p></div><div class="ii ij ik il im"><p id="741c" class="pw-post-body-paragraph ku kv ip kw b kx ky jq kz la lb jt lc ld le lf lg lh li lj lk ll lm ln lo lp ii bi"><a class="ae mn" href="https://nickleghorn.com/" rel="noopener ugc nofollow" target="_blank"><em class="mv">Nick Leghorn</em></a> <em class="mv">is the Director for Application Security at The New York Times. His team is responsible for managing the Vulnerability Management Program within the company and helping teams build secure applications. He graduated from Penn State with a degree in Security and Risk Analysis, and prior to working at The New York Times has worked for companies such as Rackspace Hosting, Mitel, and Indeed, helping them build risk based information security programs.</em></p></div>]]></description>
      <link>https://open.nytimes.com/making-reporting-effortless-especially-for-security-researchers-c2c7e96e9a55</link>
      <guid>https://open.nytimes.com/making-reporting-effortless-especially-for-security-researchers-c2c7e96e9a55</guid>
      <pubDate>Fri, 27 Jan 2023 19:05:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Expanding our Front End Testing Frameworks]]></title>
      <description><![CDATA[<div class="ij ik il im in"><p></p><h2 id="e651" class="pw-subtitle-paragraph jn ip iq be b jo jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke dl"><em class="kf">How to cover more testing ground and discover new front end code issues by using both JSDOM and browser-based end-to-end testing.</em></h2><figure class="kh ki kj kk gs kl gg gh paragraph-image"><div role="button" tabindex="0" class="km kn dj ko bg kp gg gh kg"><picture><img alt="" class="bg kq kr c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="ks kt gi gg gh ku kv be b bf z dl">Illustration by <a class="af kw" href="https://www.connorrobinsonart.com/" rel="noopener ugc nofollow" target="_blank">Connor Robinson</a></figcaption></figure><p id="e298" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">By Katie Ishibashi</strong></p><p id="6a73" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">For a long time, all of the testing my team did was through <a class="af kw" href="https://testing-library.com/docs/react-testing-library/intro/" rel="noopener ugc nofollow" target="_blank">React Testing Library</a>, a popular framework that’s easy to use with the apps that my team works on. We’re a front-end team that serves as a bridge between a data team that analyzes large amounts of data about <em class="lt">Times</em> content and the audiences who read it and the internal stakeholders who want to see, for example, a list of the newspaper sections most popular among Gen Z readers. In broad strokes, that means we work on React apps that involve pulling in large amounts of data from an API and building a UI to display it for our users.for our users.The tests run quickly; we’re able to run hundreds of them within a few minutes. We can easily run tests with every pull request and catch bugs quickly, and having a thorough set of tests that we run all the time means there’s less opportunity for problems to sneak in.</p><p id="679a" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">This is where the idea to expand our testing framework came in. We added <a class="af kw" href="https://www.cypress.io/" rel="noopener ugc nofollow" target="_blank">Cypress testing</a> — not to replace React Testing Library, but to complement it. Cypress is not as quick, but it’s in many ways more thorough. Running Cypress tests means sitting and watching Cypress open a real browser, hit ouAPIs in production, and type text input into real fields. Using Cypress has made it much easier to catch entirely <em class="lt">different</em> sorts of issues with our apps. For instance, does a certain API take a long time to return? That’s something we’d miss with React Testing Library’s mocked APIs, but becomes obvious when we’re watching Cypress hit our real API in a browser. Using both libraries lets us cover a lot more ground, and feel a lot more confident that our code will work the way we expect it to.</p><p id="728b" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">How we use React Testing Library</strong>Much of what our apps do is straightforward, i.e. given x input, our UI should display y results. This can make writing tests very straightforward. For example, let’s say our app is supposed to pull in a list of article topics and rank them by pageviews. To test that, we might mock a return from a topics API that looks like this:</p><pre class="kh ki kj kk gs lu lv lw bo lx ly bj">const mockData = [{"cats":{"Pageviews": 9999999},"owls":{"Pageviews": 3},"dogs":{"Pageviews": 1234}}];</pre><p id="b098" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Assuming our app is pulling in this data and parsing it correctly, we’d expect its UI to look something like this:</p><figure class="kh ki kj kk gs kl gg gh paragraph-image"><div role="button" tabindex="0" class="km kn dj ko bg kp gg gh mf"><picture><img alt="" class="bg kq kr c" width="700" height="339" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="c130" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Like many UI testing libraries, React Testing Library doesn’t actually render the UI we’re testing in a browser. Instead, it uses <a class="af kw" href="https://github.com/jsdom/jsdom" rel="noopener ugc nofollow" target="_blank">JSDOM</a>, a JavaScript-based tool that parses HTML as a browser does, but without simulating layout, navigation, and other features. This is deliberately done for speed, and it works impressively well. We require all tests to pass before a branch can merge to main in our deployment process, and because JSDOM is so fast, it can run hundreds of tests in about two minutes.The tests run in a console, and since we’re using JSDOM, we don’t see anything that looks like what we’d see in a browser, just text telling us which test is being run, with a green check if the test passes and additional information if the test fails.</p><p id="d0ff" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Since JSDOM is parsing HTML for us, most of our tests deal with checking to see what’s in that HTML. If we want to check to make sure our app is ranking our topics by pageview correctly, that would look something like this:</p><pre class="kh ki kj kk gs lu lv lw bo lx ly bj">import { render, screen } from '@testing-library/react';describe('Table sorting', () =&gt; {it('Displays Results by pageviews', () =&gt; {// Have React Testing Library render the componentrender(&lt;Table data={mockData} /&gt;);// Select the table rows by getting everything being rendered that has the ARIA label rowsconst rows = screen.queryAllByRole('row');// There should be 3 rows, because we've passed in 3 topicsexpect(rows.length).toBe(3);// Cats should be first because it has the largest number of pageviewsexpect(rows[0]).toHaveTextContent('Cats');// Dogs should be second, etcexpect(rows[1]).toHaveTextContent('Dogs');expect(rows[2]).toHaveTextContent('Owls');});});</pre><p id="c566" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">Limitations of React Testing Library framework</strong>React Testing Library works well as a means of running tests quickly and as a means of quickly finding and isolating errors. We know what the input is, and we know what the output ought to be. If I expect the UI to list “Cats” first, and then I make some updates to the code and suddenly “Cats” is last, it’s very likely that’s due to a bug I’ve introduced. Having these quickly running tests has been incredibly valuable, but it’s not as thorough as we wanted our test coverage to be. For one thing, 100% of our users experience our apps in a browser, but we were never actually testing them directly there. For another, the tests are not end-to-end tests — we are mocking API responses, never testing our real time API.</p><p id="cb44" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">Enter the Cypress Framework</strong></p><p id="5ffc" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">To more thoroughly test our apps, our team spent several sprints adding tests in Cypress, with the goal of complementing the tests we already have, rather than replacing them. It allowed us to zero in on testing angles we hadn’t previously thought of , and let us see the app in action the way our users do. Because we combined testing frameworks with different strengths, we were able to keep the benefits of both frameworks. We still had the speed of React Testing Library, and also the thoroughness of end-to-end testing.</p><p id="0bb1" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">Cypress lets us test the API from the the front end</strong></p><p id="f0f5" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">This is especially valuable in our case, because the front end and back end of our app are developed by two separate teams, and adding tests that check how a UI made by one team interacts with an API made by another team helps ensure that the two function well together. For example, let’s say a user tells our app they want to search for topics popular among users Ages 35+ and also NOT Ages 35+.</p><figure class="kh ki kj kk gs kl gg gh paragraph-image"><div role="button" tabindex="0" class="km kn dj ko bg kp gg gh mg"><picture><img alt="" class="bg kq kr c" width="700" height="299" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="243c" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">When the user tries to submit the search, the API will (correctly) reject it, because it’s impossible for a user to be both over and under 35. Seeing this happen during testing provides us with an opportunity to optimize the front end — maybe this is something that we could handle before the user gets to the point where they’re submitting the search. We could flash an error on the front end right when a user first selects a group and also the opposite of that group, or maybe we could update the UI to make it impossible to make that selection in the first place — when a user is at the place where they’ve said they want to search for users Age 35+ and NOT [something], maybe we could remove Ages 35+ from the next drop down entirely:</p><figure class="kh ki kj kk gs kl gg gh paragraph-image"><div role="button" tabindex="0" class="km kn dj ko bg kp gg gh mh"><picture><img alt="" class="bg kq kr c" width="700" height="338" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="3fc1" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Having a computer run tests in a browser is slower than having a computer run tests in JSDOM, but it’s significantly faster than having a human run those tests. Because we’re able to set up a series of Cypress tests and then quickly run them as many times as we want, it’s a great way of catching errors that occur 3% of the time. Is there a stray quotation mark that’s messing up our API call? This is a great way to catch it. Was there a change to the API so that a request that worked in the past no longer works? This is a great way to catch it.</p><p id="5d64" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">Watching tests in a browser let us see things the way the user experiences it</strong></p><p id="fbae" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Watching Cypress tests is a bit like watching a movie of your app. You actually watch a browser “select” search options from a dropdown, “click” on options, and “Fill out” a search form. Something’s always moving, and watching the tests is a great way of getting a sense of how pieces of the app move together.</p><p id="9e48" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">This has been especially valuable in helping us get a sense of timing issues. If we’re waiting for real data to be returned from a real API, it’s much easier to get a sense of where the pain points are. Are we giving the user the option of submitting a search before the options that they need to search with have actually loaded from the API? That’s something that may not be obvious when we’re using mocked data that the app can use quickly, but it’s extremely clear when we’re watching the app wait for real data in a browser.</p><p id="319e" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">It’s also good for things that aren’t actually bugs, but can cause confusion. Does nothing appear to be happening on the screen after a user hits the submit button? Looks like we need to add a loading spinner.</p><p id="f1fd" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">Watching tests in a browser gives valuable context when tests aren’t passing</strong></p><p id="0e92" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Many of our tests check for a certain DOM state after a user takes an action — i.e. a user submits some changes, a “Changes submitted” message should appear. When a UI test fails, it isn’t always immediately clear why, and we often want to investigate what is going on with the DOM for more information. By default, React Testing Library doesn’t actually render the DOM, but it does have a debugging feature called <a class="af kw" href="https://testing-library.com/docs/queries/about/#screenlogtestingplaygroundurl" rel="noopener ugc nofollow" target="_blank">logTestingPlaygroundUrl</a> which will load a snapshot of the DOM in a browser at the exact moment you invoke it. This has been invaluable for debugging, when the error occurs at that moment, but doesn’t help much when the error occurs before or after. It’s like looking at a still photo of an event, vs looking at a video. Sometimes, a still photo is what we want, but there are cases where it isn’t enough information.</p><p id="e901" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">For example, let’s say there’s a test where I’m trying to update a topic, and I delete its name without writing in a new one. The UI (correctly) flashes a message saying “Topics must have a name” and grays out the submit button. When I watch the entire series of events in a browser, it’s obvious why a user can’t hit the submit button and why we never get to the “Changes submitted” message.</p><p id="4f1b" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">The entire process is much more murky when we only have a screenshot of the DOM to work with. If I try the same test with React Testing Library, what is likely to happen is I see a message telling me that it cannot click on a disabled submit button, followed by a message saying that it never receives the “Changes submitted” message. If I view the changes on logTestingPlaygroundUrl, I’ll see that the Submit button is disabled and that there’s no success message, but I won’t have the context to help me see <em class="lt">why.</em></p><p id="e2dd" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><strong class="kz ir">Like all great things, this too has its limits</strong></p><p id="3c9a" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Unlike React Testing Library, Cypress tests take time to run, and aren’t well-suited to run every time before we merge a new pull request. They are powerful, in that they can test our actual APIs, but hitting our actual APIs sometimes means that they clutter the development version of our app with test data that we’ll never need again. If we have a Cypress test to make sure that our users can correctly create a new topic in our app, for example, that means we’ll eventually see our topic list cluttered with “topics” like CYPRESS-test-12349adksjhfas234987 that will have to be manually deleted from our dev server. At one point, I wrote a script to have Cypress hit the delete button to delete some of the topics it created, but our app is set up in such a way that users can only delete draft topics from the front end, not topics that are marked fully active. This means that we have to ask our back end team to periodically delete the topics Cypress creates.</p><p id="d498" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">The biggest obstacle to using Cypress, however, is the time that it takes to run the tests. While it is possible to open Cypress and have it run in the background while doing other things, a lot of its utility comes from watching different parts of the app interact in context. While it is a tremendous benefit, it is also a bigger time commitment.</p><p id="04d8" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Because Cypress and React Testing Library are so different, we’ve gained a lot by using them for different purposes. For example, we recently added a feature that would let us display the number of users in a given audience segment (i.e.there are 130 million users in Segment XYZ). Once we’ve set up the feature, React Testing Library makes it easy to test that we’ve set up the basic logic correctly to parse and display the data correctly. If our mock API says we have 130001892 users, does our UI correctly display “130M” in the correct location, rounding slightly as we’ve told it to? Great.</p><p id="24d2" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Watching the same portion of the app load multiple times in Cypress gives us a different kind of insight — our API is extremely slow to return the number of users in a group, but only on the first time we create an audience segment. After that, the API returns the number fairly quickly. This provides us with an opportunity to optimize what our users see — rather than making them watch a loading spinner over the entire page while we wait for the numbers API to return on segment creation, what if we load it asynchronously after a user saves a new segment? The number of users would take some time to show up, but at least they’d be able to use the rest of the page. The combination of testing approaches lets us be confident that our code is calculating the number in the way we’re expecting it to, and also flagged a non-breaking issue that might otherwise have taken a while to discover.</p><p id="eee2" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj">Our testing frameworks let us improve both code accuracy and user experience, enabling us to make changes with more confidence. React Testing Library’s speed means it’s easy for us to run tests with every pull request, so we’re able to make it a part of our everyday process. Cypress tests have become something we run periodically, whenever there’s a big change to the UI, or whenever we want to make sure everything’s ok when we make changes to the API. It’s slower than React Testing Library, but it’s able to hit multiple angles of our apps much more quickly than a human tester could. Together, these testing frameworks let us test our app much more thoroughly than either would alone.</p></div><div class="ij ik il im in"><p id="9b1f" class="pw-post-body-paragraph kx ky iq kz b la lb jr lc ld le ju lf lg lh li lj lk ll lm ln lo lp lq lr ls ij bj"><em class="lt">Katie Barry Ishibashi is a software engineer on the Data Insights Tooling team at The New York Times, where she creates front end tools that let people use and understand large amounts of data quickly. Prior to her current role, she did front end work creating advertising at The Times, and previous jobs have ranged from doing technical work at nonprofits to teaching at an international preschool in Vietnam. When not coding, she can be found exploring with her small children, making pizza for her friends, and traveling as much as possible.</em></p><p id="f985" class="pw-post-body-paragraph kx ky iq kz b la ng jr lc ld nh ju lf lg ni li lj lk nj lm ln lo nk lq lr ls ij bj"><em class="lt">We would like to thank David Cho and Shilpa Kumar for reviewing this post.</em></p></div>]]></description>
      <link>https://open.nytimes.com/expanding-our-front-end-testing-frameworks-dad1265e98db</link>
      <guid>https://open.nytimes.com/expanding-our-front-end-testing-frameworks-dad1265e98db</guid>
      <pubDate>Tue, 13 Dec 2022 16:41:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Hispanic Talent at The New York Times]]></title>
      <description><![CDATA[<div><article><div class="l"><div class="l"><header class="pw-post-byline-header go gp gq gr gs gt gu gv gw gx l"><div class="o gy u"><div class="o"><div class="l"></div></div></div></header><section><div><div class="iz ja jb jc jd"><p id="b945" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><em class="lb">&#x201C;Meeting&#x2026;&#x201D; is an ongoing series that features colleagues from different corners of The New York Times Company.</em></p><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"><figcaption class="lo bl gn gl gm lp lq bm b bn bo cn"><em class="lr">Illustration by Lynnette Munoz</em></figcaption></figure><p id="97b7" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">As Hispanic and Latinx Heritage Month has wrapped up, we wanted to highlight a few of our colleagues who shape XFun, our cross functional product development organization, at The Times. Read on to learn a bit about them and their contributions, from engineering to product and design.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="3036" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns? </strong>he/him</p><p id="2973" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean? </strong>Engineering Manager, Subscriber Experiences, Android Core News App. We help people access our great journalism via mobile devices.</p><p id="c2f4" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How does your identity shape the way you think about technology? </strong><br>I was born in the Dominican Republic and grew up in The Bronx. The abundance of diversity in NYC fueled my curious nature and shaped me to have an open mind. I approach technology with a similar sentiment. What delight awaits? How will I grow by exploring a new tool? As a manager, I seek to learn about all the parts that make up the humans I work with. There is more than one way to solve a problem and grow, and there is always more to learn. We can begin to speak the same language and chart a path that best aligns with what makes them, them. Leaning into diversity of thought and experiencing technological outcomes.</p><p id="8188" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life? </strong><br>The quote that has stuck with me the most is &#x201C;Not failure, but low aim is sin,&#x201D; by Benjamin E. Mays. I think about this quote when I fail, tackle a hard task, and even when I succeed. There are lessons to be learned in all three of these stages. It encourages me to challenge myself, ask what&#x2019;s next, and how can I be better in the future?</p><p id="a203" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is the approach to mental health in your culture? What are some methods that you practice to look after your mental health and wellbeing?</strong><br>Ooof. At the risk of casting a wide net here, I&#x2019;ll preface by saying that my answer is solely based on <strong class="kf jh">my</strong> experience. These are complex issues and there is no singular view across an entire culture or community. Not too long ago, I was chatting with my aunt, whom I love dearly. She relayed a story about one of my childhood friends from the Dominican Republic who is now an adult with three kids under five and is in therapy. She went on to tell me that my friend sought professional help to deal with her new life. Her conclusion was &#x201C;El que tiene trabajo y tiene donde vivir, no tiene problema. La locura de ella, es ver un psic&#xF3;logo.&#x201D; In essence: if you have a job and somewhere to live, you have no worries. The act of seeking professional help is crazy. This way of thinking is not unique to my aunt. Seeking psychological help can be highly stigmatized in my community.</p><p id="eefe" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I see a therapist regularly. All I thought about while she told the story was that she must not know that I see a therapist. It took me a long time to seek professional help, partly due to access and slowly climbing up the social-economic ladder, but mainly because that&#x2019;s not something my people do. I enjoy therapy. I believe I&#x2019;m a better person because of it. Most of my sessions are about things I can do to ease stress, lower anxiety, set goals, and track progress (breathing, exercise, predictable &#x201C;me&#x201D; time). Therapy has helped me to stop thinking about mental health in binary terms and, instead, it has helped me recognize my state of mind, acknowledge causation and deploy the tools that help me get to a state that&#x2019;s better for me which ultimately impacts my children and family, my work, and all of my relationships.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="b503" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns? </strong>He/Him</p><p id="bdd9" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong> Senior Software Engineer &#x2014; Payments Team (SPG).I work on payments systems for digital subscriptions. Right now that means a lot of decomposition work as we migrate functionality away from a monolith.</p><p id="0175" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How has your career shaped your understanding of the world and vice versa?</strong></p><p id="11c8" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I&#x2019;ve felt like an outsider my whole life. I&#x2019;ve been an immigrant learning English as well as someone trying to break into software without a formal computer science background. I think groups are strengthened by diversity and I think individuals can contribute more to society if they&#x2019;re welcomed and treated well. I guess what I&#x2019;m trying to say is: be nice to the new hire on your team. We were all new once.</p><p id="5e8f" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">Do you think tech literacy is important for future generations?</strong></p><p id="ae66" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Yes, but I think it&#x2019;s a little overstated. Kids naturally pick up so much that they&#x2019;re tech literate almost from birth. We should encourage kids to focus on STEM if they want to, but we&#x2019;d be crazy to drive all of them towards the same disciplines. I taught my daughter to program in Scratch but quickly realized it wasn&#x2019;t her thing. She&#x2019;s more likely to be a musician than an engineer in the future and I think that&#x2019;s great.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="ffe4" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns?:</strong> She/her</p><p id="8ef5" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean? </strong>Staff Engineer, Observability. I&#x2019;m a Staff Engineer in our Delivery Engineering organization, where I focus on building observable systems across all products at NYT.</p><p id="4bbb" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?</strong></p><p id="fba6" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I&#x2019;m a strong believer in the power that comes from being a part of healthy and inclusive communities. I think the ability to hold space for each other is one of the most important expressions of care, so I take the communities I&#x2019;m a part of very seriously, including those at work. This is definitely shaped by my identities because without community, it&#x2019;s impossible to heal from the challenges that come with racism, misogyny, and queerphobia.</p><p id="f00c" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?</strong></p><p id="021a" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">&#x201C;I thrive under pressure, yes. But I also thrive under sunshine, under joy, under warm hugs and creativity; morning coffee, a strong community. I can thrive under most things &#x2014; I&#x2019;d much rather thrive in love.&#x201D; &#x2014; Jo&#xE9;l Leon.</p><p id="69fb" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I think of this quote often, especially in the context of work. Toxic workplaces are fairly normalized, especially for underrepresented folks. In the beginning years of my career, I tolerated these types of environments because I didn&#x2019;t believe a healthy workplace was possible. I often found myself thinking in terms of <em class="lb">scarcity</em> instead of <em class="lb">abundance</em>, so settling for a workplace where I wasn&#x2019;t supported, treated well, or celebrated became the defining aspect of my early career.</p><p id="8d69" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">This quote reminds me that this narrative isn&#x2019;t true, that people like me are also allowed to leave spaces that don&#x2019;t protect or celebrate us, and that suffering doesn&#x2019;t have to be a prerequisite for success.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="4123" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns?: </strong>She/Her or They/Them</p><p id="b769" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong></p><p id="c19c" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Staff Software Engineer at the NYT Games. I work in the platform squad, keeping the backend and infrastructure that allows us to host our games</p><p id="7353" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your ethnic background and how do you celebrate it?</strong></p><p id="90d3" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I&#x2019;m a white Brazilian, I was born in Brazil and moved to Ireland when I was 28 years old in 2014 and moved to NYC in 2019. Brazilian culture is a huge part of who I am, and it impacts everything in my life, from the music I listen to, to how I make friends or the way I like having my coffee in the morning.</p><p id="1062" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?</strong></p><p id="7dd6" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I think my identity helps me realize that the majority of the corpus of best practices on software engineering are based on the personal opinion of a small group of people, usually white cis and American, and that they tends to be very biased to a certain way of thinking. I started my career in Brazil, and the tech scene in Brazil has a focus on being practical and action oriented and I bought that with me.</p><p id="4313" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">Do you think tech literacy is important for future generations?</strong></p><p id="ff2c" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I think tech literacy is essential to have a better understanding of the modern world. I also believe that algorithms and data structures are not necessarily the most important aspect of tech literacy, those are skills with a large demand in the professional market, and this skews many tech literacy programs. I think learning more about telecommunications, infrastructure, operating systems and web protocols would benefit people outside of tech more than learning the intricacies of how to use a binary tree. Understanding more how protocols and the machines we use everyday operate can help people create a better understanding of the world around them.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="891c" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns? </strong>She/her</p><p id="2983" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong></p><p id="6c4e" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Software Engineer, Games, Working on the &#x201C;Play tab&#x201D; that&#x2019;s in the newsreader app.</p><p id="13cc" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?</strong></p><p id="85bd" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">One quote that I really enjoy is &#x201C;You are the greatest project you will ever get to work on. Take your time and create magic.&#x201D; I really like this quote because in today&#x2019;s world it seems as if everything is so rushed. We have certain expectations for ourselves based on where others our age are at. This quote reminds me to take my time, there is no rush. That I will reach my goals at my own time.</p><p id="c816" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your ethnic background and how do you celebrate it?</strong></p><p id="be56" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">My family is from Mexico, Guerrero to be exact. I celebrate my Latinidad and Mexican heritage by participating in traditions and celebrations. There&#x2019;s a lot I love about Mexico, its traditions and people. El D&#xED;a de los Muertos is one of my favorite traditions. Latin music, reggaeton, bachata, banda, cumbia&#x2026; always makes me feel at home. Visiting Mexico is a true delight. It&#x2019;s such a big country with so many beautiful sights to see and lively people. I really love visiting my parents&#x2019; town and getting to know the place where they grew up.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="9c95" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns? </strong>she/her</p><p id="1dda" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong></p><p id="213e" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Associate Software Engineer on Data Governance Engineering, working on DSR Tracker and soon DataHub (a data catalog).</p><p id="94fe" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How has your career shaped your understanding of the world and vice versa?</strong></p><p id="1465" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I&#x2019;m the daughter of immigrants and grew up low-income. I feel <em class="lb">extremely</em> lucky to be a software engineer. I also feel that having more diversity in software engineering brings a different perspective to the technology we&#x2019;re building and I&#x2019;m glad to be able to bring some of my understanding of the world into it. There&#x2019;s a lot to be said for understanding who you&#x2019;re designing technology for and if what you&#x2019;re building might be doing harm to a culture or people. I try to think through these questions with everything I&#x2019;m involved in creating.</p><p id="9c25" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">There are also infinite opportunities to learn and solve challenging problems, and get paid top salaries with lots of other perks and benefits. Thinking about how this contrasts with so many other jobs, especially jobs in other countries, is unsettling. I definitely feel this contrast when comparing my career with my parents who had to take low wage, labor intensive jobs when they immigrated which they still do today. I think the biggest takeaway I get from seeing both realities is the importance of access to opportunity. I&#x2019;m a big believer that anyone can do anything if given the right resources and guidance.</p><p id="cfc0" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How do you prioritize yourself and your family in the age of hustle culture?</strong></p><p id="9f12" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I&#x2019;ve never prioritized myself and my family as much as I have in the past year. Part of what&#x2019;s allowed this is the financial stability I have from working in tech. It&#x2019;s definitely a privilege to have the time, headspace, and ability to fully prioritize myself and my family the way I truly want to.Now that I&#x2019;ve reached a certain level of financial and educational success, I&#x2019;m able to give back to my mom more, whether by helping her with childcare, with her homework (she recently started her Bachelors in Nursing!), or with saving up for a house one day. Lately, I&#x2019;ve prioritized myself by going to therapy and intentionally making space for stillness in my life.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="3846" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns?</strong> He/Him</p><p id="c30f" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong></p><p id="46d4" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Software Engineer on the Advocate and Customer Empowerment team in Care. We focus on helping NYT customers by improving the tools and processes our advocates and in-house teams use.</p><p id="5243" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?</strong></p><p id="c539" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Growing up in Colombia, I witnessed a lot of resourcefulness and teamwork. Every day, I could see people finding ways to solve challenges in innovative ways. If there was a problem, people would come together and find a way to solve it. This mindset has inspired me to take on risks knowing that it is all an iterative process.</p><p id="7b24" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How has your career shaped your understanding of the world and vice versa?</strong></p><p id="13a5" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Seeing the world through the lens of technology, particularly things like open-source, has influenced my perspective of the world. Knowing that individuals from all around, can have impactful global contributions reinforces my belief that we have a role to play in how the future unfolds.</p><p id="8b58" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">Do you think tech literacy is important for future generations?</strong></p><p id="685a" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Tech literacy is crucial, it changed my life and even if one chooses to not follow a tech career it teaches other modalities for solving challenges.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="7cea" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns? </strong><em class="lb">He/Him</em></p><p id="20ef" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong></p><p id="00e2" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><em class="lb">Senior Product Designer, Care</em></p><p id="39b8" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">Are there any passion projects that you work on during your free time?</strong><br>There are! I&#x2019;m a huge fan of machine-learning and the impact that it will have on visual and written arts. When I have some free time, I power up some of these algorithms and feed them deliberately confusing inputs to see how they react. I chase the element of surprise, and boy do some of these machines surprise me!</p><p id="884c" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?</strong><br>My parents were both Cuban refugees and I learned early on not only the value of hard work, but the importance of hope. Optimism, even in the lowest of times, is the fuel that keeps you going and once you lose that, you kind of lose the motivation to continue. I try to maintain that positive energy on every team and project I&#x2019;m on.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="eabf" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns: </strong>he/him/&#xE9;l</p><p id="c213" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title? </strong>Senior Data Scientist, Algorithmic Targeting</p><p id="4132" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">Are there any passion projects that you work on during your free time?</strong></p><p id="ee73" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I&#x2019;m always on the lookout for interesting data visualization projects that can be done with public data, and that have a clear public benefit.During the height of the pandemic, for example, the Ministry of Science of Chile began publishing a dataset of daily COVID-19 cases and deaths in the country. I was one of the first to take that raw data and develop a tracking dashboard website, the code for which was open sourced in Github. Eventually, though, more professional trackers appeared, and I shut the project down (I was paying GCP costs out of my own pocket). The site is still listed in the Ministry&#x2019;s <a class="au nd" href="https://minciencia.gob.cl/comunidad-covid19/">portal</a> showcasing citizen usage of their data though!</p><p id="e08d" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your ethnic background and how do you celebrate it?</strong></p><p id="157f" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><em class="lb">Yo soy chileno</em>. While this might sound like a straightforward statement, it actually took me almost three decades to state confidently, as I spent 14 years of my childhood abroad. For the longest time, I felt that maybe I wasn&#x2019;t <em class="lb">really</em> Chilean, with the depressing implication that I didn&#x2019;t have a true national or ethnic identity at all.</p><p id="06b7" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">This changed when my wife and I emigrated to study and then to work. I started avidly following news from Chile, became a fan of Chilean artists, yelled myself hoarse when <em class="lb">La Roja</em> (our national soccer team) won the <em class="lb">Copa Am&#xE9;rica</em>, and I even learned to cook empanadas. These days I&#x2019;m known in the office for my &#x201C;as we say in Chile&#x2026;&#x201D; interventions and have fully embraced my identity as a Latino and an expat.</p><p id="c103" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Today, I celebrate my <em class="lb">Chilenidad</em> and my <em class="lb">Latinidad</em> mostly by being proud of it, and proud of the fact that they &#x2014; nor any ethnic identity, for that matter &#x2014; are not monoliths, and that everyone has their own unique life story, and that that&#x2019;s okay, because ethnic backgrounds are not about dividing us into categories, but about bringing us together in our similarities!</p><p id="2bc2" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is the approach to mental health in your culture? What are some methods that you practice to look after your mental health and wellbeing?</strong></p><p id="676e" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Chileans/Latinx definitely don&#x2019;t have the mental health market cornered, or even close! Life in Santiago (where I&#x2019;m from) is riddled with stressors, from traffic, smog, crime, inequality, consumerism, etc, and I daresay we have a lot to improve in how we deal with them.</p><p id="6a31" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I want to highlight a concept, though, that has gained traction in several countries in Latin America in recent years, and that&#x2019;s <em class="lb">sumak kawsay</em> (in Quechua, a native Andean language), translated as <em class="lb">buen vivir</em> in Spanish, and perhaps &#x201C;plentiful life&#x201D; in English. The <a class="au nd" href="https://www.theguardian.com/sustainable-business/blog/buen-vivir-philosophy-south-america-eduardo-gudynas">philosophy</a> advocates for prioritizing living in community, ecological harmony, and cultural sensitivity. While its scope is much broader than just mental health, it can certainly inform the choices we make on a daily basis.</p><p id="f120" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">As humans, we should look to our ancestral and evolutionary heritage and own the fact that we are inherently social animals, with bodies adapted to a certain lifestyle and environment, deriving meaning from our close connections. I try to use that knowledge and prioritize sleep, frequent visits to the park, exercise, and nurturing connections with family and friends.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="3392" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns: </strong>She/her</p><p id="7a95" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean? </strong>I am a software engineer on Oak, the collaborative text editor that&#x2019;s part of our internal CMS.</p><p id="2a9b" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your ethnic background and how do you celebrate it?</strong></p><p id="9ef7" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I am a Chicana (Mexican-American) from the Central Coast of California. The way I celebrate my Mexicanness takes many forms; there are the typical traditions and festivities (often recognizable by the sight of a tamalera pot), the moments of mundanity and daily life (remembering to soak beans overnight, waiting for the comal to heat up before placing tortillas or else they stick), the commitments I have to my communities (engaging in political education and action, finding the best California burrito in town) and the commitments I have to myself (continuing to practice art, being less wasteful).</p><p id="f843" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I love being able to speak in Spanish (or in Spanglish) with my family and friends, and at the same time I recognize that Spanish is a language of dominance in Mexico and in the United States, and that the ability to speak Spanish does not make me more Mexican than other Chicana/x/os.</p><p id="6d24" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">How do you prioritize yourself and your family in the age of hustle culture?</strong></p><p id="5147" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I used to be a public school teacher, so I&#x2019;m very familiar with the need to be constantly working. It&#x2019;s much different than hustle culture in a corporate setting, but I learned then that despite how much I love my job, I need a healthy work-life balance to be my best self for others and for myself, which eventually led me to where I am now. Not participating in hustle culture doesn&#x2019;t mean I am not ambitious, it just means that I&#x2019;ve set the boundaries I need to do everything I want to do (or not do &#x2014; as I&#x2019;m a big fan of doing nothing).</p><p id="4389" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">I think it&#x2019;s both a privilege and an act of resistance to say no to hustle culture. My mom had side hustles when she was raising my sisters and me, and that was by necessity. I feel privileged that I do not have that necessity. I&#x2019;m also aware of the economic realities (and anxieties!) millennials like myself are facing, but I&#x2019;d rather focus on the structural (via civic participation, unionization and mutual aid) to address these issues.</p></div><div class="iz ja jb jc jd"><figure class="ld le lf lg gx lh gl gm paragraph-image"><img alt class="ce lm ln c" width="700"></figure><p id="9da6" class="pw-post-body-paragraph kd ke jg kf b kg my ki kj kk mz km kn ko na kq kr ks nb ku kv kw nc ky kz la iz ga"><strong class="kf jh">What are your pronouns? </strong>He/him</p><p id="e5d7" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your title and what does it mean?</strong></p><p id="a0a0" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Product Manager, Games Platform Squad, working mainly on Games infrastructure and hybridization.</p><p id="4bb7" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">Do you think tech literacy is important for future generations?</strong></p><p id="aba8" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">Tech literacy is crucial today, let alone for future generations. But, I say that as someone who had the privilege of growing up with computers, emulating old video games and jailbreaking whatever device I could. Given the role technology plays in our current lives, I&#x2019;m sure that future generations will have a generally higher baseline tech literacy to work with than older generations. What I wonder is how or if that literacy will help them establish healthy boundaries with technology.</p><p id="4e11" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga"><strong class="kf jh">What is your ethnic background and how do you celebrate it?</strong></p><p id="387d" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">My nationality is Dominican-American, as both my parents are from the Dominican Republic (the D.R.) and I was born and (mostly) raised in NYC. My ethnic background is Spanish and Black. For me, celebrating my ethnic background means bringing my most authentic, true self to spaces where there aren&#x2019;t many people who look, talk or act like me. I do this by participating in spotlight series like this, using slang in more traditionally formal spaces, or making cultural references relevant to my community or where I&#x2019;m from even if I know most of the people I&#x2019;m talking to won&#x2019;t get it. Generally speaking, my goal in doing this is to be more inclusive. I want young people from my community to be able to see themselves in me and know that there is space for them to be who they are in predominantly white spaces.</p><p id="1446" class="pw-post-body-paragraph kd ke jg kf b kg kh ki kj kk kl km kn ko kp kq kr ks kt ku kv kw kx ky kz la iz ga">In terms of celebrating my Dominican heritage, I do this in a ton of different ways. I used to visit the D.R. yearly to stay with my dad and grandparents. This summer, I went to the D.R to celebrate my brother&#x2019;s wedding and my grandparent&#x2019;s 50th anniversary. It was a very emotionally and culturally fulfilling trip. My partner and I listen to bachata, merengue and Dominican hip hop together, usually while we paint. I&#x2019;m currently in the midst of learning how to cook more traditional Dominican meals that my grandmother would cook, specifically: asopao de pollo, sancocho and pastelon de platano maduro.</p></div></div></section></div></div></article></div>]]></description>
      <link>https://open.nytimes.com/meeting-hispanic-talent-at-the-new-york-times-d2c6876e2875</link>
      <guid>https://open.nytimes.com/meeting-hispanic-talent-at-the-new-york-times-d2c6876e2875</guid>
      <pubDate>Tue, 15 Nov 2022 21:31:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How We Recreated the Dixie Wildfire’s Plume from Radar and Satellite Data]]></title>
      <description><![CDATA[<div><article><div class="l"><div class="l"><header class="pw-post-byline-header go gp gq gr gs gt gu gv gw gx l"><div class="o gy u"><div class="o"><div class="l"></div></div></div></header><section><div><div class="iz ja jb jc jd"><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="700"><figcaption class="li bl gn gl gm lj lk bm b bn bo cn">Illustration by <a class="au kv" href="https://www.jeffreykam.net/">Jeffrey Kam</a></figcaption></figure><p id="0026" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><strong class="ln jh">By Nick Bartzokas</strong></p><p id="f608" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">In mid-July, 2021, the Dixie fire ignited in California. Days later, it began to exhibit an increasingly common and concerning behavior. It created its own weather, producing storm clouds, winds, and lightning. In October of that year, The New York Times published <a class="au kv" href="https://www.nytimes.com/interactive/2021/10/19/climate/dixie-fire-storm-clouds-weather.html">a visual recreation of the fire&#x2019;s activity</a>.</p><p id="8df9" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">This coverage took a team of diverse talents. This article highlights the technical work, specifically that of <a class="au kv" href="https://www.nytimes.com/by/evan-grothjan">Evan Grothjan</a>, Daniel Mangosing, <a class="au kv" href="https://www.nytimes.com/by/scott-reinhard">Scott Reinhard</a> and <a class="au kv" href="https://www.nytimes.com/by/nick-bartzokas">myself</a>. To learn more about the inspiration and reporting that went into this piece, check out <a class="au kv" href="https://www.nytimes.com/2021/11/13/insider/dixie-fire-weather-3-d.html">this Times Insider article</a> for some perspective from our teammates <a class="au kv" href="https://www.nytimes.com/by/noah-pisner">Noah Pisner</a>, <a class="au kv" href="https://www.nytimes.com/by/nadja-popovich">Nadja Popovich</a>, and <a class="au kv" href="https://www.nytimes.com/by/karthik-patanjali">Karthik Patanjali</a>.</p><h2 id="8bbc" class="mh">The Goal</h2><p id="f45f" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Neil Lareau, an atmospheric scientist who studies wildfires, advised us on this project. He popularized a <a class="au kv" href="https://twitter.com/nplareau/status/1417351236542636034">technique for creating 3D animations of wildfire plumes from radar data</a>. We decided to adapt that technique for an interactive web article and an AR story on Instagram. Our newsroom&#x2019;s graphics editors in collaboration with software engineers in R&amp;D assembled radar, satellite, and other weather data into an animated, 3D illustration giving readers an up-close look at the phenomenon of fire-driven weather. Here&#x2019;s a flythrough of the final result.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="600"></figure><h2 id="77a6" class="mh">Setting the Stage with Ground Level Data</h2><p id="5f41" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Let&#x2019;s first focus on the ground level datasets we used: terrain color and height, the position and timing of lightning strikes, and the coverage of the fire itself. The scientific software community provides a wealth of open source tools we can use to work with these types of data.</p><p id="ba24" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">For the California terrain that sits below our smoke plume, we gathered high resolution (10 meter) imagery from the <a class="au kv" href="https://sentinels.copernicus.eu/web/sentinel/user-guides/sentinel-2-msi/product-types/level-1c">Sentinel 2 satellite&#x2019;s L1C product</a> using the <a class="au kv" href="https://sentinelhub-py.readthedocs.io/en/latest/">sentinelhub-py</a> library which lets you specify a range of dates to composite together into a <a class="au kv" href="https://sentinelhub-py.readthedocs.io/en/latest/examples/process_request.html#Example-2:-True-color-mosaic-of-least-cloudy-acquisitions">cloudless image</a> of the Earth&#x2019;s surface. To add a height dimension, we retrieved a grayscale digital elevation model (DEM) from <a class="au kv" href="https://www.usgs.gov/core-science-systems/ngp/3dep">3DEP</a> using the <a class="au kv" href="https://hyriver.readthedocs.io/en/latest/readme/py3dep.html">py3dep</a> library, as <a class="au kv" href="https://github.com/hyriver/HyRiver-examples/blob/main/notebooks/3dep.ipynb">this example</a> demonstrates.</p><div class="kx ky kz la gx o hc"><figure class="nf lb ng nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="500"></figure><figure class="nf lb ng nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="401"><figcaption class="li bl gn gl gm lj lk bm b bn bo cn nl do nm nn">Cloudless image of the Earth&#x2019;s surface from Sentinel 2 (left) and digital elevation model from 3DEP (right).</figcaption></figure></div><p id="184d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">We received lightning strike data from <a class="au kv" href="https://www.vaisala.com/en">Vaisala</a>, a company that monitors global weather and environmental conditions. Using <a class="au kv" href="https://geopandas.org/en/stable/">geopandas</a>, we generated an image sequence indicating the locations where lightning struck the ground as small dots. <a class="au kv" href="https://www.nytimes.com/by/evan-grothjan">Evan Grothjan</a> aligned these reference images to the terrain in his scene, designed realistic lightning bolts, and positioned them above each of the dots.</p><p id="0313" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><a class="au kv" href="https://www.nytimes.com/by/scott-reinhard">Scott Reinhard</a> worked on one of the most crucial components, a visual representation of the fire spreading over the land. He sourced burn area and intensity data from <a class="au kv" href="https://www.noaasis.noaa.gov/GOES/GOES_DCS/goes_dcs.html">GOES</a> and <a class="au kv" href="https://firms.modaps.eosdis.nasa.gov/active_fire/">VIIRS</a>, and perimeter data from <a class="au kv" href="https://www.fire.ca.gov/">CalFIRE</a>. Using <a class="au kv" href="https://gdal.org/">gdal</a> and other tools, he created an animation of the fire&#x2019;s intensity and behavior on the ground.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="480"></figure><p id="1bfa" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">After laying the groundwork for the plume visualization, Scott developed the visual language and iconography used to call attention to the plume&#x2019;s behaviors, and mapped the extent of the fire in a 2D graphic later in the article.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="700"></figure><h2 id="ef60" class="mh">What Radar Can &#x201C;See&#x201D;</h2><p id="d892" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Having constructed the ground-level part of our scene, we now turn our attention to visualizing the fire&#x2019;s plume in 3D. Data for this visualization came from three <a class="au kv" href="https://www.ncei.noaa.gov/products/radar/next-generation-weather-radar">NEXRAD</a> radar stations in California and Nevada. Each recorded the Dixie fire&#x2019;s activity roughly every 10 minutes. We previewed and selected datasets using <a class="au kv" href="https://www.ncdc.noaa.gov/wct/">NOAA&#x2019;s Weather and Climate Toolkit</a> (WCT).</p><div class="kx ky kz la gx o hc"><figure class="nf lb nq nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="480"></figure><figure class="nf lb nr nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="480"></figure></div><p id="d95b" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Radar stations emit pulses of radio waves and observe what gets reflected back. Denser stuff in the air, like water droplets in clouds and large ash particles in smoke plumes, reflect the radar pulse more powerfully. The power of the returning signal, called &#x201C;reflectivity&#x201D;, approximates the density of airborne matter. The time it takes for the reflection to return indicates the distance of that substance. The radar makes many such observations, sweeping 360 degrees for several vertical angles.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="480"></figure><h2 id="ed97" class="mh">Plume Pre-visualization</h2><p id="4b59" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">As we began to assemble data for this project, we didn&#x2019;t know what area and what times to visualize. And since the fire was ongoing, we needed quick access to up-to-date data in 3D. To solve these problems, we created an automated pipeline allowing us to specify a date range and map region and quickly preview what the plume looked like then and there. As the project evolved, we added steps to process and refine the data, focusing on features that were central to the story. Fast transformations from data to visuals enabled us to pivot quickly when new examples of relevant behavior happened in real time. Here&#x2019;s how we built that pipeline.</p><p id="6117" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">NOAA hosts its <a class="au kv" href="https://www.ncdc.noaa.gov/nexradinv/index.jsp">NEXRAD data online</a> where we retrieved it using the <a class="au kv" href="https://unidata.github.io/siphon/latest/index.html">Siphon</a> library. We then used <a class="au kv" href="https://arm-doe.github.io/pyart/">Py-ART</a>, a powerful python tool for working with radar observations, to merge the datasets of multiple radar stations, conform them to a regular cartesian grid, and apply spatial interpolation with algorithms tailored to the nuances of radar data. Already, we were able to quickly visualize 3D atmospheric data from any time and space observed by NEXRAD.</p><p id="a5ea" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">To target a time range for our story, we periodically rendered a low resolution timelapse of the entire dataset. This way we could quickly scan hundreds of hours of data and hone in on particularly active days. As we looked closer at the most eventful time periods, we found that all of the key behaviors of interest to the story occurred on July 19 between 11:00 a.m. and 11:00 p.m, Pacific Daylight Time.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="411"></figure><p id="a292" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">With the data selected and normalized, our next task was to export files for our graphics artists to animate. NEXRAD data is stored as <a class="au kv" href="https://www.unidata.ucar.edu/software/netcdf/">NetCDF</a> files. This format encodes multi-dimensional datasets flexibly and is commonly used across many scientific disciplines. However, we needed this data in a format compatible with CG software. For that we used <a class="au kv" href="https://www.openvdb.org/download/">OpenVDB</a>. It is widely compatible and has its own <a class="au kv" href="https://www.openvdb.org/documentation/doxygen/python.html">python library</a>. We exported our radar data as a time-series of OpenVDB volumes, and brought them into <a class="au kv" href="https://www.sidefx.com/">Houdini</a>.</p><h2 id="5338" class="mh">Refining the Plume</h2><p id="5068" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Airborne material may reflect radar beams, but that doesn&#x2019;t guarantee it will be visible to the naked eye. Reflectivity isn&#x2019;t the same as visible opacity. So we needed to find an appropriate reflectivity threshold that would define the edges of Dixie&#x2019;s plume. Thankfully, <a class="au kv" href="https://www.alertwildfire.org/">Alert Wildfire</a> recorded time lapse footage of Dixie. By comparing this footage with our renders side-by-side, we ensured that we were representing the visible plume as faithfully as possible.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="480"></figure><p id="fef8" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">From time to time we needed to render the data in a new way so that a characteristic could be observed visually. For example, the maximum height of the fire plume was an important point discussed in the story. We acquired the height observed in the field from our interviews with experts and wanted to find that moment in our data. Since there is noise in radar data, a simple max of the sample values would not suffice as it might pick up one of the noisy pops. Instead, we rendered an orthographic visual test to spot the plume&#x2019;s highest moment.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="480"></figure><p id="475f" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Since our data had passed through a number of processing steps, when it arrived in Houdini, we wanted to check the integrity of the entire dataset, even the interior which was never shown in the article&#x2019;s graphics. We rendered nested isosurfaces to check that the plume&#x2019;s core remained intact and matched the expectations of our collaborating scientists.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="480"></figure><p id="4279" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Our layers of data were all combined in Houdini for further production and needed to be aligned exactly. GIS software understands geospatial data and projections, but most CG apps and formats do not. To ensure accurate alignment, all outputs from python conformed to a common projection and bounding box. That meant that aligning layers in Houdini was as easy as snapping their edges. We rendered top-down orthographic tests to confirm that all our data layers lined up properly.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="361"></figure><h2 id="49a6" class="mh">Styling and Animating the Plume</h2><p id="5fde" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">At this point, our plume visualization was detailed enough to demonstrate the large-scale behaviors central to the article but they lacked surface detail, small-scale undulations without which the plume appeared deceptively small and calm.</p><p id="65d6" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Referencing time lapse footage, Daniel Mangosing used Houdini&#x2019;s <a class="au kv" href="https://www.sidefx.com/docs/houdini/nodes/sop/cloudnoise.html">Cloud Noise</a> and <a class="au kv" href="https://www.sidefx.com/docs/houdini/nodes/sop/volumewrangle.html">Volume Wrangle</a> nodes to churn the surface and give our illustration an appropriate sense of scale and activity. This work was done carefully, however, as we did not want to affect any of the large-scale behaviors on which we relied for the story. So while he developed the look of these noise patterns, he tested them on smooth blimp-like shapes, making sure the new undulations remained minor, in a shallow layer on the surface.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="515"></figure><p id="6af1" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">As mentioned earlier, NEXRAD radar stations record observations roughly every 10 minutes. But a fire plume changes much faster than that. In order to create a smooth animation through time, we needed to improve our temporal resolution. For this step Daniel used Houdini&#x2019;s <a class="au kv" href="https://www.sidefx.com/docs/houdini/nodes/sop/retime.html">Retime</a> node which can interpolate in-between frames for volumes.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="473"></figure><p id="069b" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Finally, <a class="au kv" href="https://www.nytimes.com/by/evan-grothjan">Evan Grothjan</a> and <a class="au kv" href="https://www.nytimes.com/by/scott-reinhard">Scott Reinhard</a> developed the look of our final renders. Our goal was to signal to the reader that this is a representation of the event, but not the event itself. Removing the sky was one simple but effective way to do this. Using Cinema 4D and the Redshift renderer, Evan tweaked the plume&#x2019;s color and material properties, scene lighting, camera work and rendering. Evan and Scott explored a number of visual effects in the scene, ultimately selecting a design that balanced our visual priorities: clarity where our visuals supported the story, and an aesthetic that evoked scientific illustration.</p><div class="kx ky kz la gx o hc"><figure class="nf lb nw nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="334"></figure><figure class="nf lb nw nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="334"></figure><figure class="nf lb nw nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="334"></figure></div><p id="111d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Here again is the full animation from the article.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="480"></figure><h2 id="848a" class="mh">Augmented Reality</h2><p id="cdc4" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">In addition to our coverage on the web and in our app, we published an <a class="au kv" href="https://rd.nytimes.com/projects/augmented-reality-storytelling#wildfire-storms">augmented reality experience</a> on Instagram using the <a class="au kv" href="https://sparkar.facebook.com/ar-studio/">Spark AR platform</a>. This presented a unique challenge. For our web article, we rendered a video through which a reader progresses by scrolling. In AR, the user is free to look at the plume from any angle, so we couldn&#x2019;t pre-render the content. It had to be rendered in real-time on the mobile device. That would prove difficult since Spark effects are limited to 4 MB, and the platform doesn&#x2019;t support rendering volumes yet. Luckily these are problems that graphics programmers have had to solve before. In fact we had already used a time-tested technique, rendering a volume as slices, in our work visualizing volumetric data for the article <a class="au kv" href="https://www.nytimes.com/interactive/2021/02/26/science/reopen-schools-safety-ventilation.html">Why Opening Windows Is a Key to Reopening Schools</a> and its accompanying <a class="au kv" href="https://rd.nytimes.com/projects/augmented-reality-storytelling#reopening-schools">augmented reality experience</a>.</p><p id="1963" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">To get Houdini VDBs into AR, we used a process analogous to medical CT scanning. We captured many cross sections of the plume and exported those slices as sprite sheets using the <a class="au kv" href="https://www.sidefx.com/docs/houdini/nodes/sop/labs--volume_texture.html">Volume Texture Export</a> node. We also generated geometry on which to render that imagery, a stack of planes. With enough slices tightly packed together, the gaps aren&#x2019;t noticeable. The layers combine together to create what looks like a solid volume.</p><div class="kx ky kz la gx o hc"><figure class="nf lb nx nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="415"></figure><figure class="nf lb ny nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="480"></figure></div><p id="29e6" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">CG software renders volumes in a rich environment of lighting and reflections. Converting volumes to a stack of cards rules out the option of natural lighting. Luckily, Houdini provides a way to bake the effects of lighting into the color of a volume, effectively rendering lighting effects before the export, using the <a class="au kv" href="https://www.sidefx.com/docs/houdini/nodes/sop/bakevolume.html">Bake Volume</a> node. Using this node, we baked in sunlight, shadows, and a red glow from the underlying fire.</p><figure class="kx ky kz la gx lb gl gm paragraph-image"><img alt class="ce lg lh c" width="655"></figure><p id="666f" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">With our fire plume rendered in augmented reality as a stack of cards, some creative options opened up to us. We could reveal the plume from top to bottom in an animation sequence and tint a subset of slices to draw attention to which layers of atmosphere they occupied. These ended up being useful devices for storytelling in AR.</p><div class="kx ky kz la gx o hc"><figure class="nf lb oa nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="334"></figure><figure class="nf lb ob nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="334"></figure><figure class="nf lb oc nh ni nj nk paragraph-image"><img alt class="ce lg lh c" width="334"></figure></div><h2 id="95f8" class="mh">Conclusion</h2><p id="d34b" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">This project is one of many efforts to visualize 3D data sets. Some of the techniques developed in our coverage of the Dixie fire helped us tell the story of <a class="au kv" href="https://www.nytimes.com/interactive/2022/07/08/nyregion/bronx-fire-nyc.html">The Chain of Failures That Left 17 Dead in a Bronx Apartment Fire</a>. Our work visualizing data continues in the hope that insights drawn from these graphics will help our readers and the world make better, more informed decisions in the future.</p></div><div class="iz ja jb jc jd"><p id="c2ef" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><em class="ok">Nick Bartzokas is an R&amp;D Engineer at The New York Times. He specializes in 3D data visualization and augmented reality projects. Nick joined The Times in 2020.</em></p><h2 id="34c3" class="mh">Acknowledgements</h2><p id="adfa" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga"><em class="ok">Nadja Popovich, Noah Pisner, Evan Grothjan, Daniel Mangosing, Karthik Patanjali and Scott Reinhard contributed research, editing, 2D and 3D graphics for the Dixie fire article with additional work by Or Fleisher, Sam Manchester and Jeremy White.</em></p><p id="1196" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><em class="ok">Evan Grothjan, Lydia Jessup, Daniel Mangosing, Nadja Popovich and Noah Pisner produced the augmented reality experience with additional work by Karthik Patanjali, Scott Reinhard and James Surdam.</em></p><p id="9730" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><em class="ok">We would like to thank Lenny BeckRoda for reviewing this post.</em></p></div></div></section></div></div></article></div>]]></description>
      <link>https://open.nytimes.com/how-we-recreated-the-dixie-wildfires-plume-from-radar-and-satellite-data-d6e829a727cd</link>
      <guid>https://open.nytimes.com/how-we-recreated-the-dixie-wildfires-plume-from-radar-and-satellite-data-d6e829a727cd</guid>
      <pubDate>Fri, 28 Oct 2022 23:48:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Collective Decision-Making with AHP]]></title>
      <description><![CDATA[<div class="iz ja jb jc jd"><figure class="kw kx ky kz gx la gl gm paragraph-image"><div role="button" tabindex="0" class="lb lc do ld ce le gl gm kv"><picture><img alt="" class="ce lf lg c" width="700" height="427" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
<figcaption class="lh bl gn gl gm li lj bm b bn bo cn">Illustration by <a class="au lk" href="https://david-huang.com/" rel="noopener ugc nofollow" target="_blank">David Huang</a></figcaption></figure><p id="18a8" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">By David E. Wheeler</p><p id="d7b5" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">When in the course of Engineering events it becomes necessary to make a decision between alternatives, how does a team go about it? Often a single engineer decides, based on their expertise and experience, and where the scope is narrow enough not to need the input of the whole team. But what about decisions that impact many teams, processes, future technology decisions, and organization-wide use-cases? Who decides then, and how?</p><p id="619c" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The Identity Team at The Times, responsible for building and maintaining identity and authentication services for all of our users, has embarked on an ambitious project to build a centralized identity platform. We’re going to make a lot of decisions, such as what languages we should use, what database, how we can best protect personal information, what the API should look like, and <em class="mh">so</em> much more. Just thinking about the discussions and consensus-building required for a project of this scope daunts even the most experienced decision-makers among us. Fortuitously, a presentation at <a class="au lk" href="https://leaddev.com/staffplus-new-york/" rel="noopener ugc nofollow" target="_blank">StaffPlus NYC</a> by Comcast Fellow <a class="au lk" href="http://www.johnriviello.com/" rel="noopener ugc nofollow" target="_blank">John Riviello</a> introduced a super fascinating approach to collective decision-making, the Analytic Hierarchy Process (<a class="au lk" href="https://en.wikipedia.org/wiki/Analytic_hierarchy_process" rel="noopener ugc nofollow" target="_blank">AHP</a>).</p><p id="0428" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">AHP participants compare pairs of evaluation criteria to establish their prioritization. Then they compare each pair of alternatives for each criterion. For example, Wikipedia’s <a class="au lk" href="https://en.wikipedia.org/wiki/Analytic_hierarchy_process_%E2%80%94_Leader_example" rel="noopener ugc nofollow" target="_blank">leader example</a> compares four criteria (six pairwise comparisons) for three candidates (three pairwise comparisons for each of the four criteria).</p><p id="13d4" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">We thought AHP might be a good tool to ensure a careful evaluation and choice we could be well-aligned on. But getting a sizable group of people together to run such a session on a slew of criteria and options will take some doing: they have to decide on the criteria and diligently evaluate each option in advance. Depending on the number of options and criteria, the geometric multiplicity can get quite large. A more detailed example for <a class="au lk" href="https://en.wikipedia.org/wiki/Analytic_hierarchy_process_%E2%80%93_car_example" rel="noopener ugc nofollow" target="_blank">choosing a family car</a> evaluates six models against 10 criteria for a total of 120 pairwise comparisons. It’s a lot.</p><p id="60bc" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">The team decided to trial the process without making a huge time commitment. We just needed a more focused problem space to run through AHP. Fortunately, in designing the user schema for identity — which defines the types and structure of personal information about Times users — we have recognized the need for a new, canonical ID for New York Times readers. (Privacy is essential when handling identifiers. We won’t cover privacy here, but have written about <a class="au lk" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/how-the-new-york-times-thinks-about-your-privacy-bc07d2171531">how we think about it and how we manage it</a> in the past.)</p><p id="4791" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">We decided to trial AHP by evaluating a short list of ID formats against an equally short list of pertinent criteria. Over several weeks of research and diligence, we added and removed criteria and options, and settled on the hierarchy in this AHP-style diagram:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div role="button" tabindex="0" class="lb lc do ld ce le gl gm nf"><picture><img alt="" class="ce lf lg c" width="700" height="254" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="9436" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Once we felt the options and criteria were sufficient and well-documented, we got the whole team together on a Friday to run through the AHP process. Here’s how it went. (Warning: lots of data and tables ahead; if you’re not interested in the details of how an AHP runs, skip down to <a class="au lk" href="https://docs.google.com/document/d/1ShuYG1LJVCDZcgGYjEQipY0DkWzFmYlKHlcEWBaLuMY/edit?pli=1#heading=h.ydy2ciueux8v" rel="noopener ugc nofollow" target="_blank">Discussion</a> for outcomes and conclusions. No judgment, this is an annoyingly long post!)</p><p id="9a92" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">The evaluation criteria we settled on were:</p><ul class=""><li id="3f93" class="ng nh jg ln b lo lp lr ls lu ni ly nj mc nk mg nl nm nn no ga"><strong class="ln jh">Database Support:</strong> Do database engines typically support it natively, either as an explicitly data type or via binary representation.</li>
<li id="de9c" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><strong class="ln jh">Developer UX:</strong> How nice is the ID for use by developers? Is the format easy to work with, to copy-and-paste, and supported by libraries. Length is less of an issue, though shorter is still nicer than longer.</li>
<li id="8092" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><strong class="ln jh">Distributed Uniqueness:</strong> The ability to generate a unique identifier in a distributed fashion, among a number of distributed nodes, without collision.</li>
<li id="0f4c" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><strong class="ln jh">Ordering:</strong> The IDs are ordered and can be sorted, e.g. by time. Useful also for range partitioning but not hash partitioning.</li>
<li id="1e7f" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><strong class="ln jh">Randomness:</strong> Is the format sufficiently non-sequential or random to minimize the chances of ID discovery by cycling through IDs. Sequences, for example, are problematic because if a user’s ID is 93823, they can probably find that 93824 and 93825 are valid IDs, too. Even ordered but not-strictly sequential IDs are somewhat easier to discover than fully-random IDs.</li>
</ul><p id="e1ce" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">For each pair of criteria, we discussed the relative importance of one over the other until we settled on a consensus score. The result is a matrix of pairs, with 1 assigned to the less-important of a pair and a number between 1 and 9 to represent the intensity of the importance of the other. This table (from Wikipedia’s <a class="au lk" href="https://en.wikipedia.org/wiki/Analytic_hierarchy_process_%E2%80%93_leader_example" rel="noopener ugc nofollow" target="_blank">leader example</a>) defines the intensity of importance for each score:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div role="button" tabindex="0" class="lb lc do ld ce le gl gm nu"><picture><img alt="" class="ce lf lg c" width="700" height="314" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="f58c" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">For the criteria, our final scoring was:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div role="button" tabindex="0" class="lb lc do ld ce le gl gm nv"><picture><img alt="" class="ce lf lg c" width="700" height="512" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="db1a" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Here’s how to read it:</p><ul class=""><li id="6e39" class="ng nh jg ln b lo lp lr ls lu ni ly nj mc nk mg nl nm nn no ga">Developer UX is moderately more important than database support</li>
<li id="350f" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga">Distributed Uniqueness is strongly more important than database support</li>
<li id="ca10" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga">Database support is slightly more important than ordering</li>
<li id="e487" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga">Randomness is slightly more important than database support</li>
</ul><p id="4dcc" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">And so on. Plugging these numbers into Comcast’s <a class="au lk" href="https://github.com/ComcastSamples/ahp-tool" rel="noopener ugc nofollow" target="_blank">AHP webapp</a>, we get this nice diagram illustrating the relative weighting of each criterion based on the AHP calculations:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div role="button" tabindex="0" class="lb lc do ld ce le gl gm nf"><picture><img alt="" class="ce lf lg c" width="700" height="350" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="2026" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Distributed uniqueness was far and away the most important criterion. Developer UX was a distant second, with the others declining in importance from there. Here’s a sorted table of the weightings, which sum to 1:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div class="gl gm nw"><picture><img alt="" class="ce lf lg c" width="438" height="352" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="1c53" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">Next, for each criterion we compared each pair of options, using the same numbering system. The options we settled on were:</p><ul class=""><li id="74c5" class="ng nh jg ln b lo lp lr ls lu ni ly nj mc nk mg nl nm nn no ga"><a class="au lk" href="https://en.wikipedia.org/wiki/Universally_unique_identifier" rel="noopener ugc nofollow" target="_blank">UUID</a></li>
<li id="2242" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><a class="au lk" href="https://en.wikipedia.org/wiki/Snowflake_ID" rel="noopener ugc nofollow" target="_blank">Snowflake ID</a></li>
<li id="b685" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><a class="au lk" href="https://github.com/ai/nanoid" rel="noopener ugc nofollow" target="_blank">Nano ID</a></li>
<li id="5e7d" class="ng nh jg ln b lo np lr nq lu nr ly ns mc nt mg nl nm nn no ga"><a class="au lk" href="https://github.com/rs/xid" rel="noopener ugc nofollow" target="_blank">XID</a></li>
</ul><figure class="kw kx ky kz gx la gl gm paragraph-image"><div class="gl gm nx"><picture><img alt="" class="ce lf lg c" width="394" height="1622" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="02cf" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">Plugging those numbers into Comcast’s <a class="au lk" href="https://github.com/ComcastSamples/ahp-tool" rel="noopener ugc nofollow" target="_blank">AHP webapp</a> gives us this final scoring:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div role="button" tabindex="0" class="lb lc do ld ce le gl gm nf"><picture><img alt="" class="ce lf lg c" width="700" height="175" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="c106" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><a class="au lk" href="https://en.wikipedia.org/wiki/Universally_unique_identifier" rel="noopener ugc nofollow" target="_blank">UUID</a> is the big winner here, with <a class="au lk" href="https://github.com/ai/nanoid" rel="noopener ugc nofollow" target="_blank">Nano ID</a> in second place and <a class="au lk" href="https://en.wikipedia.org/wiki/Snowflake_ID" rel="noopener ugc nofollow" target="_blank">Snowflake ID</a> and <a class="au lk" href="https://github.com/rs/xid" rel="noopener ugc nofollow" target="_blank">XID</a> trailing behind. Here’s a sorted table of the scores, which sum to 1:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><div class="gl gm ny"><picture><img alt="" class="ce lf lg c" width="322" height="300" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /></picture></div>
</figure><p id="b104" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">There were a couple of surprises in the outcome of this process.</p><p id="565d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">We had expected distributed uniqueness to be the most important criterion, given our plan to adopt a distributed database. We had not anticipated that developer experience would rank so highly. In discussing what “developer experience” meant, we expanded it (from the original notes about ease of double-clicking for copy and paste) to include library support across a variety of languages. This led to weighting UX higher than randomness, ordering, or database support.</p><p id="b8aa" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">This expanded interpretation of developer experience also unexpectedly allowed UUID, who’s awful default format is not double-clickable (try it on this — 3c893566-c125–4741-a68a-33e91410b7e2 — it won’t select the whole thing), to win out over Snowflake, which has an aesthetically pleasing string representation but does not have the broad industry and library support of UUID.</p><p id="15ac" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">As for the final analysis, we had expected UUID and Snowflake to end up the top two choices, and could not have said which one would win. Finding UUID to be the clear leader was unsurprising, but Nano ID handily defeating Snowflake was a real curveball. The explanation for this result almost certainly falls entirely on Snowflake’s poorer showing in the distributed uniqueness criterion. Yes, it very much supports uniqueness in distributed systems, but the need to configure unique node IDs for each instance generating Snowflakes, together with its expiration date (Snowflake IDs cannot be created beyond a certain date, generally 69 or 174 years) led to UUID and Nano ID freezing it out: neither expire or require configuration.</p><p id="e156" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Personally I’m glad Nano ID lost to UUID, because Nano has quite poor database support and is much larger than UUID (21 bytes vs 16 bytes). I was rooting for Snowflake due to its small size and efficient algorithm, and because I’m not fond of UUID’s default string format. But I take consolation in the fact that we don’t have to use that format. If we <a class="au lk" href="https://en.wikipedia.org/wiki/Base62" rel="noopener ugc nofollow" target="_blank">Base62</a> encode a UUID, rather than a typical hideous string like 3c893566-c125–4741-a68a-33e91410b7e2, we can have ifWIoI9ZU00gOqkgNrmE5B. Much more compact (22 vs. 36 chars) and double-clickable (no dashes — try it!).</p><p id="5cbc" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">One way or the other, Identity user IDs will be UUIDs. And this exercise allows that choice to be uncontroversial among members of the team.</p><p id="630e" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">We consider the <a class="au lk" href="https://en.wikipedia.org/wiki/Analytic_hierarchy_process" rel="noopener ugc nofollow" target="_blank">AHP</a> experiment to be a great success. The team enjoyed the process, as it gave us a chance to closely example the criteria and options, to better understand the features and trade-offs of each option, and to see our fine-grained analysis nicely captured by the algorithm. As we made our way through, it became pretty clear what the winner would be, and that’s a good thing, since we gave all of the options a proper airing and felt that the objective result reinforced our findings.</p><p id="8890" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">We plan to use <a class="au lk" href="https://en.wikipedia.org/wiki/Analytic_hierarchy_process" rel="noopener ugc nofollow" target="_blank">AHP</a> next to select a distributed database for the platform. We’ll likely have more criteria, options, and stakeholders, so perhaps we’ll need to take a full day to run through it (as opposed to the 90 minutes or so for this one). But the diligence it requires and consensus it builds will allow us to be confident in our conclusions, satisfied by the result, and agreed on the choice.</p><p id="9d03" class="pw-post-body-paragraph ll lm jg ln b lo na kh lq lr nb kk lt lu nc lw lx ly nd ma mb mc ne me mf mg iz ga">I’d like to thank the members of the identity team for gamely running through the AHP, including Brigitte Lamarch, Pete Saia, An Yu, Alex Detrick and Jethro Chu. Deep appreciation to Penina Kessler, Danielle Roades Ha, Shilpa Kumar, Shawn Bower, Tanya Forsheit and Robin Berjon for the close reading of drafts of this post that made it so much better.</p></div><div class="iz ja jb jc jd"><p id="7d7b" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga"><em class="mh">David E. Wheeler is a staff engineer for The New York Times where he works on designing and building the next generation identity platform. He is a lifetime student of systems design, privacy, team enablement, culture and society, as well as fermentation.</em></p></div>]]></description>
      <link>https://open.nytimes.com/collective-decision-making-with-ahp-3ef819e5bc2a</link>
      <guid>https://open.nytimes.com/collective-decision-making-with-ahp-3ef819e5bc2a</guid>
      <pubDate>Thu, 13 Oct 2022 17:19:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Effortless Alerting for Platforms and Their Tenants]]></title>
      <description><![CDATA[<div><article><div class="l"><div class="l"><header class="pw-post-byline-header go gp gq gr gs gt gu gv gw gx l"><div class="o gy u"><div class="o"><div class="l"></div></div></div></header><section><div><div class="iz ja jb jc jd"><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg" width="700" srcset="https://miro.medium.com/max/640/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 640w, https://miro.medium.com/max/720/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 720w, https://miro.medium.com/max/750/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 750w, https://miro.medium.com/max/786/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 786w, https://miro.medium.com/max/828/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 828w, https://miro.medium.com/max/1100/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 1100w, https://miro.medium.com/max/1400/1*djPeUB3OvcB6vH-Wc4tNKA.jpeg 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"><figcaption class="lh bl gn gl gm li lj bm b bn bo cn">Illustration by <a class="au lk" href="https://www.francozacha.com/">Franco Zacha</a></figcaption></figure><p id="35a8" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">By <a class="au lk" href="https://www.linkedin.com/in/ben-weintraub-175b77/"><strong class="ln jh">Ben Weintraub</strong></a>, <a class="au lk" href="https://www.linkedin.com/in/katelynsalvatori/"><strong class="ln jh">Katelyn Salvatori</strong></a> and <a class="au lk" href="https://www.linkedin.com/in/jlawrie/"><strong class="ln jh">James Lawrie</strong></a></p><p id="3743" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Platform teams owning multi-tenant systems are often faced with a difficult choice: make themselves the central dispatchers for all alerts related to their tenants, or delegate alerting responsibilities to their tenant teams, and accept the risk that those teams will incorrectly configure their alerts (or not configure them at all), resulting in production incidents that leave the organization with a bad impression of the platform. The former approach emphasizes platform stability and accountability at the risk of burning out the platform team, while the latter emphasizes autonomy and flexibility for tenant teams, at the cost of pushing more work onto tenants, thus diminishing the value of a centralized platform.</p><p id="b421" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Faced with this scenario, platform teams benefit from an approach that makes it as easy as possible for their tenants to do the right thing in terms of configuring alerting by standardizing and automating the management of alerting policies on behalf of tenants. In this post, we&#x2019;ll discuss how we arrived at an approach like this in the Publishing Pipeline Team at The New York Times.</p><p id="e35b" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The Publishing Pipeline Team handles the centralization, accessibility and distribution of published content to feature teams and other internal platforms. We enable systems to publish content and consume published content independently of each other. Our primary interface with client teams is via their consumption of topics in Apache Kafka containing published content, but some of these same patterns should apply to other types of platform teams as well.</p><p id="7b18" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">One of the key jobs of any platform team, ours included, is to set tenants up for success, and steer them towards best practices in their use of the platform. Economic theory gives us a useful framework to think about how to achieve this.</p><h2 id="4135" class="mh">Lessons from economics</h2><p id="3254" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Software engineers are constantly making economic decisions. Sometimes, these decisions are directly about money (how much does cloud vendor A&#x2019;s service cost compared to vendor B&#x2019;s for our use case?), but more frequently, they concern the expenditure of our most valuable resource: time. In the idealized model of economic decision making, we all function as perfectly rational actors, but we know that cognitive biases, imperfect information, limited mental energy to devote to decision-making, and the possibility of not even realizing that there&#x2019;s a decision to be made collectively exert a heavy influence on our choices.</p><p id="5c04" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The area of <a class="au lk" href="https://en.wikipedia.org/wiki/Choice_architecture">choice architecture</a> is a relatively new field of economics concerned with how the presentation of choices (and critically, their defaults) impacts our behavior in the aggregate. The central thesis is that through careful selection of defaults, and consideration of how and when choices are presented, we can influence aggregate behavior in socially desirable ways.</p><p id="ba8e" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The <a class="au lk" href="https://www.nytimes.com/2011/10/16/technology/default-choices-are-hard-to-resist-online-or-not.html?searchResultPosition=3">selection of a default</a> is an obvious way to influence a choice. An oft-cited example is the choice to automatically enroll employees in an employer-sponsored retirement savings program (while preserving their ability to opt-out if desired).</p><p id="2abf" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">A less obvious but equally important factor is the <em class="ne">timing and context</em> of when choices are presented. An example here is the practice of encouraging voter registration by <a class="au lk" href="https://civicdesign.org/streamlining-and-nudging-in-voter-registration/">allowing folks to register during their visit to a state DMV office</a>. By taking advantage of an <strong class="ln jh">existing touchpoint</strong> that citizens have with their state bureaucracy (renewing a driver&#x2019;s license or ID card), the law lowers the barrier to entry for voter registration, and presents the choice to register proactively instead of relying on individuals to know that this is something that they should do and seek out an opportunity to register.</p><h2 id="15d9" class="mh">Choice architecture and alerting for platform teams</h2><p id="0636" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Applying an economic lens to the problem of configuring alerting policies for multi-tenant software systems, we can see some parallels between the problem of individual decision making in the economic / social policy space and the software engineering space.</p><p id="ee82" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Tenant services within a shared platform need to have alerting configured against them, but it&#x2019;s not always obvious who should define and manage those alerting policies. Platform teams are well positioned to define what signals to alert against, and how to get at them, but with more than a trivial number of tenants, it&#x2019;s impractical for them to be on the receiving end of the generated alerts.</p><p id="473d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Since it&#x2019;s generally considered rude to set up alert policies that wake people up in the middle of the night without their knowledge, that leaves platform teams with the problem of how to design a strategy for alert management that <em class="ne">involves</em> their client teams and ensures their consent, but makes the process as easy, reliable, and automatic as possible. If you squint at it, this is the voter registration problem all over again: you can&#x2019;t register someone to vote without getting at least some information (and consent) from them, but you want to do everything possible to streamline that exchange.</p><h2 id="929c" class="mh">Standardizing on an alerting signal</h2><p id="388b" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">The Publishing Pipeline team supports over 40 client services consuming from a set of Kafka topics in order to process new content as it is published. (For more background on how we use Kafka to power publishing, see <a class="au lk" href="https://www.confluent.io/blog/publishing-apache-kafka-new-york-times/">this post</a>.)</p><p id="028d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">These services are written in a variety of languages and owned by teams with varying degrees of experience with Kafka, so the first challenge when crafting our observability story was figuring out how to extract a meaningful signal that we could use to drive standardized alerting policies across this diverse array of tenants, without pushing more work onto client teams.</p><p id="a8a8" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The signal that we&#x2019;ve chosen to emphasize is Kafka consumer lag, which has the advantage of being easy to capture from the outside of a consumer (in a language-agnostic way, with minimal integration effort from consuming applications) and of encompassing a broad range of failure modes. The next section will explain Kafka consumer lag and how we monitor it.</p><h2 id="b0c5" class="mh">Background: Kafka Consumer Lag</h2><p id="9476" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">In Kafka, consuming processes (which we will be calling <strong class="ln jh">&#x2018;consumers&#x2019;</strong> in this post per <a class="au lk" href="https://docs.confluent.io/platform/current/clients/consumer.html">Kafka convention</a>) ingest messages from an ordered log known as a partition. New messages are constantly being appended to the end of the log. A consumer&#x2019;s <a class="au lk" href="https://docs.confluent.io/platform/current/tutorials/examples/ccloud-observability/docs/consumer-scenarios/increasing-consumer-lag.html"><strong class="ln jh">lag</strong></a> is an attempt to quantify how &#x2018;far behind&#x2019; the end of the log it is. Lag can be measured in either units of messages (how many messages are available but not yet processed) or time (what is the age of the oldest un-processed message?). There are trade-offs between these two ways of conceptualizing lag that we&#x2019;ll discuss in more detail later, but in our current implementation, we measure lag in messages.</p><p id="aad7" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Regardless of the units used, Kafka consumer lag is a useful signal to drive alerting for three reasons. First, it captures a <strong class="ln jh">broad range of failure modes</strong> (the consumer is not running at all, the consumer is running but is pointed at the wrong topic/cluster, the consumer can&#x2019;t authenticate, the consumer is processing too slowly to keep up, etc.). Second, it&#x2019;s <strong class="ln jh">independent of the rate of message production</strong>, which is often periodic in nature. If the topic being consumed has legitimate periods of inactivity, lag continues to be a useful metric even during those periods. Finally, it&#x2019;s relatively <strong class="ln jh">easy to measure in a standardized way</strong> without requiring application changes, since Kafka consumers store their positions within each partition in the Kafka cluster itself via their committed offsets.</p><h2 id="8b71" class="mh">Measuring Kafka consumer lag</h2><p id="caab" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">There are multiple open-source and proprietary tools available for collecting Kafka consumer lag data from the Kafka cluster and importing it into a monitoring system of your choice. Common choices include <a class="au lk" href="https://github.com/linkedin/Burrow">burrow</a> and the <a class="au lk" href="https://github.com/seglo/kafka-lag-exporter">kafka-lag-exporter</a>.</p><p id="d076" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">At The New York Times, we use an in-house tool that collects lag data for all Kafka consumers from the cluster, and exports it into custom metrics in our observability vendor. The whole setup looks something like this:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/0*BCKdk9HZSgDiiixv" width="700" srcset="https://miro.medium.com/max/640/0*BCKdk9HZSgDiiixv 640w, https://miro.medium.com/max/720/0*BCKdk9HZSgDiiixv 720w, https://miro.medium.com/max/750/0*BCKdk9HZSgDiiixv 750w, https://miro.medium.com/max/786/0*BCKdk9HZSgDiiixv 786w, https://miro.medium.com/max/828/0*BCKdk9HZSgDiiixv 828w, https://miro.medium.com/max/1100/0*BCKdk9HZSgDiiixv 1100w, https://miro.medium.com/max/1400/0*BCKdk9HZSgDiiixv 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"></figure><h2 id="6242" class="mh">Structuring and managing alerting policies</h2><p id="8627" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">With the prerequisites (which signal to use for driving alerting, and how to collect it) out of the way, we now come to the fundamental question of ownership: who defines the alerting policies, who gets notified when they fire, and how?</p><p id="f2e5" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The simplest possible approach is to alert on the consumer lag for every extant consumer group. That might look something like this:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/0*Jukv3I5m6LPEmViN" width="700" srcset="https://miro.medium.com/max/640/0*Jukv3I5m6LPEmViN 640w, https://miro.medium.com/max/720/0*Jukv3I5m6LPEmViN 720w, https://miro.medium.com/max/750/0*Jukv3I5m6LPEmViN 750w, https://miro.medium.com/max/786/0*Jukv3I5m6LPEmViN 786w, https://miro.medium.com/max/828/0*Jukv3I5m6LPEmViN 828w, https://miro.medium.com/max/1100/0*Jukv3I5m6LPEmViN 1100w, https://miro.medium.com/max/1400/0*Jukv3I5m6LPEmViN 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"></figure><p id="97ec" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">In this approach, we have a single monitor in Datadog that triggers whenever any consumer group is lagging by &gt; 5 messages, and notifies the platform team. The platform team is then responsible for dispatching as needed to individual client teams. The limitations of this approach quickly reveal themselves:</p><ul class><li id="0a72" class="nh ni jg ln b lo lp lr ls lu nj ly nk mc nl mg nm nn no np ga">Not every consumer is of the same operational importance. For example, a consumer that&#x2019;s in the critical path for making newly published content available on the site probably warrants a tight alerting threshold and a high-urgency notification channel, but a background process that supports offline analytics workloads might not.</li><li id="1d63" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga">Teams will often want to run multiple copies of a given consumer, with distinct consumer group names in order to test out new approaches or enable local development with real production data.</li><li id="6999" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga">The question of <em class="ne">who</em> to notify is difficult to answer without some kind of structured metadata mapping consumer group names to notification channels. (Notifying the platform team becomes unsustainable with more than a handful of distinct consuming applications and teams.)</li></ul><p id="1d65" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The key point is that in order to automate the creation of effective alerting policies, we need to collect some amount of structured metadata about each consuming application and the teams who own them.</p><p id="cc73" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">With that data in hand, we can instead structure our alerts like this:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/0*eyoq5D9zFPQePurX" width="700" srcset="https://miro.medium.com/max/640/0*eyoq5D9zFPQePurX 640w, https://miro.medium.com/max/720/0*eyoq5D9zFPQePurX 720w, https://miro.medium.com/max/750/0*eyoq5D9zFPQePurX 750w, https://miro.medium.com/max/786/0*eyoq5D9zFPQePurX 786w, https://miro.medium.com/max/828/0*eyoq5D9zFPQePurX 828w, https://miro.medium.com/max/1100/0*eyoq5D9zFPQePurX 1100w, https://miro.medium.com/max/1400/0*eyoq5D9zFPQePurX 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"></figure><p id="b734" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">This allows us to use different alerting thresholds per consumer group, and dispatch directly to client teams, while maintaining a standardized alerting format and ensuring good alerting coverage.</p><p id="a3ca" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">In this approach, a consumer doesn&#x2019;t get any alerting at all unless it&#x2019;s listed in the consumer inventory, so the next problem to tackle is how to ensure that that inventory is up-to-date, especially when new consumers are onboarded.</p><h2 id="76a5" class="mh">Automating Kafka consumer inventory updates</h2><p id="911f" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">When a client onboards a consumer of our Kafka topics, they fill out a form that prompts them for some information about their service and use case, in order to trigger provisioning of Kafka credentials for them. As in the example of registering to vote while getting your license, we chose to leverage this touchpoint with the client team to proactively configure monitoring and alerting at the same time with minimal extra effort.</p><p id="2c68" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">In the coming sections, we&#x2019;ll dive into how we built up the automation for alerting on consumer lag in our system and explore the decisions we made along the way.</p><h2 id="e0a0" class="mh">The Approach &amp; Configuration</h2><p id="973d" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">We had to decide what information we would collect from client teams in order to configure policies for alerting on consumer lag. There&#x2019;s a trade-off here between flexibility and the cognitive overhead for the person submitting the information. Following the principles of streamlining voter registration we discussed above, we sought to minimize the number of questions people would have to answer by carefully identifying the minimum amount of information needed. We want the configuration process to be flexible and simple, yet maximally effective by still always alerting on a useful metric.</p><p id="184d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The first approach to a &#x201C;simple&#x201D; lag monitoring configuration required the following information:</p><ul class><li id="1c3b" class="nh ni jg ln b lo lp lr ls lu nj ly nk mc nl mg nm nn no np ga"><strong class="ln jh">Consumer group name(s)</strong>. When someone wants to consume from a Kafka topic, they must create a named consumer group. That name (or names if the same application has, for example, consumers in multiple regions) will be queried for lag in our metric.</li><li id="5005" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga"><strong class="ln jh">Notification channel(s)</strong>. These are the places where alerts will be sent, and can be any combination of Slack channels, PagerDuty service, or email addresses.</li><li id="5afa" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga"><strong class="ln jh">Threshold</strong>. This is the number of messages behind the tail of the log that will trigger an alert. For example, if your consumer is highly critical or it reads from a low-throughput topic, you may want to set a very low threshold.</li></ul><p id="552d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">This approach worked well for our first use case: a tool that allowed clients to migrate their consumers from our self-managed Kafka cluster to a fully managed Confluent Cloud cluster. Clients migrated a single consumer group at a time, and they supplied their new consumer names directly in the tool, meaning we knew exactly which consumer group name to monitor.</p><p id="1ccb" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">However, this was less useful with our other &#x2014; and arguably more important &#x2014; use case: onboarding new consumers. When onboarding a new service to our platform, the individual filling out the form may not know yet what their consumer group(s) will be named.</p><p id="9486" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Furthermore, if they&#x2019;re planning to use multiple consumers, these consumers may have varying priority: lag in a consumer used in a production environment may warrant a PagerDuty alert, but a team may not want the same for their development consumers. If we force teams to couple these groups together, they may have production alerts going to a place they don&#x2019;t immediately get notifications from, or they may get a lot of unwanted noise regarding their development consumers in production channels, encouraging them to ignore such alerts. If we continued down our original path, we would have to tell an onboarding client to skip lag monitor configuration if they do not know their consumer group name, forcing them to come back to set it up later (if they remember).</p><p id="872d" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">To solve this problem, we came up with a new configuration scheme that a client would know all the answers to at the time of onboarding and that would solve the problem of priority along the way:</p><ul class><li id="b1c1" class="nh ni jg ln b lo lp lr ls lu nj ly nk mc nl mg nm nn no np ga"><strong class="ln jh">High priority notification channel(s)</strong>. These should be channels that the team pays close attention to for production (or otherwise high-priority) alerts.</li><li id="2965" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga"><strong class="ln jh">Low priority notification channel(s)</strong>. This is optional; if not supplied, alerts deemed &#x201C;low priority&#x201D; will not send alerts anywhere &#x2014; they will just be visible in Datadog.</li><li id="ff70" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga"><strong class="ln jh">A substring indicating that a consumer group name is &#x201C;high priority&#x201D;</strong>. The client may not know <em class="ne">exactly </em>what their consumer group name(s) will be at the time of onboarding, but they can decide that any consumer groups for their service containing a particular substring will be high priority. For example, if they enter &#x201C;production&#x201D; in this field, any consumer group name for the onboarded service containing the string &#x201C;production&#x201D; will generate alerts to the provided high-priority channel(s). Alerts for consumers that do not contain &#x201C;production&#x201D; in their names will go to the low-priority channel(s), if provided.</li><li id="52e6" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga"><strong class="ln jh">Threshold</strong>. This remains unchanged from the old configuration scheme.</li></ul><p id="25fb" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Here&#x2019;s how all of these pieces fit together with some example configurations:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/0*18fkGNlmWs8Vd3vG" width="700" srcset="https://miro.medium.com/max/640/0*18fkGNlmWs8Vd3vG 640w, https://miro.medium.com/max/720/0*18fkGNlmWs8Vd3vG 720w, https://miro.medium.com/max/750/0*18fkGNlmWs8Vd3vG 750w, https://miro.medium.com/max/786/0*18fkGNlmWs8Vd3vG 786w, https://miro.medium.com/max/828/0*18fkGNlmWs8Vd3vG 828w, https://miro.medium.com/max/1100/0*18fkGNlmWs8Vd3vG 1100w, https://miro.medium.com/max/1400/0*18fkGNlmWs8Vd3vG 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"></figure><h2 id="cf25" class="mh">The Flow</h2><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/0*Cw1bMeLySqh2NY8K" width="700" srcset="https://miro.medium.com/max/640/0*Cw1bMeLySqh2NY8K 640w, https://miro.medium.com/max/720/0*Cw1bMeLySqh2NY8K 720w, https://miro.medium.com/max/750/0*Cw1bMeLySqh2NY8K 750w, https://miro.medium.com/max/786/0*Cw1bMeLySqh2NY8K 786w, https://miro.medium.com/max/828/0*Cw1bMeLySqh2NY8K 828w, https://miro.medium.com/max/1100/0*Cw1bMeLySqh2NY8K 1100w, https://miro.medium.com/max/1400/0*Cw1bMeLySqh2NY8K 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"></figure><p id="a134" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">As described thus far, the onboarding team enters basic information into a Google Form about their service, which we use to provision credentials. As the last step, we prompt them to configure lag monitoring, and provide some information about what that is, why they should care, and what we need from them.</p><p id="dbd4" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">On form submission, we capture all the data they&#x2019;ve entered in a Google Apps Script, which makes a POST request to our backend service.</p><h2 id="8abb" class="nv mi jg bm mj nw nx ny mn nz oa ob mr lu oc od mt ly oe of mv mc og oh mx oi ga">2. The backend service</h2><p id="7ced" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">This service, written in Go, has an endpoint that consumes the data from the onboarding form and uses it to open pull requests in our infrastructure repository (described below) to provision Confluent Cloud credentials and, now, to create lag monitors. Once it has successfully opened the pull requests, it posts a message to our private team Slack channel alerting us that someone has made an onboarding request. The Slack message links us to any pull requests we have to review.</p><h2 id="479c" class="nv mi jg bm mj nw nx ny mn nz oa ob mr lu oc od mt ly oe of mv mc og oh mx oi ga">3. The infrastructure repository</h2><p id="237e" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">We have a repository where we store and manage Terraform configurations for our infrastructure. The pull request generated by the previous step for lag monitoring creates a YAML file with a predefined format in a specific subdirectory of our Terraform config.</p><p id="f21f" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">The YAML files in this directory are read by Terraform modules using its <a class="au lk" href="https://registry.terraform.io/providers/datadog/datadog/latest/docs">Datadog provider</a> to template monitors. When the pull request is approved, merged, and deployed, Terraform automatically creates the new monitor in Datadog. Any updates that need to be made to the monitor (e.g. fine-tuning the threshold) are done via pull requests to this repo. That process looks like an abbreviated version of the previous diagram:</p><figure class="kw kx ky kz gx la gl gm paragraph-image"><img alt class="ce lf lg c" src="https://miro.medium.com/max/1400/0*jJqi0L4Y4W79h2O-" width="700" srcset="https://miro.medium.com/max/640/0*jJqi0L4Y4W79h2O- 640w, https://miro.medium.com/max/720/0*jJqi0L4Y4W79h2O- 720w, https://miro.medium.com/max/750/0*jJqi0L4Y4W79h2O- 750w, https://miro.medium.com/max/786/0*jJqi0L4Y4W79h2O- 786w, https://miro.medium.com/max/828/0*jJqi0L4Y4W79h2O- 828w, https://miro.medium.com/max/1100/0*jJqi0L4Y4W79h2O- 1100w, https://miro.medium.com/max/1400/0*jJqi0L4Y4W79h2O- 1400w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px"></figure><h2 id="83fe" class="mh">The Monitor Query</h2><p id="1b64" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Here&#x2019;s what the query in Datadog looks like.</p><p id="f486" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">min(last_5m):max:kafka_lag{group:&lt;<em class="ne">consumer_group_name</em>&gt;} by {kafka-cluster,topic,group} &gt;= &lt;<em class="ne">threshold</em>&gt;</p><p id="337e" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">kafka_lag is a custom metric imported into Datadog by an application we maintain that calculates lag of all the consumer groups in our Kafka cluster.</p><p id="bfea" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">If a consumer group that matches consumer_group_name<em class="ne"> </em>has been lagging behind the tail of the topic by at least threshold<em class="ne"> </em>messages for all of the last 5 minutes, alert.</p><p id="ab21" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">Recall that we might not have a definitive consumer group name at the time of onboarding. We can still effectively fill in consumer_group_name here because we enforce (via Kafka ACLs) a rule about our consumer group names: they must be prefixed with the name of the service they&#x2019;re used by. Since the service name is a piece of information we already gather during onboarding, we can populate consumer_group_name in our query with the wildcard expression &lt;service_name&gt;-*.</p><p id="48cc" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">This flexibility in the featureset of Datadog has the implication that a single monitor is monitoring <em class="ne">all </em>consumer groups for this service, and we as a platform team want to steer the usage of these features in the direction that makes the most sense in the context of our platform. That&#x2019;s where the notification priority groups come into play: we leverage the message field in the Datadog provider to pass in notification channels. We leveraged Datadog&#x2019;s <a class="au lk" href="https://docs.datadoghq.com/monitors/notify/">notification templating capabilities</a>, and are able to use <a class="au lk" href="https://docs.datadoghq.com/monitors/notify/variables/?tab=is_alert#conditional-variables">conditionals</a> based on the name of the group and topic that are alerted on in order to direct notifications to the correct channel.</p><h2 id="e721" class="mh">Trade-offs and Possible Improvements</h2><h2 id="ea17" class="mh">Ease of Use vs. Speed of Iteration</h2><p id="4eee" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">The imperative with this system is that we make it <em class="ne">easy</em> for teams to do the right thing: monitor the lag of their consumers and receive alerts. We chose Google Forms as the tool for onboarding in the first place to get the system up and running quickly, test our process, and quickly iterate on it, but we have reached our limits with it as our interface.</p><p id="66e8" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">A critical piece of our alerting configuration is that clients can provide an arbitrarily long list of notification channels to ensure that alerts reach the right people at the right time. In our Google form, we settled upon asking respondents to enter a comma-separated list of values, but this is not ideal for a number of reasons:</p><ul class><li id="5fe7" class="nh ni jg ln b lo lp lr ls lu nj ly nk mc nl mg nm nn no np ga">It is not an easy or intuitive user experience. If the system isn&#x2019;t easy to use, our clients may not always provide complete information, and they may not get the maximum benefit from the system we&#x2019;ve built.</li><li id="2b7f" class="nh ni jg ln b lo nq lr nr lu ns ly nt mc nu mg nm nn no np ga">It leaves a lot of room for user error, especially since Google Forms has limited capabilities for validating user input. We attempt to guard against some mistakes later (e.g. by trimming whitespace), but we are unable to truly validate that input is valid until after submission, at which point the system can&#x2019;t easily alert the submitter to fix it. We, the team, have to check pull requests manually for mistakes and personally reach out to the submitter.</li></ul><p id="dd09" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">We are in the process of writing our own web application to replace the form. In our custom UI, the experience will be more intuitive, and we can do more immediate validation of responses.</p><h2 id="4282" class="mh">Time vs. Message-based Lag</h2><p id="2490" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Here we define &#x201C;consumer lag&#x201D; as <em class="ne">the number of messages </em>available from a partition to a consumer that it has not yet processed. This isn&#x2019;t the only way we could have defined lag, however. Instead of defining it in terms of number of messages, we could have defined it in terms of time, i.e. the age of the oldest unprocessed message. Time-based lag is technically more difficult to collect in the context of Kafka, but it is more intuitive to interpret than message-based lag measurements. If the rate of inbound messages varies significantly, there is no easy way to interpret message-based lag measurements. Our role as a platform team is to identify the metrics that are most valuable for monitoring, and we have identified lag as such a metric; to improve monitoring even further, we will move toward time-based measurement in the future.</p><h2 id="cdc5" class="mh">Conclusion</h2><p id="0e37" class="pw-post-body-paragraph ll lm jg ln b lo mz kh lq lr na kk lt lu nb lw lx ly nc ma mb mc nd me mf mg iz ga">Distilling the thesis of this post into a single sentence: platform teams benefit both themselves and their clients when they <strong class="ln jh">make it as easy as possible for platform tenants to do the right thing.</strong> That means they may need to expand their own notion of their teams&#x2019; purview to include configuring observability-related resources on behalf of their client teams. Some client teams will have specialized needs, and that&#x2019;s OK. Platform teams should aim to serve the common case, while retaining escape hatches for more specialized or sophisticated tenants.</p><p id="8f02" class="pw-post-body-paragraph ll lm jg ln b lo lp kh lq lr ls kk lt lu lv lw lx ly lz ma mb mc md me mf mg iz ga">For our team in practice, this means things like using the power of defaults to nudge platform users towards best practices, and taking advantage of existing touch-points to provide on-ramps to often-neglected tasks like setting up alerting. As with anything, this is a journey, not a destination: platform teams should continuously observe the common failure patterns and points of confusion that client teams encounter in trying to use their platform, looking for opportunities to further streamline the process of adoption through the principles of choice architecture.</p></div></div></section></div></div></article></div>]]></description>
      <link>https://open.nytimes.com/effortless-alerting-for-platforms-and-their-tenants-8bba32c3e9ca</link>
      <guid>https://open.nytimes.com/effortless-alerting-for-platforms-and-their-tenants-8bba32c3e9ca</guid>
      <pubDate>Fri, 23 Sep 2022 17:27:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Adopting a New Framework by Composing a Community]]></title>
      <description><![CDATA[<figure class="kx ky kz la gy lb gm gn paragraph-image"><div role="button" tabindex="0" class="lc ld dp le cf lf gm gn kw"><img alt="" class="cf lg lh" src="https://miro.medium.com/max/1400/1*a9RZLKpAwQ_iM5ZC_rPN3w.png" width="700" height="394" role="presentation" /></div>
</figure><p id="3ed8" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb"><strong class="lk ji">By Jasmine Chan and Pamela Bergson</strong></p><p id="afaf" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">This is a story about adopting new frameworks and using new technologies in a highly collaborative culture. We know that adopting new frameworks for your team is a continual challenge. For that reason, it’s often preferred to wait until engineers are working on a greenfield project, rather than working within legacy code to implement a new framework. At The New York Times, senior Android engineers, Omar Miatello and David Morant, solved this by leveraging our team’s existing knowledge sharing session to begin using a new framework, Jetpack Compose, in production.</p><p id="d1f2" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb"><a class="au me" href="https://developer.android.com/jetpack/compose?gclid=Cj0KCQjw0oyYBhDGARIsAMZEuMvirDxOHuRNbzC7AYwf4e5aniUM92N3EBmYSTSUqVmx3KN3MFC3nG8aArXJEALw_wcB&amp;gclsrc=aw.ds" rel="noopener ugc nofollow" target="_blank">Jetpack Compose</a>, a declarative UI framework introduced by Google in 2019, aims to simplify and speed up UI development time by allowing developers to define their UIs using a declarative style. This simplification caused a lot of excitement among the Android community, and the android engineers at The Times wanted to learn more about it. Given the new framework was still being worked on by Google, the implementation of the framework was fluctuating rapidly, and more capabilities were still to come. For example, animating items in lists, or transitioning between screens. Omar noted, “at the beginning there were some issues for everyone on the team. We’re used to thinking in a certain way, but with Compose it changes how you think about components because now, you have to think of building more reusable components instead of something that is for a certain case.”</p><p id="dfc4" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">Many developers learn about new technology frameworks building side projects in their spare time. Omar did so by migrating his existing side project, an app that organized tasks at home, to the Jetpack Compose framework. However, most engineers don’t have time to create substantial projects beyond their day to day work. Fellow senior engineer, David, found it challenging to get into deep learning with a side project in addition to doing his day to day role. When he did have some spare time, he would attempt to start a side project, but ultimately had his role’s work to prioritize when it came around again, and he would lose momentum on his side project.</p><p id="03f2" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">To resolve these time constraint issues, David and Omar were thinking of ways to create a consistent space for everyone to learn Jetpack Compose. David was a leader of our Mobile Community of Practice, a forum that enables all the Android and iOS developers at The Times to share knowledge and understand what each team is focused on. Out of this meeting, David and Omar brainstormed and moved forward with a weekly Jetpack Compose Club meeting.</p><p id="4b94" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">The club started out as a weekly space for engineers to do a show and tell on how they used the technology. We evolved it to become an introductory series, where the group would explore a pull request and go through key concepts by walking through the code and explaining what the goal was and also delving into the documentation that Google had about Jetpack Compose. The club further evolved to become a collaborative space for different side projects where they would choose a specific problem and swarm on implementing a solution with Jetpack Compose. This latest iteration of Compose Club is flexible for participants to attend any club meeting without missing out on new learning, so many of our engineers are able to come together and learn from one another. It has enabled engineers to learn how their colleagues could learn Compose concepts by applying them to a real life project they were working on, and thus, improved their own confidence in sharing their newfound knowledge of the new framework with their own teams.</p><p id="23c2" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">Aside from the obvious benefits of having a collaborative space like this to learn from one another, it’s also just more fun, exciting and interesting to learn in a supportive group versus independently.</p><p id="f5c0" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">In addition to leading the Jetpack Compose Club, Omar and David were then able to identify opportunities to use the framework in our core New York Times mobile application and bring together mobile engineers at The Times to help in reviewing their pull requests that used the new framework, allowing for more constructive feedback from their colleagues. Omar continues to use Jetpack Compose in The New York Times mobile app, while David has transitioned to the Audio team, where he’s building a greenfield app entirely with the same framework.</p><p id="2b31" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb">We composed a community so that we can learn together and gain confidence with the new framework. We got that and so much more. The community continues to meet together weekly to learn and exchange ideas. Their most lasting contribution to the apps is likely to be not the code they’ve written, but the community they’ve helped create.</p><p id="64b5" class="pw-post-body-paragraph li lj jh lk b ll lm ki ln lo lp kl lq lr ls lt lu lv lw lx ly lz ma mb mc md ja gb"><em class="mf">If you’d like to hear more about what our Android engineers are up to at The New York Times, David Morant and other engineering colleagues will be presenting talks at Droidcon NYC this September. Come say hi if you’ll be attending!</em></p>]]></description>
      <link>https://open.nytimes.com/adopting-a-new-framework-by-composing-a-community-1ed8138b2c2a</link>
      <guid>https://open.nytimes.com/adopting-a-new-framework-by-composing-a-community-1ed8138b2c2a</guid>
      <pubDate>Fri, 26 Aug 2022 18:53:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How The New York Times Uses Machine Learning To Make Its Paywall Smarter]]></title>
      <description><![CDATA[<div class="ja jb jc jd je"><figure class="gq gs kf kg kh ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn ke"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*Dqi6NpW53a_AOpH-NrTUig.gif" width="700" height="427" role="presentation" /></div>
<figcaption class="kp bm go gm gn kq kr bn b bo bp co">Illustration by <a class="au ks" href="https://mathieulabrecque.com/" rel="noopener ugc nofollow" target="_blank">Mathieu Labrecque</a></figcaption></figure></div><div class="ja jb jc jd je"><p id="0741" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb">The New York Times launched its paywall in March 2011, beginning its journey as a subscription-first news and lifestyle service. Since its inception, this “metered” access service has been designed so that nonsubscribers can read a fixed number of articles every month before encountering a paywall; this article limit is widely referred to as the “meter limit.” This strategy has proven successful in generating subscriptions while at the same time allowing for initial exploratory access to new readers. In fact, in February 2022, when The Times acquired The Athletic Media Company, The Times achieved its goal of 10 million subscriptions and set a <a class="au ks" href="https://www.nytco.com/press/our-strategy/" rel="noopener ugc nofollow" target="_blank">new target</a> of 15 million subscribers by the end of 2027. This success has been possible in part due to continuous improvements in the paywall strategy over the years. When the paywall was launched, the meter limit was the same for all users. However, as The Times has transformed into a data-driven digital company, we are now successfully using a causal machine learning model called the Dynamic Meter to set personalized meter limits and to make the paywall smarter.</p><figure class="lz ma mb mc gy ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn ly"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*xyI-asIz0ZHYF1L_1Kp-Bg.jpeg" width="700" height="394" role="presentation" /></div>
<figcaption class="kp bm go gm gn kq kr bn b bo bp co">Figure 1: The subscription funnel.</figcaption></figure><h2 id="af0f" class="md me jh bn mf mg mh mi mj mk ml mm mn ll mo mp mq lp mr ms mt lt mu mv mw mx gb"><strong class="ba">Our paywall strategy</strong></h2><p id="2763" class="pw-post-body-paragraph la lb jh lc b ld my lf lg lh mz lj lk ll na ln lo lp nb lr ls lt nc lv lw lx ja gb">The company’s paywall strategy revolves around the concept of the subscription funnel (Figure 1). At the top of the funnel are unregistered users who do not yet have an account with The Times. Once they hit the meter limit for their unregistered status, they are shown a registration wall that blocks access and asks them to make an account with us, or to log in if they already have an account. Doing this gives them access to more free content and, since their activity is now linked to their registration ID, it allows us to better understand their current appetite for Times content. This user information is valuable for any machine learning application and powers the Dynamic Meter as well. Once registered users hit their meter limit, they are served a paywall with a subscription offer. It is this moment that the Dynamic Meter model controls. The model learns from the first-party engagement data of registered users and determines the appropriate meter limit in order to optimize for one or more business K.P.I.s (Key Performance Indicators).</p><h2 id="7eb8" class="md me jh bn mf mg mh mi mj mk ml mm mn ll mo mp mq lp mr ms mt lt mu mv mw mx gb">What does the Dynamic Meter optimize for?</h2><p id="8923" class="pw-post-body-paragraph la lb jh lc b ld my lf lg lh mz lj lk ll na ln lo lp nb lr ls lt nc lv lw lx ja gb">The Dynamic Meter model must play a dual role. It should support our mission to help people understand the world and our business goal of acquiring subscriptions. This is done by optimizing for two metrics simultaneously: the engagement that registered users have with Times content and the number of subscriptions the paywall generates in a given time frame. These two metrics have an inherent trade-off since serving more paywalls naturally leads to more subscriptions but at the cost of article readership. This trade-off is clearly visible in the data collected by a Randomized Control Trial (R.C.T.) as shown in Figure 2. As the meter limit for registered users increases, the engagement measured by average number of page views gets larger. This is accompanied by a reduction in the conversion rate for subscriptions, largely because a lesser number of registered users encounter the paywall. Conversely, a larger amount of friction due to tighter meter limits also impacts readers’ habituation and potentially gets them less interested in our content. This in turn affects the potential to convert them as subscribers in the longer term. In essence, the Dynamic Meter must optimize for conversion and engagement while balancing a trade-off between them.</p><figure class="lz ma mb mc gy ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn ly"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*gP1tWuvjiAvkH3-mgs0lAQ.jpeg" width="700" height="394" role="presentation" /></div>
<figcaption class="kp bm go gm gn kq kr bn b bo bp co">Figure 2: The trade-off between conversion and engagement as seen through a Randomized Control Trial (R.C.T.).</figcaption></figure><h2 id="c5ba" class="md me jh bn mf mg mh mi mj mk ml mm mn ll mo mp mq lp mr ms mt lt mu mv mw mx gb">The Dynamic Meter is a prescriptive machine learning model.</h2><p id="664a" class="pw-post-body-paragraph la lb jh lc b ld my lf lg lh mz lj lk ll na ln lo lp nb lr ls lt nc lv lw lx ja gb">The goal of the model is to prescribe meter limits from a limited set of options available. Thus, the model must take an action that will affect a user’s behavior and influence the outcome, such as their subscription propensity and engagement with Times content. In contrast to a predictive machine learning model, the ground truth for prescriptive problems is <a class="au ks" href="https://arxiv.org/abs/2112.08268" rel="noopener ugc nofollow" target="_blank">rarely known</a>. That is, say a user was prescribed meter limit <em class="nd">a</em>, we do not know what would have happened to this user if they were prescribed a different meter limit <em class="nd">b</em> during the same time frame. This problem is sometimes called the “<a class="au ks" href="https://www.sciencedirect.com/science/article/pii/B9780080448947013130" rel="noopener ugc nofollow" target="_blank">fundamental problem of causal inference</a>” or more simply the “missing data problem.” The best we could do is to estimate what would have happened by using data from other users who were prescribed meter limit <em class="nd">b</em>. This highlights the importance of the data collected from the R.C.T. as it is essential to train the model.</p><h2 id="9829" class="md me jh bn mf mg mh mi mj mk ml mm mn ll mo mp mq lp mr ms mt lt mu mv mw mx gb">How does the model work?</h2><p id="5681" class="pw-post-body-paragraph la lb jh lc b ld my lf lg lh mz lj lk ll na ln lo lp nb lr ls lt nc lv lw lx ja gb">Given that we are optimizing for two objectives, namely the subscription propensity and the engagement, we train two machine learning models which we refer to as the “base-learners” (Equation 1). The structure of these base-learners is similar to a popular meta-learner model called the <a class="au ks" href="https://causalml.readthedocs.io/en/latest/methodology.html" rel="noopener ugc nofollow" target="_blank">“S-learner.”</a> Such a model predicts the target variable by using features <strong class="lc ji"><em class="nd">X</em></strong> and treatment variable <em class="nd">T</em>. Here, the treatment variable <em class="nd">T</em> is a categorical variable that specifies the meter limit given to each registered user. The features are determined exclusively from first-party data about their engagement with Times content. We do not use any demographic or psychographic features in the model to avoid unfair biases against protected classes (we are committed to using machine learning at The Times in fair and responsible ways; you can find a discussion of our approach to machine learning when it comes to comment moderation <a class="au ks" rel="noopener ugc nofollow" target="_blank" href="https://open.nytimes.com/to-apply-machine-learning-responsibly-we-use-it-in-moderation-d001f49e0644">here</a>).</p><p id="4f55" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb">Using the R.C.T. data for users with features <strong class="lc ji"><em class="nd">X</em></strong> and corresponding treatment <em class="nd">T</em>, we can fit two machine learning models, <em class="nd">f</em> and <em class="nd">g</em>, that predict the subscription propensity (<em class="nd">p</em>) and normalized engagement (<em class="nd">e</em>), respectively. In order to maximize both these objectives simultaneously, we convert them into a single objective <em class="nd">s</em> using a convex linear combination that introduces the weight factor δ which takes a value from 0 to 1 (Equation 2). It serves as a friction parameter and allows us to explicitly set the importance we wish to give subscriptions as compared to engagement. Once a certain δ is set, the prescription policy assigns a treatment to a user that maximizes the combined objective function <em class="nd">s</em> (Equation 3). The policy can be repeatedly applied for different values of δ giving a set of optimal solutions that form the <a class="au ks" href="https://en.wikipedia.org/wiki/Pareto_front" rel="noopener ugc nofollow" target="_blank">Pareto front</a>. The Pareto front is usually convex and contains solutions that are better than all others in at least one of the objective functions, and as we move along this front, one of the objective functions reduces while the other increases.</p><figure class="lz ma mb mc gy ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn ne"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*W9X4wBZz8IsNngNceoqSlg.png" width="700" height="96" role="presentation" /></div>
</figure><p id="f5a1" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb">To pictorially illustrate this, let us consider that we set δ = 1 so that we are only optimizing for subscriptions. Using the fitted model <em class="nd">f</em>, for each registered user, we may predict the subscription propensity in counterfactual scenarios where they would be assigned different meter limits. The policy then assigns the meter limit that generates the highest subscription propensity (Figure 3). In essence, the model determines the right amount of free articles to be allowed for each user so that they get interested enough in The Times, and would want to subscribe to continue reading more.</p><figure class="lz ma mb mc gy ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn ly"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*SqZfH00S4OgBRNf_VkEAGg.jpeg" width="700" height="394" role="presentation" /></div>
<figcaption class="kp bm go gm gn kq kr bn b bo bp co">Figure 3: Pictorial representation of the prescription policy that maximizes the subscription propensity alone (when δ = 1). The vertical bars indicate the subscription propensity predicted for different users in counterfactual scenarios where they are prescribed different meter limits.</figcaption></figure><h2 id="c298" class="md me jh bn mf mg mh mi mj mk ml mm mn ll mo mp mq lp mr ms mt lt mu mv mw mx gb">How is the model (back-) tested on past data?</h2><p id="8d5e" class="pw-post-body-paragraph la lb jh lc b ld my lf lg lh mz lj lk ll na ln lo lp nb lr ls lt nc lv lw lx ja gb">Before launching a model, we test it on historical data in order to estimate its performance after deployment. This is popularly known as backtesting, which involves answering the question of how the model would have performed if it had been deployed at some point in the past. In the context of the Dynamic Meter, we would like to know how the model performance would have been if it prescribed meter limits for a particular past month. Since we cannot redo the prescription in the past, we must make use of the past R.C.T. data and consider only those users for whom the model prescription matched with the R.C.T. prescription (Figure 4A). By considering whether only these users subscribed or not, we can then estimate the overall conversion rate (C.V.R.) using <a class="au ks" href="https://arxiv.org/abs/2106.07695" rel="noopener ugc nofollow" target="_blank">Inverse Probability Weighting and Hájek estimation</a> (Equation 4). This estimate gives us the C.V.R. that we might have expected if we could indeed go back in time and set the meter limits for all users using the model. A similar estimation can be done to obtain the average page views as well.</p><figure class="lz ma mb mc gy ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn nf"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*Vi6SA_IVGgQODJqh2frNLQ.png" width="700" height="253" role="presentation" /></div>
</figure><figure class="lz ma mb mc gy ki gm gn paragraph-image"><div role="button" tabindex="0" class="kj kk dp kl cf km gm gn ly"><img alt="" class="cf kn ko" src="https://miro.medium.com/max/1400/1*2qYMOB5EX2GZnbTyCuyeBA.jpeg" width="700" height="394" role="presentation" /></div>
<figcaption class="kp bm go gm gn kq kr bn b bo bp co">Figure 4: Backtesting a model. (A) An example of users with their meter limits prescribed by the model and the R.C.T. in the past. The black dots indicate those users for whom the model prescription matches the R.C.T. prescription. Data from these users can be used to obtain an estimate for the overall metrics, such as conversion rate. (B) Visualization of the model-optimized solutions that form the Pareto front. The model points (orange) correspond to different values of the friction parameter δ ∈ [0, 1]. The Pareto front is convex and consists of points that are better than the R.C.T. in one of the objectives when fixing the other.</figcaption></figure><p id="5aa6" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb">The estimation procedure can be repeated by varying the friction parameter δ, leading to a set of points that form the Pareto front (orange points in figure 4B). As δ is changed from 0 to 1, we move along the front while increasing the conversion rate and decreasing the average page views. One of these points is selected depending on the conversion rate we would like to target for the month. As a result, we obtain a lift in engagement as compared to a random policy (blue points) with the same conversion rate. In conclusion, this strategy allows us the flexibility to tune the level of friction based on our business goals and at the same time, smartly target users so that we can obtain a lift in engagement and conversion rate as compared to a purely random policy.</p></div><div class="ja jb jc jd je"><p id="ee08" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb"><a class="au ks" href="https://www.linkedin.com/in/rsupekar/" rel="noopener ugc nofollow" target="_blank"><strong class="lc ji"><em class="nd">Rohit Supekar</em></strong></a> <em class="nd">is a data scientist in the Algorithmic Targeting team at The New York Times, and he works on developing and deploying causal machine learning models to power The Times’s paywall. He is broadly passionate about understanding the world around us using data, building mathematically rigorous models, and deploying them using modern engineering tools. Prior to joining The Times, he obtained a Ph.D. from M.I.T. where he pursued research in applied mathematics and scientific machine learning. Outside of work, Rohit enjoys reading, long-distance running, and alpine skiing.</em></p></div><div class="ja jb jc jd je"><p id="1d40" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb"><em class="nd">The author acknowledges the contributions of Heidi Jiang, Dan Ansari, Anne Bauer and Chris Wiggins to this project.</em></p><p id="46d4" class="pw-post-body-paragraph la lb jh lc b ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ja gb"><em class="nd">If such projects excite you,</em> <a class="au ks" href="https://www.nytco.com/careers/technology/" rel="noopener ugc nofollow" target="_blank"><em class="nd">come work with us</em></a><em class="nd">!</em></p></div>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-uses-machine-learning-to-make-its-paywall-smarter-e5771d5f46f8</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-uses-machine-learning-to-make-its-paywall-smarter-e5771d5f46f8</guid>
      <pubDate>Wed, 10 Aug 2022 22:17:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting…Black Technology Talent at The New York Times]]></title>
      <description><![CDATA[<div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><div class=""><h2 id="a626" class="pw-subtitle-paragraph fb bv ed bl b fc fd fe ff fg fh fi fj fk fl fm fn fo fp fq fr cp"><em class="fa">“Meeting …” is an ongoing series that features colleagues from different corners of The New York Times Company.</em></h2><div class="fs n ft fu fv fw"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----33efa3fb1c47-----------------------------------" rel="noopener follow">
<div class="s gb"><img alt="The NYT Open Team" class="s dl fy fz ga" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></div>
</a></div><div class="gc aj s"><div class="n ge n o gf c1"><a class="cs ct at au av aw ax ay az ba gh bd cw cx" href="https://medium.com/@timesopen?source=post_page-----33efa3fb1c47-----------------------------------" rel="noopener follow">The NYT Open Team</a></div><p><a class="cs ct at au av aw ax ay az ba gh bd cw cx" rel="noopener ugc nofollow" href="https://open.nytimes.com/meeting-black-technology-talent-at-the-new-york-times-33efa3fb1c47?source=post_page-----33efa3fb1c47-----------------------------------">Feb 15</a> · 14 min read</p></div></div></div></div><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj ia"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*XDXHDmT4cgeRRW1_-4A5xQ.png" width="700" height="424" role="presentation" /></div>
<figcaption class="in io dk di dj ip iq bl b gd co cp"><em class="fa">Illustration by K. L. Ricks</em></figcaption></figure><p id="d9ed" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><em class="jn">The technology behind The Times is driven by the contributions of different technologists across the organization. For Black History Month, we are highlighting a few of our Black colleagues who have helped shape The New York Times Company with their work, from engineering to information technology. Learn how they describe themselves in this ever-changing industry.</em></p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj jv"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*4DnsNt8hjO5q_H_i_1qR7Q.png" width="700" height="230" role="presentation" /></div>
</figure><p id="9a78" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> She/Her</p><p id="dc09" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> QA engineer on the photo team.We work on applications, most recently Loupe, that are used by the newsroom to build high-quality visual stories.</p><p id="0dd6" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?<br /></strong>Technology plays a significant role in my personal and professional life. From my perspective, it allows me to communicate, connect and learn. When my career first began more than 15 years ago, there weren’t many people who looked like me in my profession. The industry has evolved since that time and I am optimistic about diversity continuing to improve in the future. I approach my career with the understanding that my point of view and authenticity as a Black woman is valuable. When it comes to uplifting others, I like to keep it simple by being supportive and positive. I listen. I don’t judge. I show empathy.</p><p id="a490" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?<br /></strong>“Don’t Postpone Joy” has been my motto for a long time. Since the pandemic this quote has become more meaningful to me. I wake up every morning and ask myself “How can I bring joy to my day?” Joy doesn’t have to be extravagant, it can be a trip to my local cafe to get my favorite latte, going for a run on the boardwalk or cooking one of my favorite meals.</p><p id="5bb7" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is the approach to mental health in your culture? What are some methods that you practice to look after your mental health and well-being?<br /></strong>I believe there is an awakening happening in my culture where my generation is more open to discussing mental health and exploring the methods available to them.</p><p id="0a65" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw">Dealing with mental health/well-being during a pandemic has been a journey. However, I’ve incorporated methods that help me keep peace of mind. Here are some:</p><ul class=""><li id="880a" class="ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm kx ky kz bw">Daily ritual that starts with prayer, meditation and journaling.</li>
<li id="3f42" class="ir is ed it b fc la iv iw ff lb iy iz ja lc jc jd je ld jg jh ji le jk jl jm kx ky kz bw">Moving my body by running, and practicing yoga.</li>
<li id="8086" class="ir is ed it b fc la iv iw ff lb iy iz ja lc jc jd je ld jg jh ji le jk jl jm kx ky kz bw">Learning new skills. I took tennis lessons last year.</li>
<li id="1999" class="ir is ed it b fc la iv iw ff lb iy iz ja lc jc jd je ld jg jh ji le jk jl jm kx ky kz bw">Watching a funny show (“Golden Girls” fan here) or movie. Laughter is a form of therapy for me.</li>
<li id="3dff" class="ir is ed it b fc la iv iw ff lb iy iz ja lc jc jd je ld jg jh ji le jk jl jm kx ky kz bw">Spending time with family and friends.</li>
<li id="cc24" class="ir is ed it b fc la iv iw ff lb iy iz ja lc jc jd je ld jg jh ji le jk jl jm kx ky kz bw">Helping others!</li>
</ul></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj lf"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*RBDckZ67oYWJIXuKiePVwg.png" width="700" height="236" role="presentation" /></div>
</figure><p id="22a5" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> He/Him/His</p><p id="4f08" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> Senior software engineer, audio Android app. We are building <a class="cs lg" href="https://www.nytimes.com/marketing/audio/beta?channel=oaudio" rel="noopener ugc nofollow" target="_blank">a new app</a> that brings our new New York Times audio experience to Android users (coming soon!).</p><p id="8300" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?<br /></strong>“If you’re a high visibility player, it’s on you to move the community in a positive direction” — Jonas Neubauer</p><p id="a06d" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw">Not from a movie or book, but from a former Tetris world champion (I waste a lot of time on the internet). I try my best to be welcoming and encouraging to people in any space that I feel comfortable in. If I can feel comfortable, maybe I can help make it easier for others.</p><p id="4c45" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How has your career shaped your understanding of the world and vice versa?<br /></strong>When I first started working in a large codebase I thought that the code was sacred and it must be flawless because it was here before me, and I assumed that everyone else agreed. If I didn’t understand why we were doing something, I assumed I was always wrong. But now I realize that they were just decisions that were made by other people just like me, and we can change it if it doesn’t suit us.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj jv"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*xmfOMnzBlv8yY69JhsufTA.png" width="700" height="234" role="presentation" /></div>
</figure><p id="d0cc" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> She/Her</p><p id="41e8" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title?</strong> Creative technologist consultant on the growth team.</p><p id="38d8" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw">I provide technical solutions to stakeholders for monetization of our digital products. I consult within early pitch phases of a project to research and determine technical execution methods and feasibility. I collaborate with teams of developers, marketers and vendors; interfacing with production and creative departments from concept to delivery.</p><p id="a2b7" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">Are there any passion projects that you work on during your free time?<br /></strong>One of my passion projects is a platform and networkthat I have created whichgives you the self-evaluation tools, industry information and social access to strategize your next career move, and make an impact in the tech industry. Helping people, especially individuals from marginalized communities recognize their place in tech is a life mission of mine. I recently authored a Career Journal Planner that will help the user make a decisive move toward a new and exciting career in tech. I believe that there is a place in the tech industry for everyone and my goal is to help the user discover that place within the ecosystem.</p><p id="4006" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?<br /></strong>“Comparison is the thief of joy.” Not one path in life is the same and I apply this to my life and career as well. Speaking at various conferences in the past, I have been asked “What is your superpower?” My response, “me.” You are your own superpower. What you bring to the table is your own magic that you add to all your work. I often remind myself that leaders become great not because of their power but because of the ability to empower.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj jv"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*SchXrVbqEoynzlz1pLQXMQ.png" width="700" height="236" role="presentation" /></div>
</figure><p id="5bde" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?:</strong> He/Him</p><p id="266c" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> I’m a senior software engineering manager for the User Experience Foundations (UXF) home and UXF sustainability teams. The UXF home team is responsible for the home page, and the UXF sustainability team solves unowned problems to unblock teams in the UXF group.</p><p id="5129" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How does your identity shape the way you think about technology?<br /></strong>A friend recently pointed out that visually distinguishable minorities often feel like they constantly have to prove themselves and to continually earn their place in the room. I’ve realized that this is true of me as well, and it sits at the core of how I think, driving my choice of a major in college (economics), my choice of career (software engineering/engineering management) and the structure of my daily thoughts. This deep-seated insecurity is directly driven by my identity as a Black man in America, and for better or worse, has shaped my passion.</p><p id="e838" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw">While I enjoy problem-solving and I take pleasure in writing elegant code and achieving strong technical craftsmanship, what I am really passionate about is creating value. I chase the most valuable problems, wherever they may be.</p><p id="dd4f" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How has your career shaped your understanding of the world?<br /></strong>Being a software engineer helped me see how to organize things to make life easier and to make little chores more efficient. For example, instead of putting them in a stack, I store my T-shirts in a directly addressable “data” structure which gives me both high visibility into all my options and direct access to remove any of them while minimizing the disturbance to the others.</p><p id="3aac" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw">Becoming a manager forced me to harness empathy and become more emotionally self-aware. This initially helped me to become a better leader, but at the same time also made me a better partner and a better communicator in all aspects of my life.</p><p id="5c13" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">And vice versa?<br /></strong>Years ago, my wife and I were resident fellows responsible for an ethnic theme dorm at Stanford. That experience taught me how to identify and solve hidden D.E.I. issues — we successfully campaigned to change university policy so disadvantaged students would have equal access to meals. As a manager, the same skill helps me notice and rectify hard-to-see imbalances that if left unchecked would let an unfair system propagate.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj jv"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*SuHl368w06y5RF8C_XxvNQ.png" width="700" height="234" role="presentation" /></div>
</figure><p id="b5eb" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> She/Her</p><p id="1c3d" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> Data and insights manager on the messaging and personalization (MAPS) team.I work on interpreting trends in user behavior and results from analyses and A/B tests for our newsletter and push notification products to help inform product strategy decisions.</p><p id="dc64" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?<br /></strong>As a Black woman and a former policy student, I think a lot about access, and how the smallest decisions can include or exclude whole populations: from the colors we choose on websites and whether we capitalize words in hashtags to choosing to open a cashless business in a largely unbanked community. I try to mitigate how I contribute to these types of access barriers by surrounding myself with people who have wide-ranging backgrounds and experiences that I can learn from or use as sounding boards. More personally, I have an incredible amount of respect for people who have nontraditional career routes, and try to share information about technical programs and preparation tools I know of whenever helpful — it makes me happy to help other people get to where they want to be. I am also a big evangelizer of the importance of user research and understanding end users.</p><p id="bbee" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">Do you think tech literacy is important for future generations?<br /></strong>I think tech literacy is important for every generation. There are too many nefarious actors who are willing to take advantage of people who don’t understand things like internet security, the importance of reading/skimming terms and conditions, or how to choose passwords that aren’t easily hacked. As more and more of our lives end up online, and more data is made available through open data initiatives and FOIA (Freedom of Information Act), it’s important to know how to protect ourselves, our identities and our rights, as well as how to utilize all the opportunities that are becoming available to us.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj lh"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*cJ0vX5mantuNIInjjDfS7Q.png" width="700" height="231" role="presentation" /></div>
</figure><p id="a13a" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> She/Her</p><p id="c28a" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> Senior QA engineer, engagement, I test software applications and features.</p><p id="4162" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How has your career shaped your understanding of the world and vice versa?<br /></strong>My career has allowed me to constantly view things from another perspective. It’s one thing to find things useful and positive from your own point of view, but how useful and positive is it for everyone else? We don’t just build software and technology for the pleasure of a few, we build it for everyone to experience. When testing software, the definition of a “good” experience can be subjective to the person using the application and they’ll form their own opinions on what that actually means to them. You just have to take whatever feedback given and try to apply it in a positive way to make it better — in QA testing and in life.</p><p id="6a03" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is the approach to mental health in your culture? What are some methods that you practice to look after your mental health and well-being?<br /></strong>Honestly, I don’t think mental health is taken seriously in my culture but this is true everywhere. We need to give people the safe space to express how they’re really feeling about themselves, their lives and what they are going through without judging. Life is hard and life is always challenging people in ways they can’t cope with. When it comes to my own mental health, I try to take things one day at a time, be thankful for the little accomplishments and positive things going on in my life. If I’m not feeling right mentally — it’s okay to NOT be okay and step away for a bit or take care of myself. Admittedly this is something I had to learn later in my life and am still working on. Sometimes I use my art as an escape — it’s not just something I enjoy doing, it’s often the thing that I go to sort my feelings either by drawing, creating things or writing stuff down. It keeps me grounded. We’re taught to suck it up and deal with issues on our own — but our well-being is important and we have to give ourselves permission to step away when we need time to heal and reflect.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj jv"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*PGbuUbXBFCJXLlJGeOSUyw.png" width="700" height="234" role="presentation" /></div>
</figure><p id="bf63" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> He/Him</p><p id="eb9a" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> Technical support specialist, end user support team, provide hands-on IT support and solutions.</p><p id="3348" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?<br /></strong>“Where your fear is, there is your task.” — Carl Jung. I often recite this quote to myself whenever I have any doubts about starting a new project, completing a task or simply sparking a conversation with someone new. Sometimes we let our fears, whether big or small, enable our procrastination, and this quote is a reminder to just get up and do it … “If I fail, I fail, it’s not that deep.”</p><p id="47bc" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is the approach to mental health in your culture? What are some methods that you practice to look after your mental health and well-being?<br /></strong>As a first generation Haitian American, I find that mental health isn’t widely acknowledged in our culture. Having immigrant parents that have worked hard to establish themselves and provide for our family, it was often expressed that we cannot be depressed living in America. One just has to work hard and essentially “get over it.” Today, it seems that mental health from one’s personal life to work is taken into consideration. Simply going for a drive to reflect or unplugging myself from technology for a weekend are some ways I look after my mental wellbeing.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj jv"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*hQtm-N-FSC27DW6Bi7npTA.png" width="700" height="232" role="presentation" /></div>
</figure><p id="0203" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> She/Her</p><p id="9e91" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> Program manager for the RISC department (technology risk, information security, and compliance). I work across all our RISC teams and manage activities and deliverables between multiple projects. I track our milestones and ensure we’re meeting our organizational goals.</p><p id="2c57" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">Are there any passion projects that you work on during your free time<br /></strong>I’m passionate about classical/tribal African art and artifacts (figures, masks, sculptures and textiles). I’ve been studying pieces from cultures across the continent and I’ve fallen in love with understanding the history, intention and diversity of African art. Early on, I recognized that there are few Black dealers, gallerists and even collectors of classical African art. This was disheartening for many reasons but gave me the inspiration I needed to start sharing my interest with others like me. In 2020, I started a resource for learning about art from the continent. My goal is to expose more people of African descent to our art and artifacts with the hopes of more Black people collecting African art.</p><p id="cb1d" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your ethnic background and how do you celebrate it?<br /></strong>I am Ethiopian-American. I was the first in my family to be born outside of Ethiopia. My parents were refugees and left Ethiopia in the early 1980s. Although they have lived outside of Ethiopia for about 40 years, they have very much kept their culture and instilled that into our family. My love for art and having a deeper understanding of history, culture and traditions comes from them.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj li"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*JapYKS7eivr0S1HulfKycQ.png" width="700" height="235" role="presentation" /></div>
</figure><p id="3d6b" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns?</strong> She/Her</p><p id="a116" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title and what does it mean?</strong> Associate product designer, customer care. I help design experiences that allow our customer care agents to assist customers in a more efficient way.</p><p id="b7b1" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">Are there any passion projects that you work on during your free time<br /></strong>I’ve been working on a social enterprise project that partners up with Ghana-based artisans to create sustainable women’s clothing. It’s still very much in its infancy but the hope is that by supporting the local artisanal sector and creating businesses that operate fairly, we’ll help build up the Ghanaian economy. I was born in Ghana and spent the first 13 years of my life there so I’m very passionate about supporting the local economy there.</p><p id="32dc" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How does your identity shape the way you think about technology? How do you approach your career? How do you uplift others?<br /></strong>Being a Black woman makes me very much aware of inclusivity or the lack thereof in every space I find myself in. As such, I’m always considering how technology can be used as a vehicle to foster more inclusivity. Specifically within design, thinking about how to design experiences that are equitable for all our users with different needs. I also think about how I can contribute to the creation of a work environment that allows people to bring their whole selves to work. Practically, that looks like listening more and allowing others to shine, giving credit where it’s due, including others in the conversation.</p><p id="9acd" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How do you prioritize yourself and your family?<br /></strong>I try to be more intentional about not allowing work to creep into my personal time with family and friends. I try to work on other projects that are not about profit or advancing my career — things that I just want to do to have fun. I paint a lot, I find that very therapeutic. I’ve found that really questioning my intentions for doing the things I do allows me to be honest with myself and confront myself if I realize that I’m attaching my sense of identity to my achievements or the things I’m doing.</p></div><div class="dw dx dy dz ea n p ab ac ae af ag eb ai aj"><figure class="ib ic id ie if ig di dj paragraph-image"><div role="button" tabindex="0" class="ih ii gb ij aj ik di dj ia"><img alt="" class="aj il im" src="https://miro.medium.com/max/1400/1*lxkoCXTozSXtlV2I2NCyCg.png" width="700" height="234" role="presentation" /></div>
</figure><p id="7b92" class="pw-post-body-paragraph ir is ed it b fc kr iv iw ff ks iy iz ja kt jc jd je ku jg jh ji kv jk jl jm dw bw"><strong class="it kw">What are your pronouns:</strong> She/Her</p><p id="e723" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your title?</strong> Associate software engineer on the accelerated digital growth team in care. I work on creating tools that assist customers with their online subscription experience.</p><p id="252a" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">How do you prioritize yourself and your family?<br /></strong>I prioritize myself by unplugging myself from social media and turning my phone off. It is very easy to get lost online comparing yourself to others and how much they have achieved in a short amount of time. I usually spend time with my mom and we’ll just relax together and pre-Covid, we would sit in the park and enjoy nature.</p><p id="7d32" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is a passage or quote (from a book, movie, text) that has stuck with you? How do you apply it to your life?<br /></strong>“Stay gold, Ponyboy. Stay gold.” — “The Outsiders”</p><p id="0885" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw">This quote stuck with me because it is so easy now to get wrapped up in a false reality due to social media. Many people become shallow and narcissistic and this is seen as the new norm. So I always remember to stay true to myself and enjoy the simpler things in life.</p><p id="449d" class="pw-post-body-paragraph ir is ed it b fc iu iv iw ff ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm dw bw"><strong class="it kw">What is your ethnic background and how do you celebrate it?<br /></strong>I am Haitian, and one way I celebrate being Haitian is a big bowl of soup joumou on January 1st.</p></div><p></p><h2 id="f56f" class="lj jx ed bl bm lk ll fe ka lm ln fh kd fi lo fk kh fl lp fn kl fo lq fq kp lr bw">We’re hiring. Apply to work with us <a class="cs lg" href="https://www.nytco.com/careers/technology/" rel="noopener ugc nofollow" target="_blank">here</a>.</h2>]]></description>
      <link>https://open.nytimes.com/meeting-black-technology-talent-at-the-new-york-times-33efa3fb1c47</link>
      <guid>https://open.nytimes.com/meeting-black-technology-talent-at-the-new-york-times-33efa3fb1c47</guid>
      <pubDate>Tue, 15 Feb 2022 15:25:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Failover Plans, Outage Playbooks and Resilience Gaps]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dy ai aj"><div class=""><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----35047aed6213--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/failover-plans-outage-playbooks-and-resilience-gaps-35047aed6213?source=post_page-----35047aed6213--------------------------------">Jul 30</a> · 9 min read</p></div></div></div></div></div><div class="n p ab ac ae af ag dy ai aj"><p id="d483" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">By Alexandra Shaheen, Megan Araula and Shawn Bower</strong></p><p id="f90a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="jd">This is part two of an ongoing series about how The Times’s is working to improve the resilience of its systems. Read part one</em> <a class="cs je" rel="noopener" href="https://open.nytimes.com/assess-test-and-prepare-for-the-un-expected-news-event-bc3f94aa4e7a"><em class="jd">here</em></a><em class="jd">.</em></p><p id="5b88" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Over the past few years, New York Times Engineering has been asking a simple question — what happens when things go wrong? For a company like The Times, whose <a href="https://www.nytco.com/company/mission-and-values/" class="cs je" rel="noopener">mission</a> is to get the news out as quickly and as accurately as possible, the impact of a software failure, a sudden traffic surge or third-party vendor outage is monumental.</p><p id="a77c" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When we prepare for an election, we seek to fill resilience gaps that put our most important workflows at risk. We <a class="cs je" rel="noopener" href="https://open.nytimes.com/assess-test-and-prepare-for-the-un-expected-news-event-bc3f94aa4e7a">identified important workflows and assigned them tiers</a>, enabling us to scope and manage our resilience investment.</p><p id="3bd0" class="ig ih ea ii b ey ka ik il fb kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">Creating a tiered system helped us focus on what systems are critically important to The Times’s mission; These systems include publishing and reader-facing pages, like articles and interactives. During United States elections, the interactives produced by The Times’s Graphics desk, like maps, graphics and data-driven pages, are important to helping our readers understand the race and results.</p><p id="c884" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In the past, election data was pulled from a feed using a cron job and published to relatively simple pages. In recent years, interactive pages have become more comprehensive and complex. Our newsroom wanted to pull and publish real-time data, so The Times upgraded how we consume our election-data feeds. The feeds are now generated on each user request and cached at the edge in our cloud vendor, where appropriate. Most of the time, this works well for our needs. But if the cloud fails, we can’t publish the news and our readers can’t read it.</p><p id="7173" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In the two years leading up to the 2020 presidential election, we experienced multiple production issues that stemmed from cloud outages. With our core editing functions dependent on the performance of third-party cloud vendors, the instability of these services concerned us. We expected every election event in 2020 to bring exceptionally high levels of traffic to our systems, and we needed to create alternate mechanisms that would enable us to perform our most critical workflows.</p><p id="1f53" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">During our migration to the cloud in 2017, we moved many of our applications into Kubernetes to leverage containerization and microservices. Because our core systems, such as our <a class="cs je" rel="noopener" href="https://open.nytimes.com/publishing-with-apache-kafka-at-the-new-york-times-7f0e3b7d2077">publishing pipeline</a>, were not overly reliant on cloud-specific technologies, it was straightforward to replicate our services into another. Keeping our deployment platform the same allowed us to deploy to both our primary and failover stacks in one pipeline. Though the systems generated content at different stages in the process, the code used to generate the content was, by and large, the same. We were able to control almost everything through configuration flags.</p><p id="64ad" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The interactive election pages served as our MVP for the 2020 election readiness effort. If all else failed, we would need to publish the map and the outcome of the race.</p><p id="fcfd" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="jd">[</em><a href="https://www.nytco.com/careers/" class="cs je" rel="noopener"><em class="jd">If this work is interesting to you, apply to work with us. We are hiring</em></a><em class="jd">.]</em></p><p id="0722" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Because of our high traffic numbers — an average day might bring our systems thousands of requests per second, but a big news day might bring tens of thousands of requests per second — building an exact replica of the system in a secondary cloud vendor would have been complex and costly. We created a failover stack with the bare minimum of functionality that would enable us to asynchronously serve statically generated content at publish time. Doing this meant we could leverage our CDN to serve content directly from block storage, and the highly robust and reliable system would be able to withstand significant traffic.</p><p id="c372" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When a cloud service experiences a global outage, all services relying on that vendor are inoperable. However, if there is a regional outage, only portions of the cloud services are impacted. Because regional outages tend to be more common than global ones, we considered this scenario when designing our failover playbook. If a cloud services region becomes unhealthy, our engineers can pivot our stack to operate out of an alternative healthy cloud region.</p><p id="3fe2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As part of our election readiness effort, we worked to ensure that our engineers could easily navigate regional outages. We ran timed drills for members of critical teams to practice navigating these scenarios. And we refined documentation so each team had a detailed runbook that any on-call engineer could reference if they needed to enact failovers.</p><p id="0d4f" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For the 2020 election, The Times planned to follow races at many levels of government, both at the federal and state levels. To support this, we estimated we would need to create thousands of publishing events at any given time. The problem with this estimate, however, was that our publishing system was designed to publish events at human-speed (100 per second).</p><p id="d6ef" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We needed to design a new pathway for machine-generated content that could handle this larger rate of publishing, and both our primary and failover stacks needed to account for this pathway.</p><p id="1d8b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">To accomplish this, we generated partial payloads that would reference the cloud storage URI. This allowed us to pre-generate stubs that would pull the hot content from the block storage service for each stack. We were now able to push this machine-generated content quickly and directly to block storage.</p><p id="ff1e" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">These changes allowed us to secure the interactive workflow by Super Tuesday, enabling us to expand use of this failover tooling to provide an alternative path for publishing article content and the homepage by the election.</p><p id="3691" class="ig ih ea ii b ey ka ik il fb kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">As part of our election readiness effort, we conducted an architectural review of our CDN infrastructure, revealing that we did not have a plan should the CDN, Fastly, fail. We began investigating an active-active multi-CDN solution, but we quickly found that this was impossible because of our tight timeline before the election and the complexity of our caching layer. Instead, we implemented an active-passive solution that supported only our Tier 0 systems.</p><p id="f614" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We opted to use Google’s CDN. Using NGINX to route to different back-ends, we created a DNS failover pipeline that rerouted the DNS records from Fastly to Google’s CDN.</p><p id="27e1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">To test this failover pipeline, we used Blazemeter to create artificial traffic in our internal network. Testing the plan with artificial traffic allowed us to gather insights about the bugs that would appear and the features that would not work during a live failover scenario.</p><p id="3de0" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Testing the CDN is disruptive: not only does it affect our readers, but it also affects publication and development. We ran three CDN-failure tests. The first two were done in our internal network (VPN) during business hours. This helped us debug real-time production issues without affecting our readers. The last failover was enabled externally at 3 a.m. EST which was the safest time we could conduct the failover because traffic was consistently low at that time.</p><p id="10eb" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Luckily, there were no CDN outages during the week of the 2020 election, however we revisited our failover plan on June 8, 2021 when <a href="https://www.fastly.com/blog/summary-of-june-8-outage" class="cs je" rel="noopener">Fastly experienced a severe outage</a>, affecting 85 percent of their global network (POPs). The outage lasted for 49 minutes and affected most of our external systems. We enabled the CDN failover we built for the election, and we served our Tier 0 systems until Fastly recovered.</p><p id="bc62" class="ig ih ea ii b ey ka ik il fb kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">U.S. elections have historically brought high numbers of traffic to our systems, and we have only seen these levels grow over the past couple of election cycles. For the 2020 election, we thought we would see record-breaking traffic levels, but 2020 had a curveball for us: the coronavirus pandemic.</p><p id="7aa6" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">By March of 2020, we were seeing elevated daily traffic numbers that rivaled a large breaking news event. Those elevated numbers persisted, effectively raising our baseline.</p><p id="bbd2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Between the pandemic and the election, we could only make an educated guess for how much traffic we might expect. All we could do was pull data from past elections and add padding to predict what we could see during the election cycle.</p><p id="9e6b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We gathered data from both the 2016 and 2018 Super Tuesday election days, which saw peaks of over three-times our normal traffic levels. On the presidential election day of both years, we saw over eight times our normal levels. Based on this data, we calculated that we would first test with one-time the system’s peak traffic and then gradually increase to 10-times normal traffic levels to see how systems would degrade.</p><p id="c508" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Our tiered hierarchy of critical systems dictated which software applications we needed to test. We contacted the teams whose systems fell in Tier 0, Tier 1 and Tier 2 and we identified internal and external dependencies. Because our systems are intricately connected, a non-critical system might be affected by high traffic hitting a critical one. By identifying dependencies, we were able to notify teams about the upcoming unusually high traffic that might hit their system because of our stress tests.</p><p id="04d4" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As we prepared teams for a round of stress and load testing, we delivered our predictions to the with the caveat that they were estimates. Though some teams expressed skepticism at our high targets, we wanted to over-prepare as much as we could.</p><p id="063c" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We established four distinct roles and responsibilities for each test.</p><ul class=""><li id="e719" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb kf kg kh bw">People in executor roles were responsible for running and executing stress test tooling to ensure we provided the right amount of load to systems.</li>
<li id="6757" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw">Technical leads from application teams stood by to monitor dashboards and system thresholds.</li>
<li id="b2e2" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw">Communicators watched dashboards, sharing progress outwardly to ensure that people leading the stress tests were kept informed of progress.</li>
<li id="ba7e" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw">Stress test leads were responsible for coordinating with the people executing the tests to ensure they were done in sync. These leads also managed stakeholders and made critical decisions about whether to halt a test.</li>
</ul><p id="bb5e" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">While we knew our front-end systems that serve news content would receive high levels of traffic, we didn’t expect a deluge of traffic to our subscription platform. However, after The Times <a href="https://www.nytimes.com/interactive/2020/09/27/us/donald-trump-taxes.html" class="cs je" rel="noopener">published an investigation into Former President Trump’s taxes</a> in September, 2020, we saw our subscription systems buckle under an increased load. We realized these systems required fortification before the November election.</p><p id="7fcd" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Testing the resiliency of this platform would be challenging because it handles real payment transactions and account-creation workflows; simulating credit card transitions is nearly impossible. We would have to simulate account creation, which included validating real credit card and home addresses, as well as the interaction with our payment gateway. After each simulation, we would then need to purge these fake accounts. This seemed impossible and we acknowledge that working through this problem is an area for future improvement.</p><p id="3cdf" class="ig ih ea ii b ey ka ik il fb kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">Our engineering colleagues worked hard to address resilience gaps and we made every deadline we set. Each stress test produced different findings and teams were expedient in addressing these gaps.</p><p id="ac2b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">By late October, 2020, we conducted paper wargames among the election leads, using flashcards with 43 unique disaster scenarios. We discussed our playbook for each scenario and what plans A, B and C looked like for each.</p><p id="9291" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We could only plan for the scenarios we had seen before, or knew to expect, and there was always a chance that we might be met with a failure we hadn’t yet encountered. This ambiguity was discomforting, but solidified the need for strong incident management processes. Election night proved we were right to expect the unexpected and our incident management processes contributed heavily to the success that we saw.</p></div>]]></description>
      <link>https://open.nytimes.com/failover-plans-outage-playbooks-and-resilience-gaps-35047aed6213</link>
      <guid>https://open.nytimes.com/failover-plans-outage-playbooks-and-resilience-gaps-35047aed6213</guid>
      <pubDate>Fri, 30 Jul 2021 20:37:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Who Owns That Application? Check the Catalog]]></title>
      <description><![CDATA[<div class=""><h2 id="0c13" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">How the New York Times Engineering team built an application catalog to keep track of our software systems.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----fdcb8eb590c0--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/who-owns-that-application-check-the-catalog-fdcb8eb590c0?source=post_page-----fdcb8eb590c0--------------------------------">Jul 22</a> · 6 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image"><div role="button" tabindex="0" class="hl hm hn ho aj hp df dg he"><img alt="" class="aj hq hr" src="https://miro.medium.com/max/1400/1*S_v4TFfWMXFM-kvea_BQUQ.jpeg" width="700" height="427" role="presentation" /></div>
<figcaption class="hs ht dh df dg hu hv bl b fx co cp">Illustration by Fanny Luor</figcaption></figure><p id="cc3b" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">By Thilak Subramanian and Shesh Patel</strong></p><p id="c0fd" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">When The New York Times <a href="https://www.nytimes.com/1996/01/22/business/the-new-york-times-introduces-a-web-site.html" class="cs it" rel="noopener">first joined the world wide web in 1996</a>, there were a handful of engineers who maintained the website and publishing software. The number of applications that fueled The Times’s online presence were limited and easy to keep track of.</p><p id="568a" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">Fast forward a few years and The Times’s digital portfolio has grown to include the website, mobile apps, publishing software and stand-alone products like NYT Cooking and NYT Games. The applications we use to support all of our digital services now number in the hundreds. Similarly, our technology team is now the second largest department at the company.</p><p id="7ccd" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">All of this growth means that sharing information about our applications by word of mouth is unsustainable. This is most pronounced during P1 incidents when teams need to find information about the service that is causing a problem as quickly as possible.</p><p id="178c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">As The Times invests in digital products and continues to grow our engineering teams, we realized we needed a centralized source of information about all of the software systems we use. Improving the visibility of the systems our organization owns would only make our products better and the lives of our colleagues easier.</p><p id="016f" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">We had an idea for how we could integrate this resource with teams’ daily workflows, but we were not sure whether they would be able to keep it updated. So, we did what many engineering teams at The Times do when starting a new project: we wrote a Request for Proposal (or, RFP) and talked to engineers and product managers from different teams to understand their needs.</p><p id="d9a3" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">In our conversations, we tried to understand the pain points teams felt when looking for information about an application. Our RFP was useful in gauging whether teams were interested in our solution and whether it could actually address their problems. The responses to our RFP were overwhelmingly positive, so we began brainstorming what an application catalog might look like.</p><p id="2e8d" class="hw hx ea hy b ey jp ia ib fb jq id ie if jr ih ii ij js il im in jt ip iq ir dt bw">With the idea of an application catalog validated, we held interview sessions with a wider group of people across The Times to understand what details they might want from such a centralized resource. We prepared a questionnaire to guide our conversations.</p><p id="68bf" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">At the end of these sessions, we had a list of metadata that our colleagues thought would be important. The metadata included a roster of applications we own; what an application does; whether an application is a critical system; the technology an application uses; contact information for the team that owns an application and where people can find information about it. This list informed what we decided to include in our MVP.</p><p id="093f" class="hw hx ea hy b ey jp ia ib fb jq id ie if jr ih ii ij js il im in jt ip iq ir dt bw">We chose our own team, Delivery Engineering, as the stakeholder for the MVP because we wanted a quick turnaround on feedback in order to demo the catalog for other teams; this is a process we often follow on projects within our team.</p><p id="7f1b" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">Some of the important things we considered while building the MVP included:</p><p id="7e30" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Adoption Friendly:</strong> Not only were we seeking to build a list of existing applications, we would be asking colleagues to change their habits while building new ones. With that in mind, it was important for us to make it easy for both engineers and non-engineers to contribute information to this resource. We decided to create a yaml file that would live in the Github repository for this project; anyone on a team could add metadata to the file.</p><p id="ba25" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Data Integrity:</strong> Keeping the data up-to-date was a goal of ours from the beginning of this project. We knew this had to be a shared responsibility, so we baked in some features to remind teams to update the metadata file on a periodic basis. Also, we constantly looked for ways to address this problem which resulted in the outcome that’s outlined below.</p><p id="a76f" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Automatic data retrieval:</strong> We constantly looked for ways to trim the metadata file that we requested teams to provide by asking ourselves if this data is something we could get on our own. If that’s something that could be achieved programmatically then we set out to do this. This resulted in a win-win situation for us.</p><p id="23c8" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">For the technology stack, we chose to use Python, GoLang for the back-end service and MySQL for the database. These choices were fueled by The Times’s existing support of these languages through numerous communities of practice in our Engineering group. We used Python primarily because we wanted to reuse one of the existing services that our team supported. For deployment, we used Google Kubernetes Engine.</p><p id="c281" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">(We have since rewritten the Python service in GoLang, separated the front-end component to use ReactJS and we switched to PostGresSql to leverage its document storage and relational capabilities.)</p><p id="9d9f" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">We shipped the MVP and demoed it to a group of colleagues. The response to MVP was overwhelmingly positive and we decided on the next steps to move us forward with a general availability launch.</p><p id="0b92" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><em class="ju">[</em><a href="https://www.nytco.com/careers/" class="cs it" rel="noopener"><em class="ju">If this work is interesting to you, apply to work with us. We are hiring</em></a><em class="ju">.]</em></p><p id="95ed" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">To prepare for the general availability launch, we reached out to many teams in the engineering organization and wrote user documentation. We leveraged <a class="cs it" rel="noopener" href="https://open.nytimes.com/innovating-from-home-maker-week-at-the-new-york-times-50ecfa38aca1">The Times’s annual Maker Week</a>, which allows engineering, design, data, project and product colleagues to focus on self-directed projects for a week, to talk about the application catalog and how teams might contribute to it. During Maker Week, we held workshops to help teams add their applications to the catalog — teams that participated were entered into a raffle for a gift card. Through our efforts, we onboarded 100 applications in the first 30 days.</p><p id="ea0b" class="hw hx ea hy b ey jp ia ib fb jq id ie if jr ih ii ij js il im in jt ip iq ir dt bw">The Application Catalog has been in use for a year, with more than 250 now listed. To understand how we might take this product to the next level, we have help feedback sessions with even more colleagues. From these discussions, we have put together a list of improvements that we will implement in the coming months, including build details and metrics; incident management for teams; the contact information for the person on call; status checks; and an inter-application dependency visualization.</p><p id="1fb8" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">We plan to enhance the user interface with a simple form that colleagues who do not use Github in their day-to-day operations can use to submit their applications.</p><p id="6f0e" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">In the future, the catalog will serve as an integral part of the day-to-day needs of developers at The Times. We envision the catalog as the foundation through which developers can create applications using application reference templates, which would seamlessly add metadata to the Application Catalog. The catalog could also be a centralized place for API documentation. This, among other things, will reduce tool fragmentation and toil on developers so they can focus their full attention on building applications.</p>]]></description>
      <link>https://open.nytimes.com/who-owns-that-application-check-the-catalog-fdcb8eb590c0</link>
      <guid>https://open.nytimes.com/who-owns-that-application-check-the-catalog-fdcb8eb590c0</guid>
      <pubDate>Thu, 22 Jul 2021 21:19:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Juliette Melton, User Researcher at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="3c32" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----cb310c2a641b--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-juliette-melton-user-researcher-at-the-new-york-times-cb310c2a641b?source=post_page-----cb310c2a641b--------------------------------">Jul 20</a> · 5 min read</p></div></div></div></div><figure class="he hf hg hh hi hj df dg paragraph-image"><div role="button" tabindex="0" class="hk hl hm hn aj ho df dg hd"><img alt="" class="aj hp hq" src="https://miro.medium.com/max/1400/1*NPnVrhWUT67mNM3U30yL8Q.png" width="700" height="234" role="presentation" /></div>
<figcaption class="hr hs dh df dg ht hu bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="4176" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What are your pronouns?<br /></strong>She/Her</p><p id="a9ca" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What is your job title and does it mean?<br /></strong>My title is Managing Director, User Insights &amp; Strategy. I’m in the Audience Insights Group, and our mission is to help The Times grow by understanding our audience. I currently lead our work for NYT Cooking. I also help teams across The Times with workshop design and meeting facilitation.</p><p id="b838" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">How long have you been at The Times?<br /></strong>Just about seven years.</p><p id="26b9" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong>I live with my family on a relatively quiet street in Manhattan. In these work-from-home days, I’m usually sitting at a table in our living room that doubles as the family weekend craft table. I might be sharing the space with polymer clay, casting resin molds, needle felting tools, X-Acto knives or various types of glue. I love making things and I teach art workshops whenever I can.</p><p id="f383" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw">Aside from the creative spark I get from being in the “craft zone,” the second best part of sitting at the craft table is that it’s next to a window that overlooks one of New York City’s treasured sidewalk trees. Over the last 18 months of working from home I have enjoyed watching the birds that stop by “our tree” on their way through Central Park. Other times, the scene is less bucolic: the other day, we were witness to an intense pigeon fight for space on an outside window ledge. The city can be a tough place.</p><p id="f565" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">How do you start your day?<br /></strong>My workday usually begins on paper. I am a devoted fan of the <a href="https://www.nytimes.com/wirecutter/reviews/our-favorite-paper-planners/#what-about-hobonichi-planners" class="cs is" rel="noopener">Wirecutter-endorsed</a> Hobonichi planners. Most mornings, before I begin work at the computer, I sit with my planner, a .38mm navy blue gel pen from Muji (seriously the best pen), and a cup of tea (PG Tips, brewed strong, one sugar).</p><p id="9a4c" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw">I enjoy taking this time to think about my day before Slack messages and emails start piling up.</p><p id="cc23" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw">One thing I have learned over time is that good habits are more likely to stick if you find a way to make them enjoyable. But like so many other things, this often sounds easier than it is.</p><p id="90ab" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What is something you’ve worked on recently?<br /></strong>One recent project I led was to understand — and help us build for — the first seconds of a user’s visit to one of our recipe pages. What is the very first thing people look for? What do they need to see before they commit to reading through the rest of the page? (Spoiler: it’s always about timing and ingredients.)</p><p id="c451" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>For a few years I focused on our global growth efforts, and as part of that, I was on the team that launched “NYT en Español,” a Spanish-language digital publication that was based in Mexico City. We had an amazing team and I’m so proud of the work we did together.</p><p id="8c82" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently?<br /></strong>I have worked in what we now call “digital products” for over 20 years. During that time, I have been a front-end developer, a visual designer, an information architect, a product manager and for the last decade, primarily a user researcher. At every step along the way I have been part of an emerging discipline.</p><p id="69c3" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw">There’s never been a roadmap for what a long-term career looks like in this space. We are all figuring it out as we go. It’s been fun, but also a challenge. Sometimes I look with envy at friends who have more clearly mapped out professional paths. But I don’t think I would have changed anything along the way.</p><p id="a30a" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What was your first job?<br /></strong>In high school, I worked at a frozen yogurt shop in an Atlanta strip mall. A highlight was serving a perfectly swirled frozen yogurt to Maynard Jackson who, at the time, had just finished his third term as the mayor of Atlanta.</p><p id="ef54" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw">Frozen yogurt is, in my opinion, the best fast food job because you don’t have to fry anything, which means it doesn’t smell bad and the skill of getting that perfect swirl on top of a cone will serve you well whenever you have access to a soft serve ice cream machine at another point in life.</p><p id="85f6" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What is something most people don’t know about you?<br /></strong>I think a lot of people know this, but I’m a big fan of taking on experimental side projects. For example, over six months in 2019 I wrote and distributed a monthly zine that included recipes, interviews, contributor essays, illustrations and more, and pulled them into a book that I shared with friends and contributors.</p><p id="ebb5" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">Do you have any favorite life hacks or work shortcuts?<br /></strong>When you’re feeling stuck, stop staring at a screen and switch to paper. Or, find someone to explain what you’re working on and talk out loud about where you’re stuck. These are simple things, but they work.</p><p id="cf10" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What is your superpower?<br /></strong>I’m a good listener. As well as being a researcher, I’m also a certified Co-Active Coach. Coaching, like user research, is 90 percent about listening.</p><p id="4dc4" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What or who are you inspired by?<br /></strong>I love any documentaries or podcasts that go deep into an artist’s creative process. Song Exploder is a particular favorite.</p><p id="5ae6" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">Complete this sentence: Over time, I have realized __________.<br /></strong>That you have to deliberately create the right circumstances to think deeply and clearly. A mentor once told me, “If you do everything right, you just need 45 minutes of thinking a day.” The corollary is that if you don’t make time to think, you won’t have it.</p><p id="7eaf" class="hv hw ea hx b ey hy hz ia fb ib ic id ie if ig ih ii ij ik il im in io ip iq dt bw"><strong class="hx ir">What is your best advice for someone starting to work in your field?<br /></strong>Stay curious. Be helpful. Don’t forget the big picture.</p>]]></description>
      <link>https://open.nytimes.com/meeting-juliette-melton-user-researcher-at-the-new-york-times-cb310c2a641b</link>
      <guid>https://open.nytimes.com/meeting-juliette-melton-user-researcher-at-the-new-york-times-cb310c2a641b</guid>
      <pubDate>Tue, 20 Jul 2021 21:03:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Product Design at the Pace of News]]></title>
      <description><![CDATA[<p id="696a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah Bures, editor of NYT Open: What is Live at The New York Times?</strong></p><p id="e0c2" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea Lorentzen, product design director:</strong> Generally we think of Live as any dynamic unit of coverage, whether it’s appearing in a single format or distributed across multiple places. This could include giving readers the latest updates or providing reactions right when something happens. It can also mean using visuals to transport readers to a scene.</p><p id="9c73" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen Wu, senior product designer:</strong> We have Live Blog, Live Briefing and Live Chat. And, we have this tool called Live Admin that enables editors to publish to the Blog and to the Briefing. The <a href="https://www.nytimes.com/interactive/2021/01/20/us/politics/live-stream-inauguration.html" class="cs jc" rel="noopener">Chat</a> is what we used during the 2021 United States presidential inauguration where reporters provided live commentary and analysis. The <a href="https://www.nytimes.com/live/2021/03/29/us/derek-chauvin-trial-live" class="cs jc" rel="noopener">Blog</a> is more for news events where we have reporters on the ground and they can send minute-by-minute updates. The <a href="https://www.nytimes.com/live/2021/07/09/world/covid-19-vaccine-coronavirus-updates" class="cs jc" rel="noopener">Briefing</a> is small articles and not necessarily minute-by-minute updates.</p><p id="a58a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter Rentz, principal product designer:</strong> Blogs are really great for events that are happening quickly, whereas Live Briefings are a way to synthesize the event, as opposed to giving minute-by-minute updates. Oftentimes, we use them at the same time.</p><p id="d828" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: What is the design workflow?</strong></p><p id="02a6" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> We do both short-term and long-term work. Sometimes when there’s a short-term need, we’ll do fixes and improvements very frequently, or we’ll design short-term features that will improve the editorial workflow. The long-term work might entail a weeks-long process: brainstorming and coming up with ideas, then sketching and testing them.</p><p id="bd97" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We work very closely with the editors responsible for publishing content and also the people who train the editors on the Admin. For example, when I need to design a feature for the Admin tool, I work with the editors who do the training so I can understand the problems they are having. Once I have a design, I will show them and they will give me feedback. We also work with the research team on user testing and research on reader-facing products.</p><p id="750d" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> We sometimes try things that won’t impact editor workflow, but will hopefully contribute to a great reading experience. During the Derek Chauvin trial, we quickly designed a pinned-video experience on the blog, for example, that did not impact the editor’s workflow but provided a way to watch and read within the same screen.</p><p id="04d3" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Longer-term features require thinking about the reader-facing product and how editors and reporters could produce it.</p><p id="d51e" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: What does a very short-term design process look like when you’re reacting to breaking news?</strong></p><p id="ce15" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> It’s really hard to do breaking news, but it’s easier for events we expect and know how we are going to cover them. Pinning video was something we didn’t have and we thought it would be really helpful to readers who were following the Chauvin trial. We did quick sketches on what we wanted the experience to look like and then looked at how difficult it would be with the current tools. Ideally, we would spend a lot of time on the video player, but we were able to do it in a way that didn’t impact the video codebase in a major way.</p><p id="6bee" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">In real breaking news coverage, it would be risky to introduce unvetted features because we wouldn’t want to impact editors’ workflow, or the reader experience, in those high pressure situations. But with a planned event, like an election, we can do a test run and make tweaks if we need to. Planned events are really helpful because you get to test out the full vocabulary of the Live coverage.</p><p id="a05f" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: Where do you pull inspiration from? Are you looking at what The Times’s Graphics or News Design desks have done in the past and how those one-off projects might be turned into products, or are you looking to other publications?</strong></p><p id="b835" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> It’s both: review what the newsroom has done in the past, but like Chen mentioned, our team also has the luxury of being able to take time to focus on a problem via design sprints or longer brainstorms.</p><p id="eb28" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> For me, it’s news publications and other things in life. News sources, like broadcast, do a great job with live reporting, and I pay attention to how other news websites handle live coverage. But we also look at social media sites like TikTok or Clubhouse and the latest apps people are using that are not news, but are live in some way.</p><p id="ff9b" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">I feel like I get inspiration from live events, in general. Sometimes if I listen to a podcast and they talk about the live events they are doing, I think, oh, we can use this.</p><p id="0d10" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> TV is a helpful reference for showing more than one scene at the same time. This is something we want to keep working on, as there are often multiple concurrent live events. A big goal there is to make information as easy as possible to take in during urgent or stressful moments.</p><p id="665a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">And as Peter was saying, the format can’t always react on the fly, but we can keep notes on scenarios we observe and use these for the next round. When we do case studies, we usually have a few buckets of event types to sketch across.</p><p id="206f" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: What are the buckets of events that you look to for your case studies?</strong></p><p id="f80e" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> Often they are scenarios that vary in onset, as well as duration and pacing. An event might be slightly anticipated or totally unexpected when it starts, with information trickling in slowly or arriving suddenly in an announcement. Some events are time-boxed (like a sports event) while others are sprawling and covered for a long period (like the coronavirus).</p><p id="e3f4" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> When we design things, we use real news events in our designs. When we design a new feature, we always look back at the days when that news was on the Times website and we’ll ask, if we had this feature on those days, how would we have used it? We do a lot of these case studies to see how we would use the feature in the real world.</p><p id="b464" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Another thing I want to add is, when we design something, we think about both the editorial workflow and the way the feature is presented to readers.</p><p id="93dc" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> And because we have control over the tools, we can make changes. If we see something is lacking, we’re able to add features to the back-end that solves front-end problems for readers.</p><p id="f068" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: As you’re working through these case studies and meeting with editors, what do those working sessions look like?</strong></p><p id="ea04" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> In terms of the Live Admin, we have a Slack channel with the training editors. So when I have questions, I’ll just post them in the channel. We also have meetings to quickly get in sync; I will show them designs or they will just tell us the current problems they’re seeing.</p><p id="b137" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">In terms of the reader-facing products, we have weekly meetings with stakeholders who are higher-level editors. We show them the latest designs and they give us some feedback or insights around editorial workflow. They will also let us know if the direction is correct or not.</p><p id="833a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> There’s a lot of casual checking in with editors, gathering their perspectives both on the coverage and their workflow. Some of our most helpful discussions have been the morning after an event, talking through places where the formats might improve.</p><p id="1ce2" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: We’ve talked about collaboration, but how does the team approach experimentation?</strong></p><p id="1452" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> I just joined this team in January, but I definitely feel like there’s a great culture of not being afraid of failing, and encouraging designers to try new things — and people are very accepting of it.</p><p id="5473" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> We haven’t done a lot of A/B tests with live coverage only because it is hard to ask the newsroom to cover an event in two — or more — ways. A lot of the work is looking at editorial feasibility and asking whether it works. I’ve worked with other teams in the past where we felt like we had to get everything perfect because we might not revisit the feature again. With the Live team, we want things to be good, but knowing that we can iterate takes some of the pressure off.</p><p id="1925" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> The news is different every day and I think gives us a stream of new things to try and an eagerness to prepare for the next event.</p><p id="4725" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Rebecca Lieberman, graphics/multimedia editor with News Design:</strong> [signs onto the video call]. I’m sorry I’m late to the party. I had another meeting.</p><p id="4aac" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> Like Thea was saying, I feel like it’s very different from a traditional product design workflow. We’re not very rigid, and we don’t work on two-weeks cycles. We are quicker; we release things quickly and sketch and test things quickly. It’s very different.</p><p id="2fbd" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: Rebecca, now that you’re here — we’ve been talking a little bit about what Live is and how the team works through case studies. Since you’re on the News Design desk, which sits in the newsroom and rapidly builds stories to meet the news cycle, I’d love to hear about your role with the Live team.</strong></p><p id="8ccd" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Rebecca:</strong> I think the honest answer is we’re still figuring it out, but unlike other news and product collaborations, this one feels different. Some of the work that we’ve done on Live comes from one-off projects that News Design did in a more immediate response to the news cycle. Last year for the Democratic convention, editors wanted a way to signal that we had live coverage, so we built this interactive bar that showed what was coming next in the schedule.</p><p id="ef11" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">A lot of these little experiments before Live started out in relation to the immediate needs from the News desk. I worked on a first pass of the Live Briefing a few years ago; We wanted to think about ways that design can create constraint and shape the form of the news coverage we want.</p><p id="5431" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">What’s great about this group is Peter, Thea and Jordan [Vita, the Product lead on the team,] also have worked with the newsroom a lot and are very familiar with how it operates. But I do bring a smattering of one-off things that I’ve done. And, I can explain how some of these needs arise within the newsroom, which helps inform how we might systematize a lot of this stuff.</p><p id="2616" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> I think that’s valuable because it’s really hard for a product team to do a one-off — and those one-offs are often when you learn the most. I don’t want to say one-offs are easier to do, but there’s less pressure than when you have to consider how a feature may impact the larger tool and front-end system. If you remove those constraints, it’s just so freeing and you can think of solutions.</p><p id="a6a5" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Rebecca:</strong> I almost see it as a spectrum: on one side is a newsroom design team that works rapidly and in a reactive way to news, and on the other side is a product design team that works in sprints, which makes the design process longer. The work we’re doing is somewhere in the middle and we work towards coverage plans and goals.</p><p id="98e3" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Not only are there shorter periods of time that we’re going intensely on something, but we can talk to the people that are going to be producing that coverage. The work is just as iterative, but there’s an eye toward how it can fit within the larger system, which I think is really cool.</p><p id="9a99" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> Thea always talks about a compass: we’re iterating, but we also have a compass that we often check.</p><p id="4460" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> Ideally we are sketching things that aren’t possible tomorrow, yet head us in a direction we ultimately want to go in. We’re trying to set features up so that we can build quickly, keep the back-end tooling and the front-end stuff all under one team and be able to experiment continuously.</p><p id="7cbc" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Most of the time it’s hard to know if the work is viable until it’s tested with real news. We can only get so far with mockups or prototypes and Rebecca helps us imagine broader scenarios before something is live.</p><p id="5778" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Rebecca:</strong> I think <a href="https://www.nytimes.com/live/2021/03/30/us/derek-chauvin-trial-live" class="cs jc" rel="noopener">Reporter Updates</a> are a good example of how we’ve worked iteratively with editors over the course of days. Reporter Updates are short, tweet-length insights and observations that live in the stream alongside longer posts on Live blogs. Ahead of the Derek Chauvin trial, the desk was briefed on how to use the feature. But, on the first day of the trial, we realized that the reporters were writing as if readers were also watching the live video, which was confusing if readers were not following the trial live. We gave feedback to the desk and they adjusted how they were writing. I think they ended up being more successful.</p><p id="efe7" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: Where do you see Live going?</strong></p><p id="4802" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> We’ve been talking about the reader experience of following along versus looking for an overview. Some people are tired of news and have only a short amount of time, so they should be given a quick way to find exactly what they are looking for. Other people like to feel as though they’re chasing a story as it unfolds and may want to see every update for a specific event. We’re working to serve both of these readers.</p><p id="0fb7" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> Our former design colleague Derrick Schultz used to advocate designing for behavior. That is so much easier than designing for an anonymous person or a registered person or a subscriber, because a behavior is probably exhibited by everybody. Derrick would bring up the analogy of designing for a museum: a museum exhibition designer will design for the sprinter, the stroller and the studier. The sprinter will just fly through the museum, the stroller will putter around and the studier will read every little thing next to every piece of art.</p><p id="9e4d" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">That’s what we have to do. All of our readers exhibit those behaviors. Being able to design for all of them is really helpful. I don’t think we explicitly design for every one, but we implicitly think about that kind of behavior. Takeaways are great for people that are just strolling in, whereas the blog may be great for studiers.</p><p id="2a34" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Rebecca:</strong> I think <em class="jb">we</em> think about it in those terms, I don’t know that non-designers are thinking about readers in that way. But I do agree that the blog is for somebody who wants to follow a play-by-play, because it’s a reverse-chronological feed. If you come to a live blog at the end of a day where there was a lot of news, that’s not the best way to understand what happened. We sometimes do high-level takeaways to offer a different thing to a different audience.</p><p id="3bdf" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Sarah: What about this work has stood out to you?</strong></p><p id="dc7b" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Chen:</strong> Being able to follow all the news and work at the pace of news is something that’s exciting to me. I think it’s valuable work because we want to tell readers what’s going on and we want to give them a better way to understand a story.</p><p id="6e03" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">I was a reporter before, so I know how hard it can sometimes be for reporters to enter their article and publish it because of the tooling. So being able to be on this team where we can also tackle the tools part that allows reporters to break news faster. That’s also really exciting to me.</p><p id="9b33" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Peter:</strong> The collaboration. I said this earlier, but the collaboration and the conversation have been really important and valuable to me. And the work shows it.</p><p id="e3e9" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Rebecca:</strong> Over the course of my career, I’ve worked on news and a lot of planned news or big, more enterprise stories, but I do feel like breaking news is its own beast. I’ve learned so much from the key stakeholders in this project. I’ve learned a lot about how breaking news is covered. Getting a behind-the-scenes look into how that happens, basically every day nonstop at our paper is pretty incredible. It makes me pay attention to when news breaks and how it shows up in different places, whether that’s Twitter or other news outlets.</p><p id="a477" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jk">Thea:</strong> Looking across patterns of coverage and imagining how things can be better (even in small ways) is really satisfying. Since live events are often unpredictable and unavoidably messy, no format ever fits perfectly. This gives more room for change, as things are constantly happening and the only direction is forward. So it’s exciting to be observing and rethinking and learning things as a group.</p>]]></description>
      <link>https://open.nytimes.com/product-design-at-the-pace-of-news-e4bd3ed0da23</link>
      <guid>https://open.nytimes.com/product-design-at-the-pace-of-news-e4bd3ed0da23</guid>
      <pubDate>Fri, 16 Jul 2021 16:51:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Kinshuk Varshney, Engineering Manager at The New York Times]]></title>
      <description><![CDATA[<div class=""><div class="ex n ey ez fa fb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----5c634beb5fcf--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fc fd fe" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="ff aj s"><p><a class="cs ct at au av aw ax ay az ba fk bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-kinshuk-varshney-engineering-manager-at-the-new-york-times-5c634beb5fcf?source=post_page-----5c634beb5fcf--------------------------------">Jul 13</a> · 4 min read</p></div></div></div></div><figure class="gn go gp gq gr gs df dg paragraph-image"><div role="button" tabindex="0" class="gt gu gv gw aj gx df dg gm"><img alt="" class="aj gy gz" src="https://miro.medium.com/max/1400/1*ThwXxPmAOWC5JKSE_7FuSQ.png" width="700" height="234" role="presentation" /></div>
<figcaption class="ha hb dh df dg hc hd bl b fg co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="2e38" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What are your pronouns?<br /></strong>He/Him</p><p id="e8d8" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What is your job title and does it mean?<br /></strong>I am a senior engineering manager for the Data Ad Products team in the Advertising mission. I am responsible for the growth, development and wellbeing of the engineering team, and I support short- and long-term business initiatives of The New York Times from an engineering perspective.</p><p id="38d7" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">How long have you been at The Times?<br /></strong>I have been at The Times for a little over a year: I joined in May, 2020.</p><p id="0d16" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong>For a large part of last year, our four-year-old daughter was at home during the day since her day care was closed due to the pandemic. Working from home with her around was very different from how my wife and I work now that she has resumed going to the day care. We now have more time to focus on work, whereas previously we spent more time supporting her in between meetings, thinking about what to cook for her or when she would take a nap.</p><p id="5c86" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">How do you start your day?<br /></strong>I usually wake up around 6 a.m. I love starting my day with morning yoga or a Peloton workout, keeping the windows slightly open to let the morning air in.</p><p id="4762" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I have recently been involved in designing the first technical onboarding program for new hires in engineering. I have been working with other engineering manager peers on one of the introductory sections called “The Essentials.” This section aims to equip the new hires with the essential tools they will need to navigate the organization, both day-to-day and in their growth beyond their immediate team. This onboarding program ensures that all engineers have clear and equal access to the organizational context necessary to grow and succeed at the Times.</p><p id="9b8e" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently?<br /></strong>Some time ago, I worked in e-commerce (retail), which is a competitive business and a tough place to manage an engineering team. The senior management changed frequently and difficult decisions were made regarding things like strategy and resourcing. My biggest challenge was keeping my team focused and motivated during such uncertain times. I learned to be a more open and empathetic listener. I tried to be a safety shield for my team and absorbed a lot of unnecessary noise and distractions. This was a key lesson in management for me.</p><p id="ecd6" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw">Knowing what I know now, I would have tried to be more patient and go a little easier on myself. Life happens in phases and recognizing that you are in a tough phase is key to powering through. But, cherishing the good parts is equally important.</p><p id="d993" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What is something most people don’t know about you?<br /></strong>I love learning programming languages. I have written production code in C, C++, OCaml, Java, JavaScript, Python, Perl, PHP, Ruby, Scala and Go.</p><p id="96cc" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What is your superpower?<br /></strong>I am not easily discouraged by failure and I try to see the positive side of any given situation.</p><p id="fd9c" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What or who are you inspired by?<br /></strong>I have taken inspiration from a number of people during different times in my life. Presently, I am inspired by my four-year-old daughter, who has a zeal for learning. She asks a hundred questions during the day, is not easily satisfied with our dumbed-down explanations and is willing to keep pressing until she understands. For example, here is our conversation after watching “Frozen II”:</p><p id="d26c" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw">My daughter: “Who is calling Elsa?”<br />Us: “Her mother.”<br />My daughter: “Where is her voice coming from?”<br />Us: “Ahtohallan.”<br />My daughter: “Why isn’t her mother in Ahtohallan, like in person?”<br />Us: “Because she is a spirit.”<br />My daughter: “What is a spirit?”…“Why isn’t her dad calling?”…“Does he not love her?”…</p><p id="3bcd" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">Complete this sentence: Over time, I have realized __________.<br /></strong>That the right opportunity is always around the corner; you need to be patient, prepared and proactive to grab it and not let it pass you by.</p><p id="0071" class="he hf ea hg b hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib dt bw"><strong class="hg ic">What is your best advice for someone starting to work in your field?<br /></strong>Investing time to hone your skills is the best thing you can do as a beginner. Having humility to accept shortcomings, investing time to work on them and ultimately getting better is my mantra for continuous self-improvement.</p>]]></description>
      <link>https://open.nytimes.com/meeting-kinshuk-varshney-engineering-manager-at-the-new-york-times-5c634beb5fcf</link>
      <guid>https://open.nytimes.com/meeting-kinshuk-varshney-engineering-manager-at-the-new-york-times-5c634beb5fcf</guid>
      <pubDate>Tue, 13 Jul 2021 18:59:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Assess, Test and Prepare for the (Un)Expected News Event]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dy ai aj"><div class=""><h2 id="29ba" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">A brief history of New York Times Engineering’s ‘election readiness efforts’ to achieve reliable and resilient systems.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----bc3f94aa4e7a--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/assess-test-and-prepare-for-the-un-expected-news-event-bc3f94aa4e7a?source=post_page-----bc3f94aa4e7a--------------------------------">Jul 8</a> · 8 min read</p></div></div></div></div></div><div class="n p ab ac ae af ag dy ai aj"><p id="d9d8" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">By Alexandra Shaheen, Megan Araula and Shawn Bower</strong></p><p id="dd6b" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The New York Times experiences traffic levels that ebb and flow with the news cycle. Planned events that occur at a fixed time and date, such as an election or the Olympics, are known traffic generators. We expect our users to visit The Times’s website and apps for special coverage during those events. However, unplanned events are also a major part of the news business. When a story breaks, a push notification is sent and users arrive at our platforms in droves.</p><p id="77df" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Our technology must be able to handle both types of events. Times Engineering ensures that our journalists can get the news out when it happens and that our readers can access information when they need it most.</p><p id="df54" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Over the past few years, our engineering team has put together what we call “election readiness efforts” to prepare our systems to withstand both planned and unplanned news events. These efforts have coincided with the United States election cycle because elections are important to our readers and often generate record-breaking traffic. Elections are an opportunity for us to merge our talents in journalism and engineering to provide readers with extensive coverage of the events and a user experience that helps them understand these moments in history.</p><p id="a6b4" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">To prevent our systems — which are a mix of legacy and modern software — from breaking during these important news events, we have spun up election readiness efforts to systematically improve our systems.</p><p id="a384" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">The election readiness effort in 2016 was small and centered around the implementation of a Content Delivery Network (or, CDN) that could provide us with protection during traffic surges. During the presidential election that year, we saw no outages and the CDN became a pivotal disaster recovery tool.</p><p id="3358" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">In 2017, we kicked off a large project to migrate our data from distributed data centers to the cloud. With a tight deadline, we pushed applications to the cloud using both microservices and the “lift and shift” technique. At the time, Google Kubernetes Engine (or, GKE) was the most mature managed environment for running containers, so we used that for our microservices. For legacy systems, we moved to Amazon Web Service (AWS) using EC2. These methods helped us quickly move our stack to the cloud and we were able to shut down our data center on April 30, 2018.</p><p id="afac" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The downside to this approach was that we ended up with a bifurcated system spanning both clouds. Since this was the early days in Google, we had to make compromises by putting a number of endpoints on the internet with limited ability to extend our corporate networks to the Google backplane. This also meant the only way for our applications hosted in Google to talk to our applications hosted in AWS was over the internet. We spent significant amounts of time finding and implementing authentication solutions that fixed this issue.</p><p id="29db" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><em class="kc">[</em><a href="https://www.nytco.com/careers/" class="cs kd" rel="noopener"><em class="kc">If this work is interesting to you, apply to work with us. We are hiring</em></a><em class="kc">.]</em></p><p id="2014" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">This was a large migration and that fundamentally changed our applications. This meant all the data we collected about how our systems ran during the 2016 elections were no longer relevant. There were also new business-critical systems that were built after 2016 that had not been assessed for reliability. We did not know where we were vulnerable, but would soon find out the hard way.</p><p id="24bf" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">On September 5, 2018, The Times Opinion section <a href="https://www.nytimes.com/2018/09/05/opinion/trump-white-house-anonymous-resistance.html" class="cs kd" rel="noopener">published a Guest Essay</a> by a then-anonymous author from within the Trump administration. The resulting traffic surge caused numerous issues with our website and apps, and showed us <a class="cs kd" rel="noopener" href="https://open.nytimes.com/how-we-prepared-new-york-times-engineering-for-the-midterm-elections-2a615fe4196e">how much work we needed to do</a> in the two short months before the 2018 midterm elections. While we saw some challenges on election night that year, our two months of work helped stave off major outages.</p><p id="dce7" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">2018 was a turning point for us and our site reliability strategy. Rather than hastily address issues in the months leading up to big events where we expected lots of reader traffic, we decided to take stock of our systems as a whole and enact longer term resilience measures. In the fall of 2019, we kicked off the readiness effort for the 2020 presidential election.</p><p id="e99e" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">Many of the engineering teams at The Times are small and operate independently of each other; They don’t share programming languages, software development life cycle, project management methodology or deployment strategies. The teams monitor their own systems and performance, which was a strategic decision made when we migrated to the cloud. While this is great for agility and feature releases, it complicates the overall resilience of our systems.</p><p id="8b99" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Leading up to the 2020 election cycle, there was no one person or team that fully understood our entire federated architecture. We needed a strategy and fast — or, there was little chance we would be able to meet what we expected to be a historic news moment.</p><p id="c15e" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">We first had to form a team that could assess the state of our architecture. The Times technology landscape is vast and tough to parse at a holistic level. We have our main website and apps that interact with numerous APIs; a CMS that creates and delivers data to our printing facilities and front-end applications; standalone products such as NYT Cooking and Games; our user and subscription platforms; data and analytics platforms; as well as the infrastructure (like CDN, Cloud and DNS) to deliver our content to readers.</p><p id="aeec" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">In order to gather information about all of these systems as quickly as possible, we made sure the team was composed of engineers with different expertise from all over our Engineering group.</p><p id="4219" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">Identifying the scope of this work was a fundamental part of the process. We knew we couldn’t address every resilience gap, so we needed to build consensus among the team and our stakeholders on which workflows and systems were most critical for the successful performance of our platforms for the 2020 presidential election.</p><p id="8581" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We identified and ranked workflows — which might be the process by which we publish the homepage or the ability to take payment for a subscription. We then mapped which systems were critical to these workflows and created a tiered system.</p><p id="5b34" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Our most important workflows were assigned “Tier 0” and qualified as “mission critical.” Most of our Tier 0 workflows centered around publishing because if any of them failed during the election, The Times would not be able to get the news out, which would severely impact our report and business. There have been five moments in our history where we’ve failed to print the daily report in New York, the most recent being <a href="https://www.nytimes.com/1978/11/06/archives/the-times-and-news-resume-publication-resolution-of-labor-disputes.html" class="cs kd" rel="noopener">a 1978 labor strike</a>.</p><p id="05d1" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Our “Tier 1” workflows qualified as critical and related to subscriptions, push notifications and marketing. The “Tier 2” workflows were designated as important and included features such as commenting, targeted advertising and data capturing.</p><p id="d7db" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">This tiered schema helped us define the scope of this work so we could strategically focus on improving our systems’ resilience.</p><p id="3bfe" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">Once we had a team and a scope, we were ready to assess our systems. We used <a class="cs kd" rel="noopener" href="https://open.nytimes.com/we-dont-get-bitter-we-get-better-b5d2783d5cd3">Architecture Readiness Reviews and Operational Maturity Assessments</a> to gauge the status of each system and measured them against formalized standards we created for each tier. We aggregated the scores from both assessments, which helped inform us and our stakeholders where investment and prioritization was required.</p><p id="3b2a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">It can be difficult to prioritize resilience work and technical debt on feature teams’ roadmaps. A product manager often plans a few quarters ahead with work that includes new features and improvements that address user needs; It can be hard to fit resilience work into these plans. It can be difficult to split developer time between infrastructure improvements and product requirements, particularly on smaller teams or newer teams with significant greenfield development tasks ahead of them.</p><p id="928c" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">As we assessed the teams, some did not have enough resources to split up the work, while others had to sacrifice new feature development in favor of the fortification of their systems.</p><p id="2d8d" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">As the first two election events of the year — the Iowa Caucus and Super Tuesday — rolled around, we gathered in an office war room at The Times’s headquarters in Midtown Manhattan. The stack held up. In between bites of food and sips of coffee, we talked about the news of a virus spreading around the world.</p><p id="9cf0" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">By mid-March, we had begun working remotely because of the coronavirus. We found ourselves in the midst of a news moment with many competing headlines and daily elevated traffic. When we began our election readiness work for 2020 we knew the election would likely be unprecedented, but by April we were planning for the unknown.</p><p id="a167" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Stress tests are one of our primary tools for preparing our systems for big news events, and we have conducted them for many past election cycles. However, we quickly learned that remotely coordinating and conducting production stress tests for over 20 systems was challenging.</p><p id="540f" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Over the course of the election cycle, we ran seven load tests on production — simultaneously hitting dependent systems to see how much of a load they could take before breaking, and any downstream impact. Because we couldn’t sit in a room together, we set up video calls and Slack channels so team leads could observe how and where systems degraded.</p><p id="8989" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The election leads floated from hangout to hangout, observing how and where systems degraded, pitching in as needed with issues with load testing software. We iterated on the process after every stress test, improving test operations and communications as we could.</p><p id="4f45" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">By September 2020, we were regularly stress testing our website. More teams were able to handle record breaking traffic and engineers were more comfortable with the process. As November grew closer we were becoming confident. There were only a handful of systems that needed work, they were identified and we had a plan to move forward.</p><p id="f68c" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The publication of The Times’s investigation into former <a href="https://www.nytimes.com/interactive/2020/09/27/us/donald-trump-taxes.html" class="cs kd" rel="noopener">President Donald J. Trump’s tax information</a> on September 27, 2020 provided a true stress test of our systems, as readers came to our platforms in high numbers. It was a glimpse of what the election might look like. Most systems were able to handle the traffic, but there were gaps in systems that were not easily stress tested. We knew that degradation on this key night would be catastrophic; We had more work to do before November.</p><p id="45c3" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><em class="kc">[</em><a href="https://www.nytco.com/careers/" class="cs kd" rel="noopener"><em class="kc">If this work is interesting to you, apply to work with us. We are hiring</em></a><em class="kc">.]</em></p></div>]]></description>
      <link>https://open.nytimes.com/assess-test-and-prepare-for-the-un-expected-news-event-bc3f94aa4e7a</link>
      <guid>https://open.nytimes.com/assess-test-and-prepare-for-the-un-expected-news-event-bc3f94aa4e7a</guid>
      <pubDate>Thu, 08 Jul 2021 17:25:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How We Reconstructed the Neighborhood Destroyed by the Tulsa Race Massacre]]></title>
      <description><![CDATA[<div class=""><h2 id="70cf" class="fk bv en bl b fl fm fn fo fp fq fr fs ft fu fv fw fx fy fz ga cp">New York Times graphics editors worked with librarians and archivists to piece together a picture of Greenwood before it was burned. The data set and map files are now open source.</h2><div class="gb n gc gd ge gf"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----33fcf32dd086--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gg gh gi" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gj aj s"><p><a class="cs ct at au av aw ax ay az ba gn bd cw cx" rel="noopener" href="https://open.nytimes.com/how-we-reconstructed-the-neighborhood-destroyed-by-the-tulsa-race-massacre-33fcf32dd086?source=post_page-----33fcf32dd086--------------------------------">Jul 2</a> · 8 min read</p></div></div></div></div><p id="6966" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw"><strong class="hr il">By Yuliya Parshina-Kottas and Anjali Singhvi</strong></p><p id="62e2" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">To commemorate the centennial of the Tulsa race massacre, graphics editors at The New York Times analyzed archival maps, city directories, census data, newspaper clippings and survivor accounts to reconstruct Greenwood, a prosperous Black neighborhood in Tulsa, Okla., that perished at the hands of a violent white mob. We created a 3-D model to publish an article about <a href="https://www.nytimes.com/interactive/2021/05/24/us/tulsa-race-massacre.html" class="cs im" rel="noopener">what was lost in the massacre</a>. Today <a href="https://github.com/nytimes/tulsa-1921-data" class="cs im" rel="noopener">we are releasing</a> that model along with digital map files and a data set of residents and businesses to the public.</p><p id="8dc1" class="hp hq en hr b fl ji ht hu fo jj hw hx hy jk ia ib ic jl ie if ig jm ii ij ik dt bw">To tell this story spatially and immerse our readers in 1921 Tulsa, we set out to create a 3-D model of the Greenwood neighborhood, which served as the digital stage for our narrative.</p><p id="e567" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Among the first resources we looked at were Sanborn insurance maps — large, unwieldy atlases published starting in the 1860s. They contain building footprints, heights, materials, transportation infrastructure and much more and are a wonderful resource for building-by-building details of a city. The Library of Congress has a digital collection of some of these maps, including a <a href="https://www.loc.gov/item/sanborn07276_009/" class="cs im" rel="noopener">1915</a> map of Tulsa, which helped us understand the overall geography from that time period. But we were worried about the six-year gap between the map’s creation and the massacre.</p><p id="1aa4" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Tulsa’s population nearly <a href="https://www2.census.gov/prod2/decennial/documents/06229686v32-37ch5.pdf" class="cs im" rel="noopener">quadrupled from 1910 to 1920</a>, thanks in part to an oil boom. The city had most likely changed in the years leading up to 1921, and we didn’t want to miss anything.</p><p id="dd48" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">We contacted libraries and archives, and we found other clues on the internet, like <a href="http://www.batesline.com/archives/2018/06/mapping-tulsa-historical-maps.html" class="cs im" rel="noopener">this blog post</a> about a local map exhibit.</p><p id="7633" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Finally, <a href="https://www.nytimes.com/by/yuliya-parshina-kottas" class="cs im" rel="noopener">Yuliya Parshina-Kottas</a>, one of the lead reporters and graphics editors on the project, located an original copy of the 1920 Sanborn atlas at the Tulsa Historical Society and Museum. The museum’s archivist, Luke Williams, worked with us to scan 26 pages of Greenwood and the surrounding areas.</p><p id="e174" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Some details were lost to age and mold, so <a href="https://www.nytimes.com/by/anjali-singhvi" class="cs im" rel="noopener">Anjali Singhvi</a>, a graphics editor who led the project with Ms. Parshina-Kottas, retouched the digitized pages and stitched them together into a single image.</p><p id="c384" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">To create a basis for the 3-D model, <a href="https://www.nytimes.com/by/tim-wallace" class="cs im" rel="noopener">Tim Wallace</a>, senior editor for geography, and <a href="https://www.nytimes.com/by/jugal-k-patel" class="cs im" rel="noopener">Jugal Patel</a>, a graphics editor, cleaned and painstakingly georeferenced maps from the 1915 atlas for the areas outside Greenwood and downtown Tulsa and combined the collection with the 1920 map of Greenwood.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">A composite image created from the digitized pages of a 1915 Sanborn insurance map, showing Greenwood and surrounding areas. From the <a href="https://www.loc.gov/item/sanborn07276_009/" class="cs im" rel="noopener">Library of Congress Geography and Map Division</a></figcaption></figure><p id="cc86" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">To turn the Sanborn maps into a three-dimensional city, Lingdong Huang, another graphics editor, trained a neural network to translate the maps into building footprints. This required some extra steps to help the neural network identify buildings on the map.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">Images used by Lingdong Huang to train the machine-learning algorithm. By The New York Times.</figcaption></figure><p id="30a7" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">To teach the algorithm to recognize footprints in a Sanborn map, Mr. Huang generated a series of rectangles that mimicked the map style (left column) and a corresponding series of rectangles in black and white, to serve as a hint for identifying footprints (right column). The middle column is one of the algorithm’s attempts to identify and trace the footprints in the generated map.</p><p id="e091" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Once the network had been trained, it correctly translated the Sanborn maps into crisp geometry that we could use to create the final 3-D map.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">3-D geometry generated using Mr. Huang’s machine-learning algorithm. By The New York Times.</figcaption></figure><p id="c095" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">We studied the key and annotations on the Sanborn maps to figure out building heights. The typographic style of the annotations and age-related artifacts on the map made it difficult for the algorithm to decipher those values, so Mr. Huang created a Python tool that Matt Craig, a news assistant, used to manually enter the accurate height in feet for each building in Greenwood and downtown Tulsa.</p><p id="40f7" class="hp hq en hr b fl ji ht hu fo jj hw hx hy jk ia ib ic jl ie if ig jm ii ij ik dt bw">The 100 block of Greenwood Avenue, north of Archer Street, was a bustling center of commerce and community life for Black residents. It was the perfect example of what Greenwood had to offer: cafes, theaters, physicians, lawyers, barber shops, clothing stores and more. We wanted to bring our readers down to the street level for a more intimate glimpse of the neighborhood and the people who had a hand in shaping it.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">Looking north on Greenwood Avenue from Archer Street before 1921. From the <a href="https://nmaahc.si.edu/object/nmaahc_2013.79.6?destination=edan-search/collection_search%3Fedan_q%3D%252A%253A%252A%26edan_fq%255B0%255D%3Dset_name%253A%2522W.D.%2520Williams%2520Family%2520Collection%252C%2520Tulsa%252C%2520Oklahoma%2522%26op%3DSearch" class="cs im" rel="noopener">National Museum of African American History and Culture</a></figcaption></figure><p id="f202" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Finding visual references of pre-massacre Greenwood, however, required substantial detective work because many of the photographs taken before 1921 had been destroyed in the massacre.</p><p id="9b06" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Shortly after the attack, residents of Greenwood began to rebuild. Some of the structures on the 100 block were reconstructed almost brick for brick. These look-alikes made some post-1921 photographs difficult to distinguish from their pre-massacre counterparts, but a more careful analysis revealed important differences.</p><p id="cc95" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">The graphics editors <a href="https://www.nytimes.com/by/mika-grondahl" class="cs im" rel="noopener">Mika Gröndahl</a> and <a href="https://www.nytimes.com/by/guilbert-gates" class="cs im" rel="noopener">Guilbert Gates</a> confirmed two pre-massacre photographs of Greenwood Avenue, offering an incomplete view of the street, as well as several closeups of buildings on the block.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">Looking north on Greenwood Avenue from Archer Street after the 1921 massacre. From the <a href="https://www.loc.gov/resource/anrc.14737/" class="cs im" rel="noopener">Library of Congress, American National Red Cross photograph collection</a>.</figcaption></figure><p id="a088" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Lacking sufficient references, they turned to images taken during and immediately after the massacre. Mr. Gröndahl and Mr. Gates spent hours sifting through photos of blocks that had been completely destroyed. They looked for details that might help them understand what had stood there. Barber poles, wall fragments and floor joists provided hints about what the buildings had been before they were burned.</p><p id="e6a1" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Mr. Gröndahl, a veteran 3-D artist and a trained architect, manually crafted detailed building models in Maya based on the archival photographs. When no visual references were available, we left the buildings blank so we wouldn’t be representing anything that we hadn’t verified.</p><p id="7206" class="hp hq en hr b fl ji ht hu fo jj hw hx hy jk ia ib ic jl ie if ig jm ii ij ik dt bw">While the Sanborn maps provided a good foundation for our 3-D model of Greenwood, more references were needed to create a complete map of the remainder of Tulsa. We catalogued all the different maps we came across during our research and worked with librarians and archivists from the Tulsa Historical Society and Museum, the Library of Congress and the Tulsa City-County Library, among others, to track down undigitized content.</p><p id="dfef" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">The Library of Congress had a copy of a 1921 street map of Tulsa in its undigitized and uncataloged collections. Julie Stoner, a reference librarian in the Geography and Maps Division, scanned and sent us a digital copy despite having limited access to the building because of Covid restrictions. This map was our main reference to create the vector street grid of Tulsa.</p><p id="0362" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">To create a fuller picture of the people who made up Greenwood, we analyzed and mapped census data from Ancestry.com to show where each Black resident lived and what they did for work.</p><p id="da08" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">One of the biggest challenges we faced in creating this map was verifying addresses and streets from 100 years ago so we could accurately map them.</p><p id="69c9" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Ms. Singhvi and Mr. Craig geolocated thousands of addresses from the 1920 Census to create a vivid picture of the types of occupations that were held by Greenwood residents. We are not entitled to share this data, but this is an area that others could build on.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">A map of occupations of Greenwood residents created using census data from Ancestry.com. By The New York Times</figcaption></figure><p id="62f3" class="hp hq en hr b fl ji ht hu fo jj hw hx hy jk ia ib ic jl ie if ig jm ii ij ik dt bw">We came across the work of Larry O’Dell, director of development and special projects at the Oklahoma Historical Society, in a <a href="https://www.okhistory.org/research/forms/freport.pdf" class="cs im" rel="noopener">2001 state commission report</a> on the massacre. Mr. O’Dell had manually assembled a database of Greenwood businesses and residents from multiple sources, including the Polk-Hoffhine Directory Co.’s Tulsa City Directories and the “List of Losses” published in “Events of the Tulsa Disaster” by Mary E. Jones Parrish, a massacre survivor. Mr. O’Dell graciously shared his data with us, which served as a starting point for our research and informed the vector shapefiles we created of the areas that were burned.</p><p id="dd5f" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">Inspired by Mr. O’Dell’s work, we used a process called Optical Character Recognition,or O.C.R., to create our own data set from the digitized pages of the <a href="http://digitalcollections.tulsalibrary.org/digital/collection/p15020coll12/id/2442/" class="cs im" rel="noopener">1921 Tulsa City Directory</a>, available through the Tulsa City-County Library. By searching the O.C.R.-derived data for a “©” at the end of an entry — which was used by the directory to identify businesses and residents of color — we were able to create a more complete record of Black residents and businesses in the city.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp"><a href="https://digitalcollections.tulsalibrary.org/digital/collection/p15020coll12/id/2857/rec/2" class="cs im" rel="noopener">Polk-Hoffhine Directory Co.’s 1921 Tulsa City Directory</a>. From Tulsa City-County Library</figcaption></figure><p id="12eb" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">For a more detailed profile of the 100 block of Greenwood, we compared businesses in the 1921 city directory with Ms. Parrish’s list of losses and advertisements in the weekly Colored Business Directory of The Tulsa Star — a Greenwood-based, Black-owned newspaper that published from 1913 to 1921.</p><p id="cb46" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">When we came across inconsistencies in spellings or addresses, we went with the version that appeared in more than one source. In a few cases, we discovered businesses in The Tulsa Star that were not listed in the city directory. If these businesses, like the East End Doughnut Shop run by Bettie Young, appeared more than once in the newspaper between 1920 and 1921, we included them in our list of businesses on the block.</p><figure class="jo jp jq jr js dy df dg paragraph-image">
<figcaption class="eg eh dh df dg ei ej bl b ek co cp">The Tulsa Star. From <a href="https://gateway.okhistory.org/explore/collections/TULSA/" class="cs im" rel="noopener">the Oklahoma Historical Society</a></figcaption></figure><p id="60e5" class="hp hq en hr b fl ji ht hu fo jj hw hx hy jk ia ib ic jl ie if ig jm ii ij ik dt bw">Our reconstruction and analysis of pre-massacre Greenwood is just a small glimpse into the tragic losses from the Tulsa race massacre.</p><p id="4c3d" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">By releasing the <a href="https://github.com/nytimes/tulsa-1921-data" class="cs im" rel="noopener">data set of Black residents and businesses, the map files and the 3-D models</a> of Greenwood, we want others to be able to examine this devastating moment in American history in greater detail.</p><p id="6141" class="hp hq en hr b fl hs ht hu fo hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik dt bw">This is a complement to the work already being done by many others to bring this story — which was wilfully buried for decades — to light. Our hope is that researchers, historians, students and others will build on this data, add to it and propel the story further.</p>]]></description>
      <link>https://open.nytimes.com/how-we-reconstructed-the-neighborhood-destroyed-by-the-tulsa-race-massacre-33fcf32dd086</link>
      <guid>https://open.nytimes.com/how-we-reconstructed-the-neighborhood-destroyed-by-the-tulsa-race-massacre-33fcf32dd086</guid>
      <pubDate>Fri, 02 Jul 2021 14:31:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Romello Goodman, Senior Software Engineer at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="815a" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----1dc17f683fd2--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-romello-goodman-senior-software-engineer-at-the-new-york-times-1dc17f683fd2?source=post_page-----1dc17f683fd2--------------------------------">Jun 30</a> · 4 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image"><div role="button" tabindex="0" class="hl hm hn ho aj hp df dg he"><img alt="" class="aj hq hr" src="https://miro.medium.com/max/1400/1*uFM7tlTXNvgo-keE7JMwow.png" width="700" height="234" role="presentation" /></div>
<figcaption class="hs ht dh df dg hu hv bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="ed7b" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What are your pronouns?<br /></strong>He/Him</p><p id="2e21" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your job title and does it mean?<br /></strong>Senior Software Engineer on the UX Foundations Team. We work to ensure that The Times delivers a cohesive cross-platform user experience worthy of our journalism.</p><p id="2e00" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How long have you been at The Times?<br /></strong>Since April, 2019.</p><p id="25dd" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong>I was working remotely from Washington, D.C. before the pandemic started, but it’s still been a big change. Before the pandemic, I would spend most of my time at coffee shops throughout the city and generally try to structure the majority of my day outside of my apartment.</p><p id="8139" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">Not being able to go to coffee shops meant I had to invest in my work space and get an office set up. When my partner started working from home, things got a little cramped in our one-bedroom apartment and we had to shift our furniture daily to create more space. Eventually, we moved to a two-bedroom apartment where we could have a dedicated office space, and that helped by creating a clearer boundary between work and home life.</p><p id="b140" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How do you start your day?<br /></strong>I usually wake up and do some creative coding sketching while making coffee. Around the middle of last year, I got introduced to the creative coding library P5.js and I was instantly hooked. As a kid, I was always doodling on scrap paper, then in high school and college I did graphic design for various school clubs. I’ll usually use a platform like Observable, where I can code really quickly to try out a few different ideas until it’s time to start work. Sketching allows me to exercise some of my old graphic design skills while kick starting my brain with a little puzzle each morning.</p><p id="74ed" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is something you’ve worked on recently?<br /></strong>Earlier this year, I updated the Live Coverage CMS to use our internal design system called Ink. The Ink project is employee-led and is really cool because it allows us to create a consistent look and feel for all of our internal tools. As an engineer, Ink streamlines my job by providing reusable code.</p><p id="0d07" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Much of The Times’s 2020 election coverage was powered by the tools built by the Storylines team. It was really cool to see the culmination of everything my team worked on that year in the year’s most important event.</p><p id="a59e" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently?<br /></strong>Having to deal with pay inequity as an underrepresented person in tech. In the past I’ve struggled with understanding the value that I bring to organizations and the unique view point I present as a queer Black man. It’s a constant journey, but knowing what I know now, I am able to advocate for myself and I make sure others can do the same.</p><p id="077c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What was your first job?<br /></strong>I sold candy in high school! Career-wise, my first job was as a back-end engineer at Legacy.com. I transitioned from an internship there right after graduation and got a lot of exposure to tools like React and GraphQL that were cutting-edge at the time, but have since become industry standard.</p><p id="b111" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is something most people don’t know about you?<br /></strong>I’m left-handed.</p><p id="e9e2" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Do you have any favorite life hacks or work shortcuts?<br /></strong>My number one life hack is going for runs when it’s hot out. You sweat more and get to run less.</p><p id="523e" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your superpower?<br /></strong>Putting my teammates’ happiness and well-being before the company’s bottom line.</p><p id="64d6" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What or who are you inspired by?<br /></strong>People who continue to show up and do the work even when it isn’t clear that progress is being made.</p><p id="d804" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Complete this sentence: Over time, I have realized __________.<br /></strong>Most complicated things are actually pretty simple, but gatekeepers are incentivized to make them seem complicated.</p><p id="865f" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your best advice for someone starting to work in your field?<br /></strong>You don’t need to be passionate about programming. There’s a trope that the field is full of genius programmers that have been writing code since they were children. I believe there is enough room in the field for those people and also those who have lacked that exposure historically and have only recently discovered programming. It’s 100 percent normal and valid to see this as a job and programming doesn’t need to be your passion.</p>]]></description>
      <link>https://open.nytimes.com/meeting-romello-goodman-senior-software-engineer-at-the-new-york-times-1dc17f683fd2</link>
      <guid>https://open.nytimes.com/meeting-romello-goodman-senior-software-engineer-at-the-new-york-times-1dc17f683fd2</guid>
      <pubDate>Wed, 30 Jun 2021 16:23:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[A New Way to Share New York Times Stories]]></title>
      <description><![CDATA[<section class="dt du dv dw dx"><div class="n p ab ac ae af ag dy ai aj"><div class=""><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----3e66e8d7e620--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/a-new-way-to-share-new-york-times-stories-3e66e8d7e620?source=post_page-----3e66e8d7e620--------------------------------">Jun 23</a> · 6 min read</p></div></div></div></div></div><div class="he n p hf hg hh hi hj hk af hl ag hm ai aj"><figure class="ho hp hq hr hs he ht hu paragraph-image"><div role="button" tabindex="0" class="hv hw hx hy aj hz df dg hn"><img alt="An illustration of a hand holding a paper airplane on which five people are sitting." class="aj ia ib" src="https://miro.medium.com/max/6000/1*WaG-RjrQoRzjd8VHrByrjA.jpeg" width="3000" height="1827" /></div>
<figcaption class="ic id dh df dg ie if bl b fx co cp">Illustration by Joules Garcia</figcaption></figure></div><div class="n p ab ac ae af ag dy ai aj"><p id="64d2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">By Anna Mancusi, Erik Kernan, Nina Feinberg and Scott Sheu</strong></p><p id="413c" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We hear frequently from New York Times subscribers that they would like the ability to share Times journalism with non-subscribers. We know how enriching it can be to share articles with friends and family, but we also know that not everyone has a Times subscription.</p><p id="db11" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We are excited to <a href="https://www.nytco.com/press/introducing-gift-articles-a-new-way-for-times-subscribers-to-share-articles/" class="cs jd" rel="noopener">introduce gift articles for Times subscribers</a>, which allows news subscribers to share up to 10 articles each month. Anyone who is sent a gift article will be able to read it, regardless of whether they subscribe to The Times; gift articles will not count towards the monthly free-article limit for non-subscribers.</p><p id="130d" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Times subscribers are the biggest advocates for our journalism. By enabling them to more freely share our content with family and friends, we hope to make it easier for them to have meaningful conversations around the stories we publish.</p><figure class="ho hp hq hr hs he df dg paragraph-image"><div role="button" tabindex="0" class="hv hw hx hy aj hz df dg je"><img alt="An image of a Times article page with the gift articles button opened." class="aj ia ib" src="https://miro.medium.com/max/3728/1*WLGpRhcEG5xOwtQHuVcKHg.png" width="1864" height="1554" /></div>
<figcaption class="ic id dh df dg ie if bl b fx co cp">The new gift articles button sits next to the share tools and allows Times subscribers to share articles with family and friend who are not subscribed to The Times.</figcaption></figure><p id="ccd9" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Through our research, we found that readers were more likely to engage with journalism that had been shared by someone they know rather than a company account. With gift articles, we hope to increase sharing, as well as bring in new audiences.</p><p id="b79f" class="ig ih ea ii b ey ka ik il fb kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">Building this feature was a collaborative effort that involved multiple teams and included rounds of user research, A/B testing, design iterations, API creation and countless discussions.</p><p id="def2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In early research studies, we learned that the vast majority of Times subscribers said that allowing friends and family to read the links they share would add value to their subscription overall. These insights gave us the confidence that building gift articles would meet a user need, grow our audience and add distinct value to a Times subscription.</p><p id="a270" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As we began thinking about the new feature, we knew that making sure subscribers could find, understand and use it easily was extremely important. We spent some time developing rough user journeys that would encourage subscribers to share and reassure recipients that they would be able to freely read the full articles.</p></div><div class="he n p hf hg hh hi hj hk af hl ag hm ai aj"><figure class="ho hp hq hr hs he ht hu paragraph-image"><div role="button" tabindex="0" class="hv hw hx hy aj hz df dg hn"><img alt="A slide showing user journeys for the gift article feature. The Subscriber Journey travels from Discover to Interact to Share, while the Recipient Journey goes from Discover to Access to Read." class="aj ia ib" src="https://miro.medium.com/max/6000/1*hTO_iCfdU71MnKdUF2Mpvg.png" width="3000" height="1965" /></div>
<figcaption class="ic id dh df dg ie if bl b fx co cp">To help shape what gift articles might look like, the team created rough user journeys.</figcaption></figure></div><div class="n p ab ac ae af ag dy ai aj"><p id="18db" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">These user journeys allowed our team to get on the same page about where and when this option would appear. But, they raised a number of questions about how we should describe the feature and how it would work.</p><p id="0405" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Fortunately, we had the chance to conduct user research, which helped us think through how to frame the new feature. With the lessons from our research informing our designs, we built a back-end service to generate unique link codes and ran an initial A/B test in 2020.</p><p id="f32a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In the test, we hypothesized that the ability to share unlocked articles would encourage more sharing overall. So, we included a prominent plain-text button directly below an article’s byline that read “Share unlocked article.” Normally, we require non-subscribers to register for free Times accounts before reading content on our app or website. However, for this test we wanted the articles to be freely available to non-subscribers; we still asked, but did not require, recipients to register for Times accounts.</p><p id="1a81" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">These considerations led us to measure the percentage of subscriber sessions that resulted in a share and the percentage of shares that resulted in registration.</p><p id="81e7" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Our test showed a significant increase in subscriber sharing and a corresponding increase in referral traffic. Importantly, these increases did not come at the expense of normal sharing; readers still used our other share tools to post links to social platforms or send via email. While we saw a significant decline in the registration rate compared to our share tools, the rise in referral traffic and subsequent increase in registrations largely offset the impact. And because the benefit to readers was the primary goal of this feature, we deemed this an acceptable decrease.</p><p id="b768" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Given the encouraging results from this first test, as well as the qualitative research that validated our approach, we decided to roll the feature out to news subscribers across our platforms.</p><p id="437e" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">But before we did, we had to replace the plain-text button. While it was acceptable for a test, it took up too much of the page and felt disjointed from our brand and style.</p><figure class="ho hp hq hr hs he df dg paragraph-image"><div class="df dg kf"><img alt="An image showing the evolution of the gift article icon from plain text, to an icon of a lock, then a hand and, finally, a gift." class="aj ia ib" src="https://miro.medium.com/max/1280/1*8TY0IQkYWpGH3bW9YR-JkA.png" width="640" height="642" /></div>
<figcaption class="ic id dh df dg ie if bl b fx co cp">The team tried a number of different images before settling on a gift icon.</figcaption></figure><p id="f03d" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Finding an appropriate icon was challenging. At first, we designed a lock symbol to match the concept of “unlocked articles” from our MVP test. Yet, when we brought this to a subsequent round of user testing, people said it suggested that the articles were inaccessible — and it made them hesitant to use it. Since this was the opposite of what we hoped to convey, we went back to the drawing board. We discussed using a hand symbol, but rejected this idea when it seemed as though The Times was requesting, rather than giving something.</p><p id="1ca1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">This brought us to a gift symbol.</p><p id="13d3" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">While we had some initial concerns about overlap with the gift subscriptions The Times sells, we decided the context was distinct enough that subscribers would not get mixed up. Ultimately, we felt the gift icon would do the most to draw user attention in a positive way, while fitting in with the other elements on the screen.</p><p id="5831" class="ig ih ea ii b ey ka ik il fb kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">Aside from unlimited article access, gift articles for Times subscribers is our first major subscriber-only feature. We hope that our subscribers will enjoy sharing stories with their family and friends, and that new readers will be able to discover what makes Times journalism unique.</p><p id="ed73" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As a product and design team, we will consider this feature a success if it meets the metrics we’re striving for. The feature is already available to the majority of subscribers and will soon be available on our apps. Over the next few months, we’ll be paying attention to how this feature impacts subscriber engagement and retention, and what new audiences it attracts.</p><p id="cf38" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">But perhaps most importantly, the feature will be successful if it sparks conversations among curious people.</p></div></section><section class="dt du dv dw dx"><div class="n p ab ac ae af ag dy ai aj"><p id="13fb" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc"><em class="kn">Anna Mancusi</em></strong> <em class="kn">is a product director at The New York Times and leads a product group focused on subscriber retention initiatives.<br /></em><strong class="ii jc"><em class="kn">Erik Kernan</em></strong> <em class="kn">is a product manager focused on subscriber retention at The New York Times.<br /></em><strong class="ii jc"><em class="kn">Nina Feinberg</em></strong> <em class="kn">is a senior product designer at The New York Times.<br /></em><strong class="ii jc"><em class="kn">Scott Sheu</em></strong> <em class="kn">is an associate product manager and social product lead at The New York Times.</em></p><p id="4110" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Special thanks to the teams that worked on gift articles for Times subscribers:<br /></strong><em class="kn">GMAX: Dominic Ancrum, Bon Champion, Amit Choudhary, Rashad Cureton, Courtney Downs, Robert Edwards, Anne Lindsley, Reza Malek, Patricia Martorana, Alex Paul, Sameer Sharma and Felix Torres</em></p><p id="4507" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">Audience Product: Anna Dubenko, Justin Heideman, Andrei Kallaur, Jason Michaels, Victoria Niemeyer, Shelly Seroussi and Scott Sheu</em></p><p id="b618" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">Subscriber Advocacy: Olivia Appicelli, Mina Bansal, Nina Feinberg, Justin Fuller, Josh Hoeltzel, Tracy Huynh, Erik Kernan, Anisha Khanna, Reza Malek, Anna Mancusi and Steve Rickert</em></p><p id="0d98" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">Meter: Mark Liechti, Ayo Odunsi, Binit Patel, Joselito Surdilla, Beatriz Trujillo, Ronny Wang and Dan Wittenberg</em></p><p id="276f" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">Care: Daniel Alesi, Honor Hawkins and Karen Pace</em></p><p id="49bc" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">App Platforms: Sameer More</em></p><p id="040a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">Data Platforms: Ed Gulczynski and Hannah Masuga</em></p><p id="bbd9" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="kn">Corporate Communications: Linda Zebian</em></p></div></section>]]></description>
      <link>https://open.nytimes.com/a-new-way-to-share-new-york-times-stories-3e66e8d7e620</link>
      <guid>https://open.nytimes.com/a-new-way-to-share-new-york-times-stories-3e66e8d7e620</guid>
      <pubDate>Wed, 23 Jun 2021 21:04:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Tracking Covid-19 From Hundreds of Sources, One Extracted Record at a Time]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dy ai aj"><div class=""><h2 id="cbd0" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">How The New York Times maintains a database of United States coronavirus cases and deaths pulled from a patchwork of regional health authorities.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----dd8cbd31f9b4--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/tracking-covid-19-from-hundreds-of-sources-one-extracted-record-at-a-time-dd8cbd31f9b4?source=post_page-----dd8cbd31f9b4--------------------------------">Jun 17</a> · 9 min read</p></div></div></div></div></div><div class="n p ab ac ae af ag dy ai aj"><p id="2c3e" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">By Josh Williams and Tiff Fehr</strong></p><p id="1dd3" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As of this morning, The New York Times has made more than 9.98 million programmatic requests for Covid-19 data from websites around the world. The data we’re collecting are daily snapshots of the virus’s ebb and flow, including for every U.S. state and thousands of U.S. counties, cities and ZIP codes.</p><p id="e096" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">You may have seen slices of this data in the <a href="https://www.nytimes.com/interactive/2021/us/covid-cases.html" class="cs jd" rel="noopener">daily maps and graphics</a> we publish at The Times, providing cumulative totals and 14-day trends that help readers see their local risk levels and outbreaks. Combined, these pages are the most-viewed collection in the history of <a href="https://www.nytimes.com/" class="cs jd" rel="noopener">nytimes.com</a>. They’re a key component of <a href="https://www.nytimes.com/spotlight/2021-pulitzer-coronavirus-coverage" class="cs jd" rel="noopener">the package of Covid reporting</a> that won The Times the 2021 Pulitzer Prize for Public Service.</p><p id="adf5" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Internally, the depth and breadth of the data has been an invaluable reporting tool, helping us tell stories from the <a href="https://www.nytimes.com/2020/02/29/us/coronavirus-washington-death.html" class="cs jd" rel="noopener">very first U.S. cases</a> through the <a href="https://www.nytimes.com/interactive/2021/02/10/us/coronavirus-winter-deaths.html" class="cs jd" rel="noopener">devastation of the winter wave</a> through <a href="https://www.nytimes.com/interactive/2021/02/25/us/nursing-home-covid-vaccine.html" class="cs jd" rel="noopener">the first glimmers of good news</a> as vaccines began to roll out.</p><p id="1edd" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The Times’s coronavirus tracking project was one of several efforts that helped fill the gap in the public’s understanding of the pandemic left by the lack of a coordinated governmental response. Another of these was <a href="https://coronavirus.jhu.edu/map.html" class="cs jd" rel="noopener">Johns Hopkins University’s Coronavirus Resource Center</a>, which collected both domestic and international case data. <a href="https://covidtracking.com/" class="cs jd" rel="noopener">The Covid Tracking Project</a> at The Atlantic marshalled an army of volunteers to collect U.S. state data, in addition to testing, demographics and healthcare facility data, each of which included thorny methodological challenges. These public data projects provided an essential and complementary set of sources for in-depth coverage.</p><p id="e0a8" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">At The Times, our coronavirus tracking work began with a single spreadsheet.</p><p id="795b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In late January 2020, Monica Davey, an editor on the National desk, asked Mitch Smith, a correspondent based in Chicago, to start gathering information in a Google spreadsheet about every individual U.S. case of Covid-19. One row per case, meticulously reported based on public announcements and entered by hand to tell the story of a person infected with the virus, with details like age, location, gender and condition.</p><p id="2e56" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We knew little then about the virus’s ability to spread, so our early case-by-case tracking followed a loose model established in the newsroom during <a href="https://www.nytimes.com/2003/04/27/world/the-sars-epidemic-the-path-from-china-s-provinces-a-crafty-germ-breaks-out.html" class="cs jd" rel="noopener">other virus outbreaks</a>. Covid-19 case counts in our early stories now seem unimaginably low: A <a href="https://www.nytimes.com/2020/03/01/nyregion/new-york-coronvirus-confirmed.html" class="cs jd" rel="noopener">March 1 story about the first confirmed case in Manhattan</a>, for example, reported that “more than 80 people in the United States have been confirmed through laboratory testing.” Just five days later, <a href="https://www.nytimes.com/2020/03/06/world/coronavirus-news.html" class="cs jd" rel="noopener">another story</a> put the total number of confirmed cases over 300.</p><p id="9c30" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">By mid-March, the virus’s explosive growth proved too much for our workflow. The spreadsheet grew so large it became unresponsive, and reporters did not have enough time to manually report and enter data from the ever-growing list of U.S. states and counties we needed to track.</p><p id="deea" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">Just as offices (including ours) were shuttered and stay-at-home orders went into effect, many domestic health departments began rolling out Covid-19 reporting efforts and websites to inform their constituents of local spread. The federal government <a href="https://apnews.com/article/public-health-michael-pence-email-business-understanding-the-outbreak-aff923bc384089489d168ee2ced71a93" class="cs jd" rel="noopener">faced early challenges in providing</a> a single, reliable federal data set.</p><figure class="ho hp hq hr hs he dj kf gq kg kh ki kj kk ay kl km kn ko kp kq paragraph-image">
<figcaption class="ic id dh df dg ie if bl b fx co cp">The Times’s database of Covid-19 cases and deaths is sourced from the websites of hundreds of state and county health authorities, using a combination of manual and automated tasks. Credit: Guilbert Gates/The New York Times</figcaption></figure><p id="d287" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The available local data were all over the map, literally and figuratively. Formatting and methodology varied widely from place to place, from rudimentary PDFs to information-rich dashboards. Even the question of what constituted a “case” wasn’t uniform: some places reported confirmed cases, while others reported suspected ones; still others reported both or made no distinction.</p><p id="18ea" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Within The Times, a newsroom-based group of software developers was quickly tasked with building tools to augment as much of the data acquisition work as possible.</p><p id="b7c1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">On March 10, 2020, the day before the <a href="https://www.nytimes.com/2020/03/11/health/coronavirus-pandemic-who.html" class="cs jd" rel="noopener">World Health Organization declared the virus a pandemic</a>, newsroom developer Will Houp wrote the first lines of code of a NodeJS-based web application capable of scraping Covid-19 data from a growing number of sources. In just a few days, Will, with teammates Ben Smithgall and Andrew Chavez, added features that enabled our journalists to edit, approve and apply custom math to the collected data.</p><p id="5265" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">On March 16, the core application largely worked, but the scraper directory sat empty. To tackle this massive effort, we recruited developers from across the company, many with no newsroom experience, to pitch in temporarily to write scrapers.</p><p id="c77b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">By the end of April, we were programmatically collecting figures from all 50 states, nearly 200 counties and many ZIP codes, census tracts and cities. The pandemic, our code complexity and our database all seemed to be expanding exponentially, which raised system-architectural concerns on a number of fronts.</p><p id="9472" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We learned early that individual scrapers needed to be strategically fragile: We wanted them to break when the source website changed or failed to respond, to alert us so that our team could figure out whether the issue was with our code or the source website’s changes. In the early days of the pandemic, a few notable sites changed several times in just a couple of weeks, which meant we had to repeatedly rewrite our code.</p><p id="51cc" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Between scrapers breaking and a seemingly never-ending list of new target sites, it was time to staff up for real. We needed dedicated developers who could focus their full attention on the project, allowing them to not only maintain the scrapers, but also build up the core application and make the scapers leaner, testable and faster to develop.</p><p id="a688" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">From mid-June 2020 on, we have staffed the scraping team with about six developers at any given time, most with prior journalism and data experience. The scraping team was a critical part of the newsroom’s virus tracking project, which would ultimately pull in more than 100 journalists and engineers from across The Times.</p><p id="b231" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As many as 50 people beyond the scraping team have been actively involved in the day-to-day management and verification of the data we collect. Some data is still entered by hand, and all of the data is manually verified by reporters and researchers. This has been a seven-day-a-week operation since March 2020.</p><p id="6eef" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In addition to publishing data to The Times’s website, we made our data set <a href="https://github.com/nytimes/covid-19-data" class="cs jd" rel="noopener">publicly available on GitHub</a> in late March 2020 for anyone’s use.</p><p id="ec40" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">The Covid-19 outbreak was an unprecedented challenge for local officials in collecting and presenting public health information quickly. As outsiders hoping to aggregate and automate this data, we watched in real time as health departments across the country scrambled to get websites up.</p><p id="17f2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As our Covid-19 scraping effort grew, our newsroom developers gained just as much fluency in the subject matter as The Times’s reporters. We were trusted and expected to exercise news judgment on a daily basis, puzzling out tricky questions: What page on a state’s website had the most recent and most methodologically clear figures? Which figures meant what? Did we think officials were doing math we could reverse-engineer and confirm? Should we reach out to the state or county to confirm details?</p><p id="ea32" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Meanwhile, our targets kept changing.</p><p id="f3d1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In all but a handful of cases, the websites for the first few months were being continuously tweaked, requiring us to constantly edit and rewrite our scrapers. Broadly, we saw a pattern of sites transitioning from more rudimentary presentations — like PDFs, hand-edited tables or freeform text descriptions of case numbers — to feature-rich dashboards, usually built with business intelligence tools from major vendors like ArcGIS, Tableau and Microsoft’s Power BI products.</p><p id="2071" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We witnessed hundreds of health departments upgrade their presentations of complex, geographic and public health data across weeks and months.</p><p id="fc98" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">For years, civic-minded organizations who identify with the “open data” movement have pushed governments to release, <em class="ld">in usable form</em>, publicly funded data for research and reuse. At <a href="https://www.data.gov/" class="cs jd" rel="noopener">all</a> <a href="https://opendata.dc.gov/" class="cs jd" rel="noopener">levels</a> of <a href="https://www.opendataphilly.org/" class="cs jd" rel="noopener">government</a>, this has started to happen. These data portals provide citizens, journalists and researchers access to vast, documented data sets, often with tools to query and visualize them.</p><p id="f937" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The pandemic has made clear, though, that there’s a massive gulf between the ideal of open data and the reality of public data. At a moment when journalists and researchers needed timely access to public health data, the federal government had little to offer, and few local governments were prepared to publish open, accessible data on their own.</p><p id="7298" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Even now, about 18 months in, a very small percentage of our programmatic requests are extracting data from well-maintained, documented, queryable APIs.</p><p id="99ef" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">And as jurisdictions’ sites grow more sophisticated, the task of scraping data from them can become more complicated. Early Covid-19 sites in plain HTML or PDF format were brittle and ever-changing, but they were usually easy to parse. As sources switched to commercial dashboards, whose underlying architectures vary greatly, it was often more difficult to get the data.</p><p id="14be" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In the best of cases, a dashboard has an easily findable data endpoint with vendor documentation for how to query and retrieve the underlying data as JSON. The problem is, these systems are documented for the providers of the data. The data itself isn’t documented from the municipalities, so even when we find it, there’s often a lot of work to figure out how it relates to data shown in the dashboard.</p><p id="121f" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">More typically, commercial dashboards aren’t meant to be queried independent of the pre-configured presentation. In the context of tools designed for business intelligence, this is perfectly reasonable: Most dashboards are private and their metrics are very specific to each company’s needs. But when employed in the service of public health data portals, their data formats are unfriendly to journalists, researchers or citizens who may need to download it.</p><p id="6020" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We suspect none of this friction is intentional. It is reasonable to assume that many health departments have no idea we are pulling their data several times a day, and understandable that their primary concern is their constituents, not the needs of a handful of data aggregators.</p><p id="acaf" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">From elections to the Olympics, our newsroom developers help The New York Times report and present the news. In most cases, there’s a natural shift in tempo when we transition our effort from active development to maintenance or retirement. For Covid-19, there’s no obvious moment on the horizon, but things are changing.</p><p id="c1e1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As vaccinations <a href="https://www.nytimes.com/2021/05/23/us/covid-cases-vaccinations-united-states.html" class="cs jd" rel="noopener">curb the virus’s toll</a> across the country, we now see a number of health departments and other sources dropping back their staffing and updating their data less often.</p><p id="a9d8" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">A drastic reduction in active cases is great news, which has meant that some of our own custom data collection could be shut down. Since April 2021, our number of programmatic sources has dropped nearly 44 percent.</p><p id="934a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">This was possible in part due to some long-awaited data from the federal government, updated more quickly than what we saw in 2020. In February 2021, the Centers for Disease Control and Prevention expanded their reporting to include comprehensive, county-level figures that had only been partly available in 2020. We are now able to use the new C.D.C. files for much of our county-by-county virus reporting.</p><p id="2e57" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Our goal is to get down to about 100 active source targets by late summer or early fall, mainly for tracking potential hot spots. The falling number of cases has helped us return to more normal staffing levels and to rebalance our work and lives, just as our readers are doing.</p></div>]]></description>
      <link>https://open.nytimes.com/tracking-covid-19-from-hundreds-of-sources-one-extracted-record-at-a-time-dd8cbd31f9b4</link>
      <guid>https://open.nytimes.com/tracking-covid-19-from-hundreds-of-sources-one-extracted-record-at-a-time-dd8cbd31f9b4</guid>
      <pubDate>Thu, 17 Jun 2021 17:28:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Kathleen Kincaid, Executive Director for Development & Engagement at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="5f2a" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----39ceb00c1137--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-kathleen-kincaid-executive-director-for-development-engagement-at-the-new-york-times-39ceb00c1137?source=post_page-----39ceb00c1137--------------------------------">Jun 15</a> · 6 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image"><div role="button" tabindex="0" class="hl hm hn ho aj hp df dg he"><img alt="" class="aj hq hr" src="https://miro.medium.com/max/6000/1*M6KlAIH-ACYcRDbQ7c2vew.png" width="3000" height="1000" role="presentation" /></div>
<figcaption class="hs ht dh df dg hu hv bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="2323" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What are your pronouns?<br /></strong> She/Her</p><p id="992b" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your job title and what does it mean?<br /></strong>Executive Director for Development &amp; Engagement. Our team creates and fosters programs that support the professional growth of New York Times employees in the Data, Design, Engineering, Marketing, Product and Project departments (we call this group “XFun’’ for cross-functional teams). We provide platforms to broadly share our colleagues’ work, and we host events that engage and connect them to the innovation and mission of The Times. These programs and platforms include The Sponsorship Program, XFun Onboarding, Product Engineering Onboarding, Associate Engineering Bootcamp, Coaching for Managers, the NYT Open blog, Times Open Speaker Series and Maker Week.</p><p id="d325" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How long have you been at The Times?<br /></strong>It will be seven years this June.</p><p id="8411" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong>This spring looks significantly different than last spring, that’s for sure! Last year, like so many of my colleagues, my wife, Martha, and I were juggling our jobs and remote schooling for our two daughters, stressed out about so many unknowns about COVID-19. We utilized every inch of our two-bedroom apartment. The extreme juggling of very different school schedules and programs, work and about a million meals a day was exhausting. It was a bleak and foreboding time.</p><p id="26d6" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">This spring feels hopeful. We’re in a different groove. My youngest daughter is in school five days a week, and our 13-year-old daughter is on a hybrid schedule. Martha and I rotate between the room with the desk, kitchen counter and dining room table. We’re still searching for a decent office chair we can share (she’s tall; I’m not). We move between work and checking on our 13-year-old daughter to make sure she’s still awake in class throughout the day. I break at 12 p.m. for a snack or a quick bike ride now that the weather is nicer.</p><p id="6577" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How do you start your day?<br /></strong>My day starts with being on either the wake-up team or the breakfast and lunch team. I usually walk our youngest daughter to school (she’s a speed walker, so it’s a good cardio moment for me). On the way back, I recheck my calendar for the day, the P1 (short-term) and P2 (mid- to long-term) list I put together at the end of the previous day, and I make any adjustments. Now that it’s nicer outside, I can do this in the park near our apartment. I have coffee and a small breakfast before logging on. I try to optimize my day by loading my deep-focus work and critical meetings from 9 a.m. to 2 p.m.</p><p id="4403" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is something you’ve worked on recently?<br /></strong>Creating and launching the XFun Onboarding and Product Engineering Onboarding programs with my colleagues Laura Prah, Pranay Prabhat and Ben Koski. The programs introduce our new joiners to the XFun and Product Engineering organization so that everyone is equally informed and we can avoid an imbalance of knowledge or unwritten rules.</p><p id="6db2" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>There are quite a few, but my all-time favorite has to be creating, running and continuously improving the Sponsorship Program. This was the brainchild of my Times colleague Cindy Taibi and Times alum Erin Grau, with the support from our former CTO Nick Rockwell. We started the program in the Technology department to create a more diverse pipeline for leadership positions and have since expanded to include all of XFun. We have created a program that utilizes the generosity of our C-suite, as well as a curriculum focused on business fundamentals, people and leadership skills and one-on-one coaching. It’s insanely fulfilling to watch a cohort and sponsors come together.</p><p id="c9d9" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently?<br /></strong>Early in my career, I was recruited by two former colleagues to join them at an award-winning company to design and launch interactive products. While I enjoyed where I worked, I liked the products and was excited to work with the colleagues again — the job would also pay significantly more. I decided to take the leap.</p><p id="76cf" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">Between the time I accepted the position and my start date, the company completely changed its focus, leadership and, subsequently, my role. On my first day, I knew the job wasn’t right for me. Everything felt wrong, yet I felt compelled to give the role a fair chance; I was raised to finish what you start and keep a positive attitude.</p><p id="6b3d" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">I lasted about two weeks before I called it what it was: a bad fit. I worried I would damage my relationship with my colleagues while also harming my professional reputation (the tech world on the West Coast felt tiny at that time). But, it was not the type of work I was seeking nor was it the direction I wanted to pursue in my career.</p><p id="0bc2" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">We finally had an honest and candid conversation. My colleagues shared that they had also worried about the impact of all the changes to the role. We parted ways on good terms and remain in touch 20 years later.</p><p id="4712" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">I learned that you make the best decision you can with the information you have. But when the information changes, you might need to make a new decision and that’s OK. My next role was much more aligned with my goals and the type of challenges I was seeking. In other words, being true to myself led me to the path I wanted.</p><p id="aea0" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What was your first job?<br /></strong>My first job was in middle school when I mowed lawns in Raleigh, North Carolina.</p><p id="9a8c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is something most people don’t know about you?<br /></strong>I rowed against the Women’s U.S. Olympic team at the San Diego Crew Classic in a women’s eight for the Interlaken Rowing Club in Seattle. We lost, but it was a thrilling experience.</p><p id="600d" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Do you have any favorite life hacks or work shortcuts?<br /></strong>I was a reluctant convert but it’s true: baking soda and vinegar can clean almost anything.</p><p id="dbd7" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your superpower?<br /></strong> I listen with empathy and backbone.</p><p id="958d" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What or who are you inspired by?<br /></strong>That’s a tough question — there are so many! My mother (she returned to school later in life to become a registered nurse, and later went on to build a successful business, then battled cancer and Alzheimer’s Disease), my family, my daughters, my friends and my father-in-law, who underwent a lung transplant and sadly passed away recently.</p><p id="f14f" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">And of course the well-known ones: Michelle Obama, Ruth Bader Ginsberg, Maya Angelou, Beyoncé, Serena Williams and countless others who aren’t well-known. It’s wonderful to be inspired by others: you can recognize, celebrate and appreciate their achievements, as well as find inspiration and motivation for your life.</p><p id="55da" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Complete this sentence: Over time, I have realized __________.<br /></strong> It’s OK to change your mind and to let yourself change. What may have interested you when you were 20-years-old, 30-years-old or 40-years-old may shift and change as you gain more experience or are exposed to more projects, strategies and companies. Some people may narrow their expertise and others may broaden or transition to something completely different. To let yourself change is to let yourself grow.</p><p id="2fc3" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your best advice for someone starting to work in your field?<br /></strong>Be open, curious and generous. I have had at least 30 different jobs so far (this includes lawn mower, house painter, jewelry maker, wedding photographer, design director, program manager, product developer and executive coach), and the things that have helped me the most are an openness about others and their experience, and a curiosity about what can be learned in each opportunity. Maintaining these can create meaningful perspectives, lessons and experiences at any level or in any role. And once you learn or achieve success, be generous and give back.</p>]]></description>
      <link>https://open.nytimes.com/meeting-kathleen-kincaid-executive-director-for-development-engagement-at-the-new-york-times-39ceb00c1137</link>
      <guid>https://open.nytimes.com/meeting-kathleen-kincaid-executive-director-for-development-engagement-at-the-new-york-times-39ceb00c1137</guid>
      <pubDate>Tue, 15 Jun 2021 21:15:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Andrei Kallaur, Principal Product Designer at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="1332" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----915f6bb69d19--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-andrei-kallaur-principal-product-designer-at-the-new-york-times-915f6bb69d19?source=post_page-----915f6bb69d19--------------------------------">Jun 4</a> · 4 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image"><div role="button" tabindex="0" class="hl hm hn ho aj hp df dg he"><img alt="" class="aj hq hr" src="https://miro.medium.com/max/6000/1*hPe5DTGhOlaLGLHhIHvO9Q.png" width="3000" height="1000" role="presentation" /></div>
<figcaption class="hs ht dh df dg hu hv bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="92a3" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What are your pronouns?<br /></strong>He/Him</p><p id="4ba1" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your job title and does it mean?<br /></strong> I’m currently a Principal Product Designer with a main focus on the Audience Product team. This means that I work on both internal tools as well as user-facing features, such as our new share tools on the article page and our new <a href="https://www.nytimes.com/sitemap/" class="cs it" rel="noopener">Site Map</a>. I also collaborate with many other groups, including the Brand, Dataviz and Multimedia Publishing teams.</p><p id="26d0" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How long have you been at The Times?<br /></strong> September 2021 will mark nine long, amazing and fruitful years. Although, I can’t believe I don’t have more gray hairs…</p><p id="1e8c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong> It’s <em class="iu">much</em> better than 2020 — one of the worst years of my life. Last year, I had to reinvent my process and develop new rituals to cope with all of the heavy stuff that came from living through a pandemic and working in news. Now, I try to stay as zen as possible throughout the workday. If I get stressed, frustrated or start feeling sad and hopeless about the news we are reporting, I drink a big glass of water and go for a walk around the block to reset.</p><p id="154c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How do you start your day?<br /></strong>I start the morning with stretching, breathing, some meditation and mental note-taking. Self analysis. The last several years were emotionally challenging for personal reasons, so I take my mental health and well-being <em class="iu">very</em> seriously. After my morning self-analysis, I have a light breakfast, plenty of water and, of course, coffee. Then I pop open my laptop and get to it.</p><p id="4a59" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is something you’ve worked on recently?<br /></strong> Healing myself. Seriously: we are all works in progress, and for me, getting through 2020 with a focus on mental strength and self care was an epic portfolio piece.</p><p id="7bd5" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong> Everything I work on here. The Times is such a historic and important institution, and I’m humbled to be a part of bringing the Paper of Record into the future. There are times when I start a project and think, “wow, so many people are going to be using this — interacting with it, sharing it, being informed by it.” It’s absolutely incredible.</p><p id="ab61" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently?<br /></strong> The designer is not always right. Remain open, admit when you’re wrong and keep it moving. Learn from your mistakes. Collaborate.</p><p id="8856" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What was your first job?<br /></strong> I can’t pinpoint one, but several as a younger person really helped shape me. Working at a skateboard shop and a T-shirt silk screening business when I was in high school, driving a tow truck and pumping gas when I was in college. Those were so valuable in developing my work ethic and a dedication to the work I do now.</p><p id="c04d" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is something most people don’t know about you?<br /></strong> I’m an accomplished graffiti artist. I started working in the art form in 1994, and I still carry my experiences, skills and eye for detail with me to this day. Being a part of this culture truly helped define the person I am today, for better or worse.</p><p id="59cd" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Do you have any favorite life hacks or work shortcuts?<br /></strong> Coffee, water, a decent diet, therapy and knowledge of self.</p><p id="e0e5" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your superpower?<br /></strong> Humility.</p><p id="0d6b" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What or who are you inspired by?<br /></strong> My daughter, Lila. My family and friends. My colleagues both past and present. And of course, the rock stars… Massimo Vignelli, <a href="https://swoonstudio.org/" class="cs it" rel="noopener">Swoon</a>, <a href="https://firstandfifteenth.net/" class="cs it" rel="noopener">Stephen Powers (a.k.a. “Espo”)</a>, Paul Rand, Paula Scher, Natas Kaupas, DMX, Dondi White, Paul Sahre, KRS One, Tom Bodkin, Josef Albers, Kurt Vonnegut, Bill Cunningham, Lady Pink, Lee Quiñones, <a href="http://greglamarche.com/" class="cs it" rel="noopener">Greg Lamarche</a> and so many more. Graphic design, typography, color theory, graffiti, hip hop, punk and hardcore music. Skateboarding. New York City. Humanity: the good, the bad and the ugly. Everything and everyone shapes me.</p><p id="ad2a" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Complete this sentence: Over time, I have realized __________.<br /></strong> I’m mortal and not going to live forever. Tomorrow is not guaranteed, so I don’t take anything for granted.</p><p id="905c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your best advice for someone starting to work in your field?<br /></strong> Stay humble. We are forever students in anything we do, whether that be your day job, your hobby, your passion projects or just in everyday life. Be aware of what you do well and keep doing that. And when you make a mistake, own it, course correct and move on to the next.</p>]]></description>
      <link>https://open.nytimes.com/meeting-andrei-kallaur-principal-product-designer-at-the-new-york-times-915f6bb69d19</link>
      <guid>https://open.nytimes.com/meeting-andrei-kallaur-principal-product-designer-at-the-new-york-times-915f6bb69d19</guid>
      <pubDate>Fri, 04 Jun 2021 17:12:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The 3 Questions I Ask When Interviewing Job Candidates]]></title>
      <description><![CDATA[<p id="42d4" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw"><strong class="hr in">By James G. Robinson</strong></p><p id="cda9" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Whenever I hire <a href="https://nytimes.wd5.myworkdayjobs.com/en-US/NYT/job/New-York-NY/Analyst-Data-Access_REQ-009645-1" class="cs io" rel="noopener">a data analyst for my team at The New York Times</a>, I find myself inundated by a stack of resumes, LinkedIn messages and personal notes from colleagues recommending people they know.</p><p id="9819" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">It can be very difficult to sift through an often overwhelming pile of applications, but those candidates who make it through The Times’s screening process and <a class="cs io" rel="noopener" href="https://open.nytimes.com/an-update-to-our-sql-interviews-cf39dafeddcf">SQL assessment</a> can expect a 30-minute interview with yours truly. I really look forward to that conversation, as it’s my first chance for me to get to know the person behind the paperwork.</p><p id="7225" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">If you are one of those candidates, good news: I’m going to tell you what questions I will ask and what I’m looking for as we chat. I have come to rely on these three questions after nearly 15 years of interviewing candidates for analytics jobs at The Times, and I use them for almost every interview.</p><p id="ed90" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Why share these questions? One reason is because I think other hiring managers might find them thought provoking and useful, but mostly, I share them because <strong class="hr in">I want you to succeed</strong>. My goal in interviews is to find great people to join our team, not to trip you up in some booby-trapped maze.</p><p id="5dc8" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">After all, I’m not just evaluating you as an employee; hopefully, you’re evaluating me as a manager, too.</p><p id="91e4" class="hp hq ea hr b hs jk hu hv hw jl hy hz ia jm ic id ie jn ig ih ii jo ik il im dt bw">The Times is known for its <a href="https://www.nytimes.com/spotlight/the-great-read" class="cs io" rel="noopener">great storytelling</a>, and I believe that the jobs of an analyst and a journalist are very similar. We both use critical thinking and smart investigative techniques to better understand the world around us, and it’s our job to clearly communicate the insights we uncover in compelling ways.</p><p id="7698" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">My first question is: “Tell me a brief story about the most surprising insight you ever developed: how you came to uncover it, how you communicated it and why it surprised you.”</p><p id="bd85" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Every word in this question is important. The story you share should be told well, it should be brief and it should grab my attention. Most importantly, it should be surprising.</p><p id="440f" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Why surprising? Two reasons.</p><p id="ed53" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">For something to be surprising, it must run counter to some existing belief. All analyses should start with <strong class="hr in">a hypothesis</strong> — such as an assumption, an existing habit or some piece of conventional wisdom — that we can test with data. To be surprised, you must have given some thought to what you might find, and that means you probably cared enough about the outcome to develop the hypothesis in the first place.</p><p id="d55c" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">But in addition to your hypothesis, your story must also have an <strong class="hr in">element of discovery</strong>. Data analysts are at our best when we uncover hidden truths about the world we inhabit. We do not merely exist to confirm preconceptions — that would be a pretty boring career — we exist to challenge the status quo, to reveal new paths and to bring clarity to obfuscation.</p><p id="27dc" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Unfortunately, very few applicants are able to tell a clear and compelling story. They ramble. They try to impress me with complicated technical skills or obscure data science algorithms, which leaves big gaps and often, sadly, lacks the requirement of surprise.</p><p id="fb3d" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Interviews can be tricky, stressful and exhausting, and I know this question is difficult. That’s exactly why I don’t want to put you on the spot. I want you to nail this question. It’s OK to prepare in advance. Just bring me a story.</p><p id="f484" class="hp hq ea hr b hs jk hu hv hw jl hy hz ia jm ic id ie jn ig ih ii jo ik il im dt bw">My second question is: “If you take this job, <strong class="hr in">what’s in it for you</strong>? What would you like to get out of it beyond a paycheck? How will this help you grow?”</p><p id="d490" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Most applicants give a version of the same answer: that they are motivated by <a href="https://www.nytco.com/company/mission-and-values/" class="cs io" rel="noopener">The Times’s mission</a> and the opportunity to contribute. That’s great; it’s one of the reasons I enjoy working here. But, I’m not asking how great The Times is — I’m asking about <em class="jp">you</em>.</p><p id="ba0a" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">The best answers I have heard to this question showed that the candidate was curious, ambitious and sought out opportunities that would expand their knowledge. I have also heard candidates say that they want to improve their programming skills or learn more about data science. Those are fine answers, if that’s what you really want. Ultimately, I want to hear that you’re driven to learn and grow — in a way that’s specific and meaningful to you.</p><p id="6fd9" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Why? Because curiosity is a core characteristic of a good analyst, and ambition for personal growth indicates both an openness to new challenges and a willingness to learn. Most of all, it shows that the job will be rewarding for reasons beyond the paycheck.</p><p id="1a4c" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">After all, none of us should be under any illusions that you will be doing this job forever. My hope is that the role will challenge you to not only deliver great work, but develop the skills that will help you move on to bigger and better things in your career.</p><p id="6492" class="hp hq ea hr b hs jk hu hv hw jl hy hz ia jm ic id ie jn ig ih ii jo ik il im dt bw">It’s a chance for you to <strong class="hr in">ask questions of me</strong>.</p><p id="d5b0" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">I like to leave a lot of time for this. If we can switch to your questions after 15 minutes, we’re doing great: you have told me a succinct story and you have given me a glimpse at your ambitions. It’s your turn to lead the conversation.</p><p id="8670" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">In many ways, this is the most important part of the interview. Asking questions is an essential skill any analyst should have.</p><p id="52c9" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">A candidate who asks good questions reveals an interest and passion for the role that can’t be faked. It shows they care enough about the opportunity to try to understand it fully. Smart, specific questions show that they have done their research in advance; that they are truly curious about what it might be like to work at The Times. And what they ask can help me learn more about them.</p><p id="5a2e" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">I don’t think it’s a coincidence that my best hires have asked the most questions. One even came prepared with three pages of double-spaced questions, and we had to schedule a second interview so I could answer them all. (We hired her. She was great.)</p><p id="80e6" class="hp hq ea hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dt bw">Perhaps most importantly, I want you to approach this opportunity with your eyes wide open. If we’re going to work together, we need to be able to communicate with candor and respect. So, I try to answer every question honestly. Hopefully, by engaging in an open conversation from the start, I’m setting the tone for a great working relationship — one in which we’re both invested in each others’ success.</p>]]></description>
      <link>https://open.nytimes.com/the-3-questions-i-ask-when-interviewing-job-candidates-dc51e8eb51dd</link>
      <guid>https://open.nytimes.com/the-3-questions-i-ask-when-interviewing-job-candidates-dc51e8eb51dd</guid>
      <pubDate>Thu, 03 Jun 2021 17:04:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[The Training Is Coming From Inside the CMS]]></title>
      <description><![CDATA[<div class=""><h2 id="4706" class="ga bv fd bl b gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq cp">To train a 1,700-person newsroom, The New York Times added tooltips and guidance to the CMS.</h2><div class="gr n gs gt gu gv"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----55849d795779--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gw gx gy" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gz aj s"><p><a class="cs ct at au av aw ax ay az ba hd bd cw cx" rel="noopener" href="https://open.nytimes.com/the-training-is-coming-from-inside-the-cms-55849d795779?source=post_page-----55849d795779--------------------------------">May 20</a> · 7 min read</p></div></div></div></div><p id="2538" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">By Eric Athas and Taylor Poulos</strong></p><p id="3a5a" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In an era where storytelling is constantly evolving, how do you seamlessly train a newsroom with 1,700 journalists spread around the world?</p><p id="da51" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">That’s a question near and dear to the Newsroom Development &amp; Support team (or, N.D.S.), a department responsible for driving change at The New York Times. The team has trained reporters and editors on everything from live briefings to <a class="cs jd" rel="noopener" href="https://open.nytimes.com/how-we-helped-our-reporters-learn-to-love-spreadsheets-adc43a93b919">data reporting</a> to visual journalism and new story formats like explainers.</p><p id="982d" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In 2019, N.D.S. completed one of its biggest undertakings: training the entire newsroom on <a class="cs jd" rel="noopener" href="https://open.nytimes.com/we-built-collaborative-editing-for-our-newsrooms-cms-here-s-how-415618a3ec49">an expressive and collaborative CMS, called Oak</a>. The N.D.S. team coached every single reporter and editor one-on-one — in New York, Washington, D.C., Hong Kong, London, San Francisco and remotely for correspondents — through every part of the tool, and explained how it all worked and best practices for its powerful storytelling capabilities. And then, when journalists began using Oak, the team was there to answer questions in-person and on Slack. We also worked closely with the Oak product team to incorporate feedback and make the software more effective and easier to use.</p><p id="b933" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The work was exhaustive and time intensive. And, because the team spent so much time training reporters and editors on howto use Oak, that left less time to train them to master different story formats, move swiftly during breaking news, make stories more visual and other skills needed in the new tool.</p><p id="3fb7" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">To help make Oak training more efficient, the N.D.S. and Oak teams launched a project aimed at building guidance — such as tooltips, helper text and best practices — directly into Oak. The goal: Give reporters and editors the help they need, in the places where they work, at the moments they need it most.</p><p id="37f5" class="ig ih fd ii b gb ka ik il ge kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">With that goal firmly in mind, we interviewed our colleagues within The Times and outside experts on training to understand where our documentation worked well and where it fell short. Through this research, we uncovered several major challenges.</p><p id="e360" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">1,700 people is a lot of people<br /></strong>The first challenge was the size and scope of the newsroom itself. With over 1,700 journalists who touch our CMS, there are many different roles that need to be accounted for. Our CMS users include reporters who work on one major feature story for a long period of time; editors who shepherd dozens of stories toward publication every week; and visual journalists who are focused on making our report striking and beautiful.</p><p id="d89c" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Varied expectations for what a CMS can do<br /></strong>A journalist’s previous experience with a CMS can affect their expectations of our tools. People who have joined The Times from organizations with less effective CMS teams had limited expectations about what a CMS could do. Because the first step of learning how to do a task is being aware that the task is possible, these lowered expectations made people less likely to try new things; They simply assumed that whatever they wanted to do wasn’t possible. On the other hand, some people were used to asking more of their CMS, and were comfortable pushing its limits through insightful questions and feature suggestions.</p><p id="aa49" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">It’s hard for busy journalists to keep track of every new feature<br /></strong>With a dedicated product and development team for our CMS, we are constantly tweaking our tools, especially the tools our journalists use most often. This means we need to continually provide training that covers new changes. And because our tools are complex, these training sessions are sometimes over an hour and a half long. We can’t expect every person to remember every detail of the sessions.</p><p id="3080" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="je">[If this work is interesting to you, come work with us.</em> <a href="https://www.nytco.com/careers/" class="cs jd" rel="noopener"><em class="je">We are hiring</em></a><em class="je">!]</em></p><p id="e15b" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Training isn’t one and done — tools and best practices evolve<br /></strong>As the world we report on changes, so do our tools and best practices. Our tools need to have the capability to surface, document and remind users about these changes. One participant in our research put it succinctly when he compared journalism to medicine, where knowledge is constantly evolving, and practitioners constantly need to stay up to date with the latest techniques.</p><p id="fdd3" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The research was essential in learning what guidance would be most useful for the Times newsroom. It also helped us identify the challenges we would need to navigate when placing tips in the space where our journalists work.</p><p id="20c8" class="ig ih fd ii b gb ka ik il ge kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">Our next step was to make sure that the guidance would be informed by the journalists doing the work day in and day out. We made a list of every field that our reporters and editors touch in Oak — such as headline, summary, captions and URL — and asked over a dozen colleagues about each one. We wanted to know what tips we should include and how we might frame guidance in the CMS. We also wanted to know where there are sticking points in the CMS, and what is most important to flag when journalists are making decisions on deadline.</p><p id="d7e9" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Although we already had extensive best practice documents and how-to guides for every aspect of newsroom work, space is limited in Oak. This process allowed us to narrow in on the guidance that would be most essential to surface as our colleagues write and edit.</p><p id="e1d6" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Once the list of items was refined, then it was time to figure out where they should live in the CMS. Here’s where we landed:</p><h2 id="809f" class="kf jg fd bl bm kg kh gd jj ki kj gg jm gh kk gj jq gk kl gm ju gn km gp jy kn bw"><strong class="ax">For information tied to a specific field: The Right Rail</strong></h2><figure class="kp kq kr ks kt dy df dg paragraph-image">
</figure><p id="aded" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For most of the guidance we came up with, the right rail was the best place to put it. The information in the right rail shows up when a user is focused in a specific field, making it targeted to the moment users need it most. Auxiliary information, like a character count, can be shown within the same context, giving live feedback as users perform an action. And unlike tooltips, which show up only when users think to click or hover over the right icon, the guidance is shown by default; always there, but designed to be differential and not distracting.</p><h2 id="44d0" class="kf jg fd bl bm kg kh gd jj ki kj gg jm gh kk gj jq gk kl gm ju gn km gp jy kn bw"><strong class="ax">For information tied to a element in the editor: The Detail Pane</strong></h2><figure class="kp kq kr ks kt dy df dg paragraph-image">
</figure><p id="97ec" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Oak is an element-based editor, meaning that journalists build their stories out of a wide array of multimedia and text based elements, such as images, pull quotes, headings and embedded tweets. To document these elements, we expanded the element menu to include space for an image, a description and a link to learn more about the type of element, leaving plenty of room for explanations about what the element is, and how it can be used.</p><h2 id="a6e8" class="kf jg fd bl bm kg kh gd jj ki kj gg jm gh kk gj jq gk kl gm ju gn km gp jy kn bw"><strong class="ax">For when you don’t know where to start: The Help Center</strong></h2><figure class="kp kq kr ks kt dy df dg paragraph-image">
</figure><p id="b302" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In addition to this in-CMS, N.D.S. has produced a lot of documentation about our best practices for things such as SEO, visual journalism, editing processes, and story formats. However, it wasn’t clear where people could access this information within Oak. The help center is integrated into the tool itself, accessible through an icon in the lower right hand corner of the screen. It has a curated list of documentation and links, as well as the option to search our full documentation library. It also has a place for people to submit feedback about the tool directly, making it easier for people to submit feedback or questions the second they run into issues.</p><p id="5598" class="ig ih fd ii b gb ka ik il ge kb in io ip kc ir is it kd iv iw ix ke iz ja jb dt bw">How we tell stories will only continue to change. And so our journalists will continually have new things to learn: new tools, updated standards and best practices to ensure they’re able to make the best journalism possible.</p><p id="bd47" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Just as our storytelling formats will change, so will our tools. It’s important to have a clear process for keeping all of the documentation we have placed into Oak up-to-date. Our colleague, Jin Kim, an editor with N.D.S., will lead the next chapter of this work to keep in-tool guidance relevant. Jin will coordinate between the Oak team and N.D.S. to determine when the text in Oak has become out of date and will be able to update the information on the fly. In collaboration with newsroom experts, Jin will also keep a pulse on emerging journalistic practices — such as new SEO tactics or updated standards guidance — that can be surfaced to reporters and editors. By building this capacity, we hope to continue evolving the guidance built into Oak, well into the future.</p>]]></description>
      <link>https://open.nytimes.com/the-training-is-coming-from-inside-the-cms-55849d795779</link>
      <guid>https://open.nytimes.com/the-training-is-coming-from-inside-the-cms-55849d795779</guid>
      <pubDate>Thu, 20 May 2021 17:23:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Aiyana Brooks, Software Engineer at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="66ec" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----7bd4e4d5ec8c--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-aiyana-brooks-software-engineer-at-the-new-york-times-7bd4e4d5ec8c?source=post_page-----7bd4e4d5ec8c--------------------------------">May 18</a> · 4 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image"><div role="button" tabindex="0" class="hl hm hn ho aj hp df dg he"><img alt="" class="aj hq hr" src="https://miro.medium.com/max/6000/1*cVW6GQ5DzT4hFLJ6n-XOKw.png" width="3000" height="1000" role="presentation" /></div>
<figcaption class="hs ht dh df dg hu hv bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="2177" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What are your pronouns?<br /></strong> She/her</p><p id="629c" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your job title and does it mean?<br /></strong> Software engineer. This means I write code to provide the solutions needed to drive business value. I currently work on an application called Event Tracker which enables The New York Times to collect data and metrics about how our readers use our various products.</p><p id="6488" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">How long have you been at The Times?<br /></strong> This is actually my second time working at The Times. I first worked here from 2007 to 2013 as a software engineer on the CMS team, and I rejoined in July, 2020 on the Data Collections team.</p><p id="bb27" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong> Working from home right now is … interesting. My oldest daughter is in second grade and doing remote school. She and I share the dining area as our work space and we usually have competing video calls. My partner is also an engineer and he takes his video calls in one of the bedrooms. In between meetings, we both take turns entertaining our two-year-old. After doing this for over a year, we have settled into a routine that enables us to be surprisingly efficient and effective.</p><p id="ee22" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>The Times and the Data Collections team take reader privacy very seriously, and readers who have visited our site can request to have any of the data we have collected about them removed — this is called a <a href="https://www.techopedia.com/definition/33828/data-subject-request-dsr" class="cs it" rel="noopener">Data Subject Request</a> (DSR). I wrote the code that takes a DSR, finds all of the instances of that reader’s data in our database and removes them.</p><p id="20b4" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">This was challenging because the team had to find a way to effectively search through all of the data in a fairly large database. Additionally, we needed to be able to do this on a regular basis for any reader who submits a DSR, so I wrote the code, using Apache Airflow, in a way that could be run on a schedule.</p><p id="7f57" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>One challenge I faced early in my career was not knowing how to advocate for myself. I approached my early career the same way that I approached school: I did the work that was assigned to me to the best of my ability. I soon realized that this was not the best way to move my career forward.</p><p id="895d" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">Today, I am much more deliberate in identifying the kinds of projects that excite me and I am not afraid to make suggestions or volunteer for challenging assignments. I also make sure that I frequently communicate my goals with my manager and that I am getting opportunities that keep me on track toward meeting my goals.</p><p id="631e" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">Do you have any favorite life hacks or work shortcuts?<br /></strong> I’ve recently started using TiddlyWiki to organize all of my ideas. I like it because it’s really just a self-contained HTML file. This means I don’t have to worry about installing special software to be able to view my notes.</p><p id="f2f0" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw"><strong class="hy is">What is your best advice for someone starting to work in your field?<br /></strong>Learn how to learn. Software engineering is a field that changes rapidly; You need to have curiosity and you need to understand the learning style that works best for you.</p><p id="a7ab" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">There are so many great resources out there, many available for free or with a free trial. Massive open online courses can provide a great introduction to any software topic, but it’s also important to learn by doing. There are many sites, such as Advent of Code, Exercism and Free Code Camp, that offer code challenges. Cloud platforms, such as Amazon Web Services and Google Cloud Platform, typically offer a free tier or free credits so that someone interested in learning can experiment with the platforms.</p><p id="a9e8" class="hw hx ea hy b ey hz ia ib fb ic id ie if ig ih ii ij ik il im in io ip iq ir dt bw">With so much information available, it can feel intimidating to get started, but the best way is to just choose a resource and stick with it. Be patient with yourself and accept that being confused is part of the job, as is the satisfaction that comes when things start to “click.”</p>]]></description>
      <link>https://open.nytimes.com/meeting-aiyana-brooks-software-engineer-at-the-new-york-times-7bd4e4d5ec8c</link>
      <guid>https://open.nytimes.com/meeting-aiyana-brooks-software-engineer-at-the-new-york-times-7bd4e4d5ec8c</guid>
      <pubDate>Tue, 18 May 2021 16:53:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Threading at the Speed of Light]]></title>
      <description><![CDATA[<p id="96bf" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">By Lauren Yew</strong></p><p id="4450" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When a reader opens The New York Times on Android, our app makes a series of calls to our core libraries. Each feature that is rendered for the reader might depend on multiple back-end calls, user input and other parallel business logic flows. To ensure that our readers are served with a fast and reliable mobile app experience, we do a lot of asynchronous work, or threading, within our app. We use our threading technology to not only offload network calls and heavy business logic, but to also chain together complex sets of processes that are updated at different times and can affect multiple observing business logic flows.</p><p id="5e86" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For the last few years, The Times’s Android teams have used both RxJava and Kotlin Coroutines and Flow for threading in the core libraries that power our News, Cooking and Games apps. To unify our stack, we decided to choose one technology and dug into the performance differences between RxJava and Coroutines.</p><p id="e784" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">While RxJava was a powerful tool, its CPU, thread usage and general complexity as a language made it an increasingly cumbersome technology for our needs. We have monitored <a class="cs jd" rel="noopener" href="https://open.nytimes.com/writing-asynchronous-code-for-android-introducing-coroutines-20dda14a39ea">the progress of Kotlin Coroutines and Flow</a> and determined that it not only covered all of our feature needs, but it also had significant performance improvements.</p><p id="8709" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In order to iteratively migrate our apps and libraries to Coroutines, we first needed to update our core libraries. Here are some best practices we developed during our migration.</p><p id="2857" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw"><strong class="ii jl">Use Coroutines</strong> <code class="km kn ko kp kq b"><strong class="ii jl">suspend</strong></code> <strong class="ii jl">for basic threading<br /></strong>When we migrated to Coroutines, we found that whenever we needed to use basic asynchronous code that returned a single result (or a <a href="http://reactivex.io/documentation/single.html" class="cs jd" rel="noopener">RxJava Single</a>), we could replace that code with an equivalent <a href="https://kotlinlang.org/docs/composing-suspending-functions.html" class="cs jd" rel="noopener">suspend function</a>. For example:</p><figure class="ho hp hq hr hs he">
</figure><p id="0bd1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Example RxJava vs. Kotlin Coroutines:</p><figure class="ho hp hq hr hs he">
</figure><p id="7013" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">ControlledRunner pattern to handle multiple calls to same function<br /></strong>While we were migrating, we ran into multiple cases where we had several <code class="km kn ko kp kq b">suspend</code> functions that needed to <code class="km kn ko kp kq b">join</code> and wait for a single result. This was particularly important for situations when we had multiple calls in parallel for the same user-state information and we needed to avoid flooding the back-end with calls.</p><p id="9b03" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Instead of making duplicate calls for the same result, we used the <a href="https://medium.com/androiddevelopers/coroutines-on-android-part-iii-real-work-2ba8a2ec2f45" class="cs jd" rel="noopener">ControlledRunner pattern</a>. The pattern’s <code class="km kn ko kp kq b">joinPreviousOrRun</code> function will discard any new tasks and have the calling task wait on the result of the original task. This is useful if several areas have made the same call and expect the same result. We also used ContolledRunner’s <code class="km kn ko kp kq b">cancelPreviousThenRun</code> function to cancel old tasks and always run the latest task — which helped in situations where a new event supersedes the previous event.</p><figure class="ho hp hq hr hs he">
</figure><p id="4aa1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">Using Flows for reactive or observable streams<br /></strong>When we needed a function that could emit multiple values at different times, we used <a href="https://kotlinlang.org/docs/flow.html" class="cs jd" rel="noopener">Kotlin Flows</a>.</p><p id="5868" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Flows are very much like RxJava Observables: <code class="km kn ko kp kq b"><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/collect.html" class="cs jd" rel="noopener">collect{...} or collect()</a></code> acts like RxJava’s <code class="km kn ko kp kq b"><a href="http://reactivex.io/documentation/operators/subscribe.html" class="cs jd" rel="noopener">subscribe()</a></code>. We used <a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/map.html" class="cs jd" rel="noopener">mapping functions</a> to update the result or <code class="km kn ko kp kq b"><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/on-each.html" class="cs jd" rel="noopener">onEach{...}</a></code> to create side effects for each result. <code class="km kn ko kp kq b"><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/launch-in.html" class="cs jd" rel="noopener">launchIn(scope)</a></code> was very helpful to launch and collect the Flow in a given scope so we didn’t have to nest our Flows in a <code class="km kn ko kp kq b">scope.launch</code>.</p><p id="6122" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We made it a best practice that our library APIs always use <code class="km kn ko kp kq b">Flow&lt;T&gt;</code> in their client-facing interfaces to prevent outside sources from interfering with our Flow business logic.</p><p id="0300" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In order to avert memory leaks or using up our thread pool, we needed to prevent long-running or duplicate Flows. To do this, we made sure to cancel the Flow’s <code class="km kn ko kp kq b">Job</code> when the lifecycle of the object finished.</p><p id="7c53" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Here’s some examples of Flow patterns:</p><figure class="ho hp hq hr hs he">
</figure><p id="ac41" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">Handling Lifecycles and Scopes<br /></strong>When possible, we tried to use the built-in <a href="https://developer.android.com/topic/libraries/architecture/coroutines#lifecycle-aware" class="cs jd" rel="noopener">Android lifecycle-aware scopes</a> (such as <code class="km kn ko kp kq b">viewModelScope</code> or <code class="km kn ko kp kq b">lifecycleScope</code>), which are automatically cancelled and cleaned up with the Android lifecycle. If we made our own scope within a class, we had to remember to cancel it. So, we found it was more efficient to make <code class="km kn ko kp kq b">suspend</code> function APIs and call them from the view model or lifecycle-aware scopes. (This also helped us with unit testing because we could test the functions directly in the unit test instead of trying to access them from the encompassing class.)</p><p id="b337" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">Passing Dispatchers in Class Constructors<br /></strong>We often had to switch between <a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-dispatchers/" class="cs jd" rel="noopener">Dispatcher types</a>: using IO Dispatchers for network calls, default Dispatchers for most business logic and Main Dispatchers for UI updates (because Android will crash if there is a UI update on a non-Main thread Dispatcher).</p><p id="d68b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When we <a href="https://craigrussell.io/2019/11/unit-testing-coroutine-suspend-functions-using-testcoroutinedispatcher/" class="cs jd" rel="noopener">unit tested our</a> <code class="km kn ko kp kq b"><a href="https://craigrussell.io/2019/11/unit-testing-coroutine-suspend-functions-using-testcoroutinedispatcher/" class="cs jd" rel="noopener">suspend</a></code> <a href="https://craigrussell.io/2019/11/unit-testing-coroutine-suspend-functions-using-testcoroutinedispatcher/" class="cs jd" rel="noopener">functions</a>, we found that passing the Dispatcher types through the class constructor and providing the <code class="km kn ko kp kq b"><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-test/" class="cs jd" rel="noopener">TestCoroutineDispatcher</a></code> to our class constructor helped us easily mock our asynchronous <code class="km kn ko kp kq b">suspend</code> functions.</p><figure class="ho hp hq hr hs he">
</figure><p id="bffc" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw">Some of our client apps contained legacy RxJava code that wasn’t quite ready to migrate to Coroutines. To support this, we used the <a href="https://github.com/Kotlin/kotlinx.coroutines/tree/master/reactive/kotlinx-coroutines-rx2" class="cs jd" rel="noopener">kotlin-coroutines-rx2 library</a> to convert between RxJava and Coroutines. The library’s <code class="km kn ko kp kq b">rxSingle</code> and <code class="km kn ko kp kq b">rxObservable</code> functions converted our Coroutines <code class="km kn ko kp kq b">suspend</code> functions into RxJava, and the <code class="km kn ko kp kq b">await()</code> or <code class="km kn ko kp kq b">asFlow()</code> methods converted RxJava into Coroutines.</p><p id="7800" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">One important note, however, is that while the library does create both threading services, it does not replace the work of manually migrating code from RxJava to Coroutines. It was simply a workaround that allowed us to iteratively migrate parts of our code to Coroutines, while leaving the remaining parts in RxJava.</p><figure class="ho hp hq hr hs he">
</figure><p id="8367" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw">One of our challenges was migrating legacy RxJava unit tests to Coroutines. When dealing with unit tests that were previously for RxJava Single results, we used <code class="km kn ko kp kq b"><a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-test/kotlinx.coroutines.test/run-blocking-test.html" class="cs jd" rel="noopener">runBlockingTest</a></code> to make our new <code class="km kn ko kp kq b">suspend</code> functions run consecutively and return the results.</p><p id="48cb" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When working with Flows that used to be RxJava Observables, we used a <code class="km kn ko kp kq b">TestCollector</code> pattern (see example below) to gather and verify the values from our Flows.</p><figure class="ho hp hq hr hs he">
</figure><p id="3280" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When we hit a roadblock in getting our expected results from a Flow, we found that most often the issue was that our Flow was not using the <a href="https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-test/kotlinx.coroutines.test/-test-coroutine-dispatcher/" class="cs jd" rel="noopener">TestCoroutineDispatcher</a> in its scope. Having another Dispatcher in use caused the test to fail or be flaky (since it was not a mocked test Dispatcher but a real threaded dispatcher).</p><p id="7811" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Here’s an example of a suspend method test and a Flow test:</p><figure class="ho hp hq hr hs he">
</figure><p id="ef84" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw">With each migration to Coroutines, we saw performance improvements in speed, memory usage, CPU and thread usage. Using Android Studio’s Profiler, we ran debug branch builds to compare our app’s performance before and after the migration. To get reliable metrics, we averaged over six user sessions with the same steps and the same user states.</p><p id="54ac" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For <a href="https://medium.com/specto/dont-run-benchmarks-on-a-debuggable-android-app-like-i-did-34d95331cabb" class="cs jd" rel="noopener">more accurate timing data</a>, we used coded metrics that were already built into our app. Our production metrics captured start-up time, along with feature-open and feature-load timing. Since these metrics were gathered from production, the amount of data captured allowed us to average across different devices, locations and user sessions.</p><p id="6748" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Here is an example of results from one of our larger core library migrations:</p><figure class="ho hp hq hr hs he df dg paragraph-image">
<figcaption class="ic id dh df dg ie if bl b fx co cp">This is one example of the performance gains we observed and should not be taken as a generalization. Performance gains may vary based on uses of RxJava vs. Kotlin Coroutines and Flow.</figcaption></figure><p id="8a10" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Migrating from RxJava to Kotlin Coroutines opened up new opportunities and improvements for our app and development teams. Because we are now able to take advantage of the powerful threading of Jetpack libraries like Room and Lifecycle, we can set up and query databases with a couple lines of code and we no longer have to worry as much about lingering threads outside of lifecycles. We have been using Coroutines to revisit our app architecture patterns: cleaning and simplifying them, and improving our test coverage.</p><p id="d1d1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As each migration and iteration completes, our threading work becomes faster and more reliable, so our readers can experience Times journalism and the background work truly stays hidden in the background.</p>]]></description>
      <link>https://open.nytimes.com/threading-at-the-speed-of-light-6ae31257307a</link>
      <guid>https://open.nytimes.com/threading-at-the-speed-of-light-6ae31257307a</guid>
      <pubDate>Thu, 13 May 2021 20:18:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[4 Steps to Win Advocates and Implement a Technical Change]]></title>
      <description><![CDATA[<p id="b252" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">By Lauren Yew</strong></p><p id="9fd3" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Last year, many of the Android teams at The New York Times had an ongoing debate: should we use RxJava or Kotlin Coroutines and Flow? While the question was simple, the answer and technical solution were not. We were using both in our client apps and RxJava in our core libraries, which meant we had two fragmented technologies to support.</p><p id="9046" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">My team, the App Platforms team, manages the core libraries and features that are used by Times mobile app teams, and part of our responsibility is to model technical best practices. We wanted to work with our Times Android colleagues to choose the best solution. Many of our colleagues believed that migrating to Kotlin Coroutines would <a href="https://exaud.com/rxjava-vs-coroutines-part-ii/#:~:text=In%20terms%20of%20performance%2C%20Coroutines,UI%20interruptions%20for%20the%20user." class="cs jd" rel="noopener">improve performance</a>, the readability of our code, increase developer velocity and speed up unit testing. But, some of our colleagues preferred to stick with RxJava because of its many features. We needed to first build consensus across all of the Android teams on what technology to use as a best practice.</p><p id="4a7a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The App Platforms team’s hypothesis was that Coroutines would be the better option for our core libraries, however, we couldn’t rush towards implementation because any technical change to our core libraries could have cross-departmental effects. In addition to building consensus, we had to articulate how the change was worth the product roadmap disruption and the shift in developer practices, and how it would positively impact our business goals.</p><p id="b3b7" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Here’s how we did it.</p><p id="0567" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw"><strong class="ii jl">Determine the level of effort<br /></strong>Our first step was to determine the level of effort it would take to make these changes. We looked at where the changes needed to happen: in new features, in legacy code and across several apps and teams.</p><p id="02fe" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">At The Times, we use <a href="https://medium.com/radius-engineering/project-estimation-through-t-shirt-size-ea496c631428" class="cs jd" rel="noopener">T-shirt sizing for the level of effort</a>: small, medium, large and extra large. Knowing how long things will take helps establish a timeline for the change and allows teams to define the work based on priority, dependencies and difficulty. T-shirt sizing does not have to be exact — it helps to approximate how long a project will take. A good rule of thumb is if the size of a given problem is greater than medium, the problem itself needs to be split or spiked to get a more reasonable, smaller estimate.</p><p id="952e" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For the Kotlin Coroutines project, the total project T-shirt size was large because we needed to migrate over four legacy core libraries and integrate them into our client News app. From there, we split each effort into the specific libraries that needed to be migrated (size: medium) and the integration (size: small).</p><p id="e80d" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">Get everyone on board<br /></strong>Because we wanted to make changes that included new features, refactoring old code and future-proofing, we had to identify who needed to be convinced that this work was important. We needed advocates in Product to prioritize the work, partners in Engineering who could provide feedback and share the workload, and support from QA to identify any testing concerns. Product and Engineering were interested in Coroutine’s promise of performance improvements and increased developer velocity. QA approved the proposal to integrate regression testing as well as the improvement in unit testing.</p><p id="bbd8" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jl">Assess the idea and get feedback<br /></strong>We use a <a href="https://medium.com/@andrewhowdencom/writing-up-a-request-for-comments-4a6be864bb8a" class="cs jd" rel="noopener">Request for Comments (RFC)</a> process at The Times whenever an engineering team sets out on a big project. The idea behind an RFC is to document the changes we would like to make and to get feedback from our peers. This exercise includes documenting and addressing any drawbacks or alternatives to the proposed solution, and it helps prepare us for any issues that might arise.</p><p id="5f0d" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As part of our RFC, we considered drawbacks and we proposed solutions:</p><ul class=""><li id="d6b3" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb km kn ko bw"><strong class="ii jl">To use Kotlin Coroutines and Flow</strong>, all files would need to be migrated from Java to Kotlin. We already had an engineering decision that we wanted to move to Kotlin and any files that had to be changed should be moved to Kotlin, so this ended up being a non-issue.</li>
<li id="f615" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb km kn ko bw"><strong class="ii jl">The time and effort required to do the conversion were significant</strong>, and making new features might slow developer velocity. However, the benefits from the conversion — improved performance, easier testing — outweighed the level of effort and made the project a high priority for the product team. The new technology would also help developers improve their velocity over time.</li>
<li id="0582" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb km kn ko bw"><strong class="ii jl">Some teams still using RxJava needed a way to access the new Kotlin Coroutines and Flow APIs.</strong> We proposed using <a href="https://github.com/Kotlin/kotlinx.coroutines/tree/master/reactive/kotlinx-coroutines-rx2" class="cs jd" rel="noopener">kotlin-coroutines-rx2 library</a>, as well as backwards-compatible RxJava APIs (that use Coroutines behind-the-scenes) to support teams who could not migrate immediately.</li>
</ul><p id="87e4" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">By going through this RFC process for the migration, we were able to address concerns that came up around our technology change.</p><p id="38e4" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw">The App Platforms team uses tech spikes to create proofs of concept. We try to keep our tech spikes to a maximum of five working days. If our spike appears it might take longer than five days, we reevaluate the problem and think about ways it might be broken down into a more manageable bucket of work. The data generated from a spike can help strengthen the case to make a technical change on a larger scale.</p><p id="96cb" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For us, quantifiable results can come in many different forms:</p><ul class=""><li id="86c5" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb km kn ko bw"><strong class="ii jl">The change reduces the number of crashes or bugs.</strong> For example, if the app routinely crashed, we could compare the original build (with crashes) to the spike build (without crashes) and document the percent-change in results.</li>
<li id="57cd" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb km kn ko bw"><strong class="ii jl">The performance improves across different metrics</strong>, such as speed, CPU, memory, thread usage and network data usage.</li>
<li id="6288" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb km kn ko bw"><strong class="ii jl">The change makes developers’ lives easier</strong>. There are fewer lines of code that have to be written, code test coverage percentage changes and developer velocity improves.</li>
</ul><p id="2cde" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">To provide quantifiable evidence that our migration to Coroutines would improve our app, we set up a five-day tech spike. In a small core library that integrates with The Times News app, we migrated all instances of RxJava to Coroutines, updated the unit tests in the app and integrated into a sample app and the News app on a branch. Then we used Android Studio’s Profiler to compare the average CPU, memory and thread usage of the branch with the News app. We also put in code timers to calculate the differences in timing.</p><p id="8d19" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">With our spike results, we saw an improvement of 34 percent in CPU usage, 13 percent improvement in memory usage, 12 percent improvement in thread usage, and 21 to 63 percent improvement in speed on parts of our News and sample apps that touched the updated library.</p><p id="acd8" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">With this strong performance improvement data, we were able to reinforce the enthusiasm of our advocates and convince those who were skeptical that migrating our core libraries to Coroutines and adopting Coroutines as best practice threading technology across Android teams was the best move.</p><p id="728e" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw">Once we knew that we would move forward with the conversion to Kotlin Coroutines and Flow, we had to set up a timeline for the work.</p><p id="4092" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">For us, our plan consisted of these steps:</p><ol class=""><li id="0af9" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb ku kn ko bw"><strong class="ii jl">Define the timeline</strong>. A timeline makes it easier to envision and enact a plan. It also prevents dependency conflicts and keeps track of work in progress. Short timelines are best (half a year, at most. Tech fatigue is real). Our timeline started after our RFC (which took about one month to spike, write and approve), and we planned for about two months of work.</li>
<li id="3d3e" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb ku kn ko bw"><strong class="ii jl">Incremental plans are best.</strong> We found that breaking a large plan into smaller pieces that could be developed, completed, merged and then improved upon later allowed us to achieve each goal faster and avoid a giant, unmergeable branch. Our migration plan was broken into separate core library releases and integrations. We then had several developers working on each library in parallel and created a flexible timeline with other library changes.</li>
<li id="1498" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb ku kn ko bw"><strong class="ii jl">Think backwards-compatible</strong>. Some of our client app teams were not ready to move away from RxJava. So, we created RxJava-compatible library modules for them to use, and suggested using the <a href="https://github.com/Kotlin/kotlinx.coroutines/tree/master/reactive/kotlinx-coroutines-rx2" class="cs jd" rel="noopener">kotlin-coroutines-rx2 library</a> as a workaround to allow developers to transition between RxJava and Coroutines.</li>
<li id="174c" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb ku kn ko bw"><strong class="ii jl">Ensure a smooth transition</strong>. Consider the level of effort for all teams involved, such as QA, and communicate widely about the changes coming up. To reduce bugs, we worked out the testing plan for feature branches with our QA team and added unit test coverage requirements.</li>
<li id="b72e" class="ig ih ea ii b ey kp ik il fb kq in io ip kr ir is it ks iv iw ix kt iz ja jb ku kn ko bw"><strong class="ii jl">Record quantifiable results</strong>. These can be used to demonstrate the value and impact of the work being done to management. As we completed each migration, we measured and published the results of the work, making sure the changes were creating performance improvements.</li>
</ol><p id="a479" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">All core library releases included release notes as well as updates by our devs to the working team at large of any breaking API changes or library releases. Each change also included performance testing, as well as documentation. As we worked through our game plan, we demoed the performance improvements for the entire team — gaining advocates in product, engineering and management along the way.</p><p id="bc36" class="ig ih ea ii b ey kh ik il fb ki in io ip kj ir is it kk iv iw ix kl iz ja jb dt bw">Once we got engineering and product approval to add our proposal to the roadmap, we consolidated our working group to divide up the work. During the migration process, we kept an eye on our proposed timeline to make sure we didn’t have any scope-creep or blocked items.</p><p id="b4b7" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The migration vastly improved different areas of our core libraries and News app integrations. Kotlin Coroutines sped up feature creation, significantly improved app and library performance, and simplified unit testing. Moving forward, we’re building all new core libraries and features with Coroutines and Flow and refining our best practices working with Coroutines. We’re also working with the Cooking app team in an advisory capacity as they migrate to Coroutines. Overall, we believe that the work we did to assess, prove and create a proposal for change is paying off in dividends.</p>]]></description>
      <link>https://open.nytimes.com/4-steps-to-win-advocates-and-implement-a-technical-change-b2a9b922559b</link>
      <guid>https://open.nytimes.com/4-steps-to-win-advocates-and-implement-a-technical-change-b2a9b922559b</guid>
      <pubDate>Thu, 13 May 2021 20:18:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How We Manage New York Times Readers’ Data Privacy]]></title>
      <description><![CDATA[<figure class="ea eb ec ed ee ef df dg paragraph-image">
<figcaption class="ex ey dh df dg ez fa bl b fb co cp">Illustration by Tim Peacock</figcaption></figure><div class=""><h2 id="59b0" class="ga bv fd bl b gb gc gd ge gf gg gh gi gj gk gl gm gn go gp gq cp">We built a system that allows a single team to implement data privacy changes across a suite of over 70 products.</h2><div class="gr n gs gt gu gv"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----d39627d79a64--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gw gx gy" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gz aj s"><p><a class="cs ct at au av aw ax ay az ba hd bd cw cx" rel="noopener" href="https://open.nytimes.com/how-we-manage-new-york-times-readers-data-privacy-d39627d79a64?source=post_page-----d39627d79a64--------------------------------">May 6</a> · 8 min read</p></div></div></div></div><p id="7119" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">By Kelsey Johnson</strong></p><p id="f092" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When I first started working on the Data Governance team at The New York Times in 2017, I would often be met by blank stares when I tried to explain my job. Over time, I perfected my elevator pitch: I work on privacy, ethics and governance at The Times, and it’s a bit like <a href="https://youtu.be/m_MaJDK3VNE" class="cs jd" rel="noopener">herding cats</a>.</p><p id="6a99" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As the second member of The Times’s Data Governance team, I dove straight into the high-profile <a href="https://www.nytimes.com/2018/05/24/technology/europe-gdpr-privacy.html" class="cs jd" rel="noopener">General Data Protection Regulation (G.D.P.R.) project</a>, which required that our organization follow strict ground rules for handling the personal data of our users located in the European Economic Area. Our team of two had to simultaneously discover every way our business operations were processing the data of our users, all the while creating and implementing rules to honor our users’ G.D.P.R. rights.</p><p id="0c4f" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Two people, over 70 product teams and five months to get it all in place. Don’t let anyone tell you herding cats is easy.</p><p id="dba2" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">G.D.P.R. was just the beginning. There are now over 100 privacy laws in <a href="https://en.wikipedia.org/wiki/Privacy_law#Privacy_laws_by_country" class="cs jd" rel="noopener">other countries</a>. In the United States, <a href="https://iapp.org/resources/article/state-comparison-table/" class="cs jd" rel="noopener">there are numerous bills</a> that have either been introduced into state legislatures or have been signed into law.</p><p id="335d" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Not only do each of these laws apply to specific geographic regions, but they each tend to have their own unique requirements. This means that companies like The Times have to implement complex sets of rules to ensure their websites and apps are in compliance no matter where users are located. New regulations often go into effect with short grace periods, so companies have very little time to make changes to their technology stacks.</p><p id="8572" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Because technology is constantly evolving, legislation will need to adapt as technology changes. This means companies need to be ready to modify their interpretations of the law anytime a law gets amended. That leaves companies with two options: to reactively respond any time a change is required, or to invest in privacy as part of their business strategy and dedicate resources to the task.</p><p id="1ffd" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The Times has chosen the latter.</p><p id="7618" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">It was 2019 when we retired our cat-herding hats and harnessed our brain power to build PURR: Privacy, Users, Rules and Regulations.</p><p id="8909" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">PURR is our homegrown system that operationalizes The Times’ privacy offerings. The system centralizes our business logic and rules, and it communicates with our front-end products, instructing them on how to carry out the privacy rights of each unique user that visits us. It also connects to an internal preferences system that allows us to securely save and sync logged-in users’ privacy preferences across all of our products.</p><p id="9059" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="ke">[We’re hiring.</em> <a href="http://nytco.com/careers/" class="cs jd" rel="noopener"><em class="ke">Come work with us</em></a><em class="ke">!]</em></p><p id="a04a" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">This enables us to easily and efficiently adjust our interpretations of data regulations and it simplifies the implementation of such changes across our suite of products.</p><p id="5bbf" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Because of PURR, we have said goodbye to year-long privacy projects and roadmap disruptions whenever a new regulation is passed. Now, a single team can independently implement most changes. Purr-fect, right?</p><p id="7b50" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">I like to think of PURR as a privacy machine. It consumes information about a reader, analyzes that information based on knowledge it has been given about our company’s interpretations of privacy regulations, and then outputs instructions on how that reader should be treated from a privacy perspective when they interact with one of our products.</p><p id="c3a4" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Each Times product, such as News, Cooking or Games, is required to ask PURR for instructions on how to treat every single reader that visits. These instructions are called Directives.</p><p id="9830" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">There are several types of directives that a product needs to be given when it comes to privacy — right now, there are eight. We have broken them down into two categories: user interface directives and data handling directives.</p><p id="cfa8" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The former tells products when they need to show a certain element on the page, such as a cookie banner, a marketing consent checkbox or an opt-out button. The latter tells products how to handle a user’s personal data. For example, a data handling directive might block certain third party tracking mechanisms from collecting data about a user.</p><p id="7499" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Directives are sent via three different methods: request headers, a cookie called `nyt-purr` and JSON. These give Times products the flexibility to choose how they want to consume the information from PURR.</p><p id="8f10" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Let’s say you are in Europe and you visit our NYT Cooking homepage to get some inspiration for your weeknight dinner. Upon loading the page, you will be shown a banner, like this one.</p><figure class="kg kh ki kj kk ef df dg paragraph-image">
<figcaption class="ex ey dh df dg ez fa bl b fb co cp">The G.D.P.R. tracking banner for NYT Cooking.</figcaption></figure><p id="6c37" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">This is what we call our G.D.P.R. Tracker Banner. NYT Cooking showed it to you because it received the “user-interface” directive called <code class="er km kn ko kp b"><em class="ke">PURR_DataProcessingConsentUI</em></code> from PURR. When you loaded the page, PURR knew you were in Europe and G.D.P.R.-eligible, so it delivered a value of <em class="ke">show</em> with the <code class="er km kn ko kp b"><em class="ke">PURR_DataProcessingConsentUI</em></code> directive, which told our products to present you with a banner that allows you to opt in or opt out. If, however, you visited NYT Cooking from New York City, the directive would have delivered a value of <em class="ke">hide</em>.</p><p id="ef65" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">This is just one example of a directive. Some other examples include <code class="er km kn ko kp b"><em class="ke">PURR_AcceptableTrackers</em></code>, which tells products what type of trackers can be fired when a user visits a page; <code class="er km kn ko kp b"><em class="ke">PURR_DeleteIPAddress</em></code>, which instructs our first-party analytics tool whether to delete the IP Address of a user; and <code class="er km kn ko kp b"><em class="ke">PURR_AdConfiguration</em></code>, which tells products what types of ads are permitted on the page, such as non-personalized ads instead of behaviorally targeted ads.</p><p id="6e9e" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">For PURR to know what directives to issue to products, it needed to be programmed with privacy logic, which we refer to as Rules. The Data Governance team works in collaboration with the Times Legal and Engineering departments to write these rules.</p><p id="64de" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Rules are written expressions that PURR must evaluate. They can become quite complex, but a rule basically says, “Hey PURR, you need to look at those inputs, and when these circumstances are met, you need to issue these specific directives.” It’s because of rules that we can provide a custom privacy experience to every user who visits our site.</p><p id="89aa" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Let’s go back to the NYT Cooking example. In order for PURR to know whether a user needs to be shown our G.D.P.R. Tracker Banner, it first needs to know whether the user is located in a country that is subject to the G.D.P.R. and whether they’ve already opted in or opted out.</p><p id="2bd1" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In plain text, the rule would be written like this: IF user is in a G.D.P.R.-eligible country AND user has no set preferences with NYT, THEN show banner.</p><p id="b8d8" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In SQL, the rule gets translated into the following expression:</p><pre class="kg kh ki kj kk kq kr cc"><em class="ke">PURR_DataProcessingConsentUI SQL Expression Rules</em>CASE<br />WHEN ref.PURR_is_gdpr_eligible<br />THEN<br />CASE WHEN ( -- people who are gdpr eligible and have <br />not opted out or in<br />gdpr_pref_regi = "none" AND<br />gdpr_pref_agent = "none"<br />)<br />THEN<br />"show"<br />ELSE -- people who are gdpr eligible and have either   <br />opted out or in<br />"hide"<br />END<br />ELSE -- people who are not gdpr eligible<br />"hide"<br />END</pre><p id="4a2e" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">In order to operationalize Rules and Directives, we needed systems that could bring them to fruition. We first had to find a place where we could write and save the rules — a rules producer, of sorts.</p><p id="fad3" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Luckily for us, we didn’t have to build anything from scratch. In recent years, The Times had built ABRA (which is short for “Abra Basically Reports ABtests”), our homegrown testing and targeting platform. Because ABRA provides the ability to translate human-friendly rules into a widely adopted, open-source and machine-friendly format, it was a simple engineering choice to expand its capabilities to support PURR.</p><p id="0ec0" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In addition to a system that would allow us to write and save the rules, we needed a way to run the rules. We refer to these as Rules Executors, which ingest the ABRA rules and execute on those rules in order to send directives to our products.</p><p id="ff30" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Because the Times has over 70 products and a diverse landscape of technical stacks, we wrote three separate Rules Executors: one for products under the nytimes.com domain that use Fastly; another for products that are under the nytimes.com domain but do not use Fastly; and one for products not on the nytimes.com domain, such as our vendor-managed sites.</p><p id="82fe" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">It’s important to note that the PURR system does not stand on its own. It relies on several other capabilities within The Times’s data and core platforms, such as a homegrown system that keeps track of our user’s data privacy preferences. It also interacts with Samizdat, another homegrown system that our native apps leverage to integrate with PURR. And lastly, we built a customized AMP-PURR endpoint which allows us to integrate with our Google AMP products.</p><p id="489c" class="ig ih fd ii b gb jz ik il ge ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">We have proven that PURR can adapt as new privacy laws are passed. When <a href="https://iapp.org/news/a/uae-enact-dubai-data-protection-legislation/" class="cs jd" rel="noopener">the United Arab Emirates passed a data privacy law in the summer of 2020</a>, we were able to bring over 60 products into compliance within four working days and with zero roadmap disruptions to the product teams. When Brazil’s privacy law came into effect shortly after, it took us only one day to ensure our products were compliant.</p><p id="bd37" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Over time, we hope to implement new directives that foster privacy-forward features in our products. And as The Times explores new product offerings, such as <a href="https://www.axios.com/new-york-times-kids-subscription-9a06d646-9165-4d3a-b2cd-61b2ab9ebbb7.html" class="cs jd" rel="noopener">NYT Kids</a>, we believe PURR will be a reliable way to ensure such products are ethically built while also meeting strict legal requirements.</p><p id="971e" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Although our cat herding hasn’t been reduced to zero, we have learned that implementing data governance regulations doesn’t need to be a resource-zapping, roadmap-destroying burden. It can be an opportunity to innovate and provide users with a privacy-focused digital experience.</p><p id="6f55" class="ig ih fd ii b gb ij ik il ge im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">If you’d like to learn more about PURR, check out <a href="https://transcend.io/blog/watch-back-privacy_infra-april-nytimes-vax-codes" class="cs jd" rel="noopener">a full talk</a> we gave at a recent Privacy_Infra() event. And if you are seeking to expand your network of privacy peers, don’t hesitate to email us: data-governance@nytimes.com!</p>]]></description>
      <link>https://open.nytimes.com/how-we-manage-new-york-times-readers-data-privacy-d39627d79a64</link>
      <guid>https://open.nytimes.com/how-we-manage-new-york-times-readers-data-privacy-d39627d79a64</guid>
      <pubDate>Thu, 06 May 2021 20:36:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Tony Giaccone, Senior Software Engineer at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="51ab" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----56ce6f213a87--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-tony-giaccone-senior-software-engineer-at-the-new-york-times-56ce6f213a87?source=post_page-----56ce6f213a87--------------------------------">May 6</a> · 7 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image">
<figcaption class="ic id dh df dg ie if bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="021b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What are your pronouns?<br /></strong>He/Him</p><p id="6d5a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is your job title and does it mean?<br /></strong>Senior Software Engineer. It means I have significant experience and I can not only solve complicated technical problems, but I can also mentor and provide guidance to other engineers.</p><p id="1c0a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">How long have you been at The Times?<br /></strong>On July 15th, it will be eight years.</p><p id="f4ea" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong>I have an office in my home. I also have a nice window to the outside world that includes a bird feeder; A look to the right and I’m virtually outside. Working from home essentially means I enter my work space, log into my laptop and get started. But before I start, I usually take the dog out for a walk and then I make coffee, so getting in the rhythm of work means grabbing my coffee and reviewing the tasks for the day. My day usually starts with a good morning announcement in our group’s development channel on Slack.</p><p id="ee27" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Back in the 1990s, when I got my first job where I could work from home, I learned pretty quickly that the best thing about working from home was that my bedroom was 20 feet from my office, and the worst thing about working from home was that my bedroom was 20 feet from my office. Nothing has changed since then.</p><p id="2b61" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">How do you start your day?<br /></strong>I check our Slack channel to see if the clients who use our services contacted us about anything, then I check email. After that, I scan Slack to see if any of my teammates had anything to say while I was away and then I review yesterday’s work and get ready for our stand-up.</p><p id="117b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is something you’ve worked on recently?<br /></strong>Our subscriptions system is part of a larger monolith known as Plato. We are in the process of building a microservice to extract from Plato the management of subscriptions that come to us from Apple through iTunes. So today, I’m working on extracting information about the subscriptions from the Plato database and figuring out how to get that data into the new microservice database.</p><p id="3335" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>About two years ago, we built a microservice called the Cohort Manager, which allows us to adjust subscription packages in response to marketing, production or pricing changes. For example, when a reader purchases a New York Times subscription, they choose a particular bundle of products, such as seven-day home delivery or weekend-only delivery. Sometimes we need to update the bundle for a subset of subscribers, like when a newspaper distributor decides to stop offering Saturday deliveries to a particular region. To respond to this change, we would have to move readers subscribed to a bundle with a Saturday delivery to a bundle without a Saturday delivery.</p><p id="ee3c" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">It used to be that these changes had to be done by hand, but now the Cohort Manager moves the list of subscriptions from the original bundle to the new bundle. This was the first microservice we built, and I had an instrumental role in making it happen. It’s been working consistently for over two years with very few errors.</p><p id="3c70" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently?<br /></strong>I had a significant health problem arise a couple of years ago. It had a big impact on me and I didn’t do a good job of communicating with my team about my need for time away from the office. It caused a great deal of tension on my team at the time, and I was responsible for not explaining what was happening to my colleagues. Knowing what I know now, I would be more communicative with my team and perhaps take some time off when dealing with these types of situations.</p><p id="b097" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What was your first job?<br /></strong>My first computer-related job was in 1979 when I worked for a small retail computer store called Mr. Computer. I was the service manager and I was responsible for both working on the floor selling computers, and for dealing with repairs and returns if customers had issues. I had this position for a little over a year and I learned a lot about how computers work and how to deal with people. The highlight of my job was a trip to King of Prussia, Pennsylvania. I drove from Poughkeepsie, New York to King of Prussia in my 1967 Triumph Spitfire. I took a three-day class on how to repair the Commodore PET, one of the very first personal computers that was a contemporary of the original Apple (which we also sold). It was my first time traveling for work.</p><p id="b0d2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is something most people don’t know about you?<br /></strong>In April of 1984, I was working in Boca Raton, Florida on a co-op assignment through my school, the Rochester Institute of Technology. On the 6th of April that year, there was a launch of the Space Shuttle Challenger. I drove up the night before and parked on the road about 10 miles from the Kennedy Space Center. I was parked by myself that night, but when I awoke the next morning, there were cars parked all along the road. At 8:58 a.m., we all got to watch as the Challenger launched. It was probably one of the most amazing things I’ve seen in my life. Listening to hundreds of cars radios all tuned to the same broadcast was something I’ll never forget.</p><p id="d1fa" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Do you have any favorite life hacks or work shortcuts?<br /></strong>Simplify and isolate. When you’re having a technical problem, or you’re trying to understand how a new framework works or how a new piece of technology is manipulated, the best thing you can do is simplify it to its essence. Extract your work from the bigger problem and isolate the solution so that it’s focused on just the one thing you need to figure out. By doing this, you make the number of variables you have to figure out as small as possible. This technique — simplify and isolate — has served me well for most of my career.</p><p id="e42d" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is your superpower?<br /></strong>There are no superpowers; there is only observation and your own mental model of how things work. Find a path that describes the situation, take the model you have in your head — that is, your understanding of how things work — and bend it, twist it, change your viewpoint. Try to find the place where your model and the world clash, then figure out what you need to change to account for this new observation. Divide and conquer.</p><p id="f358" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What or who are you inspired by?<br /></strong>My parents inspire me. At 85 and 88, they are still terrific people to whom I owe so much of who I am. My father spent 25 years at IBM as a programmer (what we called people who do my job back when things were complex in different ways). And my mother worked both in the home and as a computer lab manager for the local community college. I take inspiration from how they have lived their lives and aspire to be as good a person as I can be<strong class="ii jc">.</strong></p><p id="615a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Complete this sentence: Over time, I have realized __________.<br /></strong>There’s often a push to bring new ideas to market as quickly as possible, and in my professional experience, there is often immense pressure to rush new features into production. However, a feature that has been coded for the purposes of demonstration might not stand up to the demands of production code.</p><p id="daf8" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">One solution I have found is to implement a proof of concept in a technology stack that isn’t available for use in production. In doing so, I can quickly demonstrate the feature and potentially expose its pitfalls. And because the technology stack isn’t approved for production work, I can be reasonably certain that this lightly engineered and potentially weak proof of concept isn’t going to be rushed into production before it’s ready.</p><p id="8175" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Another solution we use extensively at The Times is to limit the scope of new features to a minimum viable product, or MVP. This reduced set of capabilities is more easily engineered and can be tested in production. We often try these MVPs out with a small portion of users to see if it makes sense to continue down that path. The advantage of this technique is that the time to market is reduced and redundant work is avoided.</p><p id="6b5f" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is your best advice for someone starting to work in your field?<br /></strong>Software engineering has grown exponentially for my entire 35-year career. The number of developers doubles every five years. Keep those numbers in mind. In five years in this business, you’ll have more experience than half of the people you meet. Technology changes significantly every two to three years. So, if you want a long-term career, keep your mind focused on how you analyze problems and don’t get too wrapped up in the technology that you use to solve those problems. Chances are good that your problem-analysis techniques will last your entire career, but your technical skills will change every five to seven years.</p>]]></description>
      <link>https://open.nytimes.com/meeting-tony-giaccone-senior-software-engineer-at-the-new-york-times-56ce6f213a87</link>
      <guid>https://open.nytimes.com/meeting-tony-giaccone-senior-software-engineer-at-the-new-york-times-56ce6f213a87</guid>
      <pubDate>Thu, 06 May 2021 20:01:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How We Redesigned the New York Times Opinion Essay]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dy ai aj"><div class=""><h2 id="166c" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">When a team of editors, designers and strategists teamed up talk about how Times Opinion coverage is presented and packaged to readers, they thought of a dinner party.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----ad5e0270f5bc--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/how-we-redesigned-the-new-york-times-opinion-essay-ad5e0270f5bc?source=post_page-----ad5e0270f5bc--------------------------------">Apr 27</a> · 6 min read</p></div></div></div></div><p id="174e" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw"><strong class="hg ia">By Dalit Shalom</strong></p></div><div class="n p ab ac ae af ag dy ai aj"><p id="b614" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">Picture a dinner party. The table is set with a festive meal, glasses full of your favorite drink. A group of your friends gather around to talk and share stories. The conversation swings from topic to topic and everyone is engaged in a lively discussion, excited to share ideas and stories with one another.</p><p id="daff" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">This is what we imagined when we — a group of New York Times editors, strategists and designers — teamed up last summer to talk about how to think about how our Opinion coverage is presented and packaged to our readers. We envisioned a forum that facilitated thoughtful discussion and would invite people to participate in vibrant debates.</p><p id="69ba" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">The team was established after a wave of feedback from our readers showed that many people found it difficult to tell whether a story was an Opinion piece or hard news. This feedback was concerning. The Times publishes fact-based journalism both in our newsroom and on our Opinion desk, but it is very important to <a href="https://www.nytco.com/company/mission-and-values/" class="cs jn" rel="noopener">our mission</a> that the distinction between the two is clear.</p><p id="7056" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">The type of Opinion journalism our group was initially tasked with rethinking was the Op-Ed, which was first introduced in the Times newspaper in 1970. The Op-Ed was short for “opposite the Editorial Page,” and it contained essays written by both Times columnists and external contributors from across the political, cultural and global spectrum who shared their viewpoints on numerous topics and current events. Because of the Op-Ed’s proximity to the Editorial Page in the printed newspaper, it was clear that published essays were Opinion journalism.</p><p id="7156" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">Then The Times began publishing online. Today, most of our readers find our journalism across many different media channels. The Op-Ed lost its clear proximity to the Editorial Page, and the term has been used broadly as a catch-all phrase for Opinion pieces, leaving the <a href="https://help.nytimes.com/hc/en-us/articles/115014809107" class="cs jn" rel="noopener">definition</a> of what an Op-Ed is unclear.</p><p id="8e25" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">To learn more about the friction our readership was describing, we held several research sessions with various types of Times readers, including subscribers and non-subscribers. Over the course of these sessions, we learned that readers genuinely crave a diversity of viewpoints. They turn to the Opinion section for a curated conversation that introduces them to ideologies different than their own.</p><p id="8948" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">In the divided nature of politics today, many readers are looking for structured arguments that prepare them to converse thoughtfully about complicated topics. Some readers said they want to challenge and interrogate their own beliefs. Others worry that they exist in their own bubbles and they need to understand how the “other side” thinks.</p><p id="078f" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">And across the board, readers said they are aware that social media platforms can be echo chambers that help validate their beliefs rather than illuminate different perspectives. They believe <em class="jo">The Times</em> can help them look outside those echo chambers.</p><p id="84ed" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">Considering this feedback, we took a close look at the anatomy of an Op-Ed piece. At a glance, Opinion pieces shared similar, but not necessarily cohesive, properties. They had an “Opinion” label at the top of the page that was sometimes followed by a descriptive sub-label (for example, “The Argument”), as a way to indicate a story belonged to a column. That would be a headline, a summary and a byline, often accompanied by an image or video before the actual text of the story.</p><p id="5f57" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">By looking at those visual cues, it became clear to us that they could be reconfigured to better communicate the difference between news and opinion.</p><p id="b1b6" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">We created several design provocations and conducted user testing sessions with readers to see how this approach and a new layout might resonate. Some noticeable changes we made include center-aligning the Opinion label and header, labeling the section in red and providing more intentional guidance and art direction for visuals that accommodate Opinion pieces.</p><figure class="il im in io ip ib df dg paragraph-image">
<figcaption class="jj jk dh df dg jl jm bl b fx co cp">Early phase sketches for the Opinion redesign</figcaption></figure><p id="4132" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">While many readers could tell the difference between news and opinion stories, they didn’t understand why certain voices were featured in the Opinion section. They wanted more clarity about the Op-Ed, such as who wrote it and whether the writer was Times staff or an external voice. In the case of external contributors, readers wanted to know why the desk chose to feature their voice.</p><p id="dd37" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">These questions took our team back to the drawing board. We began to realize that the challenge at hand was not solely a design problem, but a framing issue, as well.</p><p id="fa22" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">We had long philosophical conversations about the meaning of Op-Ed pieces. We talked about the importance of hosting external voices and how those voices should be presented to our readers. The metaphor of a dinner party figured prominently in our conversations: the Opinion section should be a place where guests gather to engage in an environment that is civil and respectful.</p><p id="4186" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">We began to sharpen how we might convey the difference between an endorsement of a particular voice and hosting a guest — one of many who might contribute to a lively debate around a current event.</p><p id="f711" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">The more we thought about the Opinion section as a dinner party, the more we felt how crucial it was to communicate this idea to readers.</p><p id="2705" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">As we approached the designs, we set out to create an atmosphere for open dialogue and conversation. Two significant editorial changes came out of our group conversations.</p><figure class="il im in io ip ib df dg paragraph-image">
<figcaption class="jj jk dh df dg jl jm bl b fx co cp"><em class="js">Creating a more visually distinct presentation between News content and Opinion pieces was key to solving the confusion we heard among our readers.</em></figcaption></figure><p id="6850" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">After many iterations, we decided to introduce a two-tiered labeling system, so that readers could understand unequivocally the type of Opinion piece they were about to engage with. For external voices, we added the label “<a href="https://www.nytimes.com/2021/04/26/opinion/nyt-opinion-oped-redesign.html" class="cs jn" rel="noopener">Guest Essay</a>,” alongside other labels that indicate staff contributors and internal editorials. The label “Guest Essay” not only shifts the tone of a piece — a guest that we are hosting to share their point of view — but it also helps readers distinguish between opinions coming from the voice of The Times and opinions coming from external voices.</p><p id="6d93" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">The second important editorial change is a more detailed bio about the author whose opinion we are sharing. With the dinner party metaphor in mind, this kind of intentional introduction can be seen as a toast, providing context, clarity and relevance around who someone is and why we chose them to write an essay.</p><figure class="il im in io ip ib df dg paragraph-image">
<figcaption class="jj jk dh df dg jl jm bl b fx co cp">Our new design and presentation for Opinion coverage.</figcaption></figure><p id="2f00" class="he hf ea hg b ey hh hi hj fb hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz dt bw">Some of these changes may seem subtle, but sometimes the best dinner conversations are nuanced. This body of work signals an important moment for The New York Times in how we think about expressing opinions on our platform. We believe that one of the things that makes for a healthy society and a functioning democracy is a space for numerous perspectives to be honored and celebrated. We are confident these improvements will help further Times Opinion’s mission of curating debate and discussion around the world’s most pressing issues.</p></div>]]></description>
      <link>https://open.nytimes.com/how-we-redesigned-the-new-york-times-opinion-essay-ad5e0270f5bc</link>
      <guid>https://open.nytimes.com/how-we-redesigned-the-new-york-times-opinion-essay-ad5e0270f5bc</guid>
      <pubDate>Tue, 27 Apr 2021 20:14:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Over 150 Million Photos, Some Perl Scripts and a Creaky User Interface]]></title>
      <description><![CDATA[<div class=""><h2 id="4e3f" class="fu bv ex bl b fv fw fx fy fz ga gb gc gd ge gf gg gh gi gj gk cp">How we rebuilt a 20-year-old system that lets New York Times photo editors search through our vast store of photo outtakes.</h2><div class="gl n gm gn go gp"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----c00f7b6d5fd9--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gq gr gs" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gt aj s"><p><a class="cs ct at au av aw ax ay az ba gx bd cw cx" rel="noopener" href="https://open.nytimes.com/over-150-million-photos-some-perl-scripts-and-a-creaky-user-interface-c00f7b6d5fd9?source=post_page-----c00f7b6d5fd9--------------------------------">Apr 22</a> · 6 min read</p></div></div></div></div><p id="2b96" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw"><strong class="ic iw">By Kate Brenner</strong></p><p id="7740" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">On an assignment, a <em class="ix">New York Times</em> photographer might take hundreds of photos but only file a handful of their best shots. These best photos, often referred to as “selects,” are typically uploaded directly from the photographer’s camera to our CMS for a photo editor to access. It is a workflow that is geared towards efficiency, and to get the news out as quickly as possible.</p><p id="d2ba" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">But just because a few photos have been chosen to publish doesn’t mean that the outtakes are unusable or irrelevant. Many of these photos do in fact get published, sometimes days or even years later. Over time, <em class="ix">The Times</em> has collected these outtakes, which number more than 150 million, and has stored them in Amazon Web Services (AWS) storage gateways.</p><p id="bd16" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">For <em class="ix">Times</em> photo editors to access the outtakes, an in-house team built a system called Scrounger, which was written as a series of Perl scripts that ran on an AWS server. Scrounger had a search UI that editors could use to find photos, but only if they knew the numerical assignment ID that is generated with each news assignment.</p><p id="e301" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">If an engineer needed to access the photos on the back-end, they had to connect to a remote desktop and sift through the storage gateways rendered as network drives. While this was a challenge in itself, there was another major flaw: no descriptive information was stored in a database, which meant there was no efficient way to query this massive collection of images. The only searchable information was in a photo’s file path, which included the date of the assignment, the assignment ID number and the file name, which looked something like this: <code class="ek iy iz ja jb b">20210401/12345678A/test_photo_1.jpg.</code></p><p id="b772" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">In the past few years, the <em class="ix">Times</em> Photo Team has been systematically updating our photo management software. After <a class="cs jc" rel="noopener" href="https://open.nytimes.com/to-find-photos-in-our-archive-we-taught-the-cms-how-to-read-f9bd5f6703d7">updating the search algorithm for our main search tool for selects</a>, we set our sights on building a system for outtakes — a Scrounger 2.0.</p><p id="df8f" class="ia ib ex ic b fv jy ie if fy jz ih ii ij ka il im in kb ip iq ir kc it iu iv dt bw">Some of the Photo team’s work has included consolidating our systems onto a single cloud provider — we use Google Cloud Platform (GCP). Our first step in creating Scrounger 2.0 was to transfer all of Scrounger’s photos to Google Cloud Storage (GCS) to make them easily accessible to our system.</p><p id="d844" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">This was more complex than we anticipated. Because the photos were stored in AWS storage gateways, they first had to be synched to an Amazon S3 bucket before they could be transferred to GCS using Google’s Storage Transfer Service.</p><p id="3a33" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">Luckily, we were able to preserve the file path for each photo. This was a huge win because most of the information we had about these photos was in the file path.</p><p id="e4db" class="ia ib ex ic b fv jy ie if fy jz ih ii ij ka il im in kb ip iq ir kc it iu iv dt bw">Once the photos were in GCS, we had to determine the best way to efficiently ingest and store them. We built a database to keep relevant information about each photo, and we created a flexible schema that could be updated as needed.</p><p id="d227" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">We built four tables in our new system.</p><ol class=""><li id="1c74" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv kd ke kf bw"><strong class="ic iw">The Metastore table</strong>, which was the raw dump of all the information we had about an incoming photo and included all image metadata stored as JSON. This table was set up with a trigger to send each row to the second table.</li>
<li id="52b5" class="ia ib ex ic b fv kg ie if fy kh ih ii ij ki il im in kj ip iq ir kk it iu iv kd ke kf bw"><strong class="ic iw">The Event Queue table</strong>, in which rows were stored temporarily until they were processed and inserted into the third table.</li>
<li id="8752" class="ia ib ex ic b fv kg ie if fy kh ih ii ij ki il im in kj ip iq ir kk it iu iv kd ke kf bw"><strong class="ic iw">The Assets table</strong>, which contained columns for metadata fields, such as description or credit, that were relevant to the photo. If we need to update the schema of the Assets table, we can “replay” ingestion and resend all rows from the Metastore table to the Assets table, without duplicating any records.</li>
<li id="9ec8" class="ia ib ex ic b fv kg ie if fy kh ih ii ij ki il im in kj ip iq ir kk it iu iv kd ke kf bw"><strong class="ic iw">The Search table</strong> combined several columns from the Assets table, such as the identifier, creator, description, filename and assignment ID as a <code class="ek iy iz ja jb b">tsvector</code>, so we could apply a full-text search on these fields. We could have our API query for assets on many different query parameters.</li>
</ol><p id="5a71" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">We built an application called Gateway as the initial point of ingestion for all past and future outtakes. Gateway listens for notifications of incoming images and runs <code class="ek iy iz ja jb b">exiftool</code> on each image to combine its image metadata with GCS metadata and store all of that information in the Metastore table. An application called Megaphone listens for database events and publishes them to two more applications, Materializer and Enhancer. Materializer scans and externalizes specific metadata fields, such as photographer and caption, and stores them in the Assets table. Enhancer updates the Assets table with additional information from <em class="ix">The Times’s</em> assignment database, such as credit or photographer.</p><figure class="km kn ko kp kq dy df dg paragraph-image">
<figcaption class="eq er dh df dg es et bl b eu co cp">Each image ingested into Scrounger 2.0 is first ingested by Gateway, and information about the image is obtained from each service, until finally, their metadata and search tokens are stored in the Search table and Assets table.</figcaption></figure><p id="7e71" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">Combining the information from the original file path, externalizing several different forms of metadata, using information gathered from the assignments table, and storing all of this information in our new schema enabled us to make these photos searchable.</p><p id="69ac" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">We wrote an API in python to interact with our database, and we created a UI for Scrounger 2.0 in React.</p><p id="fa28" class="ia ib ex ic b fv jy ie if fy jz ih ii ij ka il im in kb ip iq ir kc it iu iv dt bw">Once the new system was built, we ran the migration and kicked off ingestion for all 150 million photos. We created a temporary manifest from the image dump from the old system. For each photo in the GCS bucket, we extracted and parsed its original storage path to obtain the assignment ID, assignment date, file name, file size and file extension. We then put all that information into the manifest so we could perform queries and learn more about the photos in the image dump.</p><p id="4064" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">From there, we set up ingestion into the new system. We wrote a script that iterated through the manifest and applied each image’s metadata to the corresponding GCS object. Our GCS bucket sent notifications to the Gateway service with each metadata update.</p><p id="7d24" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">To verify that all 150 million records had indeed been transferred over, we wrote a verifier script that iterated through the metastore table. For each Scrounger 1.0 entry, the script ensured that every row had been ingested into Scrounger 2.0 and it updated the temporary manifest with a status of “verified.”</p><p id="b7f3" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">Because the old system stored multiple versions of each image — such as high resolution, medium resolution and thumbnail — we needed to deduplicate them. Storing all resolutions from the old system would take up too much space in the Assets table, and it would create noisy search results in the UI. We didn’t want to permanently delete any photos, so we added a special metadata field that leaves the files in the Metastore table but deletes them from the Assets table. Since we still need different crops for different views in the UI, we created an API that can cut and cache renditions on the fly without taking up unnecessary storage space.</p><p id="6583" class="ia ib ex ic b fv jy ie if fy jz ih ii ij ka il im in kb ip iq ir kc it iu iv dt bw">Since we launched Scrounger 2.0, our team has implemented enhancements around search, such as sorting and filtering capabilities. Now, in addition to assignment ID, <em class="ix">Times</em> editors can search by a variety of terms, such as photographer name or keywords that might be found in a photo’s description.</p><p id="80d0" class="ia ib ex ic b fv id ie if fy ig ih ii ij ik il im in io ip iq ir is it iu iv dt bw">There is plenty more work to be done on this system. Not every outtake was stored in Scrounger 1.0; some outtakes were stored on DVDs in the <em class="ix">Times</em> newsroom. Now that our new system is up, we hope to finish transferring all of these images to help preserve the historical record these photos contain.</p>]]></description>
      <link>https://open.nytimes.com/over-150-million-photos-some-perl-scripts-and-a-creaky-user-interface-c00f7b6d5fd9</link>
      <guid>https://open.nytimes.com/over-150-million-photos-some-perl-scripts-and-a-creaky-user-interface-c00f7b6d5fd9</guid>
      <pubDate>Thu, 22 Apr 2021 20:12:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Ahmed Bebars, Lead Software Engineer at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="54ce" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----208105b2f6e9--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/meeting-ahmed-bebars-lead-software-engineer-at-the-new-york-times-208105b2f6e9?source=post_page-----208105b2f6e9--------------------------------">Apr 21</a> · 3 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image">
<figcaption class="ic id dh df dg ie if bl b fx co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="9994" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What are your pronouns?<br /></strong>He/Him</p><p id="6261" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is your job title and does it mean?<br /></strong>Lead Software Engineer.I work with Customer Care, specifically on the Insights and Analytics team. We build platforms that gather and analyze data that help improve our readers’ experience when they contact The New York Times.</p><p id="e18e" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">How long have you been at The Times?<br /></strong>It will be two years in July.</p><p id="971a" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Most Times employees are working remotely right now. What does working from home look like for you?<br /></strong>I work from my cozy home office in central New Jersey.</p><p id="7c37" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">How do you start your day?<br /></strong>My day starts with a short drive to drop my daughter at daycare. When I get home, I prepare my espresso to get my workday started.</p><p id="9fc4" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is something you’ve worked on recently?<br /></strong>We built an automated Machine learning pipeline to tag and categorize customer interactions to help our product colleagues prioritize feature work and make decisions based on the generated data.</p><p id="40b1" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Our team migrated our Contact Center to Amazon Connect and built an intelligent Interactive Voice Response to assist customers with their requests. It was a large project that involved a number of services including, AWS Lex and Lambda. <a href="https://www.youtube.com/watch?v=GVQtp8WaGFY" class="cs jd" rel="noopener">I presented this project at AWS re:invent in December, 2019</a>.</p><p id="ebd2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>Switching from accounting to software engineering wasn’t the hardest decision to make, but the challenge was in achieving the career change. The hardest part was finding the support and help to guide me along the way. The one thing that I would change is reaching out to more people in the community for their perspectives and to get more support.</p><p id="4e68" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What was your first job?<br /></strong>When I was 16, I started my technology adventure by fixing computers at an internet cafe in Alexandria, Egypt — I also learned how to plan and install wired networks. It was fun, but I learned that I love to build and architect systems more than networks.</p><p id="4616" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is something most people don’t know about you?<br /></strong>I am an Advanced Nitrox-certified scuba diver, and my last maximum dive depth was 102 feet. Hopefully, I will be able to travel and break that personal record soon.</p><p id="8491" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is your superpower?<br /></strong>Building proofs of concept is a powerful instrument that I often use to quickly verify ideas and solutions without investing too much time or energy until the idea is proven to work.</p><p id="ab7b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What are you inspired by?<br /></strong>My wife. She is very supportive, hard working and my go-to person when I need advice on complex problems.</p><p id="6f65" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Complete this sentence: Over time, I have realized that __________.<br /></strong>Learning has no limits and every day there is something new to learn.</p><p id="a42c" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">What is your best advice for someone starting to work in your field?<br /></strong>Passion is the critical element to success in anything. It will guide you through your career and keep you thirsty to learn more and complete more achievements that you can be proud of every day when you look back.</p>]]></description>
      <link>https://open.nytimes.com/meeting-ahmed-bebars-lead-software-engineer-at-the-new-york-times-208105b2f6e9</link>
      <guid>https://open.nytimes.com/meeting-ahmed-bebars-lead-software-engineer-at-the-new-york-times-208105b2f6e9</guid>
      <pubDate>Wed, 21 Apr 2021 18:37:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[We Don’t Get Bitter, We Get Better]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dy ai aj"><div class=""><h2 id="2b28" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">How we brought site reliability engineering standards and thinking to The New York Times technology teams.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----b5d2783d5cd3--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/we-dont-get-bitter-we-get-better-b5d2783d5cd3?source=post_page-----b5d2783d5cd3--------------------------------">Apr 15</a> · 7 min read</p></div></div></div></div><figure class="hf hg hh hi hj hk df dg paragraph-image">
<figcaption class="ic id dh df dg ie if bl b fx co cp">Illustration by Jake Terrell</figcaption></figure><p id="4cd3" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">By Tim Burke</strong></p><p id="a4f7" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">When The New York Times launched its first website in 1996, it had already been using software to send the layout of the next day’s paper to the printing presses. The website introduced some basic web technology into The Times’s portfolio. Twenty-five years later, that portfolio has grown to include systems that deliver articles, documentaries, newsletters, games and recipes, both online and in print, to millions of readers every day.</p><p id="5f52" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">It’s a technology landscape that is diverse and complicated. Our systems use both bleeding-edge and legacy technologies that are deployed to multiple clouds and data centers all over the world.</p><p id="9ae6" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Because of the breadth of Times products, our engineering teams have the freedom to make their own decisions about their technology stacks and the architecture of their systems. As a result, some of The Times’s systems have been around since before Amazon Web Services had a web console, and other systems use the latest tools from Google Cloud Platform. With such a broad portfolio comes a range of operational thinking and preparedness across our engineering team.</p><p id="8a20" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Over the past couple of years, the Operations Engineering team (formerly Site Reliability Engineering) has worked to foster a culture of operational maturity that allows our engineers to efficiently build and maintain our technology while ensuring that we deliver a consistent experience to our readers.</p><p id="1ab9" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Part of our work has been to define what operational maturity means in the context of The Times. For us, it is requiring teams to take a hard and objective look at their practices and ask, “<a href="https://www.youtube.com/watch?v=udViflChMWg" class="cs jd" rel="noopener">how is she though?</a>” Does a system have a disaster recovery plan? Does a system have a failover configuration in place in the case of a cloud provider outage? Does a team ineffectively translate business metrics into supply metrics and just over-provision and pray? Ultimately, we want teams to recognize that failure is a part of growth, and consistent recovery from failure comes from having mature practices and playbooks for what to do when things go wrong.</p><p id="0380" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We took inspiration from the <a href="https://services.google.com/fh/files/misc/cloud-cre-production-maturity-assessment.pdf" class="cs jd" rel="noopener">Production Maturity Assessment</a> released by Google’s Customer Reliability Engineering team, and using their example, we developed our own Operational Maturity Assessment to provide insight into the operational maturity of The Times’s engineering teams.</p><p id="8d8b" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">The Operational Maturity Assessment is an activity that teams do together. A member of the Operations Engineering team facilitates each session, and the activity is designed to foster discussion and self-reflection within the team. (When we designed this assessment, we imagined teams gathering in person to eat pizza and complete it together. But, that was before the pandemic. Alas.)</p><p id="90b2" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Each session lasts from one to two hours and a member of the team drives the assessment from their screen using a tool we built. The assessment tool we built was inspired by tax preparation software and breaks six top-level categories down into manageable sections.</p><p id="0e77" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As the team moves through the categories — we will get into them in a minute — they answer prompts around topics that are intended to inspire conversation about whether their systems meet the maturity expectations of The Times. We want the assessment to provide a framework for thinking through parts of the system that may need to be addressed and prioritized alongside new feature development work.</p><p id="f41f" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">The assessment goes over our Operational Maturity Model which lays out the dimensions and scales of operational maturity at The Times along six categories:</p><p id="2bc9" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Monitoring and Metrics:</strong> Does the service have defined service-level indicators, objectives and agreements in place (things like uptime or ability to handle a certain number of requests per second)? Are data about those metrics visualized consistently and in an easy place to find by the team and downstream system teams? Do the metrics accurately reflect the experience of users?</p><p id="babf" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Capacity Planning:</strong> Do the product and engineering teams work together to forecast business metrics, such as users or sales, and convert those into supply levels like servers, storage or bandwidth? Does the team acquire capacity based on forecasted business and supply metrics, and is utilization of that capacity monitored for efficiency?</p><p id="fb0f" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Change Management:</strong> Does the team conduct releases at a predictable cadence; do they have defined practices for reviewing changes and releases; and do they automate most or all of the work of doing releases via continuous integration and deployment tools?</p><p id="5f70" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Emergency Response:</strong> Does the team have an organized on-call rotation? Does the team regularly analyze automated alerting to make sure engineers aren’t bombarded with alerts that don’t require human attention? Does the team conduct effective learning reviews after incidents, with metrics, lessons learned and clear steps to prevent issues in future?</p><p id="9114" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Service Provision and Decommission:</strong> Does the team use infrastructure-as code-tools? Is the tooling standardized across the team, department and organization?</p><p id="6917" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><strong class="ii jc">Reliability:</strong> Does the team design and deploy their systems to be high availability, such as running workloads and data storage across multiple data centers or availability zones? Does the team have a documented disaster recovery plan with automated backups and regular testing? Are the team’s services deployed in multiple geographic regions or with multiple cloud providers?</p><p id="cc6f" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">The questions in each section help drive discussion within the team. This discussion aims to educate teams on best practices and inspire new ideas.</p><p id="f745" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw"><em class="ke">[We’re hiring for our Delivery Engineering team.</em> <a href="https://nytco.com/careers" class="cs jd" rel="noopener"><em class="ke">Come work with us</em></a><em class="ke">.]</em></p><p id="26b4" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">As the team works through each category, they score themselves on a scale of one to five against a maturity rubric; Each section includes a range from “chaotic” to “continuous improvement.” For example, from the Reliabilitycategory’s sub-topic, Multiple Region Support:</p><ol class=""><li id="9eca" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb kf kg kh bw"><strong class="ii jc">Chaotic:</strong> Service runs in a single region.</li>
<li id="d260" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw"><strong class="ii jc">Managed:</strong> Service runs in a single region but can be spun up in a second region.</li>
<li id="5762" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw"><strong class="ii jc">Defined:</strong> Services run in multiple regions with manual failover.</li>
<li id="3d5c" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw"><strong class="ii jc">Measured:</strong> Services run in multiple regions with automated failover.</li>
<li id="de3f" class="ig ih ea ii b ey ki ik il fb kj in io ip kk ir is it kl iv iw ix km iz ja jb kf kg kh bw"><strong class="ii jc">Continuous Improvement:</strong> Services run in multiple regions, across clouds with automated failover.</li>
</ol><p id="e276" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">After completing the assessment, the team is presented with a report that outlines areas of strength and areas for improvement, compared to all other engineering teams at The Times.</p><p id="ace0" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Not only does this process encourage engineering teams to discuss their strengths and weaknesses in a structured way, it gives them real data about technical and architectural debt that needs to be prioritized alongside new feature work. This also helps teams communicate their reliability improvement needs to company leadership.</p><p id="7958" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">Our team, Operations Engineering, collects these team-level scores and collates them on a dashboard that allows us to see trends across the engineering organization. In aggregate, trends help us, and the leaders in engineering and product, understand where the organization as a whole needs to focus time and resources to drive improvement.</p><p id="a078" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">In the visualization below, each column belongs to a category, while each row belongs to a team. The columns show us cross-team trends within each metric. By using a color range of light orange to dark orange, we can see how well teams perform in a particular metric.</p></div><div class="n p ab ac ae af ag dy ai aj"><p id="e92b" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">We have relatively high scores in the Change Management (third column group, from left) and Service Provision and Decommission (fifth column group, from left) sections, which are a direct result of previous organizational initiatives for improvement.</p><p id="0beb" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">Other categories, such as Monitoring and Metrics (first column group, from left), indicate an opportunity for improvement. The column for SLO Definition and Measurement, within the Monitoring and Metrics group, shows weaker scores overall, which helped us clarify a gap and allowed us to expand our Observability team. In the Reliability column group (far right), the Disaster Recovery column indicates a weakness in defining disaster recovery plans. We are beginning to push teams to build their disaster recovery plans to improve our overall reliability.</p><p id="90d5" class="ig ih ea ii b ey jz ik il fb ka in io ip kb ir is it kc iv iw ix kd iz ja jb dt bw">As The Times continues to <a href="https://www.nytimes.com/2021/02/04/business/media/new-york-times-earnings.html" class="cs jd" rel="noopener">grow its subscription base</a>, more and more readers come to our platforms for news. This means it is increasingly important for our teams to be ready for breaking news and system failures. For the last three American election cycles, we convened <a class="cs jd" rel="noopener" href="https://open.nytimes.com/how-the-new-york-times-technology-teams-prepared-for-the-2020-election-3928ce7f923c">a cross-engineering readiness team</a> to manage the efforts to prepare our systems for those events, which involved significant heroics on the part of those who joined.</p><p id="adff" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">By defining system maturity and reliability standards, and then encouraging consistent operational thinking for all engineering teams at The Times, our hope is that we eliminate the need for heroic efforts in the future. Our ultimate goal is to make high-traffic news stories non-events, where our systems are mature enough to handle the load without the need for extra attention beyond marveling at the traffic charts.</p><p id="c7aa" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">While the assessment today is a collaborative and fairly detailed exercise, we want to automate as much as possible. Our team is looking to augment our existing capabilities, and add more monitoring, metrics and change process automation (think deploy-on-green, canary deployments and automated rollbacks). Eventually we want to incorporate more mature practices like Chaos Engineering. This stuff won’t replace collaborating with teams, but it will augment the process with better data.</p><p id="5865" class="ig ih ea ii b ey ij ik il fb im in io ip iq ir is it iu iv iw ix iy iz ja jb dt bw">If you are interested in solving any of these problems with us, please check out our roles on the Delivery Engineering team at <a href="https://nytco.com/careers" class="cs jd" rel="noopener">https://nytco.com/careers</a>. We’d love to speak with you.</p></div>]]></description>
      <link>https://open.nytimes.com/we-dont-get-bitter-we-get-better-b5d2783d5cd3</link>
      <guid>https://open.nytimes.com/we-dont-get-bitter-we-get-better-b5d2783d5cd3</guid>
      <pubDate>Thu, 15 Apr 2021 17:58:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Vanessa Jiménez, Associate Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="6c2f" class="dz ea eb bl b cn ec ed ee ef eg eh cp cq">Celebrating Women’s History Month</h2><div class=""><h2 id="79c6" class="ff bv eb bl b fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv cp">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fw n fx fy fz ga"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----db4fe9488bb9--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gb gc gd" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div><figure class="hm hn ho hp hq hr df dg paragraph-image">
<figcaption class="ij ik dh df dg il im bl b gf co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="89fc" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What are your pronouns?<br /></strong>She/ Her</p><p id="3e59" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is your job title and what does it mean?<br /></strong>Associate Software Engineer</p><p id="ed9e" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">How long have you been at The Times?<br /></strong>Almost a year and a half now!</p><p id="4936" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I wake up, make myself a latte and figure out what I’ll have for breakfast. Then, I’ll catch up on some news and emails, get ready for my first meeting and start off my workday. Around 1 p.m. is when I tend to have lunch. Thankfully, I live in a building with an amazing rooftop so I take a nice walk around to get some fresh air and then come back and continue the rest of my day. After work I try to find the willpower to work out or do something productive.</p><p id="fe00" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I recently started working on <a href="https://open.nytimes.com/to-serve-better-ads-we-built-our-own-data-program-c5e039bf247b" class="cs jk" rel="noopener">an internal tool that allows us to build and deploy reader segments in a way that preserves reader privacy</a>. I love working on data-based apps that pull together information about readers’ habits.</p><p id="0356" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>Career transitioning. I used to be a technology risk consultant who would perform technical audits. I realized it wasn’t what I wanted to do and that I really wanted to build things. I decided to just quit my job and start this new chapter in my life. If there was anything I could go back and change, it would be accepting that I genuinely wanted to be an engineer and follow that career path sooner.</p><p id="b895" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Collaboration! I think we have a really great team and we are always working on trying to share knowledge with each other. Especially now that we are all working remotely, I find that collaboration is key to stay sane at home and to bond as a team.</p><p id="9064" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is a goal you hope to accomplish this year?<br /></strong>To get promoted!</p><p id="58b0" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What change do you hope to see in your community?<br /></strong>More diversity. I know imposter syndrome is very much a real thing and it can be discouraging and lonely to be in a field where no one looks like you. You have to work harder just to feel like you belong.</p><p id="dfa9" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Do you have any favorite life hacks or work shortcuts?<br /></strong>This is not so much a life hack, but remember to always take breaks! Mental breaks are so important especially now that we’re at home and constantly staring at screens. It’s important to remember that it’s O.K. to take time to recharge.</p><p id="b7d6" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What or who are you inspired by?<br /></strong>My parents. To this day I still don’t understand how they have managed to be successful and raise a family with the limited resources and lack of education they had growing up. I always remember this to motivate myself to keep going.</p><p id="1b7d" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Fill in the blank: What is the best part of being a Latina engineer? If you had it your way, what could make it better?<br /></strong>The best part of being a Latina engineer is being a role model for other women and girls in this field. I wish I had a mentor who looked like me and who I could go to with questions, but the most I can do at this moment is be that person for someone else. If I had it my way, the industry would already be diverse, and equal opportunity and pay wouldn’t be issues. We are not there yet, but I’m hopeful.</p><p id="6413" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Complete this sentence: Over time, I have realized __________.<br /></strong>Unless I’m on call for something, I’m not saving lives and the work can always wait till tomorrow.</p><p id="8627" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is your best advice for someone starting to work in your field?<br /></strong>Remember to still have fun! You have a ton of time to learn and things are always changing, so don’t feel like you have to rush and know it all at once. Remember, it’s all about learning.</p>]]></description>
      <link>https://open.nytimes.com/meeting-vanessa-jim%C3%A9nez-associate-software-engineer-at-the-new-york-times-db4fe9488bb9</link>
      <guid>https://open.nytimes.com/meeting-vanessa-jim%C3%A9nez-associate-software-engineer-at-the-new-york-times-db4fe9488bb9</guid>
      <pubDate>Wed, 31 Mar 2021 20:25:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Alexandra Shaheen, Program Manager at The New York Times]]></title>
      <description><![CDATA[<h2 id="e75f" class="dt du dv bl b cn dw dx dy dz ea eb cp cq">Celebrating Women’s History Month</h2><div class=""><h2 id="3251" class="ez bv dv bl b fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp cp">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fq n fr fs ft fu"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----2450946576f6--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fv fw fx" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div><figure class="hh hi hj hk hl hm df dg paragraph-image">
<figcaption class="ie if dh df dg ig ih bl b fz co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="1c5e" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What are your pronouns?<br /></strong>She/Her</p><p id="1ed5" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is your job title and what does it mean?<br /></strong>I am a program manager who works primarily on engineering projects. I love bringing structure and order to messy and hard problems or situations. I will hustle as I need to in order to enable my teammates to perform to the best of their abilities. I hate the term “servant leadership,” but the definition suits this role.</p><p id="ef1d" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">How long have you been at The Times?<br /></strong>I’ve worked at The Times for two and a half years.</p><p id="e6e6" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I moved to Rockaway Beach, NY during the pandemic and I hope to stay here. In my opinion, this is one of the most beautiful places in New York City and the quality of my daily pandemic walks has greatly improved since moving here.</p><p id="a027" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">There are more animals than people in my household. My colleagues regularly see my cats and dog popping into my meetings. This has been one of the better parts of work-from-home life.</p><p id="6b03" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Though I loved my work on <a href="https://open.nytimes.com/how-the-new-york-times-technology-teams-prepared-for-the-2020-election-3928ce7f923c" class="cs jf" rel="noopener">election readiness</a>, the rollout of <a href="https://open.nytimes.com/building-a-text-editor-for-a-digital-first-newsroom-f1cb8367fc21" class="cs jf" rel="noopener">Oak, our custom article editor</a>, to the newsroom was especially rewarding. When I arrived at The Times, a small subset of the newsroom was using Oak in limited capacity. In what now seems like a very short period of time, the Oak team fully built out the application and successfully released it to the greater newsroom. The technical challenges that were undertaken (<a href="https://open.nytimes.com/we-built-collaborative-editing-for-our-newsrooms-cms-here-s-how-415618a3ec49" class="cs jf" rel="noopener">such as track changes, collaborative editing, version history</a>) were some of the most complex of my career. I will always be proud to have worked on this special team.</p><p id="973b" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>For some time, I battled with regular bouts of imposter syndrome. Finding my voice and gaining confidence in that voice has not been easy. I have faced gatekeeping, which is not uncommon for women working in technology. Earlier in my career, I was told repeatedly, “you aren’t able to do this work” or “you can’t take on this project,” despite my track record of sound performance. I later learned that the gatekeeping stemmed from office politics happening above me.</p><p id="3df0" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">If I could go back in time, I would have immediately removed myself from that situation. It took some time for me to prove to myself that I was capable of that project and much more. I’m grateful for those who have helped me build my confidence and I’m trying my best to pay it forward.</p><p id="d493" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Collaboration. Program managers infuse collaboration in all that we do. Our job is to reinforce the value of collaboration and ensure our teams work well together.</p><p id="13c9" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is a goal you hope to accomplish this year?<br /></strong>I would like to learn to surf! I was too busy in the fall to take lessons and don’t have what it takes to embark on this hobby in the current temperatures. I’m looking forward to spring!</p><p id="cdc9" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">As a program manager working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>I believe you should approach everything, including your work, with your own reflexive statement in mind: I see the world in a certain way because paradigms, people and places have structured this viewpoint. This shapes my biases, the questions I ask and how I operate. I strive to remember that everyone around me comes from a unique place that I only see a small part of while we work together each day.</p><p id="48be" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">It’s non-negotiable that our work environment needs to be empathetic and supportive of all people. I (along with my teammates) strive to bring psychological safety, transparency and respect to all that we do. If we’re in a situation where any of this is challenged, we need to talk about it.</p><p id="81ff" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What change do you hope to see in your community?<br /></strong>Since I moved to the Rockaways during the pandemic, I haven’t been able to get involved in my new community as much as I would like. While many service activities have been shelved for now, I’m looking for ways I can safely contribute and meet my new neighbors!</p><p id="e7bc" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Do you have any favorite life hacks or work shortcuts?<br /></strong>The basics truly keep me going. I take my own set of notes in every meeting, because writing things down helps me better process information.</p><p id="53d3" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">I also live by and for to-do lists. I have a main to-do list that is maintained digitally. At the start of each day, I look at the list and prioritize what I want to get done. This manageable checklist goes on a Post-it. It feels great to cross things off with a pen.</p><p id="6674" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What or who are you inspired by?<br /></strong>This has been a tough year for all of us. However, I remain in awe of our New York Times journalists. The combination of an ongoing pandemic and the 2020 election have presented a grueling and relentless news cycle. I have immense respect for their ability to keep going and provide the public with incredible journalism. Helping to serve as stage crew for these efforts has been a great honor.</p><p id="e304" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Fill in the blank: What is the best part of being a New Yorker? If you had it your way, what could make it better?<br /></strong>The food and dining in New York! We are privileged to have endless options and standards of excellence embedded in our culture. Like many others, I’ve watched restaurants I’ve loved for years close during the pandemic. In reality, it’s been hard to operate a restaurant in NYC for way too long. If I had my way, we would look at the circumstances that have made it so difficult for these small businesses.</p><p id="82d5" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Complete this sentence: Over time, I have realized __________.<br /></strong>It is wise to pick your battles. Some goals are best tackled slowly over time. A wise friend put the phrase “Pack your patience” into my brain and I often repeat it to myself.</p><p id="1444" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is your best advice for someone starting to work in your field?<br /></strong>Take the time to listen. Challenge yourself to see problems from different perspectives. Always remind yourself that you have much to learn and are privileged to operate in an environment where continuous learning is possible and celebrated.</p>]]></description>
      <link>https://open.nytimes.com/meeting-alexandra-shaheen-program-manager-at-the-new-york-times-2450946576f6</link>
      <guid>https://open.nytimes.com/meeting-alexandra-shaheen-program-manager-at-the-new-york-times-2450946576f6</guid>
      <pubDate>Tue, 30 Mar 2021 18:59:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Véronique Brossier, Lead Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="11c9" class="dz ea eb bl b cn ec ed ee ef eg eh cp cq">Celebrating Women’s History Month</h2><div class=""><h2 id="854a" class="ff bv eb bl b fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv cp">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fw n fx fy fz ga"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----52088bb534ac--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gb gc gd" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div><figure class="hm hn ho hp hq hr df dg paragraph-image">
<figcaption class="ij ik dh df dg il im bl b gf co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="72ba" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What are your pronouns?<br /></strong>She/Her</p><p id="12ac" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is your job title and what does it mean?<br /></strong>I am a Lead Software Engineer. I principally work on the iOS newsreader app. My team and I are at the end of a production line of engineers: some build tools for the newsroom to input content, others store it and still others deliver it. Our role is to fetch and present the freshest news in a multitude of structures and displays in a constantly evolving environment.</p><p id="6b90" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">How long have been at the Times?<br /></strong>I started working at The New York Times right after Hurricane Sandy about eight years ago. My previous experience was in digital exhibitions for museums and interactive games.</p><p id="7f79" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I usually start my day by listening in on the morning news meeting while having breakfast. I particularly enjoy listening to Elisabeth Bumiller, Washington Bureau Chief, and Ellen Pollock, Business Day Editor, and I see them both as role models.</p><p id="5462" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">I live near Union Square in Manhattan, so my break from work is to walk through the farmers’ market, check the dog run and get a baguette at Breads (best bread maker in town). I am lucky to live in a large bright apartment but I miss the workspace camaraderie. I am looking forward to going back to the office.</p><p id="7802" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Developing a body of work in a medium that has become prevalent has been rewarding. The most satisfying projects are the ones where I identified a problem and figured out a solution that brought noticeable value. Last year, I developed an interface to help the newsroom streamline the process for sending notifications; I am now finishing a feature that will enhance the reading experience. During <a href="https://open.nytimes.com/innovating-from-home-maker-week-at-the-new-york-times-50ecfa38aca1" class="cs jk" rel="noopener">Maker Week</a>, my favorite time of year, I created several visual and editorial experiments and tools, some of which were adopted in production.</p><p id="34cf" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">I enjoy building things for people. Working on an app is particularly satisfying because users have a very intimate relationship with their device. I am always surprised by how quickly our readers report issues. Success for me is when the technology works seamlessly without being noticeable. My colleagues and I take a lot of pride in our craft.</p><p id="4003" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is a goal you hope to accomplish this year?<br /></strong>I hope to find new challenges to continue growing while contributing to The Times. It is a big place and there are always opportunities to work with new colleagues across teams. A dream project would be to collaborate with the Graphics desk on some of our most creative content and experiment using a native solution for it.</p><p id="6f10" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Do you have any favorite life hacks or work shortcuts?<br /></strong>I have been practicing yoga for several years at a studio and I now do it at home. It is my happy place. I also started sewing shortly before the beginning of the pandemic, learning by watching YouTube videos. I am now making my own clothes. I absolutely love it and am dreaming of traveling where traditional textiles are made.</p><p id="61c9" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is your best advice for someone starting to work in your field?<br /></strong>Writing software can be both engaging and very tedious. Being curious, and a bit of a perfectionist, will help you embrace this constantly changing field and keep things exciting. Seek out people who strive for excellence. Meet people and ask questions. Be kind.</p>]]></description>
      <link>https://open.nytimes.com/meeting-v%C3%A9ronique-brossier-lead-software-engineer-at-the-new-york-times-52088bb534ac</link>
      <guid>https://open.nytimes.com/meeting-v%C3%A9ronique-brossier-lead-software-engineer-at-the-new-york-times-52088bb534ac</guid>
      <pubDate>Mon, 29 Mar 2021 18:56:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Vicki Crosson, Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="e65b" class="dz ea eb bl b cn ec ed ee ef eg eh cp cq">Celebrating Women’s History Month</h2><div class=""><h2 id="f9eb" class="ff bv eb bl b fg fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv cp">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fw n fx fy fz ga"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----2ed88e1743ab--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gb gc gd" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div><figure class="hm hn ho hp hq hr df dg paragraph-image">
<figcaption class="ij ik dh df dg il im bl b gf co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="0994" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What are your pronouns?<br /></strong>She/Her</p><p id="3ece" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is your job title and what does it mean?<br /></strong>My job title is software engineer on the Search team. That means I write and maintain various software systems that my team operates. It’s not a terribly descriptive title, as I wear a lot of hats that aren’t just writing code.</p><p id="e717" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">I’m currently serving in another role as well: Chairperson of the Architecture Review Board, or “ARB.” The ARB is a resource for all technology teams at The Times, which helps to foster the architectural community as well as provide reviews on Requests for Comment. As Chairperson, I primarily help organize meetings and the ARB application process, promote initiatives and working groups, and I interface with management.</p><p id="3110" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">How long have you been at The Times?<br /></strong>I have been with the company for 55 months; I’m coming up quickly on the five-year mark!</p><p id="6647" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I’m fortunate that my job can be done from anywhere and I have been working remotely since before the pandemic. I have chronic issues that make it difficult for me to travel into the office every day. For me, working remotely means being able to show up in the morning without being exhausted from walking a half-mile to the subway, riding the train for 45 minutes and climbing a bunch of stairs to get out of the station.</p><p id="8250" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">Of course, I have found that others who are usually in the office recently have a newfound understanding of remote life, and that’s had a positive impact on a lot of things. Remote meetings run a lot more smoothly now that we’ve all had practice this past year!</p><p id="d477" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>When I first started out at The Times, I was fortunate to work on the schema for a publishing pipeline that was new at the time. My team collected the JSON schemas being used by various APIs around the company and combined them into a mega-schema that could be shared by everyone. We also researched which binary serialization protocol we would use (Protobuf), as well as the best way to manage constraints on the forward and backward-compatibility of the system as the schema changed over time.</p><p id="ba24" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">Even today, my favorite part of my job is consulting with teams who want to add new asset types to the schema. We have a schema governance board that helps teams make updates, and we ensure that all of the downstream consumers of the system continue to operate smoothly through the changes. Tying everything together into a unified system makes me incredibly happy.</p><p id="e9d4" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>This was my first job out of college and I came into work with an extremely open mind — possibly too open. I have always taken to heart commentary that could be construed as feedback and leapt to improve myself so I would “be better” the next time.</p><p id="7ef0" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">It turns out that this can come across as wishy-washy or insincere. It’s also impractical; one person’s advice might contradict another person’s advice. Now, I strive to take in all feedback and thoroughly consider it before deciding what I want to learn from it.</p><p id="e683" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>I try to enable collaboration wherever possible, especially through my work with the ARB. I firmly believe that we are stronger when we work together. The ARB is well-suited to do this, as we work with all Times technology teams. We have a unique vantage point where we can highlight solutions that others have already found, and we can bring disparate groups together that are interested in solving the same outstanding problem.</p><p id="cb96" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is a goal you hope to accomplish this year?<br /></strong>I’m working on my Masters in Library and Information Science right now, with the help of The Times’s tuition reimbursement program and dedicated 40 hours of learning time per year. It’s not as much of a stretch from library science to computer science as you might imagine. My engineering work encompasses many of the same skill sets as library science, such as indexing and finding information, managing metadata and maintaining <a href="https://timesmachine.nytimes.com/browser" class="cs jk" rel="noopener">the Times digital archive</a>.</p><p id="462b" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">My biggest goal this year is to connect the dots between the things I’m learning in my classes and the real-world problems we face on the Search team. You have probably noticed that I like to make connections that others may not immediately see; This is a lot more of that same theme!</p><p id="62e0" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">As a software engineer working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>I think that if we’re not a diverse and inclusive place to work, and we don’t take care of each other at work, we have no hope at all of delivering a product that puts inclusivity first.</p><p id="a510" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">I’m fortunate to have been involved with a grassroots group at The Times called Diversity in Digital since its inception. The group aims to drive change along the lines of recruitment; inclusivity with the aim of improving retention; and advocating for clear career advancement for employees of all backgrounds.</p><p id="6716" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">Additionally, I have been extremely enthusiastic about the work being done by my colleagues in creating a group focused on people with disabilities and neurodiversities. As someone who struggles with several issues myself, it’s great to find a place to push for greater understanding and acceptance of our differences.</p><p id="579c" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What change do you hope to see in your community?<br /></strong>I want to see more people who don’t identify as male in back-end development roles. I tend to notice a pretty big difference between the gender ratios in front-end, full-stack and back-end teams. I value all of my coworkers, but I always feel more at home on a team that is not all male. I’m fortunate to have that right now — shout out to Sarah McNeil and Minnie Ko!</p><p id="3f3e" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Do you have any favorite life hacks or work shortcuts?<br /></strong>My memory doesn’t always store things away as well as I would like, especially when working on such scattered topics as I encounter in my job. I started using the note-taking <a href="https://zettelkasten.de/posts/overview/" class="cs jk" rel="noopener">Zettelkasten Method</a> about a year ago, and I just recently had to upgrade my note card storage to a filing drawer. The system organizes knowledge in a web structure that is easy to search through, so I can always find what I’m looking for.</p><p id="becb" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What or who are you inspired by?<br /></strong>Here is where I admit that I’m a huge nerd: my biggest hero is General Leia Organa from Star Wars! She’s diplomatic, courageous and willing to put in the hard work to get things done. I have a little figurine on my desk to remind me to embody these characteristics in everything I do.</p><p id="20d7" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Fill in the blank: What is the best part of being ______? If you had it your way, what could make it better?<br /></strong>What’s the best part of being an avid reader? The book clubs! I love discussing what I read with other people and being exposed to more perspectives. Our employee resource group Times Reads is my favorite place to discover books that I never imagined existed, based on suggestions from my coworkers.</p><p id="9569" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw">What could make it better? I honestly just need more time to read. I used to do a lot of reading on my commute, but I’m not commuting these days.</p><p id="c8fd" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">Complete this sentence: Over time, I have realized __________.<br /></strong>Over time, I have realized that there is always someone who thinks you can’t do it — whatever “it” is in your specific context. Sometimes, that person is going to be right, but that doesn’t mean you are worth any less as a person. Be kind to yourself.</p><p id="825c" class="in io eb ip b fg iq ir is fj it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dt bw"><strong class="ip jj">What is your best advice for someone starting to work in your field?<br /></strong>Don’t pay a zillion dollars to go to a fancy university for a computer science degree. Go to a bootcamp, a community college, a state school or just watch online videos and teach yourself at home. Coding is for everyone; you don’t have to be a genius. Just pick a project and run with it, asking as many questions as you can dream up!</p>]]></description>
      <link>https://open.nytimes.com/meeting-vicki-crosson-software-engineer-at-the-new-york-times-2ed88e1743ab</link>
      <guid>https://open.nytimes.com/meeting-vicki-crosson-software-engineer-at-the-new-york-times-2ed88e1743ab</guid>
      <pubDate>Fri, 26 Mar 2021 17:04:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[An Update to Our SQL Interviews]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dy ai aj"><div class=""><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----cf39dafeddcf--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div></div><div class="n p ab ac ae af ag dy ai aj"><p id="4afb" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">By Luke Summerlin and MacKenzie Gibson</strong></p><p id="58f1" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">Over the last few years, the Data &amp; Insights Group at The New York Times has more than doubled as we have integrated data into all our business and newsroom processes. Our data analysts’ responsibilities, and the tools they use, vary greatly depending on the team they work on. Whether a data analyst works with the marketing team to develop media mixed models, partners with editors and product managers to run A/B tests on the homepage or analyzes Crossword engagement, we expect our analysts to foster a culture of curiosity, intellectual honesty and clear communication. The one technical skill that unifies all analyst work is SQL.</p><p id="668c" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">In 2018, <a href="https://open.nytimes.com/a-window-into-our-sql-interviews-dcc9a8f756d8" class="cs jm" rel="noopener">we implemented a standardized SQL assessment</a> as part of the hiring process for all Times data analyst positions.</p><p id="e9ba" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">Once we launched the assessment, we began holding monthly retrospectives with interview panelists to see what was working and what was not. Through the retrospectives and candidate feedback, we came to the conclusion that our current assessment was not upholding the diversity, equity and inclusion values that The Times seeks to foster through our hiring processes. So, we sought out to change this.</p><p id="4640" class="ip iq ea ir b ey ki it iu fb kj iw ix iy kk ja jb jc kl je jf jg km ji jj jk dt bw">The core part of our assessment needed to be rethought: the SQL test was not seeing consistent pass rates. Live-coding in a time-boxed environment is neither a realistic working environment nor is it stress reducing, especially given the already high-stress nature of a technical interview.</p><p id="abd4" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">In our monthly retrospectives, we evaluated the assessment’s strengths and weaknesses. We paid particular attention to where the intent of the assessment diverged with the experience of taking it.</p><p id="1fee" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">Among its strengths, the format allowed candidates to ask questions on the fly; use documentation; explain their approach while constructing queries; and provide interpretations of results. Additionally, the structure ensured all candidates were able to dedicate equal time to the assessment and it minimized opportunities to cheat.</p><p id="0bd1" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">When considering shortcomings, we found that the live-coding format created a high-pressure environment, which hindered some candidates’ performance. It was clear to us that we needed to create a more equitable format.</p><p id="99e0" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">We considered other established evaluation practices and we laid out strengths and weaknesses of each approach:</p><p id="843a" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">Live-coding exercise</strong></p><ul class=""><li id="e129" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk kn ko kp bw">Normalizes the amount of time spent.</li>
<li id="061c" class="ip iq ea ir b ey kq it iu fb kr iw ix iy ks ja jb jc kt je jf jg ku ji jj jk kn ko kp bw">Standardizes access to resources and subject matter experts.</li>
<li id="3c28" class="ip iq ea ir b ey kq it iu fb kr iw ix iy ks ja jb jc kt je jf jg ku ji jj jk kn ko kp bw">Assesses the ability to apply documentation, debug queries and communicate results.</li>
<li id="39bb" class="ip iq ea ir b ey kq it iu fb kr iw ix iy ks ja jb jc kt je jf jg ku ji jj jk kn ko kp bw">Creates a high-pressure environment that can impact performance, especially among candidates unfamiliar with the structure.</li>
</ul><p id="520c" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">Take-home assessment</strong></p><ul class=""><li id="7168" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk kn ko kp bw">Allows candidates to work at their own pace.</li>
<li id="e018" class="ip iq ea ir b ey kq it iu fb kr iw ix iy ks ja jb jc kt je jf jg ku ji jj jk kn ko kp bw">Favors candidates who have fewer time constraints and access to strong knowledge networks.</li>
</ul><p id="82e9" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">Whiteboarding exercise</strong></p><ul class=""><li id="5034" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk kn ko kp bw">Can cause the same pressure as a live-coding format.</li>
<li id="36f4" class="ip iq ea ir b ey kq it iu fb kr iw ix iy ks ja jb jc kt je jf jg ku ji jj jk kn ko kp bw">Does not assess fundamental skills we look for in analysts, such as the ability to apply documentation, debug queries or interpret results.</li>
</ul><p id="8b69" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">We needed a standardized SQL assessment that had consistent deadlines and access to resources, yet minimized the pressure felt by candidates. The format we chose needed to allow us to evaluate candidates’ abilities to think through analytical problems using SQL; to apply appropriate functions that reference documentation, when necessary; interpret and communicate results; and provide an inclusive environment for neurodiverse candidates.</p><p id="7faa" class="ip iq ea ir b ey ki it iu fb kj iw ix iy kk ja jb jc kl je jf jg km ji jj jk dt bw">The format we developed is a hybrid model that combines elements from take-home and live-coding exercises. Our new structure still takes place over a video call. Shortly before the assessment begins, the candidate is given access to the BigQuery browser tool. The assessment is broken into three primary parts: set up, work and interpretation.</p><p id="3793" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">Set up (5 minutes):</strong> After introductions, the candidate will share their screen so the assessor can help them set up the BigQuery console and walk through the datasets. The assessor will review expectations of the assessment and share a problem set.</p><p id="40a8" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">Work (30 minutes):</strong> The candidate will stop sharing their screen, but stay connected to the video call. With cameras off, they will have 30 minutes to independently work on the problem set. Candidates will write SQL, run queries and return results using documentation when necessary. Assessors will be available to answer questions in the video call, but otherwise candidates will work in an unmonitored environment.</p><p id="2160" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw"><strong class="ir jl">Interpretation (15 minutes):</strong> The assessor and candidate will turn their cameras back on and the candidate will share their screen again to walk through each question they answered, run the query and interpret the results.</p><p id="3e44" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">The assessment screens for core competencies, including the ability to aggregate, categorize and transform data, as well as apply documentation when necessary. Candidates are expected to be familiar with many of the competencies, although they do not need to demonstrate knowledge of everything to pass.</p><p id="1f40" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">After the assessment is over, the assessor will spend 15 minutes writing in-depth feedback on the candidate’s performance with regard to their understanding of the core competencies and how they interpreted the data.</p><p id="e468" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">In the new format, we have extended the time candidates have to work on the problem-set from 20 minutes to 30 minutes without increasing the requirements to pass. By providing 30 minutes of uninterrupted time to work, we hope to reduce the stress of the assessment; if candidates need additional time, they may request it when scheduling the assessment.</p><p id="24cf" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">We have introduced a survey that we encourage candidates to complete after taking the assessment. Formalizing a feedback loop can help focus where we need to refine the format which we will discuss in monthly retros, and allow us to continue improving upon an inclusive hiring process.</p><p id="5372" class="ip iq ea ir b ey is it iu fb iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk dt bw">We are currently hiring analysts at various levels. <a href="https://www.nytco.com/careers/" class="cs jm" rel="noopener">Come work with us</a>.</p></div>]]></description>
      <link>https://open.nytimes.com/an-update-to-our-sql-interviews-cf39dafeddcf</link>
      <guid>https://open.nytimes.com/an-update-to-our-sql-interviews-cf39dafeddcf</guid>
      <pubDate>Thu, 25 Mar 2021 18:56:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Tracy Z. Maleeff, Information Security Analyst at The New York Times]]></title>
      <description><![CDATA[<h2 id="1e98" class="dt du dv bl b cn dw dx dy dz ea eb cp cq">Celebrating Women’s History Month</h2><div class=""><h2 id="1c65" class="ez bv dv bl b fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp cp">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fq n fr fs ft fu"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----b7a5f40e7772--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fv fw fx" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div><figure class="hh hi hj hk hl hm df dg paragraph-image">
<figcaption class="ie if dh df dg ig ih bl b fz co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="e2c8" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What are your pronouns?<br /></strong>She/Her</p><p id="813d" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is your job title and what does it mean?<br /></strong>Information Security Analyst. I am a member of the cybersecurity defense team.</p><p id="54b2" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">How long have you been at The Times?<br /></strong>About one and a half years.</p><p id="56cd" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I was hired as a remote employee, so the only thing that is different is that my co-workers are remote as well. But, I do miss visiting the office on occasion!</p><p id="98d1" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>It would be bad “OpSec” (Operational Security) for me to disclose any specifics. However, I can generally say that I’m proud to have worked on projects that protect our human assets.</p><p id="f9a8" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>Prior to working in Information Security, I was a librarian. When I decided that it was time for a career change about five years ago, I looked to tech and eventually realized that my natural paranoia and distrust of things made me suitable for a career in cybersecurity. (That’s a joke… sort of.)</p><p id="e0f9" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">The biggest challenge was the learning curve going from Library Science to Computer Science. Learning about computer networks and security threats required me to use a different part of my brain. I had to learn new skills and learn the ways of a completely different industry. I studied very hard every chance I got and I don’t think I would have changed a thing.</p><p id="57de" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>A lot of the work as an information security analyst revolves around troubleshooting problems. Therefore, curiosity best describes my work. You can’t take things at face value and need to ask questions — the right questions — in order to solve the problem. You need curiosity to wonder what’s not being said or what’s not being seen, in addition to what has been said or is obvious. Curiosity to go beyond the surface is essential to proper problem remediation.</p><p id="9341" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is a goal you hope to accomplish this year?<br /></strong>A professional goal of mine for 2021 is to pass the Certified Information Systems Security Professional (or, CISSP) exam. The CISSP is an independent information security certification granted by the International Information System Security Certification Consortium, also known as (ISC)².</p><p id="3bb5" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">A personal goal of mine for 2021 is to create a non-profit for cybersecurity students and professionals in Africa. In my free time, I volunteer with a few different groups to help build their skills, help with professional networking, promote their work and assist however I can with getting more people in Africa into cybersecurity careers.</p><p id="12eb" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">As an Information Security Analyst working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>Just recently, I started to type the word <em class="jf">whitelist</em> in context to something work-related. I stopped myself and thought, “I know there is a better word for this, but it escapes me.” So, I took a second to <a href="https://open.nytimes.com/finding-the-right-words-491b93b8b668" class="cs jg" rel="noopener">look it up and revised what I was writing to say <em class="jf">allowlist</em> instead</a>. Words matter, even in tech.</p><p id="86db" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What change do you hope to see in your community?<br /></strong>I dedicate a lot of my free time to helping people from underrepresented groups start information security careers. My professional community has been homogenous for too long, and my goal is to help make it more diverse. Diversity of thought solves problems, so it’s crucial for the industry to have people with different perspectives and experiences be security practitioners.</p><p id="6870" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Do you have any favorite life hacks or work shortcuts?<br /></strong>My favorite work hack is being an observer on the Times morning news meeting! Not only is it great to connect faces and voices with names, but also to know what we are working on for publication helps the security team be aware of things that could impact the enterprise. As a news geek, it’s very exciting and it just makes me really proud to be a part of this organization.</p><p id="0732" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What or who are you inspired by?<br /></strong>I’m inspired by people who have overcome adversity, in whatever form. I’m inspired by immigrant success stories. I’m inspired by brave LGTBQ+ folks who are living their lives in the face of hate. I’m inspired by the Black cybersecurity community who are boldly shaping their futures by not accepting the status quo in the industry. I’m inspired by anyone who, as Maxine Waters famously said, are “reclaiming my time.”</p><p id="84f9" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Fill in the blank: What is the best part of being ______? If you had it your way, what could make it better?<br /></strong>What’s the best part of being a Philadelphia-area native?</p><ul class=""><li id="4edb" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd jh ji jj bw">Gritty.</li>
<li id="2d3d" class="ii ij dv ik b fa jk im in fd jl ip iq ir jm it iu iv jn ix iy iz jo jb jc jd jh ji jj bw">Churry Wooder Ice.</li>
<li id="9fb6" class="ii ij dv ik b fa jk im in fd jl ip iq ir jm it iu iv jn ix iy iz jo jb jc jd jh ji jj bw">Hoagies and Cheesesteaks. (It’s a tie.)</li>
</ul><p id="8f20" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">If I had my way, Philadelphia would have more social and financial equity for its residents. Better support and services so that the residents don’t struggle as much as they do.</p><p id="db3f" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">(Also, more sports championships.)</p><p id="9a61" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Complete this sentence: Over time, I have realized __________.<br /></strong>It’s never too late to start something new. Whether it’s a college degree, a career change or something else. I was a non-traditional student for all three of my college degree programs. I made what looked like a strange career pivot from a librarian to a cybersecurity professional at an age when most of my peers were firmly embedded in their professional lives. I used to agonize over what I perceived as being behind everyone. It’s not that I’m behind; I’m on my own path.</p><p id="677f" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is your best advice for someone starting to work in your field?<br /></strong>Network with people, early and often. There is immense value in connecting with people to learn from them, to help them and to have them help you. I strongly believe that human networking is a huge factor in professional development and success.</p>]]></description>
      <link>https://open.nytimes.com/meeting-tracy-z-maleeff-information-security-analyst-at-the-new-york-times-b7a5f40e7772</link>
      <guid>https://open.nytimes.com/meeting-tracy-z-maleeff-information-security-analyst-at-the-new-york-times-b7a5f40e7772</guid>
      <pubDate>Wed, 24 Mar 2021 17:08:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Charity Garcia, Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="7ef6" class="ea eb ec bm b co ed ee ef eg eh ei cq cr">Celebrating Women’s History Month</h2><div class=""><h2 id="fb32" class="fg bw ec bm b fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw cq">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fx n fy fz ga gb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----a7f6defa0bde--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gc gd ge" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gf aj s"><p><a class="ct cu au av aw ax ay az ba bb gk be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-charity-garcia-software-engineer-at-the-new-york-times-a7f6defa0bde?source=post_page-----a7f6defa0bde--------------------------------">Mar 22</a> · 5 min read</p></div></div></div></div><figure class="hn ho hp hq hr hs dg dh paragraph-image">
<figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="d102" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br /></strong>She/Her</p><p id="a96b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br /></strong>I’m a Software Engineer on NYT Cooking’s engineering team. That means, I get to torture myself every day by looking at amazing recipes and enticing pictures while building and maintaining features on our web application.</p><p id="08b2" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br /></strong>I have been at The Times for almost three years. Wow, time really flies by!</p><p id="61ca" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>Working remotely has pretty much been the same for me since I was remote pre-pandemic. However, at the beginning of the pandemic, it was tough balancing working full-time and being a full-time teacher to my 8-year-old son. Luckily, The Times now has extremely helpful programs for employees that assists parents with child care and tutoring fees.</p><p id="8381" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you’ve worked on at The Times that you’re especially proud of?<br /></strong>Our team had upgraded all of our dependencies, but when we tried to upgrade the CSS-Loader for Webpack, all of the images that were served from the client-side would break on our website. The issue was bigger than just changing a few paths, and there was little documentation on how to upgrade from Webpack 2 to Webpack 4. Online searches returned some solutions, but nothing that fit NYT Cooking’s unique needs;I developed a fix by piecing together a few solutions that worked for others.</p><p id="8c4a" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">While working on the Webpack upgrade, I saw that it would be better if the images served from the client side were imported from only one file. Migrating the images to a single file would enable us to easily fix any image path issues we ran into in the future. I decided to incorporate a major image refactor that not only fixed the Webpack issue, but also addressed some tech debt that we had. It was one of the toughest projects I have had in my career so far, but one of the most rewarding.</p><p id="0bfe" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>The biggest challenge I’ve faced in my career was still <a class="ct jl" rel="noopener" href="https://open.nytimes.com/from-med-school-to-code-school-a-career-path-full-of-twists-and-turns-ffc57a9ec028">recovering from a traumatic brain injury while being a full-time software engineer</a>. Feeling like I needed to catch up to my colleagues by reading and working on outside projects after work or making sure every pull request and commit was as close to perfection as it could be was very taxing.</p><p id="1feb" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">Imposter syndrome was strong, but as I spoke with other colleagues and saw they had the same thoughts and fears that I had made me feel more confident in my abilities. Learning as much as I could outside of work was very helpful to overcoming my traumatic brain injury and imposter syndrome. But, if I could do it differently, I would not have put so much pressure on myself. No one is perfect.</p><p id="6b3a" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Integrity — that’s my approach in life, in general. In my work as a software engineer, shipping clean code by the deadline is extremely important to me. In tech, there are many circumstances that can affect when a project is shipped, but I try to minimize that as much as possible.</p><p id="196d" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">In my work as the founder and leader of The Times’s employee group, Black and Latinx in Technology, integrity is key in making real progress for our communities in and outside of The New York Times.</p><p id="38a6" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is a goal you hope to accomplish this year?<br /></strong>Personally, I want to be able to complete a half-marathon this year. It’s a very ambitious goal since I have been pretty inactive since the beginning of the pandemic. Pray for me!</p><p id="7159" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">Professionally, working on increasing my technical depth is my priority. I love to learn, not only for the advancement of my career, but to be in a position where I can help others advance in their careers as well.</p><p id="9652" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">As a software engineer working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>Our team has made strides in addressing accessibility improvements where we can and continue to make it a priority.</p><p id="cdc5" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What change do you hope to see in your community?<br /></strong>I identify as Black and Latinx. Our communities can only do so much to make a real change in this country. We do a lot within and for our community but I would hope to see other communities practice more equity, empathy and openness towards our communities. Action speaks louder than words.</p><p id="7858" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Do you have any favorite life hacks or work shortcuts?<br /></strong>Learn Linux and Git command lines. With Git, create shortcuts with Git bash aliases because it will save a lot of time in the long run.</p><p id="c702" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br /></strong>People who have been counted out every step of the way but still succeed time and time again are who inspire me.</p><p id="b0d3" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Fill in the blank: What is the best part of being ______? If you had it your way, what could make it better?<br /></strong>What’s the best part of being Me? I am who I am, unapologetically. As a child, I was very shy and never spoke my mind or stood up for myself. As I have grown and experienced life, I have learned to love myself first, speak up, stand strong in my beliefs, and fight for the people and things I care about.</p><p id="8220" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Complete this sentence: Over time, I have realized __________.<br /></strong>That burnout is real and self-care should be one of your main priorities.</p><p id="7c8b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br /></strong>Do not get discouraged. There are people that will root for you and people who won’t, but what they cannot take from you is your knowledge, experience, and passion. If you do what you love, keep working hard at it and you will succeed.</p>]]></description>
      <link>https://open.nytimes.com/meeting-charity-garcia-software-engineer-at-the-new-york-times-a7f6defa0bde</link>
      <guid>https://open.nytimes.com/meeting-charity-garcia-software-engineer-at-the-new-york-times-a7f6defa0bde</guid>
      <pubDate>Mon, 22 Mar 2021 20:19:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Sarah Duncan, Lead Data Engineer at The New York Times]]></title>
      <description><![CDATA[<div><article><section class="de df dg dh aj di dj s"></section><div><section class="du dv dw dx dy"><div class="n p"><div class="ab ac ae af ag dz ai aj"><figure class="hn ho hp hq hr hs dg dh paragraph-image"><img alt class="t u v ia aj" src="https://miro.medium.com/max/6000/1*wNtbnXiojs97QvA44tw0CA.png" width="3000" srcset="https://miro.medium.com/max/552/1*wNtbnXiojs97QvA44tw0CA.png 276w, https://miro.medium.com/max/1104/1*wNtbnXiojs97QvA44tw0CA.png 552w, https://miro.medium.com/max/1280/1*wNtbnXiojs97QvA44tw0CA.png 640w, https://miro.medium.com/max/1400/1*wNtbnXiojs97QvA44tw0CA.png 700w" sizes="700px"><figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="53a0" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br></strong>She/Her</p><p id="12e7" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br></strong>Lead Data Engineer. A data engineer is a software engineer who specializes in data-intensive applications.</p><p id="8575" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br></strong>A little over two years.</p><p id="d719" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br></strong>I live with my boyfriend, Kenny, and our cat, Tugboat, in an apartment in Brooklyn. I have my desk in the living room and Kenny has his in the bedroom. Once we sign off for the day, we have fun in the kitchen trying out new recipes!</p><p id="2a21" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you&#x2019;ve worked on at The Times that you&#x2019;re especially proud of.<br></strong>For the past year and a half, I have been working on a data pipeline framework called Octopus that was initially built to support pulling data from third-party sources. Recently, I participated in an ETL working group in The Times&#x2019;s Data Platforms team to help define a strategy for our ETL/data pipeline tools. As a result, I&#x2019;m now on a new team called Data Pipelines Infrastructure that is accountable for defining and maintaining best practices for data pipelines and supporting a centralized, extensible tool that implements those best practices.</p><p id="ccd1" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br></strong>People have regularly underestimated me, which often pushed me to work even harder. Knowing what I know now, I would have kept that drive but stopped trying to impress people earlier in my career.</p><p id="6e8a" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br></strong>Collaboration best describes my work. The work on my teams, on The Times&#x2019;s Architectural Review Board or in our Communities of Practice have all focused on collaborating with colleagues to come up with innovative solutions within Times engineering and data.</p><p id="7731" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is a goal you hope to accomplish this year?<br></strong>I hope to learn more about the data pipeline needs that exist outside of my immediate circles and collaborate with my colleagues on ways to solve them.</p><p id="ad38" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">As a Lead Data Engineer working on a digital product, how do you approach your work with inclusivity in mind?<br></strong>I purposefully make space for anyone to ask a question or share an idea, regardless of things like title or role. I would much rather have a pause in a meeting so others can contribute to the conversation than take up more space than I need to.</p><p id="20a4" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What change do you hope to see in your community?<br></strong>I hope to see fewer unnecessary barriers put up.</p><p id="d914" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br></strong>My colleagues inspire me regularly. Aside from the incredible mentors I have found here, I&#x2019;m inspired by the people I work with every day who put so much effort and talent into The Times&#x2019;s mission.</p><p id="0e99" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Fill in the blank: What is the best part of being a data engineer? If you had it your way, what could make it better?<br></strong>Helping other people do their jobs more easily by doing something I love. It gets better the more others teach me what they need so I can improve our data tools.</p><p id="5dce" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Complete this sentence: Over time, I have realized __________.<br></strong>Everyone has something to learn and something to teach.</p><p id="7d20" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br></strong>You deserve to be in this field as much as anyone. Just keep pursuing what you enjoy and want to get better at.</p></div></div></section><section class="du dv dw dx dy"></section></div></article></div>]]></description>
      <link>https://open.nytimes.com/meeting-sarah-duncan-lead-data-engineer-at-the-new-york-times-6e2c43348aeb</link>
      <guid>https://open.nytimes.com/meeting-sarah-duncan-lead-data-engineer-at-the-new-york-times-6e2c43348aeb</guid>
      <pubDate>Fri, 19 Mar 2021 16:39:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Drue Thomas, Senior Product Designer at The New York Times]]></title>
      <description><![CDATA[<h2 id="8de6" class="ea eb ec bm b co ed ee ef eg eh ei cq cr">Celebrating Women’s History Month</h2><div class=""><h2 id="2846" class="fg bw ec bm b fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw cq">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fx n fy fz ga gb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----7c2ed6cad016--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gc gd ge" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gf aj s"><p><a class="ct cu au av aw ax ay az ba bb gk be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-drue-thomas-senior-product-designer-at-the-new-york-times-7c2ed6cad016?source=post_page-----7c2ed6cad016--------------------------------">Mar 17</a> · 5 min read</p></div></div></div></div><figure class="hn ho hp hq hr hs dg dh paragraph-image">
<figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="a378" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br /></strong>She/Her</p><p id="9d54" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br /></strong>I’m a Senior Product Designer on a team called Workflow, which supports the editors who publish the Times homepage multiple times a day. Technically, my job is to design the end-to-end experience for a CMS called Curator — along with my design colleagues Orr Shtuhl and Tina Ye — but I prefer to think of myself as a professional listener and complexity mitigator.</p><p id="4626" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br /></strong>Three years this April!</p><p id="d742" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>It changes month-to-month. Because we are able to be fully remote right now, I sold all my stuff in December, bought a car and started a nomad lifestyle. I don’t have an address or a lease — just a car, my dog and a few suitcases. After 10 years in NYC, it’s a huge change!</p><p id="4763" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">In a lot of ways it’s freeing to have control over where I am in a time where I feel like I have control of so little. If I feel uninspired or restless (or honestly, too cold) I pack up my car and I’m gone. On the flip side, safety is my highest priority so I have to take a lot of precautions — I try to move around slowly and pick places with wide open spaces. Luckily that means spending a lot of time outdoors with my dog and best friend.</p><p id="834d" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">Right now I have two set ups: I’m either literally working from my bed (I know, I’m terrible) or sitting outside soaking up the sun in Austin, TX.</p><p id="04c4" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Working with my product design “squad” to investigate the state of Diversity, Equity and Inclusion in Product Design. We have spent the last six months doing in-depth research across several themes, such as Growth, Retention and Hiring and we recently presented our findings to the rest of the Product Design team.</p><p id="7bff" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I am so proud to see Product Design committing to being a leader in The Times’s DEI efforts. Also, as a Black woman, it’s amazing to see my own lived experience amplified by the voices of my peers and by leadership. This is just the beginning and I’m so excited to see where this work goes.</p><p id="8207" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>Making my first portfolio. I’ll be honest, before working at The Times, my confidence as a designer was absolutely <em class="jl">trash</em>. I spent years (yes, <em class="jl">years)</em> putting off making a portfolio because I was convinced that I would never meet the expectations of the companies I dreamed about working for. Working at The Times has taught me that the only expectations stopping me were my own.</p><p id="ab60" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I have to give a shout out to my best friend and colleague, Yuraima Estevez for: 1) putting up with me; and 2) for pushing me to apply to The Times. I can now own that I am an amazing and talented product designer.</p><p id="8c1f" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Curiosity. In my opinion, being curious is one of the best traits a designer can have. If you aren’t interested in the world around you, you’ll never even begin to understand how to fix it.</p><p id="8f6c" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I’m lucky enough to spend most of my days in curiosity mode: thinking, sketching, asking questions, filling in blanks and attempting to untangle gnarly user experiences challenges. I love it.</p><p id="bca7" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is a goal you hope to accomplish this year?<br /></strong>Do at least one pistol squat.</p><p id="a735" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">As a Designer working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>I keep universal design principles at the forefront of my design practice. Universal design principles is an approach that aims to make design as inclusive as possible with features that enhance access for everyone regardless of age, size, ability or disability. In my own practice, this looks like designing simple and intuitive internal tools that have a high tolerance for error and keep accessibility at the forefront.</p><p id="4ccf" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What change do you hope to see in your community?<br /></strong>To be frank, I’d like to see more racial diversity in design, especially at The New York Times.</p><p id="9be3" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Do you have any favorite life hacks or work shortcuts?<br /></strong>If you’re feeling overwhelmed by meetings and feel like you have no time to work, download a smart assistant extension or app for your calendar. I use a smart assistant to do things like reschedule meetings so I get much-needed breaks and optimize for “focus blocks” of time that are at least two hours. Genius!</p><p id="beb2" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br /></strong>I draw a lot of inspiration from my design peers, colleagues and friends. But I think I have learned the most from just talking to people who have taught me how they communicate; what they care about; and what brings them pain and pleasure. Over time I have accumulated stories that amount to a library of patterns and behaviors that I can draw upon in my everyday design practice.</p><p id="732b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Fill in the blank: What is the best part of being ______? If you had it your way, what could make it better?<br /></strong>What is the best part of being in Austin? Tacos and family.</p><p id="b356" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">What could make it better? If I could somehow be both in Austin and in New York City pre-pandemic at the same time (minus alternate-side parking).</p><p id="0e66" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Complete this sentence: Over time, I have realized __________.<br /></strong>Progress is better than perfection.</p><p id="eb8b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br /></strong>Don’t be so hard on yourself. Everyone has to start somewhere, so don’t be afraid to work out in the open.</p>]]></description>
      <link>https://open.nytimes.com/meeting-drue-thomas-senior-product-designer-at-the-new-york-times-7c2ed6cad016</link>
      <guid>https://open.nytimes.com/meeting-drue-thomas-senior-product-designer-at-the-new-york-times-7c2ed6cad016</guid>
      <pubDate>Wed, 17 Mar 2021 16:28:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Christina Malis, Director of Customer Care at The New York Times]]></title>
      <description><![CDATA[<h2 id="49bb" class="ea eb ec bm b co ed ee ef eg eh ei cq cr">Celebrating Women’s History Month</h2><div class=""><h2 id="4e38" class="fg bw ec bm b fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw cq">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fx n fy fz ga gb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----9d3a262e94ed--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gc gd ge" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gf aj s"><p><a class="ct cu au av aw ax ay az ba bb gk be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-christina-malis-director-of-customer-care-at-the-new-york-times-9d3a262e94ed?source=post_page-----9d3a262e94ed--------------------------------">Mar 15</a> · 5 min read</p></div></div></div></div><figure class="hn ho hp hq hr hs dg dh paragraph-image">
<figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="620c" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br /></strong>She/Her</p><p id="670e" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br /></strong>Director, Customer Care. I serve as product owner for one of Care’s cross-functional scrum teams: the Care Insights and Analytics team. Our work focuses on providing insights to the company based on what we hear directly from our customers, and maintaining efficient operations. I am also a member of the leadership team advising our Vice President of Customer Care on strategic, short-term and long-term planning decisions.</p><p id="a393" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">Customer Care Operations merged with our Product, Engineering and Design counterparts just over a year ago, and the Care Insights and Analytics team was an experiment to see if we could all work together in the agile product development methodology. We have been very pleased with the success of this experiment, both for our team culture and for our productivity, and we now have two fully operational scrum teams on Care.</p><p id="a044" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br /></strong>Four and a half years.</p><p id="37b4" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I live in an area of lower Westchester, NY called the “Rivertowns” because we are right along the Hudson River — if I walk across the street I can see the Manhattan skyline in the distance. I spend my working hours at a little desk in a corner of my bedroom, facing the river and trying to keep my new rescue dog from hogging all the attention during meetings.</p><p id="5433" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>In 2019, I worked with a number of my Care colleagues to completely redesign and replace our Interactive Voice Response system, a.k.a. the robo-voice you hear when you call customer service. Instead of expending a lot of effort to recreate the complex decision trees in our old system, we chose to start the phone experience simply by asking the customer why they are calling and relying on intent recognition to take it from there. Every time I encounter another company’s Interactive Voice Response or when I hear family or friends complain about the long menus they must wade through on a phone call, I’m proud of our decision to reduce that effort up front.</p><p id="ca94" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>My biggest challenge has been saying “yes” to too many things and being hard on myself if I don’t live up to my own internal standard for excellence. Thanks to a wonderful team (Care folks are great cheerleaders!), I’ve gotten better at prioritizing my own bandwidth, as well as asking for help when I need it — which can also be a great way to give others exposure and opportunities to grow in their own work.</p><p id="83f0" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>I would say collaboration best describes the nature of my work for the past few years. Through multiple roles and structures on the Care team, I have always sought out opportunities to connect people and develop a shared purpose in tackling our individual goals for the success of The Times. Everyone who works here has a deep passion for the mission of The Times; I am excited to continuously find ways to weave together various teams’ mutual commitment to upholding the mission, standards and products of the company.</p><p id="40d7" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is a goal you hope to accomplish this year?<br /></strong>Developing connections with more colleagues outside of Care. As I’m sure many can attest, this past year of remote work has removed the ability to bump into folks in the hallways, have ad hoc catch ups in the elevator and other unscheduled socialization opportunities. I’m very proud of the culture we have developed on the Care team, and I feel that we have gotten even closer in this past year. I hope to take this a step further and deepen contact with other amazing people at The Times!</p><p id="5030" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">As a director working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>I am very proud of and humbled by numerous members of the Care team who keep important topics such as accessibility and DEI (diversity, equity and inclusion) front of mind as we develop new features and services. The team has committed to specific objectives and key results around DEI targets for ourselves and our vendor partners, to ensure we are prioritizing actions and not just conversation.</p><p id="0a0e" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Do you have any favorite life hacks or work shortcuts?<br /></strong>I am a chronic multitasker. While my colleagues say I’m good at it, I believe the research that shows it is not effective and that it’s just constant, rapid context switching. I really feel the impact on my mental capacity, especially in a remote environment.</p><p id="d02d" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">One trick that has helped me is keeping my hands busy when I’m listening to a meeting that doesn’t require as much vocal participation. If I have an embroidery needle in my hand or some Play-Doh, I’m much less likely to check email and Slack during a presentation that I would much rather give my full attention to.</p><p id="fda8" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br /></strong>At risk of sounding clichéd, my mom. She has had (and continues to maintain) a high-powered career for my entire life, doing the lion’s share as a single parent when I was young and most in need of care. Her tenacity and competitive nature, coupled with boundless warmth and compassion, set the example that I could thrive in my own path without compromising my own ambition — or friendliness.</p><p id="0c9b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Complete this sentence: Over time, I have realized…<br /></strong>That it’s important to be flexible, and not take anything too personally. I like to assume folks are coming to the table with the best of intentions. Even if that isn’t the case, it starts an interaction off with a positive mindset which often carries through to a better outcome.</p><p id="78b3" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br /></strong>Stay curious and speak up! I love working in a customer-driven function. The more we learn about people’s experience with our products and comparable products, the better we can make our offerings. If a question or an idea seems silly, voice it anyway — you’ll never know what it could lead to if it’s never said.</p>]]></description>
      <link>https://open.nytimes.com/meeting-christina-malis-director-of-customer-care-at-the-new-york-times-9d3a262e94ed</link>
      <guid>https://open.nytimes.com/meeting-christina-malis-director-of-customer-care-at-the-new-york-times-9d3a262e94ed</guid>
      <pubDate>Mon, 15 Mar 2021 16:11:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Carrie Price, Lead Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="1ff7" class="ea eb ec bm b co ed ee ef eg eh ei cq cr">Celebrating Women’s History Month</h2><div class=""><h2 id="d315" class="fg bw ec bm b fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw cq">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fx n fy fz ga gb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----ac86943ca0d5--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gc gd ge" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gf aj s"><p><a class="ct cu au av aw ax ay az ba bb gk be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-carrie-price-lead-software-engineer-at-the-new-york-times-ac86943ca0d5?source=post_page-----ac86943ca0d5--------------------------------">Mar 12</a> · 5 min read</p></div></div></div></div><figure class="hn ho hp hq hr hs dg dh paragraph-image">
<figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="2064" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br /></strong>She/Her</p><p id="4e17" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br /></strong>I am a Lead Software Engineer. Generally, that means I write a lot of JavaScript for our website. Currently, my team builds and promotes features that enhance the value of a New York Times subscription with the aim of retaining subscribers. Our journalists create an amazing breadth of content every day and we want to help our readers discover all we have to offer.</p><p id="3a02" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br /></strong>About seven and a half years.</p><p id="fb98" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I’ve been staying in New Jersey with my family for the last 11 months. A typical day consists of working at the desk in my childhood bedroom, taking breaks to hang out with my two cats or our family dog, and watching Jeopardy during dinner.</p><p id="e7ae" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I’m extremely proud of the work I’ve done on <a href="https://www.nytimes.com/spotlight/the-weekender" class="ct jl" rel="noopener">The Weekender</a>. It started as a group project during <a class="ct jl" rel="noopener" href="https://open.nytimes.com/innovating-from-home-maker-week-at-the-new-york-times-50ecfa38aca1">Maker Week</a> (an annual event where we are free to explore and build whatever we want), and it has now grown to be a weekly feature. I have gotten to work with some amazing people in the newsroom and I learned a lot about the editorial process that I wouldn’t have learned otherwise.</p><p id="49c8" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>A challenge I still face today is maintaining confidence in my abilities. I started at The Times right after I graduated from college. In my first year, my goal was to learn as much as possible from those around me. Achieving this was easy because my teammates were all very helpful.</p><p id="b2fd" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">As I continued my career here, I started to understand enough about our systems to be able to contribute answers rather than just ask for them. I had spent the majority of my life in school where there was always a right answer and a person to tell me what it was. It was a challenge for me to gain the confidence to embrace the ambiguity of real-life decision making. For a long time, I wouldn’t share my opinion without first asking for validation from everyone around me.</p><p id="5760" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">If I had trusted my gut earlier, I would have been brave enough to take chances and accept that it’s O.K. to be wrong sometimes. I think a healthy dose of skepticism in your own ideas makes you a better collaborator, but it should be balanced with some trust in yourself.</p><p id="a0df" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>All of these values are important to my work but I think collaboration is probably the best fit. I believe our job as developers at The Times is to create a stable infrastructure and a suite of tools that allow the newsroom to be creative and reach our readers. There’s no way to do that work without listening and learning constantly.</p><p id="1bdb" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is a goal you hope to accomplish this year?<br /></strong>I’m not much of a formal goal setter, especially at a time when it feels like everything is constantly changing around us. My informal goals this year are to learn some new things, work with great people and take things as they come.</p><p id="572a" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">As a lead engineer working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>One of my favorite parts of my job is when I get to sit in on our user research sessions. I love hearing from a wide range of readers, gaining insight into how they use our features and challenging my own assumptions. I try to bring those same concepts to my day-to-day work by asking for feedback and working to make sure those opinions come from a diverse group of colleagues.</p><p id="0f15" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What change do you hope to see in your community?<br /></strong>I think this year has taught us a lot about how necessary it is to have flexibility in our work-life. I hope we continue to give people the space they need to figure out how to achieve work-life balance in a way that makes sense for their circumstances.</p><p id="cd5f" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Do you have any favorite life hacks or work shortcuts?<br /></strong>I am a very big fan of the <a href="https://support.apple.com/en-us/HT204948" class="ct jl" rel="noopener">split screen feature on Mac</a>. It allows you to take any two apps and put them side-by-side in a single view. It’s so nice to be able to see faces in a meeting even if I’m sharing my screen.</p><p id="d58d" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br /></strong>Work wise, I’m inspired by all of the complex, critical and sometimes life threatening work our journalists do every day. It’s kind of surreal that I work for the same company that they do.</p><p id="2e75" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">Life wise, I’m inspired by those who use humor to help themselves and others process the complexity of life. Laughing is my favorite coping mechanism.</p><p id="61be" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Fill in the blank: What is the best part of being ______? If you had it your way, what could make it better?<br /></strong>My favorite part of being an engineer, especially a web developer, is being able to rapidly prototype. It’s so satisfying to be able to quickly spin up a useful website that looks professional. I also love working with responsive design. Few people in real life spend time resizing their browser, but I love watching components seamlessly rearrange to fit the space.</p><p id="fc5e" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Complete this sentence: Over time, I have realized __________.<br /></strong>Over time, I have realized that I get to define what a successful career looks like to me. I’m still working through what that means for me, but right now it includes working on a supportive team, building systems that reinforce The Times’s mission and bending the formal role of an engineer to include learning about disciplines outside of development (design, user research, product management, journalism).</p><p id="6f2b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br /></strong>When I start a project that will require learning something new, the long list of things I don’t yet understand can feel daunting. I take time at the end of those projects to remind myself of that feeling and to recognize that it was only temporary. This small habit has built up my confidence for when I face new unknowns and I highly recommend it.</p>]]></description>
      <link>https://open.nytimes.com/meeting-carrie-price-lead-software-engineer-at-the-new-york-times-ac86943ca0d5</link>
      <guid>https://open.nytimes.com/meeting-carrie-price-lead-software-engineer-at-the-new-york-times-ac86943ca0d5</guid>
      <pubDate>Fri, 12 Mar 2021 20:17:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Alice Liang, Sr. Manager of Data & Insights at The New York Times]]></title>
      <description><![CDATA[<h2 id="778f" class="dt du dv bl b cn dw dx dy dz ea eb cp cq">Celebrating Women’s History Month</h2><div class=""><h2 id="889a" class="ez bv dv bl b fa fb fc fd fe ff fg fh fi fj fk fl fm fn fo fp cp">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’</h2><div class="fq n fr fs ft fu"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----e302967c3490--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fv fw fx" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div></div></div></div><figure class="hh hi hj hk hl hm df dg paragraph-image">
<figcaption class="ie if dh df dg ig ih bl b fz co cp">Illustration by Claire Merchlinsky</figcaption></figure><p id="a16a" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What are your pronouns?<br /></strong>She/Her</p><p id="438b" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is your job title and what does it mean?<br /></strong>Senior Manager, Data &amp; Insights (Engagement Analytics)</p><p id="b3eb" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">I manage a team responsible for data on our newsletters, push notifications and some of our personalized surfaces. We identify opportunities for our products to grow, build pipelines to power enterprise reporting, run experiments to inform business strategy and more.</p><p id="47db" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">How long have you been at The Times?<br /></strong>Just over three years.</p><p id="22d9" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>I’m currently working from home in Michigan but plan on going back to New York soon. Working from home these days looks like having coffee with my sister in the mornings and saying hi to my mail carrier in the afternoons.</p><p id="16aa" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I was part of the team that first introduced the dynamic meter on our site. This involved an innovative and scrappy small core team that pushed my technical skills, as well as a highly cross-functional set of stakeholders who challenged me to communicate data insights in better ways. It was an incredibly complex project at the forefront of what the industry is doing, and it’s still powering part of our paywall today.</p><p id="6438" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>Earlier in my career, I was in a pre-doctoral program with an amazing cohort of people who were all planning on getting their PhDs. I knew internally that getting a doctorate and having a career in research wasn’t for me, though I had already done a lot of preparation for it. It was difficult to overcome the expectation that was set for me in the program to pursue grad school. I started talking to folks in other industries, found allies in my cohort that also were deviating from the grad school route and got a job here at The Times! I would tell myself to trust my instincts more readily.</p><p id="ad5e" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Curiosity — the “open-minded inquiry” at the heart of The Times’s journalism is also the key to good data analytics.</p><p id="6856" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is a goal you hope to accomplish this year?<br /></strong>This year, it’s important for me to support my team and coworkers in the best way I can and to allow myself to be supported by them. Hitting the one year mark since the start of the pandemic is not easy for any of us. My goal is to make space for my team to feel like they can learn and grow in their work.</p><p id="6030" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">Outside of my job, I’ve been working on a manuscript for a few years that I would like to finish up this year.</p><p id="df31" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">As an analyst working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>As an analyst, it’s your job to keep an open mind and to challenge assumptions, to put yourself in the position of a reader and to approach analysis with empathy. As a people manager, inclusivity is even more important. People managers can focus more on hiring and growing people who are underrepresented in technology, to hear from different perspectives, to develop policies and expectations that are inclusive for everyone.</p><p id="d1f5" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What change do you hope to see in your community?<br /></strong>I hope to see more people of color and women thrive in data, and I hope to see more people who work in the industry foster environments that support the success of people of color and women. I’m encouraged by some of The Times’s recent commitments to diversity and inclusion, and I want to push our technology and data functions to do more.</p><p id="f8f4" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Do you have any favorite life hacks or work shortcuts?<br /></strong>Life hack: you can regrow green onions forever by just placing their ends in a jar of water.</p><p id="cc2d" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw">Work shortcuts: write down everything you have worked on at the end of the week or at the end of a month, including small ad-hoc tasks. Whether you’re writing a year-end review or just looking back on your day-to-day, this will help you have a clear sense of all that you have accomplished.</p><p id="3af2" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What or who are you inspired by?<br /></strong>I teach a citizenship class and every week, my students inspire me to be persistent, patient and dedicated to a life of continuous learning.</p><p id="14e6" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">Complete this sentence: Over time, I have realized __________.<br /></strong>Over time, I have realized the importance of having good colleagues by your side. Even with good work-life balance, you end up spending so much of your life at work. Having people to joke around with, to vent to, to cheer you on, to bounce an idea off of and to support you in times of need is so critical.</p><p id="e2c5" class="ii ij dv ik b fa il im in fd io ip iq ir is it iu iv iw ix iy iz ja jb jc jd dn bw"><strong class="ik je">What is your best advice for someone starting to work in your field?<br /></strong>Stay curious! Follow your interests to explore beyond what’s expected of you. Approach your work with empathy. Advocate for yourself and find mentors, sponsors and managers who will advocate for you. And wherever you are in your career, there’s someone you can mentor and bring up behind you.</p>]]></description>
      <link>https://open.nytimes.com/meeting-alice-liang-sr-manager-of-data-insights-at-the-new-york-times-e302967c3490</link>
      <guid>https://open.nytimes.com/meeting-alice-liang-sr-manager-of-data-insights-at-the-new-york-times-e302967c3490</guid>
      <pubDate>Wed, 10 Mar 2021 19:25:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Cindy Taibi, Chief Information Officer at The New York Times]]></title>
      <description><![CDATA[<h2 id="b749" class="ea eb ec bm b co ed ee ef eg eh ei cq cr">Celebrating Women’s History Month</h2><div class=""><h2 id="04d7" class="fg bw ec bm b fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw cq">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’.</h2><div class="fx n fy fz ga gb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----795022c3428f--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gc gd ge" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gf aj s"><p><a class="ct cu au av aw ax ay az ba bb gk be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-cindy-taibi-chief-information-officer-at-the-new-york-times-795022c3428f?source=post_page-----795022c3428f--------------------------------">Mar 8</a> · 3 min read</p></div></div></div></div><figure class="hn ho hp hq hr hs dg dh paragraph-image">
<figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="f8a7" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br /></strong>She/Her</p><p id="64c3" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br /></strong>Chief Information Officer. To me, it means that I lead the teams that a) empower our company and our workforce to work productively, efficiently and safely; b) run all the back office systems to keep the company doing business; and c) support all things print.</p><p id="c820" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br /></strong>40 years. I started when I was 10. Just kidding, but really some days it feels like those years have flown by, and other days it feels like it has been 10 lifetimes. I love thinking back to some of the world events I have seen unfold through the lens of working for The Times. What a long, strange trip it has been!</p><p id="32b3" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>Well, I’ll just say I don’t enjoy working from home. I would rather be around people, and I think I work better around people. For me, it’s hard to replace the value of social interaction.</p><p id="0346" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong> That would be our migration to the cloud, completed just about three years ago. The tech department migrated roughly 95 percent of our computing workloads to either the Amazon or Google public cloud environments, and it was all on hard deadlines having to do with ending our leases and shutting down four terrestrial data centers. Dozens of people worked on the project across the tech department and they met all of the major deadlines.</p><p id="7a88" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>In the early 1990s when my two children were born, I had to transform myself into a full-time working parent. Becoming a mother is a huge challenge and doing it while working was incredibly difficult. Learning to prioritize, being the best mom I could be, and for a while, managing with very little sleep! Would I do it again? YES. There’s nothing more rewarding.</p><p id="bd84" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Collaboration. For me it’s mostly about the people, and I believe that we encourage each other to do better when we do it together.</p><p id="4fb6" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What change do you hope to see in your community?<br /></strong>Well, right now I would just like to see my community come out on the other side of this pandemic so that we can all be real neighbors again in a safe and healthy way.</p><p id="7c07" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br /></strong>My father. He taught me so much about how to figure things out for myself, and how to advocate for myself.</p><p id="3592" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br /></strong>Job satisfaction has many aspects to it, but there are three aspects which I think are fundamental. If you have work that you think is meaningful, a boss who appreciates you and you are fairly compensated, then you should have job satisfaction. You may not always be working on the most exciting project and you might not always be paid at the high end, but finding job satisfaction is important. Other aspects may wax and wane over time, but those three are the fundamentals.</p>]]></description>
      <link>https://open.nytimes.com/meeting-cindy-taibi-chief-information-officer-at-the-new-york-times-795022c3428f</link>
      <guid>https://open.nytimes.com/meeting-cindy-taibi-chief-information-officer-at-the-new-york-times-795022c3428f</guid>
      <pubDate>Mon, 08 Mar 2021 17:39:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Natasha Dykes, Senior Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="9f17" class="ea eb ec bm b co ed ee ef eg eh ei cq cr">Celebrating Women’s History Month</h2><div class=""><h2 id="8892" class="fg bw ec bm b fh fi fj fk fl fm fn fo fp fq fr fs ft fu fv fw cq">This March, we are featuring colleagues from across The New York Times in a special Women’s History Month series of ‘Meeting’</h2><div class="fx n fy fz ga gb"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----ec52c502e459--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s gc gd ge" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="gf aj s"><p><a class="ct cu au av aw ax ay az ba bb gk be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-natasha-dykes-senior-software-engineer-at-the-new-york-times-ec52c502e459?source=post_page-----ec52c502e459--------------------------------">Mar 4</a> · 6 min read</p></div></div></div></div><figure class="hn ho hp hq hr hs dg dh paragraph-image">
<figcaption class="ik il di dg dh im in bm b gg cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="73a8" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What are your pronouns?<br /></strong>She/Her</p><p id="f1b9" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your job title and what does it mean?<br /></strong>I’m a Senior Software Engineer on the Messaging Pipeline team. I work on a microservice application that is mainly written in Go, but has a little JavaScript sprinkled in.</p><p id="db6d" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">How long have you been at The Times?<br /></strong>Since October 2018, so a little over two years.</p><p id="e38b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Most Times employees are working remotely right now. What does working from home these days look like for you?<br /></strong>Working from home has been a rollercoaster. I have enjoyed getting back the time I would usually spend commuting, and I have been able to spend more time with my cats. I set up a little bird feeder on the fire escape so my cats can have some entertainment on the windowsill next to my desk. Turns out, I enjoy bird watching as much as they do!</p><p id="e4b9" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">But, it’s been a challenging time, too. When the pandemic first started in New York, I really struggled to find balance between my work time and my free time. It felt oppressive and I couldn’t really disconnect the same way I was able to when I physically left the office. The idea of being able to make my lunch during lunchtime was quickly thwarted by last-minute meetings or long slack conversations, despite my attempts to reclaim my calendar.</p><p id="8656" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">The biggest struggle for me was getting enough movement in the day. I went from going to the gym three to five times a week and walking 20 blocks from the gym to the office in the morning to having walked only 800 steps by 6 p.m. according to my fitness watch. It was bad.</p><p id="b2b7" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">After a year of working from home, I have recalibrated my work-from-home experience and sandwiched my workday with a “commute” around my neighborhood; I have designated work areas to help define the lines of work and home; and although I haven’t unlocked the secret to maintaining a lunch hour, I have leaned on meal prep to ensure I have something good to munch on when lunch time rolls around.</p><p id="a9f2" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I still watch the birds peck at the seeds on the fire escape while my cats look on with unflinching focus and restless tails.</p><p id="3460" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>In 2019, my team worked to migrate functionality from a seven-year-old legacy system to our current messaging platform. The system was a PHP application that was responsible for sending push notifications and it had not been actively maintained in some time. My team’s goal was to shut down the application because most of the system’s original authors had left the company and the tech stack did not fit the current skill set on the team.</p><p id="bc68" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I had joined The Times a few months earlier with no prior experience working in Go and no professional experience working with back-end systems (other than Node applications). My role was to build functionality that took the payload scheduled for an alert and send it to the respective Android or iOS platform.</p><p id="8d66" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I didn’t know what the payload looked like, so I had to do a bit of reverse engineering, while learning Go and building a proof of concept, to verify our assumptions. After I built the proof of concept, I was able to complete the transformations and client setup to allow our current platform to send push notifications. I was especially proud of it because it was pretty intimidating; I never expected to be responsible for this kind of work, but I was able to build and ship it.</p><p id="292e" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is the biggest challenge you faced in your career and how did you overcome it? Knowing what you know now, would you do things differently.<br /></strong>Learning the language necessary to ask the right questions. It came with experience, as most things do, and being comfortable enough with my teams and my mentors along the way to ask for guidance when I needed it. Knowing what I know now, I would have stuck with my Computer Science degree instead of changing majors! I would have sought help from environments that promote “growth courses” and not “weed-out courses.”</p><p id="a703" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">The Times has six core values (Independence, Integrity, Curiosity, Respect, Collaboration and Excellence) by which the company operates. Is there one that you find best describes your work?<br /></strong>Integrity. It’s how I approach development. I come from a QA background, so I tend to think of edge cases first and then I try my best to ensure that I ship sound and stable code. It’s also how I approach the work with my team. It’s also how I approach my extracurricular work with some of The Times’s advocacy groups like Women in Tech, Black and Latinx in Tech and our Architectural Review Board. I believe that honest conversations move us forward.</p><p id="88fa" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is a goal you hope to accomplish this year?<br /></strong>For my personal life, I would like to complete a century bike ride this year.</p><p id="5a33" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">For my professional life, I would like to commit to putting more of my focus in increasing my technical depth and saying “no” to opportunities that don’t work towards that goal.</p><p id="ade9" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">As a Software Engineer working on a digital product, how do you approach your work with inclusivity in mind?<br /></strong>I focus on end users. It doesn’t matter if you complete the work outlined in the ticket if the work that gets shipped doesn’t provide value or leaves out a group of people. This involves a lot of conversations with product and team leads, asking questions and most importantly, listening to others.</p><p id="24a9" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What change do you hope to see in your community?<br /></strong>I can’t say that there’s any major change that I would like to see specifically in my community. The community I identify with is compassionate, ambitious, resourceful, eager; but there’s only so much one side can do. I’d love to see communities outside of my own be more open, transparent, equitable and compassionate. I’d really like to see more spaces that I occupy as a professional look more like the cities that house them, the clientele they aim to serve, and the world at large.</p><p id="e08b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Do you have any favorite life hacks or work shortcuts?<br /></strong>When you want to create a new Google Doc type “docs.new” into your browser and a new Google Doc will load; It’s the same for Sheets. It’s a pretty useful shortcut for my workflow.</p><p id="75a8" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What or who are you inspired by?<br /></strong>I’m inspired by engaging and sprawling conversations that leave me with books to read, music to listen to and perspectives to examine.</p><p id="5c9a" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Fill in the blank: What is the best part of being ______? If you had it your way, what could make it better?<br /></strong>What is the best part of being in quarantine? Some days I really can’t stand it and I want to fast forward to when we can meet up in real life. But, it’s not all bad. In many ways, quarantine has forced me to be more intentional with myself and the people I care about.</p><p id="924b" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">I have been able to learn a lot more in my free time, ranging in subjects from algorithms to feminist theory. The pandemic has motivated me to regularly check on friends who I would not have reached out to until we hung out in person, which can be many months for friends in different parts of the country. It has taught me to listen to my body; It’s pretty wild how many mild inconveniences and discomforts a body can accumulate before you realize how garbage you feel. I have been able to try out different meal plans that hit my nutritional goals rather than grab something that’s quick and convenient and I’m feeling much more energized from it.</p><p id="35ca" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx">All of that said, I’m ready for things to get back to what they once were. I plan on taking some of the habits I learned into my post-quarantine life. If I could have it my way, I would have a full vaccine roll-out tomorrow.</p><p id="0884" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">Complete this sentence: Over time, I have realized __________.<br /></strong>That the work will still be there tomorrow.</p><p id="1b4d" class="io ip ec iq b fh ir is it fk iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj du bx"><strong class="iq jk">What is your best advice for someone starting to work in your field?<br /></strong>Take time to explore what it is about technology that piques your interest and learn by doing; experience it the best teacher and it doesn’t always come from school or work.</p>]]></description>
      <link>https://open.nytimes.com/meeting-natasha-dykes-senior-software-engineer-at-the-new-york-times-ec52c502e459</link>
      <guid>https://open.nytimes.com/meeting-natasha-dykes-senior-software-engineer-at-the-new-york-times-ec52c502e459</guid>
      <pubDate>Thu, 04 Mar 2021 17:54:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How We Rearchitected Mobile A/B Testing at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="ff9b" class="ex bv ea bl b ey ez fa fb fc fd fe ff fg fh fi fj fk fl fm fn cp">We use A/B tests to make decisions about the products and features we release, but our mobile test allocation wasn’t separating users properly and we had to figure out how to fix it.</h2><div class="fo n fp fq fr fs"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----78eb428d9132--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ft fu fv" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fw aj s"><p><a class="cs ct at au av aw ax ay az ba gb bd cw cx" rel="noopener" href="https://open.nytimes.com/how-we-rearchitected-mobile-a-b-testing-at-the-new-york-times-78eb428d9132?source=post_page-----78eb428d9132--------------------------------">Mar 4</a> · 8 min read</p></div></div></div></div><figure class="he hf hg hh hi hj df dg paragraph-image">
<figcaption class="ib ic dh df dg id ie bl b fx co cp">Illustration by Patrick Kyle</figcaption></figure><p id="5a89" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">By Julian Locke and Sameer More</strong></p><p id="7ff9" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">In early 2020, the mobile engineering teams at The New York Times noticed an issue: our A/B tests were separating users at the wrong ratio. Tests that were supposed to allocate users into control and experimental groups were sometimes off by five percent or more. This was a big problem.</p><p id="ca90" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The Times uses A/B tests to make decisions about the products and features we release. Our A/B testing system works by separating users into groups that see different variants of the feature we’re testing. We then collect data on user behavior around the feature, and we draw conclusions on the effectiveness of our test.</p><p id="47bd" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">If a test’s participation ratio is skewed — as we were seeing across many tests on our mobile platforms — it affects our confidence in feature roll-outs. When we test features, it’s important that we have control over how we allocate users into testing groups.</p><p id="424f" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">To figure out why this was happening, we turned to our in-house A/B testing library. Our A/B testing SDK was built for simplicity and had a synchronous API that a client could check for a test allocation. However, behind-the-scenes, the library would periodically query for results of A/B allocations and persist them across app sessions. If no result had been found and the network call had not yet returned, each test was hard-coded to fall back to a default variant, which was almost always the control.</p><p id="ab66" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Our hunch was that the hard-coded fallback was catching users who were browsing offline or had slow network connections. This was a problem because we needed unbiased allocation to successfully test new features. We had to figure out what was happening.</p><p id="d040" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">In order to make our SDK more accurate, we deployed two changes over the next few months.</p><p id="0c7a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">First, we increased reporting</strong> and we added an analytics field to indicate the source of the allocation for a user, server or hard-coded fallback. While this didn’t make allocations more accurate, it did allow us to filter out non-random allocations during data analysis.</p><p id="ce95" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">Second, we developed an app-side hack for reliable allocations</strong> by simply neglecting to configure the test and using native logic to assign a random variant. This was especially useful for UX tests for first-time users that had little chance of being fetched prior to the user reaching them.</p><p id="1044" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Together, these changes allowed teams to continue testing, but each came with downsides. Filtering the non-random allocations from analysis shrunk our pool of testers and biased our tests to measure only users with great network connections. Our app-side hack separated all users fairly, but it limited our ability to make changes to the allocations once the apps shipped. Adding native allocation logic was a less maintainable solution because it created a second source of truth for test configurations. It also duplicated the allocation logic and the configuration validation logic that already existed on the server.</p><p id="a790" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Even with the downsides, we were encouraged by the truly random synchronous allocations afforded by the native logic. We started to investigate whether we could formalize and port the logic into our shared library, while mitigating the inherent issues of the native logic.</p><figure class="he hf hg hh hi hj df dg paragraph-image">
</figure><p id="f900" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">From here it’s helpful to go a little more in depth about the constituent parts of the existing system:</p><ol class=""><li id="9027" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja ke kf kg bw">First, tests are manually configured in a server-side GitHub repo. For each test, developers specify a name, test variants and proportions and the integration. An integration is similar to an environment, but it also specifies the application, such as `ios-newsreader-production`.</li>
<li id="99d3" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja ke kf kg bw">On each change to this repo, server-side tooling creates a new JSON rules object for each integration. It’s a distillation of the latest test configurations for that integration.</li>
<li id="411d" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja ke kf kg bw">On launch, the mobile app sends a list of tests, an integration and targeting parameters to the allocations endpoint, which then returns a dictionary and allocations for each test.</li>
<li id="a5e3" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja ke kf kg bw">The allocations endpoint computes the testing distribution using a short JavaScript allocation script. The test and targeting parameters from the app, as well as the relevant rules object, are passed into the allocation script. The script returns allocations for each test.</li>
<li id="a1c2" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja ke kf kg bw">The allocations endpoint call returns the allocations to the mobile app.</li>
</ol><p id="813f" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">We use JavaScript alongside native code in our mobile apps at The Times. Sometimes the JavaScript displays web technology-based UIs, and it occasionally executes small chunks of cross-platform logic. With that in mind, we imagined a reconfiguration of the A/B library’s components that was inspired by the JavaScript for event validation work of our colleague Krzysztof Zablocki, who wrote a simple analytics event validator that shared code with our web app. Elements of this work inspired our design here; we were able to adapt portions of it on iOS and implement analogous components on Android.</p><p id="d66a" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We envisioned our new configuration as a series of steps:</p><ol class=""><li id="0aa9" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja ke kf kg bw">Teams would their app-side allocation tests to the server-side configurations repo, just as they did for the old system.</li>
<li id="a44b" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja ke kf kg bw">At app compile time, the tooling would download both a recent JSONLogic rules object and a recent allocation script, which it would ship to the app.</li>
<li id="c188" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja ke kf kg bw">The tooling would use the rules object and the script to synchronously allocate all tests at app launch. This removed the network call to the allocation endpoint completely out of the picture.</li>
</ol><p id="d4cb" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">This configuration would mitigate most of the issues with our native logic hack, but it would still inhibit our ability to make changes after an app release. Because our engineering teams needed the options to pull the plug on bad tests or roll them out incrementally, this was a significant roadblock.</p><p id="3c11" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb"><em class="km">[We are hiring!</em></strong> <a href="https://www.nytco.com/careers/" class="cs kn" rel="noopener"><strong class="ih jb"><em class="km">Come work with us</em></strong></a><strong class="ih jb"><em class="km">.]</em></strong></p><p id="5ebc" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We looked back to Krzysztof’s work on JavaScript for event validation, which included a class that served as an abstraction of a remote asset. We created one instance each of the class to represent the JSONLogic rules object and the allocation script. The classes would periodically fetch the latest allocation script or asset, falling back to local versions if needed. This allowed us to update test configurations on an app already in flight.</p><p id="fd60" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The one caveat with this approach is that it’s not possible to apply the most up-to-date allocation rules for a user launching the app for the first time. This is because the binary may be stale and there is no time for a server call. Initial allocations rely on the rules that were live when the latest app release was cut, which may be up to two weeks old.</p><figure class="he hf hg hh hi hj df dg paragraph-image">
</figure><h2 id="7e3e" class="kq jd ea bl bm kr ks fa jg kt ku fd jj fe kv fg jn fh kw fj jr fk kx fm jv ky bw">Finding a JavaScript engine</h2><p id="1afa" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">To implement our new A/B testing library on Android, we had to choose the right JavaScript engine to run the allocations script and we considered WebViews, J2V8 and Duktape-Android. While we had used WebViews before, they were hard to manage and couldn’t execute code synchronously. J2V8 was faster and easier to use, but it would have added about 20MB to our app’s size. We ultimately decided on Duktape-Android because it only added 2MB to our app.</p><p id="fd78" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">Verifying Allocation Code At Runtime<br /></strong>We added a validation step that stops the library from trying to execute a nonfunctional script. This step reads the JavaScript and attempts to run it in Duktape-Android. However, if an exception occurs, the library will revert to the script it currently has.</p><p id="4b31" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">Asset Management<br /></strong>For our A/B testing library, we relied on Store4, which brought support for coroutines. Store4 provides a framework to specify a source of truth (which in our case, are the A/B assets stored in the file system). The framework also provides a fetcher for retrieving and validating assets from the network and a reader for processing those assets.</p><h2 id="f34e" class="kq jd ea bl bm kr ks fa jg kt ku fd jj fe kv fg jn fh kw fj jr fk kx fm jv ky bw">Finding a JavaScript engine</h2><p id="a88f" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">We decided to use the Apple framework JavaScriptCore to execute the allocation script because it runs in process. While it is slightly slower than other engines we could have chosen, we opted to use it for security reasons.</p><p id="d209" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Asset Management</p><p id="6565" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We adapted a useful abstraction from Krzysztof’s app-side JavaScript work called the `RemoteAssetManager`. For assets like our allocation script or rules object, an instance of this manager can handle all the tricky logic around making the latest version synchronously available. The abstraction reads and materializes the asset out of the app binary, fetches new versions of the asset from the web and writes the version to disk between app runs.</p><p id="b517" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The `RemoteAssetManager` is written to be flexible and capable of handling arbitrary assets. Its initializer takes a few closure arguments that allow the caller to tell it where to access assets, how to materialize assets from data, how to compare and choose the best of these assets, and how often to attempt to fetch new versions.</p><p id="a6d7" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">The core of the app-side allocation code can instantiate one of these managers and from then on synchronously access the latest and greatest possible version of the asset.</p><p id="e924" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw"><strong class="ih jb">Analytics<br /></strong>Because an A/B test would be useless without data, our apps trigger an expose event, which reports the test name and variant at the time a feature is used. The event is our only way to know that an audience is seeing the correct test.</p><p id="1a36" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We added additional data including:</p><ul class=""><li id="ba66" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja kz kf kg bw">Metadata for how tests are allocated.</li>
<li id="4e88" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja kz kf kg bw">An error field for exceptions.</li>
<li id="4fce" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja kz kf kg bw">The allocation script response.</li>
<li id="3ad9" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja kz kf kg bw">The input parameters to the script.</li>
<li id="5026" class="if ig ea ih b ey kh ij ik fb ki im in io kj iq ir is kk iu iv iw kl iy iz ja kz kf kg bw">The version of the rules object and the integration that was used.</li>
</ul><p id="c8a6" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">This information is sent to the analytics service and is made available for our data team. Because of our additional analytics, we no longer need to guess why a test isn’t reaching the target audience.</p><p id="e870" class="if ig ea ih b ey jx ij ik fb jy im in io jz iq ir is ka iu iv iw kb iy iz ja dt bw">In early October, 2020, we integrated this new A/B testing library into the New York Times Beta app and distributed it to a few thousand users. To test it out, our product team organized an A/A test — a 50–50 test that reported user analytics but didn’t vary the experience — and our data analysts verified the results.</p><p id="30d3" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">Because we didn’t significantly change the SDK API or the server-side test configuration storage location, the update automatically moved all running tests over to the new system. In the beta app, we verified that users who were allocated into one group via the old SDK were allocated into the same group via the new SDK. They were.</p><p id="40e4" class="if ig ea ih b ey ii ij ik fb il im in io ip iq ir is it iu iv iw ix iy iz ja dt bw">We rolled out the release to the main Times apps. Since then, tests have been predictable, analyzable and deterministic, which means that our feature teams can deploy tests knowing that the data they get back is reliable.</p>]]></description>
      <link>https://open.nytimes.com/how-we-rearchitected-mobile-a-b-testing-at-the-new-york-times-78eb428d9132</link>
      <guid>https://open.nytimes.com/how-we-rearchitected-mobile-a-b-testing-at-the-new-york-times-78eb428d9132</guid>
      <pubDate>Thu, 04 Mar 2021 17:28:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Gerardo Núñez, Senior Data Analyst at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="37d3" class="es bw dv bm b et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi cq">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fj n fk fl fm fn"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----11610055d029--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fo fp fq" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fr aj s"><p><a class="ct cu au av aw ax ay az ba bb fw be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-gerardo-n%C3%BA%C3%B1ez-senior-data-analyst-at-the-new-york-times-11610055d029?source=post_page-----11610055d029--------------------------------">Feb 25</a> · 3 min read</p></div></div></div></div><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="bcf7" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What are your pronouns?<br /></strong>He/Him</p><p id="2732" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your job?<br /></strong>I’m a Senior Analyst for Audience and Coverage.</p><p id="3756" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What does that mean?<br /></strong>I look at ways that insights from data can provide answers to questions like, ‘Which social media platform works best to promote certain pieces?’ and ‘How does reader interest in our journalism vary by region?’</p><p id="1143" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">My job is a combination of data analytics, data engineering and data science. I spend most of my time interpreting data, some of my time making sure we have infrastructure that supports our work and the rest of my time applying advanced techniques that help provide more insights.</p><p id="5ae2" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">How long have you been at The Times?<br /></strong>Since September 28th, 2020.</p><p id="cf77" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I’ve been working from Coral Springs, FL.</p><p id="e3e9" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">How do you start your day?<br /></strong>I’ll start my day at 7:30 a.m. with my eight-pound Cavachon, Kovu, asking me to walk him around the park nearby.</p><p id="f247" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">My wife will wake up a little later and start preparing tea and breakfast, which we’ll enjoy together on the balcony. We usually spend some time there with Kovu, just observing the birds and turtles gather in the canal behind our apartment while the sun rises over the trees.</p><p id="fb3a" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is something you’ve worked on recently?<br /></strong>At The Times, we collect a lot of complex data that can be hard to analyze, so we spend a lot of time making sure we get the insights right. I’ve been working with my team to create a way to simplify how we gather insights and share them with our colleagues.</p><p id="5474" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Currently, I’m looking at the performance of Times enterprise stories, which are big journalistic projects that might take years to produce, such as <a href="https://www.nytimes.com/interactive/2020/09/27/us/donald-trump-taxes.html" class="ct iz" rel="noopener">the series on former President Donald J. Trump’s taxes</a>.</p><p id="ee1a" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">What’s interesting about this project is that whenever we say ‘Enterprise Story’ we automatically assume that it will outperform other stories in every possible way, which is not necessarily true. For example, a story specific to New York City will probably perform well there, but might not be the most-read story in every state or outside of the United States. This is important because, given the amount of effort these stories take to produce, we want to get better at setting our own expectations.</p><p id="5e6d" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What was your first job?<br /></strong>I was a theater usher back in Venezuela.</p><p id="2c8f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is something most people don’t know about you?<br /></strong>I spent four years working in a libertarian think tank in Venezuela.</p><p id="5f7f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your secret to career success?<br /></strong>I strongly believe that if I first focus on being a good human being, success will follow — not only in my career, but in my life.</p><p id="526d" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your superpower?<br /></strong>Learning and sharing knowledge.</p><p id="2a89" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What are you inspired by?<br /></strong>Most artistic expressions, and philosophy.</p><p id="97b1" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Name one thing you’re excited about right now.<br /></strong>The world after COVID.</p><p id="965c" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">What I’ve seen during this time is not limited to the pain and struggles of many close to me, but also their resilience, their creativity and their ability to adapt. And all those learnings make me hopeful for a future where we all go above and beyond to connect meaningfully with one another.</p><p id="de35" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your best advice for someone starting to work in your field?<br /></strong>Technology is a fast-changing industry, and it can sometimes feel challenging to stay on top of the latest developments. If you can stay curious, you can turn this challenge into an opportunity to learn new things. At least, that’s how it’s worked for me.</p>]]></description>
      <link>https://open.nytimes.com/meeting-gerardo-n%C3%BA%C3%B1ez-senior-data-analyst-at-the-new-york-times-11610055d029</link>
      <guid>https://open.nytimes.com/meeting-gerardo-n%C3%BA%C3%B1ez-senior-data-analyst-at-the-new-york-times-11610055d029</guid>
      <pubDate>Thu, 25 Feb 2021 15:27:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[A More Accessible Web]]></title>
      <description><![CDATA[<div class=""><h2 id="0492" class="es bw dv bm b et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi cq">Some of the web technologies that The New York Times has leveraged to enhance the user experience of our website and apps for all.</h2><div class="fj n fk fl fm fn"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----fa87592da6d2--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fo fp fq" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fr aj s"><p><a class="ct cu au av aw ax ay az ba bb fw be cx cy" rel="noopener" href="https://open.nytimes.com/a-more-accessible-web-fa87592da6d2?source=post_page-----fa87592da6d2--------------------------------">Feb 25</a> · 7 min read</p></div></div></div></div><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq">Illustration by Dominic Kesterton</figcaption></figure><p id="7eee" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">By Shilpa Kumar</strong></p><p id="b553" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Last year marked the thirtieth anniversary of the Americans with Disabilities Act being signed into law, which banned discrimination against people with disabilities in all areas of public life. The A.D.A. required that accommodations be made in places like schools and businesses, and on transportation to allow equal access for people with disabilities.</p><p id="789a" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">The A.D.A. is often talked about in reference to physical access. There is currently a legal debate about whether the A.D.A. should apply to digital locations, too. No matter how that legal question gets resolved, as more of our modern lives are spent online, websites and apps need to be accessible, too.</p><p id="31f8" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Web accessibility, also known as a11y, broadly refers to web applications that can be used by all people regardless of their cognitive, physical or visual impairments, their technical proficiencies or their situational circumstances (such as poor internet connections).</p><p id="bbb6" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Implementing web <a href="https://www.w3.org/WAI/standards-guidelines/" class="ct iz" rel="noopener">accessibility standards</a> is not always hard. There are numerous ways designers and developers can incorporate accessibility principles in their web applications by using basic CSS and HTML.</p><p id="b1a0" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">At The New York Times, <a href="https://www.niemanlab.org/2020/07/the-new-york-times-special-section-on-disability-is-available-in-braille-and-audio-and-has-its-own-style-guide/" class="ct iz" rel="noopener">we have taken steps to improve the web accessibility of our products</a>. Here are some of the web technologies we have leveraged in recent years to enhance the user experience of our website and apps for all.</p><p id="f44f" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">Semantic HTML simply means HTML that is structured, organized and adds meaning to the page. Each element tag should indicate the type of content it contains, such as a heading or a button. At The Times, we use semantic HTML across all of our platforms.</p><p id="c864" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><a class="ct iz" rel="noopener" href="https://open.nytimes.com/going-places-with-html-and-css-84ac8c8a39a6">Semantic HTML isn’t just a good practice in web development</a>, it ensures that everyone can access your content.</p><p id="52f0" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Modern web browsers read semantic HTML tags to know what kind of content is contained within them and how they should be presented to users. Similarly, screen readers use semantic HTML tags to communicate where a user is on a web page.</p><p id="dc8f" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">ARIA is a W3C specification that consists of attributes that can be applied to any HTML element to describe the properties, roles and states of that element. The <code class="hs ka kb kc kd b">aria-label</code> attribute can be assigned a string, such as “Main Menu” or “Main Content,” that will help provide context to someone using a screen reader.</p><p id="1c51" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">We implemented ARIA landmarks in numerous places across our platforms.</p><h2 id="691a" class="ke jb dv bm bn kf kg ev je kh ki ey jh ez kj fb jl fc kk fe jp ff kl fh jt km bx">The Times Crossword</h2><p id="29c4" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">Our Games team implemented dynamic ARIA landmarks, which change as the state of the page changes, to improve the user experience of the Crossword. The team applied the aria-label attribute to the <code class="hs ka kb kc kd b">&lt;button&gt;</code> HTML tag that renders the Crossword’s play and pause button. When a user starts or pauses a game, the string in the <code class="hs ka kb kc kd b">aria-label</code> attribute changes to reflect the state of the game. This is particularly useful for someone using a screen reader to navigate the game.</p><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq"><em class="kp">Dynamic ARIA landmarks are used in the Crossword so users with screen readers know the state of their game.</em></figcaption></figure><p id="b002" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Another place where the Games implemented dynamic ARIA landmarks was in the crossword itself. The game was built using the SVG HTML tag <code class="hs ka kb kc kd b">&lt;rect&gt;</code> to render each crossword square. When a user tabs to each square, the ARIA landmarks dynamically change to give more context about their location on the page. The user’s screen reader can tell them which clue they are responding to and the number of letters needed to solve the clue.</p><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq"><em class="kp">The ARIA landmarks update as a user navigates through a puzzle to give them more context about where they are on the page.</em></figcaption></figure><h2 id="9b08" class="ke jb dv bm bn kf kg ev je kh ki ey jh ez kj fb jl fc kk fe jp ff kl fh jt km bx">The Times paywall</h2><p id="5be8" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">If a user is not logged in to their Times account, or if they have reached their monthly free-article limit, they will be met with a paywall banner on most articles pages. The banner is located after the HTML footer of the page, which means it wouldn’t normally be read by a screen reader, so we need to provide more context for how it can be interacted with. To help users with screen readers navigate this dynamic part of the page, we added ARIA landmarks to each part of the banner.</p><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq"><em class="kp">Dynamic messaging that appears only when the paywall banner is present on the page.</em></figcaption></figure><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq">The user experience for our login and registration component, which is what people use to access their New York Times subscription, features elements with high color contrast.</figcaption></figure><p id="eddd" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">The elements in the login and registration component, which is how users access their Times subscriptions, are visually distinct. Black buttons and text against a white background provide enough contrast so they can be viewed clearly, especially by users with visual impairments. All of the buttons and links in the component change color in their hover state to indicate that these elements are interactive.</p><p id="4cf5" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Increasing the color contrast serves users with color blindness, as well as users who might be in bright lighting conditions (such as direct sunlight). Color contrast should be used for buttons, links, icons and images to convey the importance of elements in a web application.</p><h2 id="2d36" class="ke jb dv bm bn kf kg ev je kh ki ey jh ez kj fb jl fc kk fe jp ff kl fh jt km bx">Tab order</h2><p id="9db2" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">Keyboard-accessible web applications are crucial for users who are unable to use a mouse. The tabbing order of the interactive elements should be in a logical order as the user progresses through the page, from left to right and top to bottom.</p><p id="b791" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Usually, the DOM position of HTML elements informs how tabbed navigation will traverse the page. However, it is possible to configure the tab order without affecting the DOM. The HTML attribute <code class="hs ka kb kc kd b">tabindex</code> can be applied to HTML elements to indicate whether they can be accessed by tabbed navigation — and in what order.</p><p id="39cf" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><code class="hs ka kb kc kd b">tabindex</code> takes any number as a value, however it is not recommended to use values greater than “1.”</p><ul class=""><li id="9f5f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix ku kv kw bx"><code class="hs ka kb kc kd b"><strong class="ie iy">&lt;div tabindex="0"/&gt;</strong></code><strong class="ie iy">:</strong> This element can be accessed by the tab key.</li>
<li id="1be8" class="ic id dv ie b et kx ig ih ew ky ij ik il kz in io ip la ir is it lb iv iw ix ku kv kw bx"><code class="hs ka kb kc kd b"><strong class="ie iy">&lt;div tabindex="-1"/&gt;</strong></code><strong class="ie iy">:</strong> This element cannot be accessed by the tab key.</li>
<li id="fe9a" class="ic id dv ie b et kx ig ih ew ky ij ik il kz in io ip la ir is it lb iv iw ix ku kv kw bx">When <code class="hs ka kb kc kd b">tabindex</code> is set to a value greater than “1,” it will cause the element to be prioritized to the top of the tab order. If there is more than one element with a <code class="hs ka kb kc kd b">tabindex</code> attribute greater than “1,” the tab order will start at the lowest value and work its way up.</li>
</ul><p id="a11b" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><code class="hs ka kb kc kd b">tabindex</code> also controls which elements get a visible border around them to indicate that they are interactive. Every element that can be accessed via the keyboard should have a focusable border around it. Most interactive elements have the focusable border by default, but it’s possible to add focus to an element by using <code class="hs ka kb kc kd b">tabindex="0"</code>.</p><p id="d98f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy"><em class="lc">[If this work is interesting to you, come work with us.</em></strong> <a href="https://www.nytco.com/careers/" class="ct iz" rel="noopener"><strong class="ie iy"><em class="lc">We’re hiring!</em></strong></a><strong class="ie iy"><em class="lc">]</em></strong></p><p id="2af0" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Our Games team specified tab order in the Crossword to improve the usability of the game. When a user pauses the game, a model appears at the center of the page with the option to resume. The tab order of the page has been set so that the user can either tab to the resume button or continue to the links farther down the page — without needing to tab through each crossword square.</p><p id="39d0" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">The Games team also ensured that each interactive element on the page has a focusable border around it.</p><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq"><em class="kp">When a user pauses the Crossword, the tab priority changes so they can navigate the whole page, rather than the crossword itself. The green border also indicates what is currently in focus.</em></figcaption></figure><p id="348c" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">For users who have cognitive impairments or for those who are not technologically experienced, directional cues are very important because they indicate how to interact with an element. Directional cues can include tooltips, arrows, modals or messaging with explicit “calls to action.”</p><h2 id="b0c1" class="ke jb dv bm bn kf kg ev je kh ki ey jh ez kj fb jl fc kk fe jp ff kl fh jt km bx">The Crossword</h2><figure class="hb hc hd he hf hg dg dh paragraph-image">
</figure><p id="53a4" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">The Crossword’s modal explains a new autocheck feature and instructions on how to explore the page outside of the game. This prompt is a visual cue that guides users on how to navigate the game.</p><h2 id="08c4" class="ke jb dv bm bn kf kg ev je kh ki ey jh ez kj fb jl fc kk fe jp ff kl fh jt km bx">The skip-to-content link and the paywall</h2><figure class="hb hc hd he hf hg dg dh paragraph-image">
</figure><p id="40be" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">We added a skip-to-content link to the top of our site that lets users tab to an anchor link at the start of the main content of each page. The “skip” link allows users to easily bypass content that is always present at the top of our pages, such as navigation links and header images.</p><p id="406c" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">The “skip” link is particularly useful when a user has reached our paywall. When a paywall is present, the “skip” link takes the user directly to the prompts to log into their account or sign up for a subscription. To accomplish this, we change the tab order of the page so it skips all of the page content and goes directly to the subscriber messaging.</p>]]></description>
      <link>https://open.nytimes.com/a-more-accessible-web-fa87592da6d2</link>
      <guid>https://open.nytimes.com/a-more-accessible-web-fa87592da6d2</guid>
      <pubDate>Thu, 25 Feb 2021 15:20:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Announcing the New York Times App for Slack]]></title>
      <description><![CDATA[<div class=""><h2 id="8167" class="es bw dv bm b et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi cq">The app includes a ‘Popular in Your Workspace’ feature and a great read of the day selected by Times editors.</h2><div class="fj n fk fl fm fn"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----eb2bfd1e01bd--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fo fp fq" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fr aj s"><p><a class="ct cu au av aw ax ay az ba bb fw be cx cy" rel="noopener" href="https://open.nytimes.com/announcing-the-new-york-times-app-for-slack-eb2bfd1e01bd?source=post_page-----eb2bfd1e01bd--------------------------------">Feb 18</a> · 4 min read</p></div></div></div></div><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq">Illustration by Jenice Kim</figcaption></figure><p id="1f97" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">By Anna Dubenko and Scott Sheu</strong></p><p id="9e8f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Over the last few years, The New York Times Audience team began paying attention to how Times journalism was shared in private messaging spaces like text, email and other chat platforms. The team began thinking about how to deliver our journalism that fit our readers’ needs.</p><p id="d6ff" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">We knew that some readers wanted the latest breaking news, while others wanted guidance on what to cook, what to watch and what to read. Still others came to The Times to understand their industries better, and to share information and stories with their colleagues. It was this professional context that we wanted to explore.</p><p id="93da" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">The Audience team — which sets our audience strategy and oversees search, social and community, as well as data insights and analysis in the newsroom — connected with our Audience Product team to build a Times app for Slack that would do three things: 1) Help Slack users connect to the Times stories their colleagues were sharing and discussing; 2) Allow Slack users to save Times articles to read later; and 3) Offer a single great read of the day, selected by our editors.</p><p id="8c8b" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">We’re excited to announce that we have launched <a href="https://nytimes.slack.com/apps/A0121HXPPTQ-the-new-york-times" class="ct iz" rel="noopener">our first app for Slack</a>.</p><p id="b285" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">Since Slack’s launch in 2013, it has grown as a platform for workplace communication. We thought it would be a good place for us to connect with a key audience of professionals who want to stay informed and use their time efficiently. Slack’s users are on the platform for work, but they also use it to talk about topics that touch their work, such as issues that impact working parents, remote work and more.</p><p id="bd0c" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">When we set out to build a Slack app, we didn’t want to duplicate The Times’s existing products. Our Slack app didn’t need to send users breaking news alerts or give them a list of stories they could find on our homescreen. To create an experience that fits within the Slack ecosystem, we thought a lot about features that would add to the workday.</p><p id="8d06" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Starting with a list of fifteen features, we ultimately winnowed them down to three:</p><ul class=""><li id="e530" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix ka kb kc bx">The <strong class="ie iy">Popular in Your Workspace</strong> feature allows users to easily discover the top stories their colleagues are sharing across channels. Our “<a href="https://api.slack.com/start/overview#app_home" class="ct iz" rel="noopener">home tab</a>” within Slack also displays the three most-popular articles in a user’s workspace.</li>
<li id="eec1" class="ic id dv ie b et kd ig ih ew ke ij ik il kf in io ip kg ir is it kh iv iw ix ka kb kc bx">The <strong class="ie iy">Recommended Read</strong> is a daily story, selected by an editor, that we hope will delight and inform users on Slack. This feature can be shared within any channel by typing “/nytimes” or can be found in the app’s home tab.</li>
<li id="2caa" class="ic id dv ie b et kd ig ih ew ke ij ik il kf in io ip kg ir is it kh iv iw ix ka kb kc bx">All Times articles are accompanied by a <strong class="ie iy">Read Later</strong> button, which enables users to save the article to a reading list within Slack that can contain up to 50 articles. This gives users the ability to customize their own reading routines.</li>
</ul><p id="c074" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">Using Slack’s Block Kit builder, we designed an interface based on those three features and built a working prototype that we tested with our colleagues at Wirecutter who kicked the tires and caught any bugs. Afterwards, we set up a more formal beta test with a couple hundred employees at a design consulting firm.</p><p id="1473" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">After receiving quantitative and qualitative feedback from our early users, we felt pretty good about launching the Slack app more widely with the features we had in place.</p><p id="083f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">To prepare for public distribution in Slack’s app Directory, our teams focused on building out the app infrastructure to enhance its resiliency and its ability to handle a much larger audience. We also worked with our legal, data governance and security teams to ensure the app not only met Slack’s requirements but also fully represented The Times’s security and <a href="https://www.nytimes.com/privacy/privacy-policy" class="ct iz" rel="noopener">privacy practices</a>.</p><p id="d680" class="ic id dv ie b et jv ig ih ew jw ij ik il jx in io ip jy ir is it jz iv iw ix do bx">Users are not required to have a Times subscription in order to use our Slack app, however <a href="https://help.nytimes.com/hc/en-us/articles/115015852367-Digital-subscriptions" class="ct iz" rel="noopener">our normal business rules apply</a> for articles that are read on the Times website and mobile apps.</p><p id="efab" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">In order to install the app in Slack, users will be required to approve <a href="https://nytimes.slack.com/apps/A0121HXPPTQ-the-new-york-times" class="ct iz" rel="noopener">certain data permissions through an authorization page</a>. While these permissions are necessary to enable features, monitor performance and troubleshoot issues, The Times will not collect users’ names, email addresses or any other contact information through the Slack app.</p><p id="2fef" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">To help us understand app performance and where improvements can be made to the app experience, we collect aggregated data around feature usage and activity. All data collected is approved and enabled by Slack’s API, and subject to both The <a href="https://www.nytimes.com/privacy/privacy-policy" class="ct iz" rel="noopener">New York Time’s Privacy Policy</a> and <a href="https://slack.com/trust/privacy/privacy-policy" class="ct iz" rel="noopener">Slack’s Privacy Policy</a>.</p>]]></description>
      <link>https://open.nytimes.com/announcing-the-new-york-times-app-for-slack-eb2bfd1e01bd</link>
      <guid>https://open.nytimes.com/announcing-the-new-york-times-app-for-slack-eb2bfd1e01bd</guid>
      <pubDate>Thu, 18 Feb 2021 15:59:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Angelica Hill, Associate Product Manager at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="db92" class="es bw dv bm b et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi cq">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fj n fk fl fm fn"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----39b43ee420e7--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fo fp fq" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fr aj s"><p><a class="ct cu au av aw ax ay az ba bb fw be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-angelica-hill-associate-product-manager-at-the-new-york-times-39b43ee420e7?source=post_page-----39b43ee420e7--------------------------------">Feb 4</a> · 3 min read</p></div></div></div></div><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="649c" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What are your pronouns?<br /></strong>She/Her</p><p id="7166" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your job?<br /></strong>I’m an Associate Product Manager on the Messaging team.</p><p id="2207" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What does that mean?<br /></strong>My team is responsible for building and maintaining the back-end infrastructure for newsletters, emails and push notifications. These platforms are part of our shift to delivering tailored messages to Times readers.</p><p id="7a40" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">How long have you been at The Times?<br /></strong>Almost three years as a full-time employee, although I was lucky enough to have been an intern while completing my undergraduate degree in 2016.</p><p id="fb9e" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>My studio apartment on the Upper East Side in Manhattan.</p><p id="4e8f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">How do you start your day?<br /></strong>I try to get outside for a run or a walk along the East River to clear my mind and kick-start my body.</p><p id="2929" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is something you’ve worked on recently?<br /></strong>We built an A/B testing tool for newsletters that enables us to test different formatting options to see what best engages our readers.</p><p id="9e12" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I led the migration of 51 newsletters from an old platform to a new content-creation platform. The new platform also publishes content to the Times website, so it’s a more familiar tool for editors who also work on articles. It was the first project I led from start to finish, including training editors and ironing out the inevitable bugs. I’m proud of what the team delivered and the collaborative way we worked together.</p><p id="817a" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What was your first job?<br /></strong>This is my first full-time job. As a student I had the usual part-time jobs (tutoring, bartending, waitressing) but the most satisfying job was as a carer for an elderly woman with dementia.</p><p id="7395" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is something most people don’t know about you?<br /></strong>My background is firmly in the arts — I studied acting at the Royal Academy of Dramatic Arts, and English Literature and Drama at Queen Mary University of London — but I’ve spent the last year learning more about software development and I was a keynote speaker at GopherCon last year.</p><p id="d700" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your secret to career success?<br /></strong>Follow your passion. And never stop looking for interesting people to learn from.</p><p id="93e8" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your superpower?<br /></strong>Listening. Spending time really listening to those who have more experience than I do and are happy to share it is a shortcut to learning and improvement.</p><p id="e379" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What are you inspired by?<br /></strong>People who have a passion for what they do, are open to learn and willing to admit mistakes. Sometimes it’s hard to admit weaknesses and lack of knowledge; I most respect those who do.</p><p id="a582" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Name one thing you’re excited about right now.<br /></strong>One of the few upsides of the pandemic has been the acceleration of digitalization and new ways of working. Innovation is working at pace fueled by new technologies such as machine learning and data analytics, helping us better engage our readers. The opportunity to ride this wave, and see where it takes us is amazing.</p><p id="c3cd" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your best advice for someone starting to work in your field?<br /></strong>Keep learning, but not just from those in your specific field. Learn from everyone working in related disciplines: whether it’s design, engineering, marketing or project. And don’t forget to listen to the journalists and editors — they are at the heart of what we do.</p>]]></description>
      <link>https://open.nytimes.com/meeting-angelica-hill-associate-product-manager-at-the-new-york-times-39b43ee420e7</link>
      <guid>https://open.nytimes.com/meeting-angelica-hill-associate-product-manager-at-the-new-york-times-39b43ee420e7</guid>
      <pubDate>Thu, 04 Feb 2021 17:21:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Corina Aoi, Technical Product Manager at The New York Times]]></title>
      <description><![CDATA[<div class=""><h2 id="aeef" class="es bw dv bm b et eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi cq">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fj n fk fl fm fn"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----bd0aaf258c95--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fo fp fq" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fr aj s"><p><a class="ct cu au av aw ax ay az ba bb fw be cx cy" rel="noopener" href="https://open.nytimes.com/meeting-corina-aoi-technical-product-manager-at-the-new-york-times-bd0aaf258c95?source=post_page-----bd0aaf258c95--------------------------------">Jan 21</a> · 5 min read</p></div></div></div></div><figure class="hb hc hd he hf hg dg dh paragraph-image">
<figcaption class="hy hz di dg dh ia ib bm b fs cp cq">Illustration by Claire Merchlinsky</figcaption></figure><p id="6637" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your name?<br /></strong>Corina Aoi (pronounced Ah-wee)</p><p id="eaf1" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What are your pronouns?<br /></strong>She/Her</p><p id="49e8" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your job?<br /></strong>I am a technical product manager.</p><p id="2a1e" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What does that mean?<br /></strong>I support platforms as a product, in particular the platforms that power The Times’s native and web apps. My focus is to provide teams and engineers with the tools, standards and systems that enable them to develop easily, work quickly, ship with quality and measure the impact of what they have built for readers.</p><p id="c0f8" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">How long have you been at The Times?<br /></strong>Five years. I started as an engineer then transitioned to product in 2018.</p><p id="e714" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>From laid-back and always sunny Southern California with my husband, my daughter and our dog, Jellybean.</p><p id="0ce7" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">How do you start your day?<br /></strong>Because of the time difference in relation to New York, I get up before everyone else in the house is awake and the first thing I do is take our dog out for a walk. As a parent working during the pandemic, it is rare to have a moment to myself. These walks really help to clear my head so I can start the day feeling relaxed.</p><p id="a2c5" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is something you’ve worked on recently?<br /></strong>I recently worked on decommissioning some legacy software that was used by a bunch of products and systems. It took a lot of technical detective work to identify dependent products, and I collaborated with many stakeholders and teams to strategize a plan to migrate these products off of the system.</p><p id="f602" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">While decommissioning the software, we also had to ensure that the security of the dependent products and systems wasn’t compromised ahead of the 2020 U.S. Elections (no pressure!). In a large organization with so many systems, removing even just one system can be complicated. But this was an important project that taught me a lot about cross-team communication, the value of project management skills for a product manager and how the process of decommissioning as a practice has a lot of room for improvement.</p><p id="1cfc" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I am most proud of a web accessibility sprint we did last year. It was a large project where my team partnered with 11 other teams across the organization to resolve as many issues as possible in a 90-day sprint. There is still so much work to do in this space, but I am proud that we were able to improve the experience for our readers — especially those using assistive technologies — in such a quick time frame.</p><p id="7cc1" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What was your first job?<br /></strong>Fresh out of college, I worked as a game developer for Mattel, Inc., the toy company. In particular, I developed games for Barbie.com back when Flash ActionScript was the new rage. Most games amounted to interactive drag and drop where kids could decorate Barbie’s cake skirt or something like that. However, I am very proud that I engineered an underwater adventure game where I used randomized Bezier curves to create bubbles that floated up at varying speeds and had to be popped in order to save Barbie’s little sea creature friends that were trapped inside.</p><p id="349e" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is something most people don’t know about you?<br /></strong>Most people are surprised to hear that I am a classically trained dancer who went to a performing arts high school. I danced professionally in commercials, film, television and entertainment while I majored in Computer Science in college and I was able to continue dancing throughout my early years as an entry-level web developer.</p><p id="f6d2" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx">In fact, coding was the ideal day job for a professional dancer like me because I had a lot of flexibility, as long as I got my work done. It beat working at a restaurant and it paid better too! This went on for a decade until a major injury set me back and I began to focus more on my career in tech. I was lucky to have a job in tech to fall back on!</p><p id="3f1f" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your secret to career success?<br /></strong>Be adaptable. Not just in your career, but in life. I’ve moved so much in my adult life that I’ve learned if you are open to new situations and experiences, opportunities will follow.</p><p id="983d" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your superpower?<br /></strong>Hmm, I don’t know. I guess it would be adaptability. Is that a superpower? [editor’s note: yes, it is.] The ability to adapt comes naturally to me and it has served me well in life. My friends used to say that I was a bit of a chameleon because I seemed to comfortably settle into whatever new environment I found myself in.</p><p id="186a" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What are you inspired by?<br /></strong>Nature, 100 percent. Being out in nature reminds me of how insignificant all my worries are in the grand scheme of the planet and it inspires me to think bigger than myself.</p><p id="bab6" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">Name one thing you’re excited about right now.<br /></strong>Watching my daughter grow. I don’t think there can be anything more humbling (and terrifying while simultaneously rewarding) than raising a human in this world. She is far better and smarter than I could ever be, and her presence in my life makes me a better person every single day.</p><p id="e790" class="ic id dv ie b et if ig ih ew ii ij ik il im in io ip iq ir is it iu iv iw ix do bx"><strong class="ie iy">What is your best advice for someone starting to work in your field?<br /></strong>Ask a lot of questions early on and don’t worry about how you sound to others. There will always be people in the room who were dying to ask the same questions, but don’t have the courage to. Have courage for them because everyone benefits from that.</p>]]></description>
      <link>https://open.nytimes.com/meeting-corina-aoi-technical-product-manager-at-the-new-york-times-bd0aaf258c95</link>
      <guid>https://open.nytimes.com/meeting-corina-aoi-technical-product-manager-at-the-new-york-times-bd0aaf258c95</guid>
      <pubDate>Thu, 21 Jan 2021 17:09:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[We Recommend Articles With a Little Help From Our Friends (Machine Learning and Reader Input)]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag du ai aj"><div class=""><h2 id="eb6f" class="et bx dw bn b eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj cr">To create a more comprehensive personalization algorithm, we built a machine-learning model that relates article text to reader-selected interests.</h2><div class="fk n fl fm fn fo"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----e17e85d6cf04--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fp fq fr" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fs aj s"><p><a class="cu cv av aw ax ay az ba bb bc fx bf cy cz" rel="noopener" href="https://open.nytimes.com/we-recommend-articles-with-a-little-help-from-our-friends-machine-learning-and-reader-input-e17e85d6cf04?source=post_page-----e17e85d6cf04--------------------------------">Jan 14</a> · 6 min read</p></div></div></div></div></div><div class="n p ab ac ae af ag du ai aj"><p id="b0be" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jj">By Joyce Xu</strong></p><p id="4e38" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">If you create an account with The New York Times, you are presented with a list of popular interests you can choose to follow. It’s a simple idea: tell us what you’re interested in and we will recommend stories in email newsletters and in certain sections of our apps and website.</p><p id="aff7" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">From a technical standpoint, executing on that idea is less straightforward. If you choose to follow interests like innovation, education or pop culture, we need to know whether a given story fits one of those interests.</p><p id="9b11" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">In the past, we determined whether an article belonged under an interest by querying tags attached to the story by its editors.</p><p id="8360" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Our taxonomy includes thousands of tags, ranging from broad to hyper-specific, that are arranged hierarchically (the “Food” parent tag has “Seafood,” as well as “South Beach Wine and Food Festival” as children). Some tags are used often, while others are used only once or twice. Some articles are labeled with many tags, while others just have a few.</p><p id="1078" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">While the tags represent valuable semantic data about the subjects in a story, the queries to manage them have run into issues:</p><ul class=""><li id="da8b" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jk jl jm by"><strong class="ip jj">Interests might not correspond to the tags for articles</strong>. In such cases, the query must be approximate and must string together many related tags, with an ever-growing list of items to include or exclude. For example, there is no single tag for the interest “Parents &amp; Families,” but instead many component tags. At the time of this writing, the query for “Parents &amp; Families” filters over a hundred different tags.</li>
<li id="66a7" class="in io dw ip b eu jn ir is ex jo iu iv iw jp iy iz ja jq jc jd je jr jg jh ji jk jl jm by"><strong class="ip jj">Query writing requires knowledge about how the tags are applied, and how they have been used over time.</strong> The guidelines for tagging Times articles date back to 1851 and require that articles are tagged as specifically as possible. For example, to query all movie content, one would need to know that from 1906–2013 articles about movies were tagged “Motion Pictures”; we now use “Movies.”</li>
<li id="584d" class="in io dw ip b eu jn ir is ex jo iu iv iw jp iy iz ja jq jc jd je jr jg jh ji jk jl jm by"><strong class="ip jj">Tags represent a literal topic, while interests often represent a nuanced interpretation of that topic based on context.</strong> For example, “Children” is one of the component tags that feeds the “Parents &amp; Families” interest. Yet, many stories that have children as their subject might get the tag, such as this news story about <a href="https://www.nytimes.com/2020/12/20/world/africa/tigray-ethiopia-sudan-refugees.html" class="cu js" target="_blank" rel="noopener">children who fled the conflict in the Tigray region of Ethiopia</a>. While that story does focus on children, it is not a good fit for an interest channel about parenting.</li>
</ul><p id="9824" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Algorithmic Recommendations — the team I interned with this past semester — was convinced there was a better way. We thought that if we could automatically detect whether an article fits in an interest by programmatically reading article text, we could move away from these cumbersome queries.</p><h2 id="2e30" class="jt ju dw bn bo jv jw ew jx jy jz ez ka fa kb fc kc fd kd ff ke fg kf fi kg kh by"><strong class="az">How it started: discovering hidden topics</strong></h2><p id="44c4" class="in io dw ip b eu ki ir is ex kj iu iv iw kk iy iz ja kl jc jd je km jg jh ji dp by">For years, the Algorithmic Recommendations team has been applying a variety of natural language processing models to rank and recommend relevant content.</p><p id="64eb" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">One of our longest-standing recommender algorithms is based on Latent Dirichlet Allocation, or LDA, which models each article as a mixture of underlying “topics.” To decide whether to recommend an article to a user, we compare the distribution of topics across the user’s reading history to the distribution of topics in the article. We call the distributions “topic vectors.” The closer the user’s and the article’s topic vectors are, the more likely we are to recommend the article.</p><p id="e585" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Unfortunately, we do not directly control which topics the LDA algorithm learns, only the number of topics. In LDA, topics are learned based on the co-occurrence of words across the documents. We have no way of guaranteeing that one of these topics corresponds to one of our established interests — or even that these topics are human-interpretable at all.</p><p id="3be0" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">In order to develop a representation of the interests that users sign up to follow, we needed a new model that associates articles with specific topics of our choosing.</p><h2 id="e1ea" class="jt ju dw bn bo jv jw ew jx jy jz ez ka fa kb fc kc fd kd ff ke fg kf fi kg kh by"><strong class="az">How it’s going: classifying explicit interests</strong></h2><p id="7fd3" class="in io dw ip b eu ki ir is ex kj iu iv iw kk iy iz ja kl jc jd je km jg jh ji dp by">We tackled this problem by building a machine-learning model that predicts interests based on the text of an article. This approach is known as “<a href="https://xang1234.github.io/multi-label/" class="cu js" target="_blank" rel="noopener">multi-label classification</a>” because each data point (in our case, an article) is classified into zero or more labels (or interest groups).</p><p id="295d" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">To create a training dataset of articles paired with interest labels, we used the existing hand-crafted queries, even though we knew they were imperfect and often miss articles that belong to the dataset.</p><figure class="hl hm hn ho hp hb dh di paragraph-image">
<figcaption class="ij ik dj dh di il im bn b ft cq cr">Some of the labels in this dataset are inaccurate due to imperfect queries.</figcaption></figure><p id="78c0" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">In the table above, the article about cuff links could very reasonably be recommended to a user who follows “Fashion &amp; Style,” but due to imperfect queries, the article is missing the correct label. Similarly, the article about buying jewelry on Instagram is labelled only “Business &amp; Technology” because it is missing the relevant tags to be labelled “Fashion &amp; Style.”</p><p id="5ab1" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Noisy labels can still be useful, as long as the model does not memorize and reproduce occasional inaccuracies in the training data.</p><p id="7e7f" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">To minimize the risk of inaccurate labels unduly influencing our model, we preferred small, simple models over large, complex ones, and we averaged predictions from multiple different models. We used an ensemble of logistic regression models: each model independently leverages its previously predicted labels to help predict the next label. This approach is known as an ensemble of classifier chains.</p><p id="a183" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Since our classifier models were relatively simple, we made sure to extract rich and expressive feature representations of articles for the classifiers to use. After many rounds of testing, we landed on a final representation with three components:</p><ol class=""><li id="f409" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji kp jl jm by">An LDA topic vector, as discussed above.</li>
<li id="e1ec" class="in io dw ip b eu jn ir is ex jo iu iv iw jp iy iz ja jq jc jd je jr jg jh ji kp jl jm by">A vector based on keywords: words that are unusually common in the article.</li>
<li id="1313" class="in io dw ip b eu jn ir is ex jo iu iv iw jp iy iz ja jq jc jd je jr jg jh ji kp jl jm by">A Universal Sentence Encoder embedding.</li>
</ol><p id="5342" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">The <a href="https://amitness.com/2020/06/universal-sentence-encoder/" class="cu js" target="_blank" rel="noopener">Universal Sentence Encoder,</a> or USE, is a neural network that transforms input text into a vector representation: texts that are close in meaning produce vectors that are <a href="http://www.offconvex.org/2018/06/17/textembeddings/" class="cu js" target="_blank" rel="noopener">close in distance</a>.</p><p id="0730" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">To encourage the model to encode semantic knowledge, the original researchers at Google trained it on tasks such as predicting Q&amp;A responses or inferring logical implications. It is one of the few models that is designed to handle longer-than-sentence-length inputs, making it handy for encoding our articles.</p><p id="c241" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">While the first USE model was trained on datasets pulled from Wikipedia and online discussion forums, we retrained our instance of the model on Times articles. Because The Times has been publishing journalism for nearly 170 years, we had plenty of content to fuel our dataset.</p><p id="5033" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Once we obtained these embeddings and combined them with the LDA and keyword vectors, we applied the classification model, which produced a probability score for each interest. We were able to establish a cut-off probability for each interest, and compare them to the query-based labels for evaluation.</p><h2 id="7505" class="jt ju dw bn bo jv jw ew jx jy jz ez ka fa kb fc kc fd kd ff ke fg kf fi kg kh by"><strong class="az">We win some, we misclassify some</strong></h2><p id="d719" class="in io dw ip b eu ki ir is ex kj iu iv iw kk iy iz ja kl jc jd je km jg jh ji dp by">As we suspected, the machine-learning model casts a wider net for each interest than the hand-crafted queries, and it returns more relevant articles.</p></div><div class="n p ab ac ae af ag du ai aj"><p id="c0bd" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">When we took a deeper look at a few of the incorrect labels, we could often understand <em class="ks">why</em> the model assigned the label, but saw that correcting the mistake requires human judgement. It takes knowledge of history and society, as well as the ability to recognize context to intuit that some articles are better suited for some interest categories than others.</p><h2 id="b78d" class="jt ju dw bn bo jv jw ew jx jy jz ez ka fa kb fc kc fd kd ff ke fg kf fi kg kh by"><strong class="az">Building human-in-the-loop workflows</strong></h2><p id="32e1" class="in io dw ip b eu ki ir is ex kj iu iv iw kk iy iz ja kl jc jd je km jg jh ji dp by">We came to realize that even though our model outperforms the existing query-based system in many ways, it would be irresponsible to let it curate interests without human oversight.</p><p id="2488" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Readers trust The Times to curate content that is relevant to them, and we take this trust seriously. This algorithm, like many other AI-based decision-making systems, should not make the final call without human oversight.</p><p id="0fa9" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">This interest classifier is already in use as one of a number of inputs our algorithms use to calculate article recommendations.</p><p id="fcca" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Looking forward, we intend to set up a collaborative editor-in-the-loop workflow with the newsroom and incorporate this algorithm further into our personalized products.</p><p id="3295" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">With more precise recommendation algorithms and editorial oversight, we can offer readers better reading experiences across the wide range of content that The Times produces every day.</p></div>]]></description>
      <link>https://open.nytimes.com/we-recommend-articles-with-a-little-help-from-our-friends-machine-learning-and-reader-input-e17e85d6cf04</link>
      <guid>https://open.nytimes.com/we-recommend-articles-with-a-little-help-from-our-friends-machine-learning-and-reader-input-e17e85d6cf04</guid>
      <pubDate>Thu, 14 Jan 2021 19:30:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Jessie Wu, Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="03c6" class="et bx dw bn b eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj cr">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fk n fl fm fn fo"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----f31264d400bb--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fp fq fr" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fs aj s"><p><a class="cu cv av aw ax ay az ba bb bc fx bf cy cz" rel="noopener" href="https://open.nytimes.com/meeting-jessie-wu-software-engineer-at-the-new-york-times-f31264d400bb?source=post_page-----f31264d400bb--------------------------------">Jan 7</a> · 4 min read</p></div></div></div><figure class="hc hd he hf hg hh dh di paragraph-image">
<figcaption class="hz ia dj dh di ib ic bn b ft cq cr">Illustration by Claire Merchlinsky</figcaption></figure><p id="ab54" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your name?<br /></strong>Jessie Wu</p><p id="3205" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What are your pronouns?<br /></strong>She/Her</p><p id="9283" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your job?<br /></strong>I’m a full-stack engineer with a focus in UX engineering for the Care Platforms team.</p><p id="3ed6" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What does that mean?<br /></strong>The Care Platforms team works on the customer relationship management, or CRM, software that our call center agents use for customer accounts, as well as the interactive voice response system behind 1–800-NYTIMES.</p><p id="04a6" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by">As a full-stack engineer, I focus on converting designs to code, building out our design system, optimizing the workflows between design, dev and business, and I advocate for our users.</p><p id="67d1" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">How long have you been at The Times?<br /></strong>A little over a year.</p><p id="b87d" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>Crown Heights, Brooklyn, a neighborhood where people still say hi to each other in passing.</p><p id="be46" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">How do you start your day?<br /></strong>I start with a heavy breakfast and a quick meditation to mentally prepare for the day.</p><p id="40bc" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is something you’ve worked on recently?<br /></strong>The Care team just started a diversity, equity and inclusion working group to complement the DEI efforts being done by the wider Times company. and I am working on strategies for hiring and sourcing opportunities to diversify our pipeline and career management within our team. It is at a very grassroots level and I am grateful we have the support from our team leads.</p><p id="2686" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>My team and I received a Publisher’s Award last year for building the automated phone system for 1–800-NYTIMES. I learned how to build chatbots with Amazon Web Services, and I will never look at bots, voice-activated smart devices or calling customer service the same way again.</p><p id="941d" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What was your first job?<br /></strong>I was 10 when I started working at my parents’ restaurant. I went from packing to-gos to running the restaurant over the span of 16 years. In 2018, I was able to take a two-week vacation; it was the first one I’d taken since I was a kid.</p><p id="7d1a" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is something most people don’t know about you?<br /></strong>I took wheelchair dancing classes when I worked with people with disabilities. I used to take multiple trips driving this large cargo van to transport everyone to the studio where we would learn how to dance salsa and ballroom.We learned how to take the lead and maneuver around our dancing partners in wheelchairs. I was not very good at it; I was much better at driving the cargo van.</p><p id="f280" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your secret to career success?<br /></strong>Invest in yourself: take advantage of education stipends, take initiative for career development and take care of your mental well-being.</p><p id="5055" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by">Invest in your team because when your colleagues succeed, so do you. Bring the best out of everyone and see their potential. When you treat people with respect you open up opportunities and referrals down the line. My favorite quote by Maya Angelou is, “I’ve learned that people will forget what you said, people will forget what you did, but people will never forget how you made them feel.”</p><p id="7bda" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your superpower?<br /></strong>I am very fast at making Slack emojis and gifs of my team members.</p><p id="a4bb" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What are you inspired by?<br /></strong>There have been a few conference talks that changed my perspective and shaped who I am today. <a href="https://yougotthis.io/talks/lending-privilege/" class="cu ja" rel="noopener">Anjuan’s Lending Privilege</a> made me realize being privileged doesn’t necessarily have to be a bad thing; use your privilege to lift others up with you. The other one is <a href="https://twitter.com/bdougieYO" class="cu ja" rel="noopener">bdougie’s Swift vs. React Native talk</a> where he compared the two languages to Taylor Swift and Kanye West. Since then, I tend to gravitate towards using analogies and gifs in my presentations.</p><p id="88eb" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">Name one thing you’re excited about right now.<br /></strong>I am really into the Buy Nothing movement and similar local Facebook groups where people in your neighborhood give or lend each other things for free. Someone gave me their 100-percent silk Chinese comforter that reminded me of my childhood. I’ve seen posts looking for things like loft beds and people have actually replied saying they have one that they are happy to give away! Someone even lent me their steam mop once.</p><p id="6188" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your best advice for someone starting to work in your field?<br /></strong>Learn how to ask for help efficiently: explain the task you’re trying to accomplish, the steps you took, what you think the possible solutions are and where you are stuck. By looking into possible approaches, you’re doing half of the work for the other person.</p><p id="c215" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by">Also, when it comes to debugging CSS for layouts and styling in general, it helps to add background colors or borders around elements to better understand their relationship to each other.</p>]]></description>
      <link>https://open.nytimes.com/meeting-jessie-wu-software-engineer-at-the-new-york-times-f31264d400bb</link>
      <guid>https://open.nytimes.com/meeting-jessie-wu-software-engineer-at-the-new-york-times-f31264d400bb</guid>
      <pubDate>Thu, 07 Jan 2021 17:39:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[A Year in Illustration]]></title>
      <description><![CDATA[<section class="dp dq dr ds dt"><div class="n p ab ac ae af ag du ai aj"><div class="fk n fl fm fn fo"><div class="o n"><div><a href="https://medium.com/@jason.fujikuni?source=post_page-----d23ed37f1831--------------------------------" rel="noopener"><img alt="Jason Fujikuni" class="s fp fq fr" src="https://miro.medium.com/fit/c/96/96/1*Ftmz0hPbG2AKIYS532g8cw.jpeg" width="48" height="48" /></a></div><div class="fs aj s"><p><a class="cu cv av aw ax ay az ba bb bc fx bf cy cz" rel="noopener" href="https://open.nytimes.com/a-year-in-illustration-d23ed37f1831?source=post_page-----d23ed37f1831--------------------------------">Dec 21</a> · 3 min read</p></div></div></div><p id="44fe" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><strong class="hd hx">By Jason Fujikuni</strong></p></div><div class="n p ab ac ae af ag du ai aj"><p id="95d6" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">As the art director for NYT Open, I have the privilege of working with artists and designers from all over the world to illustrate for The New York Times. Every piece that is published on Open is led by a unique illustration that is commissioned specifically for that article — and sometimes our articles have <a class="cu iv" rel="noopener" href="https://open.nytimes.com/innovating-from-home-maker-week-at-the-new-york-times-50ecfa38aca1">a closing illustration</a>, too. At The New York Times, we use illustration to add layers of humanity and emotion, and to convey ideas that build upon our articles through visual metaphor, narrative storytelling and thoughtful design.</p><p id="3b5d" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">At Open, our approach to illustration is conceptual. Before I assign an illustration, I talk with Sarah Bures, Open’s editor, about the ideas behind the article; I then think about ways to complement those ideas with the unique voice of an outside artist.</p><p id="f5ea" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">When we’re ready to assign an illustration, I look for not just a technical hand to illustrate our ideas, but a conceptual partner who can bring their own perspective to the piece. I like to hire artists who have never worked with The Times because they bring diverse visual approaches and voices to the column.</p><p id="8515" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">This year as we adapted to the <a class="cu iv" rel="noopener" href="https://open.nytimes.com/how-the-new-york-times-works-from-home-e86be507a707">new normal of working from home</a>, we published 38 articles, including a new interview series called “<a class="cu iv" rel="noopener" href="https://open.nytimes.com/meeting-shay-culpepper-software-engineer-at-the-new-york-times-5dedb47389fe">Meeting…</a>,” which is illustrated by Claire Merchlinsky and features Times colleagues from different parts of the company.</p><p id="4781" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Reflecting on a year like no other, we chose five memorable pieces to highlight from 2020.</p></div></section><section class="dp dq dr ds dt"><div class="hy n p jd je jf jg jh ji af jj ag jk ai aj"><figure class="hz ia ib ic id hy jm jn paragraph-image">
<figcaption class="jo jp dj dh di jq jr bn b ft cq cr"><strong class="bn js">Agnes Lee</strong>, <a class="cu iv" rel="noopener" href="https://open.nytimes.com/what-the-new-york-times-metropolitan-diary-taught-its-illustrator-about-new-york-195686a4852d">“What The New York Times Metropolitan Diary Taught Its Illustrator about New York”</a>, Feb. 6</figcaption></figure></div><div class="n p ab ac ae af ag du ai aj"><p id="d1bf" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">In our first visually driven piece on Open, <a href="https://ahjlee.com/" class="cu iv" rel="noopener">Agnes</a> describes her process and findings illustrating the weekly “Metropolitan Diary” column — applying her characteristic grease pencil and charm that bring the column to life.</p></div></section><section class="dp dq dr ds dt"><div class="hy n p jd je jf jg jh ji af jj ag jk ai aj"><figure class="hz ia ib ic id hy jm jn paragraph-image">
<figcaption class="jo jp dj dh di jq jr bn b ft cq cr"><strong class="bn js">Annie Jen</strong>, <a class="cu iv" rel="noopener" href="https://open.nytimes.com/a-new-look-for-the-morning-newsletter-36bb135b5c79">“A New Look for ‘The Morning’ Newsletter”</a>, May 5</figcaption></figure></div><div class="n p ab ac ae af ag du ai aj"><p id="7b52" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><a href="https://anniejen.com/" class="cu iv" rel="noopener">Annie</a> captures the hustle-bustle of both our internal teams working on “The Morning” (from home) and subscribers reading the newsletter in their morning routine in this dynamic, visual orchestra.</p></div></section><section class="dp dq dr ds dt"><div class="hy n p jd je jf jg jh ji af jj ag jk ai aj"><figure class="hz ia ib ic id hy jm jn paragraph-image">
<figcaption class="jo jp dj dh di jq jr bn b ft cq cr"><strong class="bn js">Suzie Shin,</strong> <a class="cu iv" rel="noopener" href="https://open.nytimes.com/from-print-to-digital-making-over-a-million-archived-photos-searchable-b146037705d2">“From Print to Digital: Making Over a Million Archived Photos Searchable”</a>, May 21</figcaption></figure></div><div class="n p ab ac ae af ag du ai aj"><p id="e806" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Archival imagery becomes modern in the bold compositions made by <a href="https://suzieshin.com/" class="cu iv" rel="noopener">Suzie</a> using photographs from The New York Times archive.</p></div></section><section class="dp dq dr ds dt"><div class="hy n p jd je jf jg jh ji af jj ag jk ai aj"><figure class="hz ia ib ic id hy jm jn paragraph-image">
<figcaption class="jo jp dj dh di jq jr bn b ft cq cr"><strong class="bn js">Wren McDonald</strong>, <a class="cu iv" rel="noopener" href="https://open.nytimes.com/how-the-new-york-times-technology-teams-prepared-for-the-2020-election-3928ce7f923c">“How the New York Times Technology Teams Prepared for the 2020 Election”</a>, November 12</figcaption></figure></div><div class="n p ab ac ae af ag du ai aj"><p id="ffc2" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><a href="https://wrenmcdonald.com/" class="cu iv" rel="noopener">Wren’s</a> piece expresses the prolonged sense of anticipation and anxiety as readers around the world tuned in to the United states presidential election results this year.</p></div></section><section class="dp dq dr ds dt"><div class="hy n p jd je jf jg jh ji af jj ag jk ai aj"><figure class="hz ia ib ic id hy jm jn paragraph-image">
<figcaption class="jo jp dj dh di jq jr bn b ft cq cr"><strong class="bn js">Braulio Amado</strong>, <a class="cu iv" rel="noopener" href="https://open.nytimes.com/finding-the-right-words-491b93b8b668">“Finding the Right Words”</a>, November 19</figcaption></figure></div><div class="n p ab ac ae af ag du ai aj"><p id="ab6b" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">The simplicity of <a href="https://badbadbadbad.com/" class="cu iv" rel="noopener">Braulio’s</a> typographic solution captures the move away from problematic language into an inclusive world of new possibilities.</p></div></section><section class="dp dq dr ds dt"><div class="n p ab ac ae af ag du ai aj"><p id="c207" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><em class="ju">Jason Fujikuni is an art director at The New York Times.</em></p></div></section>]]></description>
      <link>https://open.nytimes.com/a-year-in-illustration-d23ed37f1831</link>
      <guid>https://open.nytimes.com/a-year-in-illustration-d23ed37f1831</guid>
      <pubDate>Mon, 21 Dec 2020 16:19:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[To Serve Better Ads, We Built Our Own Data Program]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag du ai aj"><h2 id="11ae" class="et bx dw bn b eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj cr">The New York Times launched an advertising data program for our direct-sold ads business that uses our own data and data science techniques.</h2><div class="fk n fl fm fn fo"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----c5e039bf247b--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fp fq fr" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fs aj s"><p><a class="cu cv av aw ax ay az ba bb bc fx bf cy cz" rel="noopener" href="https://open.nytimes.com/to-serve-better-ads-we-built-our-own-data-program-c5e039bf247b?source=post_page-----c5e039bf247b--------------------------------">Dec 17</a> · 5 min read</p></div></div></div><p id="5477" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><strong class="hd hx">By Pranay Prabhat</strong></p></div><div class="n p ab ac ae af ag du ai aj"><p id="c843" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">When you browse the internet, the majority of the ads that you see are served by one or more ad technology providers that traffic in behavioral and demographic data collected from users. These third-party vendors, as they are often called, use that data to inform which ads are shown to specific audiences.</p><p id="560e" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">There are two types of ads that appear on the web: <a href="https://www.youtube.com/watch?v=-Glgi9RRuJs" class="cu iz" rel="noopener">programmatic</a> ads and direct-sold ads. For the direct-sold ads business, publishers almost always rely on a Data Management Platform, or DMP, to support audience targeting. DMPs typically use third-party cookies in the user’s browser to be able to match what they already know about a user and then help their publishers build further on that data by ingesting behavioral events as users browse their site or mobile apps.</p><p id="b4ef" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Over the past couple of years, there has been a shift away from relying on third party data because of the risk to user privacy. Legislation like G.D.P.R. in Europe and the C.C.P.A in California have begun to shape how websites handle user data, including to what extent ad-tech software can use third-party cookies. Similarly, the recent move by popular browsers like Safari, Firefox and Chrome to block the use of third-party cookies has pushed the advertising industry to find alternatives that can serve relevant ads while also respecting user privacy.</p><p id="e2a6" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">In June of 2020, The New York Times launched an advertising data program for our direct-sold ads business that uses our own data and data science techniques. This first-party program is our answer to the shifting landscape of online advertising data and part of <a class="cu iz" rel="noopener" href="https://open.nytimes.com/how-the-new-york-times-thinks-about-your-privacy-bc07d2171531?gi=d7b5a48879a3">our move to better protect our readers’ privacy</a>. Our program doesn’t rely on third-party data or cookies, but instead focuses only on what readers do on our site and mobile apps.</p><p id="37aa" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">While DMPs are capable of providing additional solutions that work without third-party cookies, The Times opted to build an in-house solution so we could control our data and audience targeting, and be flexible as requirements change.</p><p id="6472" class="hb hc dw hd b eu jv hf hg ex jw hi hj hk jx hm hn ho jy hq hr hs jz hu hv hw dp by">The entire functionality was handled via three streams of work that were closely connected.</p><h2 id="b865" class="ka jb dw bn bo kb kc ew je kd ke ez jh fa kf fc jl fd kg ff jp fg kh fi jt ki by"><strong class="az">Data Science</strong></h2><p id="6871" class="hb hc dw hd b eu jv hf hg ex jw hi hj hk jx hm hn ho jy hq hr hs jz hu hv hw dp by">Over the past several years, The Times has built an analytics system to capture millions of behavioral events across our website and mobile apps. Since we use Google Cloud Platform as a cloud services provider, we picked Google Cloud Dataflow to stream these events in near real-time into Google BigQuery. All the events data is then batch processed and fed into multiple machine-learning models that were built by Times data scientists specifically for this advertising program.</p><p id="22e3" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">The machine-learning models are primarily based on detailed survey responses from our readers. Tens of thousands of readers volunteered to participate in the survey with the explicit messaging that the information gathered would be used to improve advertising at The Times. Our data science colleagues were able to use the survey data, along with our digital engagement event data, to train models that accurately predict the segment a user falls into. Each segment called for different supervised learning approaches (including regression, ranking, classification and multiclass classification) to make sure we have results which are statistically predictive as well as interpretable.</p><h2 id="edb1" class="ka jb dw bn bo kb kc ew je kd ke ez jh fa kf fc jl fd kg ff jp fg kh fi jt ki by"><strong class="az">Data Insights and Transformation</strong></h2><p id="f6e1" class="hb hc dw hd b eu jv hf hg ex jw hi hj hk jx hm hn ho jy hq hr hs jz hu hv hw dp by">The output of these machine-learning models are pushed into a set of BigQuery tables that are orchestrated using Airflow. In order to build a more comprehensive user portfolio, the Airflow orchestration also includes many other behavioral data points in addition to our machine-learning models. Millions of rows in these BigQuery tables are then pushed into our activation system using a suite of technologies from Google.</p><h2 id="2fdf" class="ka jb dw bn bo kb kc ew je kd ke ez jh fa kf fc jl fd kg ff jp fg kh fi jt ki by"><strong class="az">Data Activation and Ads Targeting</strong></h2><p id="aec4" class="hb hc dw hd b eu jv hf hg ex jw hi hj hk jx hm hn ho jy hq hr hs jz hu hv hw dp by">Our activation systems are highly scalable Go microservices that rely on Google Cloud Memorystore to cache all of the user data we collect. Whenever a user visits a Times page on the web or in one of our mobile apps, a call is made to these microservices and ad targeting data is pushed into the page with an average latency of less than 100ms. Once the user data is on the page, a JavaScript ads framework reads and passes this data into the ad server. The ad server finds the most relevant ad campaign and serves it back when the targeting criteria of the campaign matches the data passed from the page.</p><p id="b178" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Because the processing and data activation happens on the server side, we were easily able to scale to all browsers, including Safari and Firefox, and to our mobile apps. Server-side processing is especially important to keep our front-end web and mobile apps lighter and faster.</p><p id="3c36" class="hb hc dw hd b eu jv hf hg ex jw hi hj hk jx hm hn ho jy hq hr hs jz hu hv hw dp by">Since we launched our program in June, our observation is that ad campaigns targeted on the first-party data perform equally well as campaigns targeted on third-party data. We’ve been able to target on all platforms and browsers, regardless of their current state of cookies and tracking, which provides us additional scale. Because we exclusively control the data, we are better able to protect our readers’ privacy while they navigate our site and apps. This leads us to believe that first-party data is a proven alternative for audience targeting.</p><p id="63ed" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">The primary focus of this program has been our direct-sold ads business. Programmatic ads are an important part of our ads business, and we hope to make improvements as a separate stream of work with a focus on experimenting and testing different solutions being proposed in the AdTech industry which could replace third party cookies. To help shape the conversation around new standards for programmatic advertising in the coming years, we joined the Improving Web Advertising Business Group run by W3C.</p><p id="9f07" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">We will keep investing in how to expand this program by making user data processing more real-time, improve the machine-learning models and find ways to further enrich our contextual and audience data while keeping user privacy as the highest priority.</p></div>]]></description>
      <link>https://open.nytimes.com/to-serve-better-ads-we-built-our-own-data-program-c5e039bf247b</link>
      <guid>https://open.nytimes.com/to-serve-better-ads-we-built-our-own-data-program-c5e039bf247b</guid>
      <pubDate>Thu, 17 Dec 2020 20:22:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Steven Nedlin, Data Engineering Director at The New York Times]]></title>
      <description><![CDATA[<h2 id="a095" class="et bx dw bn b eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj cr">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</h2><div class="fk n fl fm fn fo"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----1a66ee05bca4--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fp fq fr" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fs aj s"><p><a class="cu cv av aw ax ay az ba bb bc fx bf cy cz" rel="noopener" href="https://open.nytimes.com/meeting-steven-nedlin-data-engineering-director-at-the-new-york-times-1a66ee05bca4?source=post_page-----1a66ee05bca4--------------------------------">Dec 16</a> · 5 min read</p></div></div></div><figure class="hc hd he hf hg hh dh di paragraph-image">
<figcaption class="hz ia dj dh di ib ic bn b ft cq cr">Illustration by Claire Merchlinsky</figcaption></figure><p id="a3fb" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your name?<br /></strong>Steven Nedlin</p><p id="832e" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What are your pronouns?<br /></strong>He/Him</p><p id="fd58" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your job?<br /></strong>I’m an engineering director in Data Engineering, and the engineering lead of the Transformation and Records group in the Data Platforms mission.</p><p id="6e63" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What does that mean?<br /></strong>I manage the data engineers and database administrators who build and support several critical databases, data systems, data APIs and data engineering tools at The Times. I have managed the Database Reliability team for my entire Times tenure.</p><p id="903c" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">How long have you been at The Times?<br /></strong>This August marked my 10th year at The Times. A decade! I’m so proud of this milestone!</p><p id="449d" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I’m working from my summer-now-turned-semi-permanent home with my husband, Patrick, and our dog, Tory, on the Jersey shore in Asbury Park.</p><p id="8740" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">How do you start your day?<br /></strong>Every day starts with a nice walk with Tory. I put in my AirPods and usually listen to news programming like “The Daily,” but lately I’ve been listening to Italian pop songs and mouthing the lyrics as I walk. People must think I am crazy!</p><p id="84dc" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is something you’ve worked on recently?<br /></strong>Earlier this year after we all started working from home, I was chosen to be part of the Digital Operations Sounding Board, a group created to find ways to support Times employees as they work from home during the pandemic. It gave me the opportunity to offer a suggestion that the company sponsor a single day where there are no meetings so everyone can focus on work of their choosing. The very next week, we announced “No-Meeting Fridays” at the end of every month.</p><p id="8ee7" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>I’m incredibly proud to have been a part of the first cohort of the Times Sponsorship program in 2018. It allowed me to connect with senior leaders in all corners of the company; I learned so much about myself and how much I value empathy and inclusiveness in our company’s culture. I went on to champion these values along with a group of other like-minded peers to create the Communication and Conduct Guide for Technology in 2019.</p><p id="6a7e" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What was your first job?<br /></strong>My first job was as a copy editor for baseball cards for the Topps Company. They took a chance on a young writer who happened to know nothing about sports (and still doesn’t), but loved English and grammar. They quickly realized I had no talent in sports and gave me an opportunity to work on their e-commerce team to test quality assurance for their new website and it started my entire career in technology.</p><p id="27f6" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is something most people don’t know about you?<br /></strong>I am a major Tori Amos fan! (Yes, my dog is named after her.) I have seen her play live at hundreds of concerts and when she tours, I like to travel to different cities to see her play. It is one thing I’m very much looking forward to once the pandemic ends.</p><p id="f5fc" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your secret to career success?<br /></strong>My secret to career success is three-fold: always bring your authentic self to what you do (and tell that inner saboteur to stay quiet and let you be you); stay honest with yourself and with others; be prepared to put in some hard work and you’ll reap the rewards.</p><p id="1882" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your superpower?<br /></strong>I am an autodidact. I’ve taught myself many things in life, including engineering and database administration. I’ve learned several foreign languages on my own, including most recently Italian (listening to songs in a foreign language is one of the best ways to learn language nuances!). But I’m most proud of teaching myself to play piano — I channeled all of my Tori Amos fandom into learning the craft of pop-piano performance. I play pop music, lots of Broadway and even some Chopin!</p><p id="ed59" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What are you inspired by?<br /></strong>I learned an important lesson this year in an unexpected way. In May, during the height of the pandemic, I had to travel to Florida to take care of my father who unfortunately passed away from lung cancer by the month’s end. During his home care, I assisted his hospice nurse with all of her duties, many of which required two people. In this work we bonded, perhaps a bit reluctantly, knowing full well that we would be connected for only a short time. She likely has met hundreds of families in her career and has seen it all at the end of life. But with her help, I learned that it’s not useful to fear what’s to come, and if we focus our energy instead on caring for one another, we can get through even the toughest of times.</p><p id="4857" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by">I am inspired by those who show kindness and care deeply for one another in so many different ways. This made me realize that in this difficult year we may be the most distant from one other, in truth we are all actually as close as ever.</p><p id="6fc4" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">Name one thing you’re excited about right now.<br /></strong>I’m excited for 2020 to be over! Seriously, how can one year be so challenging!? I often remind myself that it’s through these tough times that we become better people. Life may seem off the rails, but we will emerge stronger for having lived through it.</p><p id="c150" class="id ie dw if b eu ig ih ii ex ij ik il im in io ip iq ir is it iu iv iw ix iy dp by"><strong class="if iz">What is your best advice for someone starting to work in your field?<br /></strong>Be kind to yourself, and stay honest with yourself and others. Everyone has their own journey and all you need to do is be open to it and it will take you where you need to go.</p>]]></description>
      <link>https://open.nytimes.com/meeting-steven-nedlin-data-engineering-director-at-the-new-york-times-1a66ee05bca4</link>
      <guid>https://open.nytimes.com/meeting-steven-nedlin-data-engineering-director-at-the-new-york-times-1a66ee05bca4</guid>
      <pubDate>Wed, 16 Dec 2020 16:53:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Shay Culpepper, Software Engineer at The New York Times]]></title>
      <description><![CDATA[<h2 id="9dfd" class="et bx dw bn b eu ev ew ex ey ez fa fb fc fd fe ff fg fh fi fj cr"><em class="fk">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</em></h2><div class="fl n fm fn fo fp"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----5dedb47389fe--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fq fr fs" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="ft aj s"><p><a class="cu cv av aw ax ay az ba bb bc fy bf cy cz" rel="noopener" href="https://open.nytimes.com/meeting-shay-culpepper-software-engineer-at-the-new-york-times-5dedb47389fe?source=post_page-----5dedb47389fe--------------------------------">Dec 3</a> · 5 min read</p></div></div></div><figure class="hd he hf hg hh hi dh di paragraph-image">
<figcaption class="ia ib dj dh di ic id bn b fu cq cr">Illustration by Claire Merchlinsky</figcaption></figure><p id="368f" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is your name?<br /></strong>Shay Culpepper</p><p id="4fdc" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What are your pronouns?<br /></strong>She/Her</p><p id="27f5" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is your job?<br /></strong>Software Engineer</p><p id="5967" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What does that mean?<br /></strong>I work on tracking and analytics for our home screen, both on our website and our mobile apps. Right now, I’m building a dashboard so the newsroom can monitor click-through rates on the home screen.</p><p id="dd00" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">How long have you been at The Times?<br /></strong>Almost a year and half.</p><p id="c1de" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I’m working from a little makeshift desk next to my bed from my apartment in Morningside Heights, a neighborhood in Manhattan. It’s one of those cheap IKEA desks. I took two of the legs off and it rests on my windowsill.</p><p id="2a40" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">How do you start your day?<br /></strong>I’m a Texan, so the most important thing I do every morning is make a giant glass of iced tea. It is just Lipton tea over ice and it is delicious. The next most important thing I do is pick out a dress and loud earrings for the day.</p><p id="8f71" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by">Once I’m ready to work, I look over the paper planner that I use to keep meeting notes, a to-do list and most importantly: my daily wins. I like to check in the morning to make sure I have written down something I’m proud of from the day before. Next, I look over the to-do list items that haven’t been checked off yet. Then I check my google calendar for what meetings I have for the day. The most important step is then planning what tasks I will complete in specific blocks of time (Thank you to my colleague Carolyn Price for this tip).</p><p id="7d35" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is something you’ve worked on recently?<br /></strong>Lately my team, Core Product Data, has been working with the data visualization team to rethink how we build dashboards for the newsroom. We have been sketching out the architecture for a completely new platform that would allow teams to quickly and easily build new dashboards. I find creating projects from the ground up fun because you end up getting to do a lot of research.</p><p id="e47b" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>This isn’t part of my core job responsibilities, but I’m very proud of the work I have done through Women in Tech as part of the leadership committee. Women in Tech is an internal task force at The Times that works to improve diversity and equity in recruiting, retainment and advancement.</p><p id="f7a2" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by">My teammate Shelly Seroussi and I launched a buddy program for new employees in technology. We match new employees with veteran staffers to help them network across the organization and acclimate to Times culture. The buddies meet regularly for the first three months the new hire is on staff.</p><p id="f657" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What was your first job?<br /></strong>I served fried chicken at a place called Chicken Express. I had access to so much fried okra. I love okra in all of its forms, but fried is truly the best.</p><p id="1d22" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is something most people don’t know about you?<br /></strong>All three of my brothers are engineers, my mom is an IT administrator and my dad is a scrum master. We all got into tech by very different paths, and it is fun to share tech as a family. I like to think of us as “The Developeppers,” but that name sadly hasn’t caught on.</p><p id="b0c1" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is your secret to career success?<br /></strong>Beyond luck, privilege and working hard, I like to think I owe most of my success to radically being myself and opening space for others to be their full selves. This means being upfront and honest about my weaknesses, and it has meant being upfront about my mental health. The fact that I’m bi-polar doesn’t come up too often, but I have found that being willing to talk about it breaks down barriers. I have had several colleagues open up to me about their own journeys as a result. Being upfront also means owning mistakes and apologizing: I made some bad calls during a big project last year, which made the project stressful for my entire team. I had to own that, apologize and spend time doing the work to be better during future projects.</p><p id="b29a" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by">I also like to open up spaces for one-on-one communication with my teammates. Sometimes that’s coffee, sometimes that’s small silly Slack conversations and sometimes it is virtual hang outs after work. Being intentional about developing relationships helps you build trust and your work will be better for it.</p><p id="5c1e" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by">I should also note that a lot of this isn’t possible without taking care of myself. While companies might offer support healthcare and paid time off, they can’t <em class="jb">make</em> me take those days off and they can’t <em class="jb">make</em> me go to the doctor. I have to take care of myself and my mental health. No one can do that for me.</p><p id="8545" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is your superpower?<br /></strong>I can whip up very silly presentations in a bind.</p><p id="548c" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What are you inspired by?<br /></strong>Times journalism and my colleagues keep me going every day. I’m constantly pinching myself. I count myself very lucky to be part of an organization that produces such excellent journalism.</p><p id="5d0e" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">Name one thing you’re excited about right now.<br /></strong>I’m pursuing a master’s degree in Data Analysis and Visualization at The Graduate Center, which is part of City University of New York. Next semester, I have a data visualization course that is studio style, meaning there will be lots of critique. I’m excited because there is nothing as helpful as feedback when it comes to visualizations: you need to know if your audience understands your intended message.</p><p id="056d" class="ie if dw ig b eu ih ii ij ex ik il im in io ip iq ir is it iu iv iw ix iy iz dp by"><strong class="ig ja">What is your best advice for someone starting to work in your field?<br /></strong>For your first job, just try to get your foot in the door somewhere. Working at the big companies can come later; Once you have a couple of years under your belt, a lot opens up for you. Where you worked is less important than what you worked on.</p>]]></description>
      <link>https://open.nytimes.com/meeting-shay-culpepper-software-engineer-at-the-new-york-times-5dedb47389fe</link>
      <guid>https://open.nytimes.com/meeting-shay-culpepper-software-engineer-at-the-new-york-times-5dedb47389fe</guid>
      <pubDate>Thu, 03 Dec 2020 15:29:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Traffic, Turkey and No-Knead Bread]]></title>
      <description><![CDATA[<pre>upstream request timeout</pre>]]></description>
      <link>https://open.nytimes.com/traffic-turkey-and-no-knead-bread-e3d5f54e15f</link>
      <guid>https://open.nytimes.com/traffic-turkey-and-no-knead-bread-e3d5f54e15f</guid>
      <pubDate>Mon, 23 Nov 2020 17:30:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Finding the Right Words]]></title>
      <description><![CDATA[<section class="dp dq dr ds dt"><div class="n p ab ac ae af ag du ai aj"><div class="fk n fl fm fn fo"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----491b93b8b668--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fp fq fr" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fs aj s"><p><a class="cu cv av aw ax ay az ba bb bc fx bf cy cz" rel="noopener" href="https://open.nytimes.com/finding-the-right-words-491b93b8b668?source=post_page-----491b93b8b668--------------------------------">Nov 19</a> · 4 min read</p></div></div></div><p id="bc7a" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><strong class="hd hx">By Sarah Duncan</strong></p><figure class="hz ia ib ic id ie dh di paragraph-image">
<figcaption class="iw ix dj dh di iy iz bn b ft cq cr">Illustration by Bráulio Amado</figcaption></figure><p id="e923" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Words have meaning. This statement shouldn’t be a surprise coming from The New York Times, but for the technology industry at large, it’s something that has been increasingly discussed in recent years.</p><p id="0f26" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Whether it’s terminology like “master” or “blacklist,” words with harmful connotations have been baked into tech communication for decades. Words like these bring with them the weight of slavery and discrimination, and signal that those who have held power in the tech industry have had the privilege to ignore the impact of these antiquated terms. People of color are still underrepresented in tech, and the industry’s continued use of these terms acts in direct opposition to an inclusive and equitable culture.</p><p id="6891" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">However, tech culture is changing. In 2014, <a href="https://www.drupal.org/node/2286193" class="cu ja" rel="noopener">Drupal replaced “master” and “slave” with “primary” and “replica.”</a> Then, in 2018, Python <a href="https://www.vice.com/en_us/article/8x7akv/masterslave-terminology-was-removed-from-python-programming-language" class="cu ja" rel="noopener">adopted new terminology</a> such as “worker” and “helper.” More recently, Github <a href="https://github.com/github/renaming" class="cu ja" rel="noopener">announced</a> that they would permanently change their default naming conventions for initial repository branches from “master” to “main.”</p><p id="8535" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">Like many other organizations, The Times is re-examining the language we use to be more mindful of how we describe our technology. With the support of our technology leadership and product stakeholders, a group of Times engineers and product designers wrote a set of guidelines for our own naming conventions.</p><p id="6fe4" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">We are sharing them here with the hope that advocating for these changes adds to the momentum we’ve seen in the technology industry to create a safe and inclusive culture for all.</p><p id="99dc" class="hb hc dw hd b eu jw hf hg ex jx hi hj hk jy hm hn ho jz hq hr hs ka hu hv hw dp by"><strong class="hd hx">Alternate terminology to replace “master/slave”</strong></p><ul class=""><li id="5445" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw kb kc kd by"><strong class="hd hx">Primary:</strong> This denotes the database that is the source of truth.</li>
<li id="aea2" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Standby:</strong> A Standby serves as a replica that follows the state of the Primary database.</li>
</ul><p id="6c10" class="hb hc dw hd b eu jw hf hg ex jx hi hj hk jy hm hn ho jz hq hr hs ka hu hv hw dp by"><strong class="hd hx">Alternate terminology to replace “master”</strong></p><ul class=""><li id="f82f" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw kb kc kd by"><strong class="hd hx">Primary:</strong> This communicates prioritized, shared content. It is a source of truth.</li>
<li id="3a15" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Base:</strong> This communicates a source or template from which other items can be derived.</li>
<li id="d384" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Main:</strong> This communicates order or hierarchy, especially in navigation or information architecture contexts.</li>
<li id="8500" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Original:</strong> This communicates the first instance of something or the origin of a copy.</li>
<li id="648f" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Source:</strong> This is similar to “base” or “original” and can serve either purpose.</li>
<li id="0362" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Central Plan / North Star:</strong> These will replace terms like “Master Plan” in contexts where they are needed.</li>
</ul><p id="1374" class="hb hc dw hd b eu jw hf hg ex jx hi hj hk jy hm hn ho jz hq hr hs ka hu hv hw dp by"><strong class="hd hx">Alternates terminology to “master” and “slave”</strong></p><ul class=""><li id="da61" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw kb kc kd by"><strong class="hd hx">Controller, Manager, Mediator:</strong> This references an object that distributes tasks or encapsulates how a set of objects interact. This is the Mediator in the Mediator Design Pattern, commonly used to coordinate between different workers as described in this <a href="https://sourcemaking.com/design_patterns/mediator" class="cu ja" rel="noopener">Dive into Design Patterns</a>.</li>
<li id="bf0a" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Worker, Colleague:</strong> This is an object that executes a task or process, coordinated through a dispatcher or parent process. This is the Colleague in the Mediator Design Pattern.</li>
</ul><p id="6df2" class="hb hc dw hd b eu jw hf hg ex jx hi hj hk jy hm hn ho jz hq hr hs ka hu hv hw dp by"><strong class="hd hx">Alternate terminology to replace “whitelist” and “blacklist”<br /></strong>Although “whitelist” and “blacklist” carry implications of the history of slavery and discrimination, they are largely arbitrary terms that are not particularly precise or explanitory. Some alternatives that overcome those limitations include:</p><ul class=""><li id="1caa" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw kb kc kd by"><strong class="hd hx">Allowlist:</strong> This references a list of users or resources which are granted access to a particular system or set of systems.</li>
<li id="b191" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Denylist, Blocklist:</strong> This references a list of users or resources which are denied access to a particular system or set of systems.</li>
<li id="92ae" class="hb hc dw hd b eu ke hf hg ex kf hi hj hk kg hm hn ho kh hq hr hs ki hu hv hw kb kc kd by"><strong class="hd hx">Access Control List (ACL):</strong> This references a list of rules which indicate which users or systems are allowed access to a particular set of resources.</li>
</ul><p id="6242" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">When in doubt, be specific! For example, if you’re filtering banned words, specify why those words are banned using phrases like, “insensitive word list” or “offensive word list.”</p><p id="2ece" class="hb hc dw hd b eu jw hf hg ex jx hi hj hk jy hm hn ho jz hq hr hs ka hu hv hw dp by"><strong class="hd hx">Alternate terminology to replace “master” branches</strong></p><ul class=""><li id="5862" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw kb kc kd by"><strong class="hd hx">main:</strong> If an alternative to “master” is needed for a source of truth, production-ready branch, we recommend “main.” Any additional options, like using “production” or “develop” also work!</li>
</ul></div></section><section class="dp dq dr ds dt"><div class="n p ab ac ae af ag du ai aj"><p id="f6ea" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">With the understanding that making these kinds of changes takes time, all of our digital product teams will be incorporating these new terms into engineering, product and design work by the end of the first half of 2021, with exact timelines decided by the magnitude of the changes required. Going forward, we are asking teams to abide by these guidelines in all new work. Recognizing that this is an iterative process, we also encourage our colleagues to propose additions to the guidelines.</p><p id="8393" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by">As a journalism and technology company, we believe in using words that align with <a href="https://www.nytco.com/company/mission-and-values/" class="cu ja" rel="noopener">our values</a>. And we believe in fostering an inclusive, equitable and diverse culture. Changing the terminology we use is one small piece of that larger mission.</p></div></section><section class="dp dq dr ds dt"><div class="n p ab ac ae af ag du ai aj"><p id="84e4" class="hb hc dw hd b eu he hf hg ex hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw dp by"><em class="kq">Sarah Duncan is a Senior Data Engineer from Brooklyn, NY, working as the Tech Lead for the Media Innovations team in Data Engineering. Over her two years at The New York Times, Sarah has started the Python Community of Practice and joined and chaired the Architecture Review Board. She has a passion for making software reusable, data easily accessible and tech communities inclusive.</em></p></div></section>]]></description>
      <link>https://open.nytimes.com/finding-the-right-words-491b93b8b668</link>
      <guid>https://open.nytimes.com/finding-the-right-words-491b93b8b668</guid>
      <pubDate>Thu, 19 Nov 2020 16:30:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting…  Sara Pena, Designer at The New York Times]]></title>
      <description><![CDATA[<p id="07c6" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is your name?<br /></strong>Sara Pena</p><p id="0e42" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What are your pronouns?<br /></strong>She/Her</p><p id="3682" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is your job?<br /></strong>Designer</p><p id="b4ff" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What does that mean?<br /></strong>I’m a designer on the Commerce team, which means I work with Times Journeys, The School of The New York Times, The New York Times Store and The New York Times Wine Club on different marketing projects.</p><p id="def8" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">How long have you been at The Times?<br /></strong>I’ve been at The Times for two and a half years.</p><p id="d98e" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I’ve primarily been working from a house near the Jersey Shore.</p><p id="8b27" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">How do you start your day?<br /></strong>Typically I wake up around 7 a.m., check the news, play with my dog, Pocco, and then I will go for a run, do yoga or go on a bike ride. I’ve been trying to get a few minutes of meditation in before I have breakfast and begin checking emails.</p><p id="5dae" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is something you’ve worked on recently?<br /></strong>I’m currently working on a Dog Book with the Store that features a combination of Times articles, photos and original illustrations dating back to the 1800s.</p><p id="4ecc" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>When I started on the Commerce team, I primarily worked with Times Journeys to redesign a lot of the marketing materials. The biggest redesign project was for the 100-page catalog we send out each year to showcase our trips, experts and photography. Last year, we decided to reimagine its layout and ended up with three smaller booklets that streamlined our content, incorporated multiple illustrations and a foldout of a map of the world highlighting a number of our trips. With the smaller sizes, we were not only able to decrease costs but increase mailing numbers by more than double to expand our reach.</p><p id="64ed" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What was your first job?<br /></strong>I worked in a frozen yogurt and smoothie shop, then I left to assist in a custom framing gallery.</p><p id="54e7" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is something most people don’t know about you?<br /></strong>I’m a Phish fan!</p><p id="f407" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is your secret to career success?<br /></strong>I’ve always tried to stay motivated and positive even if things don’t go my way. I’m also a big believer in using the resources I’ve had and keeping my connections going — you never know who knows whom in the design world.</p><p id="e17c" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is your superpower?<br /></strong>My attention to detail.</p><p id="fd45" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What are you inspired by?<br /></strong>I love printmaking and am especially inspired by letterpress. Anything bold or graphic makes me want to get back into the studio life.</p><p id="4ac4" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">Name one thing you’re excited about right now.<br /></strong>I’m going to be spending a few days in Montauk soon, and I can’t wait to bike ride around and explore!</p><p id="856c" class="hm hn dw ho b hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij dp by"><strong class="ho is">What is your best advice for someone starting to work in your field?<br /></strong>Keep in touch with people from your past: a classmate, a teacher, a mentor, a former coworker or boss. They’re all great contacts to have, and you never know when you’ll need a reference for something.</p>]]></description>
      <link>https://open.nytimes.com/meeting-sara-pena-designer-at-the-new-york-times-68188defe960</link>
      <guid>https://open.nytimes.com/meeting-sara-pena-designer-at-the-new-york-times-68188defe960</guid>
      <pubDate>Mon, 16 Nov 2020 19:25:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[How the New York Times Technology Teams Prepared for the 2020 Election]]></title>
      <description><![CDATA[<p id="dc19" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Sarah Bures: What is the Election Readiness project? Can you walk me through what that means?</strong></p><p id="e9ff" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Alexandra Shaheen:</strong> The purpose of this project was to assess the systems that are critical to our success on election night, to see where those systems are in terms of reliability and resilience and to improve the systems to meet the traffic levels expected on election night.</p><p id="a03c" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: When did you start working on this project?</strong></p><p id="35e7" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> Our team was assembled two weeks prior to the democratic debate that The New York Times <a href="https://www.nytimes.com/2019/10/15/us/politics/when-is-oct-democratic-debate.html" class="cu js" rel="noopener">co-hosted with CNN in October, 2019</a>, and support for that event truly kicked things off.</p><p id="3a22" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: How many teams do you work with?</strong></p><p id="d9ad" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> The scope of this project is really the entire Tech organization at The Times.</p><p id="55d4" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures:</strong> <a class="cu js" rel="noopener" href="https://open.nytimes.com/how-we-prepared-new-york-times-engineering-for-the-midterm-elections-2a615fe4196e"><strong class="ip jr">Vinessa Wan and Kriton Dolias wrote about some of the election preparedness work</strong></a> <strong class="ip jr">that they led in 2018. Is this essentially a continuation of the work that they started?</strong></p><p id="f404" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Suman Roy:</strong> It is a continuation, but the scope and the ambition are much greater. We are able to aim higher because we had a solid foundation laid by Vinessa, Kriton and many others.</p><p id="2bb5" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: What are some of the assessments that you did with all of the teams?</strong></p><p id="73b0" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Megan Araula:</strong> We did architecture assessments for user-facing and print-facing publishing applications, e-commerce, login, registration and personalization applications. We saw a few commonalities via these assessments, particularly a lack of documentation and preparation on application architecture, monitoring and mitigation procedures.</p><p id="ad72" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: How did you put together the criteria for the architectural reviews? Did you look at past elections to make a list of what was expected of applications?</strong></p><p id="925d" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Araula:</strong> The Delivery Engineering team created the criteria for architecture assessment, which was refined by the Election Readiness team within the past year. We helped formalize the process by creating documentation and best practices around it. We made sure that there was a guideline document that had the criteria and recommendations. We also made sure that there was a process to on-board future reviewers.</p><p id="a25a" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">The architecture assessment is divided into eight sections; architecture and application design, application deployment, cloud configuration, security, capacity planning, logging and monitoring, failure and outages, and service maturity. These sections help us identify how well a system is prepared for a big event, how well the engineering team understands their system and how prepared they are if an issue arises. These assessments are not the final word on architectural or operational decisions, but they are recommendations intended to better prepare teams for an event.</p><p id="138e" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> In addition to the architecture reviews, we conducted operational maturity assessments to ensure that the teams had a good level of observability into their systems, and that the alerting was set up to monitor these things appropriately. We also wanted to determine whether there were enough people on the team with knowledge into all of the systems that the team owned. So we looked at, not only just the nuts and bolts, but how we as humans are monitoring these systems.</p><p id="1cf8" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">We also did stress tests, where we threw artificial loads at systems to see how things degrade. This provided insight into what users would see (like generic 500 error messaging versus graceful degradation) if our systems failed. Additionally, we wanted to see where systems could take out another system.</p><p id="0967" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Between stress tests, architecture reviews and operational maturity assessments, we could see where things stood with each of these systems, which systems would benefit from additional investment, and where there were single points of failure in terms of our ability to support the critical business workflows that they map to.</p><p id="8171" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: How do you decide which applications are higher priority or more critical?</strong></p><p id="514e" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> This is a conception of criticality that Vinessa pioneered, where she identified and ranked the most important workflows at the company. For example, the workflow of being able to publish content and then being able to view that content via the website and in print is our most critical workflow. And that ranks above being able to receive payment for a subscription. If all else failed, we’d want to be able to get the news out. Our revenue would fall second to that.</p><p id="8fac" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">We then structured our resilience investment based on which systems fell into critical workflow buckets. Most of the publishing workflows related to digital or print content production are considered to be Tier Zero. The e-commerce flows are Tier One, which are still very important to us, but not as important as getting the news out. And things like targeted advertising and sending newsletters are still important, but considered to be Tier Two.</p><p id="459a" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: That’s really interesting. What are some of the worst-case scenarios that you prepare for?</strong></p><p id="4246" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Roy:</strong> We looked at every one of our Tier Zero workflows and every system that serves these workflows. We looked at existing business continuity plans, hardened them if necessary and devised new continuity plans to fill in the gaps.</p><p id="c93a" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">In case of a system outage, we built a backup New York Times website that produces the homepage, interactives and articles.</p><p id="621e" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> On election night, we need to be able to communicate effectively, as this impacts the triaging of, and mobilization around, an incident. To manage incidents in an ordered, effective and repeatable way, we rely on a rotation of incident commanders to steward communication, which allows system subject matter experts to focus on resolving defects effectively.</p><p id="d8b1" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">We’ve also had to think about how our unique remote situation this year impacts us. For example, our remote work adds more traffic and strain to our VPN. Given this circumstance, how can proactively fortify the VPN so that it can handle a higher increase of users? As an organization, we’re always thinking about these things, but we need to also understand how this year presents additional nuances.</p><p id="273e" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Examining silos within the organization and opportunities for knowledge sharing has also been a major theme. How many members of our teams are really versed in the steps that are needed to do a fail-over? Instilling norms around sound documentation and running practice drills have helped us share knowledge and become more confident.</p><p id="1380" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">We need a plan for everything, a backup plan for everything, and then an idea of what we should do if both of those plans fail.</p><p id="0942" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: So many plans. How do you figure out who needs practice and who doesn’t? Or do you say, “Today we’re going to do a drill and everyone’s going to participate”?</strong></p><p id="0514" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> Sometimes things happen in production which removes the need to plan drills for practice. Looking at how teams respond to events in production gives you an inkling of how well prepared we are. Was it a really tough incident where people didn’t know what to do and it took a while to come to the right understanding of how to proceed? If so, that’s maybe an indicator that more practice is needed.</p><p id="f23b" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Roy:</strong> The months leading up to the election gave us ample opportunities for practice: any system that can fail, has failed. We observed how the teams fared and then we planned drills to address gaps in preparedness.</p><p id="079d" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">We also practiced for scenarios that are very unlikely to happen but scenarios that we must nonetheless be prepared for. As an example, the systems that support our print production are reliable and haven’t caused us to miss a print deadline in decades. Even so, our editors practiced producing the print editions without the help of Scoop, our primary CMS.</p><p id="c334" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: So you’re not just working with the Technology team, you’re working with editors and producers, as well.</strong></p><p id="fb89" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Roy:</strong> Yes, absolutely. It is a true collaboration.</p><p id="80de" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> Honestly, we can’t take credit for most of this stuff. This has been the hard work of this entire organization. And a lot of times we’ll have a conversation with folks and they will take it upon themselves to improve their systems. It’s important to recognize that.</p><p id="b8d5" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> This is a highly irregular year and effort. We went from supporting the Iowa Caucus and Super Tuesday in a way that was similar to past years to confronting a general election that will be unlike any other.</p><p id="af87" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by">Now we’re modeling our support plan on something that’s completely ambiguous. We don’t know if we are going to be supporting a one-day event or a 40-day event.</p><p id="944e" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: I keep thinking about how there’s so much that isn’t known about how long this election might last. We just don’t know what’s going to happen.</strong></p><p id="fe95" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> We don’t. In past years, we’ve had an election night where everyone’s in a room together and if there are problems, they can jump on them. Right now, we have two designated shifts where over a hundred engineers will sit on a video call while actively monitoring their systems.</p><p id="cf44" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Bures: And everyone will be there in case anything happens.</strong></p><p id="b93e" class="in io dw ip b eu iq ir is ex it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji dp by"><strong class="ip jr">Shaheen:</strong> Exactly. Hopefully this video call is silent the entire night. There’s no need to talk unless something is happening!</p>]]></description>
      <link>https://open.nytimes.com/how-the-new-york-times-technology-teams-prepared-for-the-2020-election-3928ce7f923c</link>
      <guid>https://open.nytimes.com/how-the-new-york-times-technology-teams-prepared-for-the-2020-election-3928ce7f923c</guid>
      <pubDate>Thu, 12 Nov 2020 20:09:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting…  Kendell Timmers, VP Ad and Growth Data at The New York Times]]></title>
      <description><![CDATA[<div><div class="et n eu ev ew ex"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----89507b54f726--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s ey ez fa" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fb aj s"><p><a class="cu cv av aw ax ay az ba bb bc fg bf cy cz" rel="noopener" href="https://open.nytimes.com/meeting-kendell-timmers-vp-ad-and-growth-data-at-the-new-york-times-89507b54f726?source=post_page-----89507b54f726--------------------------------">Oct 29</a> · 3 min read</p></div></div></div></div><figure class="gl gm gn go gp gq dh di paragraph-image">
<figcaption class="hh hi dj dh di hj hk bn b fc cq cr">Illustration by Claire Merchlinsky</figcaption></figure><p id="0a13" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><em class="ij">“Meeting…” is an ongoing series from NYT Open that features New York Times employees from different corners of the company.</em></p><p id="2043" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is your name?<br /></strong>Kendell Timmers</p><p id="cfb3" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What are your pronouns?<br /></strong>She/Her</p><p id="4ad1" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is your job?<br /></strong>Vice President for Advertising and Growth, Data and Insights</p><p id="066c" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What does that mean?<br /></strong>I manage the data teams responsible for advertising analytics and subscription growth analytics. It’s exciting to get to work on two intertwined but very different parts of the business at once.</p><p id="c1a9" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">How long have you been at The Times?<br /></strong>Two and a half years already, although I still feel new!</p><p id="2b92" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>My home in Glen Ridge, NJ, with my husband, two kids and an absurdly loud cat.</p><p id="dfe7" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">How do you start your day?<br /></strong>I start the crossword, then take a spin through the Slack channels and the headlines on The Times.</p><p id="17de" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is something you’ve worked on recently?<br /></strong>Launching the <a href="https://digiday.com/media/the-time-is-right-inside-the-new-york-times-first-party-data-play/" class="cu il" rel="noopener">first-party targeting product</a> for advertising.</p><p id="ecf9" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Launching first-party targeting made me especially proud because it was an impressive cross-functional effort — it proved that a group of brilliant Timespeople in data science, data, ad product and engineering could compete with a giant third-party data provider.</p><p id="4181" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What was your first job?<br /></strong>First job out of college, I worked as an “inventory analyst” to tweak the overbooking system at an airline. If you ever got bumped off a flight to Florida on US Airways … that might’ve been my fault. Sorry.</p><p id="5642" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is something most people don’t know about you?<br /></strong>I am a voracious reader; I read more than 100 books last year. (This year… not so much.)</p><p id="53f9" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is your secret to career success?<br /></strong>Try new things. Be curious. Fail and try again.</p><p id="f5ad" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is your superpower?<br /></strong>Curiosity. I am interested in solving problems and almost ANY problem can be interesting to me.</p><p id="408d" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What are you inspired by?<br /></strong>My co-workers! I’ve never met such a talented, interesting and dedicated group of people as the folks I work with across The Times.</p><p id="68ca" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">Name one thing you’re excited about right now.<br /></strong>There’s a gelato place that just opened within walking distance of my house. Lucky for me they are only open four days a week…</p><p id="e603" class="hl hm dw hn b ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii dp by"><strong class="hn ik">What is your best advice for someone starting to work in your field?<br /></strong>Never assume you can’t do it. Even if you know nothing about an industry or application today, if you have basic skills, attention to detail and willingness to learn, you can move into anything you want to do.</p>]]></description>
      <link>https://open.nytimes.com/meeting-kendell-timmers-vp-ad-and-growth-data-at-the-new-york-times-89507b54f726</link>
      <guid>https://open.nytimes.com/meeting-kendell-timmers-vp-ad-and-growth-data-at-the-new-york-times-89507b54f726</guid>
      <pubDate>Thu, 29 Oct 2020 16:44:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Announcing The New York Times Widget for iOS 14]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dm ai aj"><div class="fc n fd fe ff fg"><div class="o n"><div><a href="https://medium.com/@timesopen?source=post_page-----e97944645923--------------------------------" rel="noopener"><img alt="The NYT Open Team" class="s fh fi fj" src="https://miro.medium.com/fit/c/96/96/1*H66kKIaOlyMAd6drqVQKNQ.png" width="48" height="48" /></a></div><div class="fk aj s"><p><a class="ce cf cg ch ci cj ck cl bl cm fp cp cq cr" rel="noopener" href="https://open.nytimes.com/announcing-the-new-york-times-widget-for-ios-14-e97944645923?source=post_page-----e97944645923--------------------------------">Oct 21</a> · 4 min read</p></div></div></div></div><div class="n p ab ac ae af ag dm ai aj"><p id="9850" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh"><strong class="ig ja">By Jon Lazar, Kika Gilbert, Mark Murray and Taylor Poulos</strong></p><p id="ae2f" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">Keeping up with the news can feel like a full-time job, and we want to make it easy for New York Times readers to stay informed. We provide a variety of ways to do this, from newsletters to push alerts to social media posts, and today, we’re adding another feature to that list: a widget for Apple’s iOS 14 that will feature the latest news headlines.</p><p id="6018" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">This new widget will allow readers to quickly catch up on the most important news of the moment. Readers who install the widget to the home screen of an iPhone or iPad running iOS 14 or later will see two headlines that will refresh as new content is published.</p><p id="d3ac" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">To install the widget, readers with iOS 14 installed can “long press” anywhere on their home screen to enter jiggle mode, then tap the “+” button in the top left corner and scroll down to find The Times’s widget.</p><figure class="hd he hf hg hh gt cz da paragraph-image">
<figcaption class="ia ib db cz da ic id aw b fl ca cb">An example of The Times’s widget on the home screen of an iPhone.</figcaption></figure><p id="33db" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">The project was started by a group of Times iOS engineers who were eager to explore the new features announced with iOS 14.</p><p id="dcec" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">In the weeks leading up to <a class="ce jd" rel="noopener" href="https://open.nytimes.com/innovating-from-home-maker-week-at-the-new-york-times-50ecfa38aca1">The Times’s annual Maker Week</a> in July, Mark Murray, an iOS engineer, started generating excitement for the widget and Taylor Poulos, a product designer, prototyped designs. Pretty soon, a cross-functional group of people from the newsroom, design, product and data had teamed up to build a widget that matched our ambitions to reader and product needs.</p><p id="1636" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">By the time Maker Week started, we had prioritized a couple of things we hoped to gain by the end of the week. We wanted to learn more about SwiftUI and WidgetKit; we wanted to give readers a way to quickly catch up with the news, without adding to our newsroom’s workflow; we wanted to deliver an accessible feature that scales with a reader’s type settings.</p><p id="f64e" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">At first, the headlines in the widget updated when a reader opened the NYTimes app on their device. However, we quickly realized that since the widget is visible on the home screen at all times, the headlines needed to be updated more often. Jon Lazar, an iOS Engineer, created a way to do this and now the widget pulls new headlines every 15 minutes or whenever the app gets refreshed.</p><p id="196a" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">To make sure the widget provides an easy way for readers to stay up-to-date, while also reflecting editorial intent and the Times brand, we made specific modifications to widget behavior and type treatment.</p></div><div class="n p ab ac ae af ag dm ai aj"><p id="7906" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">Headlines are most informative when they can be read in full, yet our first prototype truncated headlines that were too long. This certainly didn’t meet our readers’ needs. Due to time constraints — Maker Week is only five days — we didn’t want to build a new API, so we instead worked with our existing publishing pipeline. The widget now scales to a single headline based on the accessibility settings of a device, or the specific ranking of our newsroom editors.</p><p id="38ac" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">By the time Maker Week was over, we had a working prototype of the widget and a team of devotees who stuck with this project as a passion project until Apple released iOS 14 to the public in September.</p><p id="5f9b" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">To prepare the widget to launch publicly, we implemented data tracking that will inform future widget projects. We worked with the design members of our team to make visual improvements, and we worked with our colleagues in product to make sure the headlines in the widget accurately reflect the most important news of the day.</p><p id="6fe5" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">With just five days to focus on this project, we not only built this widget that will be incredibly useful during an already busy news cycle, but we also discovered some opportunities for improvements in our iOS app that we’ll be exploring in the coming months.</p><p id="9869" class="ie if do ig b em ih ii ij ep ik il im in io ip iq ir is it iu iv iw ix iy iz dh bh">We’re excited about the opportunity this widget creates to have an “always on” news update that helps keep readers informed, while expanding their understanding of our coverage.</p></div>]]></description>
      <link>https://open.nytimes.com/announcing-the-new-york-times-widget-for-ios-14-e97944645923</link>
      <guid>https://open.nytimes.com/announcing-the-new-york-times-widget-for-ios-14-e97944645923</guid>
      <pubDate>Wed, 21 Oct 2020 17:54:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Ashka Gami, Marketing Director for New York Times Games]]></title>
      <description><![CDATA[<p id="aca4" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is your name?<br /></strong>Ashka Gami</p><p id="232a" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What are your pronouns?<br /></strong>She/Her</p><p id="235d" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is your job?<br /></strong>I am the marketing director for New York Times Games.</p><p id="56e9" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What does that mean?<br /></strong>I focus on elevating the value of game play to drive subscription growth for our business. I work cross-functionally to help shape our brand identity and voice, and I build out strategic (and delightful!) programs that support all stages of the user journey and lifecycle.</p><p id="83d5" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">How long have you been at The Times?<br /></strong>About a year and a half.</p><p id="c516" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I have been working from a corner of my living room in Astoria, Queens. I will occasionally switch it up and work from my “standing desk” in the kitchen (it’s really just a high bar table with cookbooks stacked on top).</p><p id="3b0a" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">How do you start your day?<br /></strong>I don’t wake up as early as I did before the pandemic, but I try to wake up around 7:30 a.m. (after hitting the snooze button a few times). I usually check email, Slack and my calendar in order to mentally prepare for the day ahead, but I generally aim to use my “commute” time thoughtfully. Sometimes I’ll go for a run outside or do a short workout at home, then I’ll make tea and breakfast, breathe deeply and head into all of the video meetings.</p><p id="0261" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is something you’ve worked on recently?<br /></strong>I’ve been building a gallery wall in my living room! It’s a great quarantine activity that spurs both nostalgia and wanderlust.</p><p id="adff" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>In May, I worked alongside a large, cross-functional team to launch <a href="https://www.nytimes.com/subscription/games" class="ct ir" rel="noopener">a new subscription landing page for Games</a>. This was a massive undertaking that ran concurrently with a lot of other initiatives to bring our new brand to life. In addition to reflecting a new brand identity and showcasing our full games suite, the landing page displays game-specific branding based on what a user has played before. This allows us to be flexible and experimental with our marketing approach: we can lean into the existing brand equity of the Crossword and increase awareness of our other games.</p><p id="e519" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What was your first job?<br /></strong>I worked for Parks and Recreation in my hometown. Essentially, I made arts and crafts with little kids at my neighborhood playground over the summer while wearing a bright orange, way-too-big T-shirt.</p><p id="450c" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is something most people don’t know about you?<br /></strong>I am weirdly good at remembering people’s birthdays.</p><p id="9a97" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is your secret to career success?<br /></strong>My secret is probably leaning into discomfort, no matter how uncomfortable it might feel at the onset. I’ve found that the greatest rewards, both personally and professionally, come from not shying away from a challenge.</p><p id="894c" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is your superpower?<br /></strong>I am an active listener with a pretty good memory, which I find beneficial working at a large, cross-functional, matrixed organization.</p><p id="9199" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What are you inspired by?<br /></strong>As a first-generation American, I continue to be inspired by my parents who instilled a work ethic in me that guides me every day.</p><p id="4182" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx">I am also inspired by young people, especially in this moment, and those who are challenging the status quo by advocating for widespread social change.</p><p id="b294" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">Name one thing you’re excited about right now.<br /></strong>My favorite Vietnamese place opened back up after a long hiatus during New York City’s lockdown.</p><p id="0d3f" class="hk hl dv hm b hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih do bx"><strong class="hm iq">What is your best advice for someone starting to work in your field?<br /></strong>Be authentic, be open-minded, be bold and be resilient. And be patient with the process and with yourself!</p>]]></description>
      <link>https://open.nytimes.com/meeting-ashka-gami-marketing-director-for-new-york-times-games-c883d668dd6b</link>
      <guid>https://open.nytimes.com/meeting-ashka-gami-marketing-director-for-new-york-times-games-c883d668dd6b</guid>
      <pubDate>Thu, 15 Oct 2020 20:16:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[To Find Photos in Our Archive, We Taught the CMS How to Read]]></title>
      <description><![CDATA[<div class="n p ab ac ae af ag dt ai aj"><div><div class="eo n ep eq er es"><div class="o n"><div><a href="https://open.nytimes.com/@chris.frank?source=post_page-----f9bd5f6703d7--------------------------------" rel="noopener"><img alt="Chris Frank" class="s et eu ev" src="https://miro.medium.com/fit/c/96/96/1*7zrWqbl8vWPOyGNBxZ5NVg.jpeg" width="48" height="48" /></a></div><div class="ew aj s"><p><a class="ct cu au av aw ax ay az ba bb fb be cx cy" rel="noopener" href="https://open.nytimes.com/to-find-photos-in-our-archive-we-taught-the-cms-how-to-read-f9bd5f6703d7?source=post_page-----f9bd5f6703d7--------------------------------">Oct 8</a> · 8 min read</p></div></div></div></div><figure class="gg gh gi gj gk gl dg dh paragraph-image">
<figcaption class="hc hd di dg dh he hf bm cn ex cp cq">Illustration by Simone Noronha</figcaption></figure><p id="b5c5" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">Imagine you’re a photo editor at The New York Times. It’s early evening, a few hours before the print deadline, and a story breaks involving Alexandria Ocasio-Cortez. As fast as you can, you run a search for “Alexandria Ocasio-Cortez” in our internal photo archive and begin to scan the results.</p><p id="1301" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">You see a handful of photos of Alexandria Ocasio-Cortez, but they’re mostly crowded out by photos of other people and, somewhat more strangely, photos like this:</p><figure class="gg gh gi gj gk gl dg dh paragraph-image">
<figcaption class="hc hd di dg dh he hf bm cn ex cp cq">Mark Makela for The New York Times</figcaption></figure><p id="9464" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">Why on earth is an image of a sunset over a farm one of the top hits for “Alexandria Ocasio-Cortez”?</p><p id="dd8a" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The answer is that when someone enters a search term, our 20-year-old search algorithm checks the caption of every photo in our archive for that term and returns anything that matches.</p><p id="8e48" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">In this case, the caption is: “The sun sets over a farm in Central Iowa, near where Democratic Presidential hopeful Bernie Sanders held a rally today with Rep. Alexandria Ocasio-Cortez.”</p><p id="0c2c" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The phrase “Alexandria Ocasio-Cortez” appears verbatim in that caption, so the algorithm considers the photo a perfect match.</p><p id="be67" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">For a photo editor, this is a frustrating experience. The names of widely covered public figures appear so often in our photo captions — whether the person is in the photo or not — that it can be impossible for photo editors to find the images they are looking for.</p><p id="c826" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">In the language of information retrieval, our search engine has high <em class="ig">recall</em> (meaning it returns nearly all of the relevant results) but low <em class="ig">precision</em> (meaning it also returns many results it should not).</p><p id="9a46" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">Ideally, instead of searching against unstructured captions, we would search against structured tags of who, or what, is in each photo. However, because photos enter our archive from many different sources with different metadata conventions, those tags usually don’t exist and captions are the best data we have.</p><p id="8ecb" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The CMS Photo team bet that if, somehow, we could accurately tag the tens of millions of photos in our archive, we could deliver a dramatically better search experience to the newsroom.</p><p id="55a3" class="hg hh dw hi b hj iz hl hm hn ja hp hq hr jb ht hu hv jc hx hy hz jd ib ic id do bw">Our first thought was to use facial recognition to tag photos based on the faces detected in them, but we quickly ran into two big problems.</p><p id="d90b" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The first was that state-of-the-art facial recognition models continue to be bad at identifying people of color. In one of our first tests, a widely used facial recognition API told us with 95 percent confidence that a portrait of Alexandria Ocasio-Cortez was of Michelle Rodriguez. (It was wrong.) Even if the models have improved since <a href="https://www.aclu.org/blog/privacy-technology/surveillance-technologies/amazons-face-recognition-falsely-matched-28" class="ct je" rel="noopener">this 2018 A.C.L.U. study</a> — and it wasn’t clear to us that they have — this technology still has a long way to go.</p><p id="7342" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The second problem was one I started calling the “Air Force One problem,” because it can be illustrated by this photo of Air Force One with President Trump aboard:</p><figure class="gg gh gi gj gk gl dg dh paragraph-image">
<figcaption class="hc hd di dg dh he hf bm cn ex cp cq">Anna Moneymaker/The New York Times</figcaption></figure><p id="81ea" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">From a photo editor’s perspective, this is a photograph of the President and should be included in search results. From the perspective of a facial recognition algorithm, this is not a picture of anyone — there are no faces in it. Many of our most compelling photos capture their subjects in creative ways that facial recognition software can’t detect.</p><p id="670c" class="hg hh dw hi b hj iz hl hm hn ja hp hq hr jb ht hu hv jc hx hy hz jd ib ic id do bw">Given the limits of facial recognition, we took a second look at our captions. Earlier, I called these captions “unstructured,” but in fact they are only unstructured if you are a computer. To an English-speaker, the captions are neatly structured according to the rules of English grammar, and the grammatical subjects of each sentence can tell us immediately who is in a photo. We figured if we could just get a computer to recognize grammatical subjects in the same way a human can, we would be all set.</p><p id="8feb" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">Making computers extract structured data from raw text is part of the study of natural language processing (N.L.P.). N.L.P. breaks down the hard problem of extracting meaning into smaller and simpler tasks. Each step in an N.L.P. sequence makes a small change to its copy of the text before passing it to the next step. The overall sequence is called a pipeline and might look something like this:</p><ol class=""><li id="9d88" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id jh ji jj bw"><strong class="hi jk">Input</strong>: accepts unstructured text as a String.</li>
<li id="c1b5" class="hg hh dw hi b hj jl hl hm hn jm hp hq hr jn ht hu hv jo hx hy hz jp ib ic id jh ji jj bw"><strong class="hi jk">Tokenizer</strong>: splits the String into an Array of discrete word-like units called <em class="ig">tokens.</em></li>
<li id="8252" class="hg hh dw hi b hj jl hl hm hn jm hp hq hr jn ht hu hv jo hx hy hz jp ib ic id jh ji jj bw"><strong class="hi jk">Tagger</strong>: tags each token with a part of speech, like <em class="ig">noun</em> or <em class="ig">verb</em>.</li>
<li id="3433" class="hg hh dw hi b hj jl hl hm hn jm hp hq hr jn ht hu hv jo hx hy hz jp ib ic id jh ji jj bw"><strong class="hi jk">Parser</strong>: labels the relationships between tagged tokens. A noun before a verb might be a <em class="ig">subject</em>, an adjective before a noun may be a <em class="ig">modifier</em>, and so on.</li>
</ol><p id="c41f" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">While each step in the pipeline might look mysterious, there is no magic at work here. One could write a passable implementation from scratch using just a scripting language, a dictionary and some statistics about word usage. We tried a few libraries implemented that way before landing on spaCy, an open-source Python toolkit whose <a href="https://explosion.ai/blog/parsing-english-in-python" class="ct je" rel="noopener">more complex implementation</a> was more accurate for our use case. (The steps in the pipeline above are the ones spaCy runs by default.)</p><p id="1996" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">When we ran the caption, “The sun sets over a farm in Central Iowa, near where Bernie Sanders held a rally today with Alexandria Ocasio-Cortez” through our N.L.P. pipeline, we got this:</p></div><div class="n p ab ac ae af ag dt ai aj"><p id="b8f0" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The spaCy pipeline did some fancy things, such as treating “Central Iowa” as one token and distinguishing between “noun” and “proper noun.” Most importantly, the parser correctly labeled “The sun” and not “Alexandria Ocasio-Cortez” as the grammatical subject (“nsubj”) of the text. N.L.P. provided the structured data we needed to write code to extract the grammatical subjects from a caption and store them as tags to search against.</p><p id="4bfd" class="hg hh dw hi b hj iz hl hm hn ja hp hq hr jb ht hu hv jc hx hy hz jd ib ic id do bw">Armed with a way of tagging grammatical subjects, we built a quick prototype that let us toggle between the old caption algorithm and the new tag-based search. Even in our earliest version, the results were dramatic. In caption searches for public figures, we were used to seeing the whole screen filled with irrelevant results. In our new tag search, nearly every photo on the screen was of the person we’d searched for.</p><figure class="gg gh gi gj gk gl dg dh paragraph-image">
<figcaption class="hc hd di dg dh he hf bm cn ex cp cq">High-precision search results</figcaption></figure><p id="9801" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">At this point, we knew we could ship a more precise search experience, but we weren’t sure what it would cost us in terms of recall. How many relevant results was our tag search leaving out?</p><p id="9ba5" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">To find out, my colleague Sharon Tartarone built an assessment framework in <a href="https://jupyter.org/" class="ct je" rel="noopener">Jupyter</a> that let us score the new algorithm against the old one. We focused on eight of the most searched-for people from our logs. For each person, we then built a dataset of the results returned by the old caption search and manually classified each result as relevant or irrelevant.</p><p id="d99e" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">With the expected results classified in advance, we could then search the same people via our N.L.P.-generated tags and let Sharon’s framework calculate recall and precision. The scores matched our subjective impressions: the tag search really was filtering out almost 100 percent of the irrelevant results, but it was also filtering out about 40 percent of the relevant ones.</p><p id="a2d2" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">Our subject-detection pipeline was failing to detect subjects almost half the time, and we weren’t immediately sure why.</p><p id="86fc" class="hg hh dw hi b hj iz hl hm hn ja hp hq hr jb ht hu hv jc hx hy hz jd ib ic id do bw">To understand what was happening, we took a closer look at how our N.L.P. pipeline was handling some of the missing captions. By coincidence, one missing caption was “The President boards Air Force One,” which ended up being a good illustration of the broader problem.</p><figure class="gg gh gi gj gk gl dg dh paragraph-image">
<figcaption class="hc hd di dg dh he hf bm cn ex cp cq">Nonsensical N.L.P. results</figcaption></figure><p id="31b5" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">The tokenizer worked well on this caption, but the tagger interpreted “boards” as a noun rather than a verb. This mistake propagated to the parser, where it cascaded into nonsense. According to our pipeline, “The President boards Air Force One” had no subject, no verb and no object — just a bunch of barely-grammatical relationships it called <em class="ig">compound</em>.</p><p id="21b0" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">In general, when our pipeline was wrong, it was very wrong. Because each step in the pipeline depended on the output of the step before it, early errors would cascade into bigger errors downstream. This meant we saw many results that lacked subjects, verbs and objects entirely, but we didn’t see many results with subjects, verbs or objects assigned to the wrong tokens.</p><p id="eab9" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">We had a hard time preventing these kinds of mistakes, but we did find a way to work around them. Instead of collecting only noun-subject tokens, we adjusted our algorithm to collect all tokens except noun-objects. In a simple, correctly-parsed caption like “Bernie Sanders held a rally with Alexandria Ocasio-Cortez,” collecting subjects is the same as collecting non-objects, so this adjustment makes no difference.</p><figure class="gg gh gi gj gk gl dg dh paragraph-image">
<figcaption class="hc hd di dg dh he hf bm cn ex cp cq">In this sentence, collecting noun subjects is the same as collecting non-objects.</figcaption></figure><p id="40ff" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">But for a sentence like “The President boards Air Force One,” where the algorithm had failed to identify subjects or objects at all, collecting subjects gave us nothing, while collecting non-objects gave us the entire sentence. With this adjustment, even when we couldn’t parse a caption correctly, we could still make something available to search.</p><p id="e352" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">This indirect approach resulted in 98 percent recall for our test dataset, and we were able to achieve precision between 80 and 95 percent, depending on the search term. The old search algorithm, which searched plain captions, had just 50 percent precision, so this was a big improvement. The results were impressive enough to make our team, and more importantly the photo editors, feel excited about this approach.</p><p id="7e12" class="hg hh dw hi b hj iz hl hm hn ja hp hq hr jb ht hu hv jc hx hy hz jd ib ic id do bw">We have been gradually rolling out tag-based search to the newsroom and making improvements as we go. My teammate Kate Brenner improved precision by finding a more accurate way to detect sentence boundaries, while my teammate Michael Moffitt improved recall by working around long job titles, such as “Speaker of the House Nancy Pelosi,” that were confusing the parser. Michael also implemented some deliberate exceptions to our policy of filtering out the objects of a verb, after noticing that the objects of verbs like “embraces” and “hugs” are usually in the photographs and shouldn’t be filtered out.</p><p id="3855" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw">Looking further ahead, we will work with <a href="https://tech.okcupid.com/evaluating-perceptual-image-hashes-okcupid/" class="ct je" rel="noopener">perceptual hashes</a> to improve information density by grouping similar images together, and we will work with <a href="https://www.pyimagesearch.com/2018/07/09/face-clustering-with-python/" class="ct je" rel="noopener">facial clustering</a> to help surface photos from the archive we didn’t know we had. We also plan on integrating a version of this search experience into our <a class="ct je" rel="noopener" href="https://open.nytimes.com/we-built-collaborative-editing-for-our-newsrooms-cms-here-s-how-415618a3ec49">in-house collaborative text editor</a>. This work is all in service of creating a richer, more visual report for our readers.</p></div>]]></description>
      <link>https://open.nytimes.com/to-find-photos-in-our-archive-we-taught-the-cms-how-to-read-f9bd5f6703d7</link>
      <guid>https://open.nytimes.com/to-find-photos-in-our-archive-we-taught-the-cms-how-to-read-f9bd5f6703d7</guid>
      <pubDate>Thu, 08 Oct 2020 18:24:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Gaëlle Sharma, Technical Product Manager at The New York Times]]></title>
      <description><![CDATA[<p id="8acf" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is your name?<br /></strong>Gaëlle Sharma</p><p id="25a6" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What are your pronouns?<br /></strong>She/Her</p><p id="cebb" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is your job?<br /></strong>I am the technical product manager on the Authentication team.</p><p id="d1bf" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What does that mean?<br /></strong>I help make sure that New York Times readers can log-in and register seamlessly on our website and apps.</p><p id="a431" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">How long have you been at The Times?<br /></strong>A little less than a year.</p><p id="e9e3" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I am working from Brooklyn. My office space also doubles as my living room, dining room and kitchen. We make the most of the space!</p><p id="ff6e" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">How do you start your day?<br /></strong>I start my day by brewing pour-over coffee while listening to “The Daily” podcast. I like to start slow and gradually take the day in before I dive into my to-do list.</p><p id="865d" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is something you’ve worked on recently?<br /></strong>Recently, the team worked on stress testing the Authentication system in preparation for the November election news cycle. We conduct periodic stress tests to observe how our login and registration reacts under heavy traffic and to identify any improvements we may need to make.</p><p id="a571" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>Earlier this year, The Times added an option for readers to register and log-in to The Times using their Apple accounts. Launching this new feature required close coordination across many teams. However, a couple days before our scheduled launch, the entire company began working from home due to the pandemic. We found ourselves unable to collaborate in person, as planned. Despite this new challenge, none of the teams missed a beat.</p><p id="9044" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What was your first job?<br /></strong>In my first job, I was a fellow at a community development bank on the South Side of Chicago. I’ve always been passionate about helping people.</p><p id="f727" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is something most people don’t know about you?<br /></strong>I used to compete in ballroom dancing and to this day I remain a big fan of the sport.</p><p id="94ea" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is your secret to career success?<br /></strong>Always be learning!</p><p id="c930" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is your superpower?<br /></strong>I am extremely curious, which leads me to consistently discover new ideas.</p><p id="bbb7" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What are you inspired by?<br /></strong>I am inspired by people who have changed the world for the better. For example, I marvel at the work of Dr. S. Josephine Baker who transformed the field of public health and child hygiene in New York City in the early 1900s.</p><p id="a6d1" class="hg hh dw hi b hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy hz ia ib ic id do bw"><strong class="hi ip">What is your best advice for someone starting to work in your field?<br /></strong>Start by shadowing an experienced technical product manager and learn as much as you can from observing how they partner with their team.</p>]]></description>
      <link>https://open.nytimes.com/meeting-ga%C3%ABlle-sharma-technical-product-manager-at-the-new-york-times-20e71ae878b5</link>
      <guid>https://open.nytimes.com/meeting-ga%C3%ABlle-sharma-technical-product-manager-at-the-new-york-times-20e71ae878b5</guid>
      <pubDate>Thu, 01 Oct 2020 17:35:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[How We Made a Design System for NYT Cooking on Android]]></title>
      <description><![CDATA[<p id="82f6" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">In a perfect product development scenario, a designer could sketch some boxes on a napkin and hand it to an engineer who would know exactly what to build. The boxes would correspond to elements in an established design system that codified things like color, typography and structural components.</p><p id="997f" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">A design system ensures that everyone working on a product has a reference point for all of the features in the project. It allows teams to build and ship features faster.</p><p id="5bac" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">When the NYT Cooking team started preparations to build an Android app in April 2019, we didn’t have a design system. At the time, our design team was made up of two designers and a design manager, which meant we often juggled a lot of work. As the sole designer on the Android project, I knew that it was the perfect opportunity to create a design system that the NYT Cooking Android team could use. These are some of the steps I took.</p><p id="c9ca" class="hp hq dv hr b hs jf hu hv hw jg hy hz ia jh ic id ie ji ig ih ii jj ik il im dn bv">Because I had created design systems before, I knew it would be a process of trial and error. It’s normal to not know whether design elements included at the beginning of the process will still be there when the system is finished. To introduce some clarity, I defined loose guidelines, which anchored my decisions down the line.</p><p id="cb58" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Design principles.</strong> The team wanted to ensure that the app felt native to the Android ecosystem, which meant we would utilize native Android design patterns and paradigms. We decided to use Google’s Material Design framework as a foundation for the UI elements, while making sure that we upheld the NYT Cooking brand through styling and typography.</p><p id="b612" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">System users and software.</strong> The design system users were members of the design and engineering teams: designers would actively contribute to the system and engineers would reference the system. We used Figma because of its powerful Team Library feature and its ease of use for engineers.</p><p id="7fdc" class="hp hq dv hr b hs jf hu hv hw jg hy hz ia jh ic id ie ji ig ih ii jj ik il im dn bv">A living design system document is the place where designers actively contribute to and update the system; it’s the most frequently updated document. A design system reference is a polished document that explains the system in detail, which is most useful for non-designers. <a href="https://bradfrost.com/blog/post/the-workshop-and-the-storefront/" class="cs fr jl jm jn jo" rel="noopener">Brad Frost describes the living document as the designer’s workshop</a> and the reference as the shopfront. To streamline the workflow for future team members, I decided that the format of the design system documentation would be simultaneously a living document and a reference.</p><p id="dacc" class="hp hq dv hr b hs jf hu hv hw jg hy hz ia jh ic id ie ji ig ih ii jj ik il im dn bv">The two most important features in Figma for a design system are Styles and Components. Styles are basic elements such as color and typography. Components are more complex elements, such as buttons or navigation bars; I like to think of components as templates.</p><p id="538c" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">Metaphorically, <a href="https://bradfrost.com/blog/post/atomic-design-in-one-gif/" class="cs fr jl jm jn jo" rel="noopener">a Style is an atom and a Component is a molecule</a>. When combined, they become templates and pages, according to <a href="https://bradfrost.com/blog/post/atomic-web-design/" class="cs fr jl jm jn jo" rel="noopener">the atomic design structure laid out by Brad Frost</a>.</p><p id="0990" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">Atomic design is the ideal way to structure a design system because it anticipates change. If we decided to change our brand color or the font size of a headline, we would update it in one location and it would be implemented throughout the entire system. This reduces the amount of time needed to make a style or design change and ensures the change is reliably applied in every design.</p><p id="f710" class="hp hq dv hr b hs jf hu hv hw jg hy hz ia jh ic id ie ji ig ih ii jj ik il im dn bv">I had the benefit of our existing suite of products, so I audited our <a href="https://apps.apple.com/us/app/nyt-cooking/id911422904" class="cs fr jl jm jn jo" rel="noopener">iOS app</a> and <a href="https://cooking.nytimes.com/" class="cs fr jl jm jn jo" rel="noopener">website</a> to decide what design elements to keep.</p><p id="325f" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Audit<br /></strong>Our recipe pages are the most visited pages in our entire app, so the NYT Cooking product manager, design director and I decided to tackle this view first. Any recipe view — even a recipe in a book — is almost all typography, so the two things I needed to define first were the spacing system and typography.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp"><em class="jr">Most recipe views are made up of typography, so defining spacing and type are important parts of building a design system.</em></figcaption></figure><p id="49b0" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Spacing<br /></strong>Since I was leaning on the Material Design framework, I decided to use their recommended spacing system. We use increments of eight, and occasionally use increments of four, for spacing, as Material Design suggests.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp"><em class="jr">The NYT Cooking spacing system is based on the Material Design framework.</em></figcaption></figure><p id="1648" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Typography<br /></strong>Recipes have many types of information, so to distinguish each part of a recipe and establish a clear hierarchy, I chose a succinct number of weights and styles from NYT Cooking’s three typefaces: Cheltenham, Karnak and Franklin Gothic. Recipe views were the most challenging to design, but once the typography was set, they informed the typography on other views.</p><p id="7aa1" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">Though we had the established iOS app that we could have drawn from, I used the new Android designs as an opportunity to modernize our typography from our existing platforms.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp">NYT Cooking uses a succinct number of weights and styles from NYT Cooking’s three typefaces: Cheltenham, Karnak and Franklin Gothic.</figcaption></figure><p id="dbb0" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Color<br /></strong>From a product perspective, we use color minimally as a way to support the content that our editors work so hard to produce. We use a variety of grays; full black is reserved for the New York Times logo. To streamline the number of grays we use across NYT Cooking, I started designing with two grays and carefully added more when they were warranted. We ended up with eight grays, ranging from a dark, almost-black gray to a light, almost-white gray.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp"><em class="jr">The color palette for NYT Cooking Android app uses Cooking’s signature red, as well as a range of grays.</em></figcaption></figure><p id="daa2" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">In addition to our palette of grays, I used the NYT Cooking-brand red as our accent color.</p><p id="7201" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">In digital product design, red is almost always reserved for cautionary actions and messaging. Using it as an accent color is not a common choice because it can conflict with the platform-native red of things like error messages in form fields. However, we do not use many form fields in NYT Cooking. I styled our UI elements with a tasteful amount of red without conveying that users made an error. I used a brighter shade of red to indicate error states.</p><p id="ec92" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Iconography<br /></strong>Because we were building a design system while simultaneously launching our Android app, we opted to use some of the icons provided by Material Design. I didn’t see the need to reinvent the wheel at that point of the app lifecycle. The only exception we made was for our save icon, which is prominently displayed throughout our app.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp">With the exception of a custom save icon, we used icons provided by by Google’s Material Design framework.</figcaption></figure><p id="ebc7" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Creating Components<br /></strong>Components are templates for elements like a button or navigation menu; The key thing about components is that they are reusable. I started creating components once I found myself reusing the same element in multiple places, like our cards.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp">Because we use cards in so many different places in the NYT Cooking Android app, we made them components so they can be easily replicated.</figcaption></figure><p id="f9d9" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv"><strong class="hr jk">Cards<br /></strong>Cards are our primary components and are used throughout our entire app. Our cards provide an abbreviated look into the content, whether it is a recipe, a collection or a guide. These three content types are fundamentally different so we made them visually distinct.</p><figure class="go gp gq gr gs ge df dg paragraph-image">
<figcaption class="hl hm dh df dg hn ho bm cm ew co cp"><em class="jr">From left to right: Recipe card, Guide card and Collection card.</em></figcaption></figure><p id="3a2d" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">It was hard to anticipate how these cards would look across screen sizes. While there are a standard set of breakpoints for iOS and the web, Android tends to have a wider variety of screen sizes. I defined the base card size to align with the smallest screen size on Android, so that the design would adjust to subsequently larger screen sizes.</p><p id="8817" class="hp hq dv hr b hs ht hu hv hw hx hy hz ia ib ic id ie if ig ih ii ij ik il im dn bv">We have strict rules about how our content is displayed. The hierarchy of the content on a card is: image, title, byline, action. Our recipes can have long titles that break to multiple lines of text, and they can have long or double bylines. I tried to display as much content on our cards as possible by slightly enlarging the card containers. The logic for text to be displayed on our recipe cards is borrowed from iOS and was adapted for Android.</p>]]></description>
      <link>https://open.nytimes.com/how-we-made-a-design-system-for-nyt-cooking-on-android-c57ce7f0905e</link>
      <guid>https://open.nytimes.com/how-we-made-a-design-system-for-nyt-cooking-on-android-c57ce7f0905e</guid>
      <pubDate>Thu, 24 Sep 2020 20:45:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Jeremy Gayed, Lead Software Engineer]]></title>
      <description><![CDATA[<p id="39db" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is your name?<br /></strong>Jeremy Gayed</p><p id="bd5a" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What are your pronouns?<br /></strong>He/Him</p><p id="edc3" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is your job?<br /></strong>Lead Software Engineer</p><p id="edec" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What does that mean?<br /></strong>Typically, I work with other engineers across teams and projects to help lead technical decisions.</p><p id="c0a3" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">How long have you been at The Times?<br /></strong>Time flies! It’ll be six years in December.</p><p id="a818" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I’m working from my home in northern New Jersey.</p><p id="1d0f" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">How do you start your day?<br /></strong>Typically, it starts with my son or daughter providing a too-much-energy-for-this-hour-of-the-morning wake-up call.</p><p id="987b" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is something you’ve worked on recently?<br /></strong>Most recently, I’ve been working on our GraphQL strategy at The Times.</p><p id="9e91" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>A few years ago, we were fortunate enough to work on a green field project: the replatforming of our core site architecture. It started out with the home page and story pages, but it has grown to support multiple reader-facing products today, such as the video and audio pages.</p><p id="3291" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What was your first job?<br /></strong>I think it was at Blockbuster, back when renting physical movies was a thing. I thought I’d love the perk of free movie rentals, but the job was super boring so I only lasted a couple months.</p><p id="89ff" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is something most people don’t know about you?<br /></strong>I really enjoy seeing other people completely nerd out on a passion of theirs — it’s so fun seeing how much enjoyment someone gets out of something they care a lot about. What do I enjoy nerding out on? Halo!</p><p id="d31d" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is your secret to career success?<br /></strong>I have learned a lot from others. It’s an order of magnitude better and faster than figuring things out on your own.</p><p id="3528" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is your superpower?<br /></strong>I love picking up a topic I know little about and digging deep into the rabbit hole to understand all the nuances that usually takes a lot of time and experience to understand.</p><p id="f211" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What are you inspired by?<br /></strong>I’m inspired most by my dad. He’s a person of profound wisdom, but he also has deep humility and finds great joy in helping others.</p><p id="eaeb" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">Name one thing you’re excited about right now.<br /></strong>The NBA is back! It’s been such a slow grind these past few months without some elite-level basketball to watch.</p><p id="8e0b" class="it iu fq iv b iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq fi bv"><strong class="iv kc">What is your best advice for someone starting to work in your field?<br /></strong>Don’t be afraid to ask questions! Nobody really knows what they’re doing and we’re all just figuring it out, if someone else already has the answer, it usually just means they started earlier than you — there’s no shame in that.</p>]]></description>
      <link>https://open.nytimes.com/meeting-jeremy-gayed-lead-software-engineer-81ce9f612010</link>
      <guid>https://open.nytimes.com/meeting-jeremy-gayed-lead-software-engineer-81ce9f612010</guid>
      <pubDate>Thu, 17 Sep 2020 17:11:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Natalya Shelburne, Senior Software Engineer]]></title>
      <description><![CDATA[<p id="39db" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is your name?<br /></strong>Natalya Shelburne</p><p id="adad" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What are your pronouns?<br /></strong>She/Her</p><p id="cb58" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is your job?<br /></strong>Senior Software Engineer</p><p id="49da" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What does that mean?<br /></strong>I work on all things front-end at <em class="jq">The New York Times</em>.</p><p id="73cf" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">How long have you been at <em class="jq">The Times</em>?<br /></strong>It will be four years in October.</p><p id="f71b" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">Most <em class="jq">Times</em> employees are working remotely right now. Where are you working from these days?<br /></strong>My tiny apartment in Midtown Manhattan.</p><p id="999a" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">How do you start your day?<br /></strong>I usually wake up to a loud “mama!” shouted sometime before dawn, and I make a quick coffee (or two). I then do everything I can to set up as many Montessori-style activities for my daughter that allows me to work in enough 15-minute intervals to get through a day. Basically, I feel like I accomplish a whole day’s worth of tasks before 9 a.m.</p><p id="7f4d" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is something you’ve worked on recently?<br /></strong>A book! I collaborated with incredible design and engineering leaders on a book called “Design Engineering” about modern ideas, workflows and tools. The future of design and engineering collaboration is bright.</p><p id="e7aa" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">Tell us about a project you’ve worked on at <em class="jq">The Times</em> that you’re especially proud of.<br /></strong>The year I served on The Growth Framework committee — a team tasked with updating our old software engineering career ladder. My favorite contribution was pushing for intentionally shifting language to include the variety of contributions made by engineers at <em class="jq">The Times</em>. For example, shifting from “having ownership” to “showing initiative” to explicitly recognize the contributions of collaborators and discourage gatekeeping.</p><p id="0aed" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What was your first job?<br /></strong>A Christmas elf! Pointy ears, stockings, candy canes. It may have also been the best job I have ever had and definitely set a high bar.</p><p id="6d16" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is something most people don’t know about you?<br /></strong>Last year, I co-wrote a short film that was accepted into three film festivals.</p><p id="f8d1" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is your secret to career success?<br /></strong>Reconciling the potential of what something could be with the reality of what it actually is and accurately measuring the impact I can have. In other words, the ability to read a situation and know when to push through, wait out, or move on.</p><p id="1e2f" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is your superpower?<br /></strong>The simultaneous coexistence of relentless optimism and deeply pragmatic preparedness.</p><p id="080f" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What are you inspired by?<br /></strong>People who have a clear mission and whose actions line up with their priorities. Also, toddlers: they know how to live in the moment better than anyone.</p><p id="a372" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">Name one thing you’re excited about right now.<br /></strong>The world is in a state of unprecedented disruption, but I have to believe that the potential for profoundly positive change exists. For example, the sudden shift to remote work and lack of childcare has pulled back the curtain on the realities of just how much extra work parents and caregivers do, and the fragility of the support systems we have had to cobble together in order to go to work during the pandemic. Will we, as a society, rise to the occasion and improve these systems so that we can better support people? I hope so. We have to. Teaching and childcare are both full time jobs, and they should be valued and funded.</p><p id="26b7" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu"><strong class="iu kb">What is your best advice for someone starting to work in your field?<br /></strong>Value yourself, your opinions, and your contributions. Seek out and work with people who see your value and potential, and who don’t ask you to repeatedly prove yourself to them.</p><p id="c1d6" class="is it fo iu b iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp fg bu">There are a lot of people out there who are willing to take advantage of your self doubt. Don’t fall for it. Spend your energy on learning, growing, and creating.</p>]]></description>
      <link>https://open.nytimes.com/meeting-natalya-shelburne-senior-software-engineer-a1bf3eb4b6d9</link>
      <guid>https://open.nytimes.com/meeting-natalya-shelburne-senior-software-engineer-a1bf3eb4b6d9</guid>
      <pubDate>Thu, 03 Sep 2020 22:52:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Meeting… Katerina Iliakopoulou, Lead Software Engineer]]></title>
      <description><![CDATA[<p id="4407" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is your name?<br /></strong>Katerina Iliakopoulou</p><p id="49eb" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What are your pronouns?<br /></strong>She/Her</p><p id="a320" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is your job?<br /></strong>Lead Software Engineer</p><p id="903d" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What does that mean?<br /></strong>I help build products that enable the newsroom to reach our readers.</p><p id="a7aa" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">How long have you been at The Times?<br /></strong>Four years.</p><p id="7337" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">Most Times employees are working remotely right now. Where are you working from these days?<br /></strong>I’m working from my apartment in Astoria, Queens.</p><p id="10dd" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">How do you start your day?<br /></strong>I usually try to go out for a run for 30 minutes. I’m lucky to live right next to the waterfront, which means I get to enjoy the skyline views. Also, there are very few people outside early in the day.</p><p id="1563" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz">When I get back home, I get ready, make coffee and start working by checking email and Slack.</p><p id="0082" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is something you’ve worked on recently?<br /></strong>I’m working on understanding how New York Times content ranks on Google Search and collaborating with the newsroom to develop the tools that help them optimize for off-platform performance.</p><p id="9fa4" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">Tell us about a project you’ve worked on at The Times that you’re especially proud of.<br /></strong>That would be the work I did as the tech lead of the messaging group to scale our in-house messaging platform that sends newsroom-produced newsletters and push notifications. I led my team to redesign the platform architecture so that it can still send newsletters and push alerts to an increasingly growing audience, while also improving their delivery speed. I <a href="https://conferences.oreilly.com/software-architecture/sa-ny/public/schedule/detail/79994" class="cu hl ke kf kg kh" target="_blank" rel="noopener">presented this work at O’Reilly’s Software Architecture conference</a> in New York at the beginning of 2020.</p><p id="93c1" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What was your first job?<br /></strong>I worked as a research assistant in the Centre for Research &amp; Technology — Hellas (CERTH) in Greece on a European-funded project for viral news detection. During this project I had the opportunity to work with journalists from different news organizations, such as the BBC and Deutsche Welle, to develop a tool that helps reporters find breaking stories from social media posts.</p><p id="c9bd" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is something most people don’t know about you?<br /></strong>I dance tango!</p><p id="5094" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is your secret to career success?<br /></strong>Work hard and help others as you would hope they help you.</p><p id="761f" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is your superpower?<br /></strong>If I’m tired, I can fall asleep anywhere regardless of what’s happening around me. I have fallen asleep in clubs, loud bars, parties, on the beach, you name it.</p><p id="c5c2" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What are you inspired by?<br /></strong>My fiancé. He is brilliant and a constant inspiration for me to do more and aim higher.</p><p id="074d" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">Name one thing you’re excited about right now.<br /></strong>I have been focusing a lot on my yoga practice, so I’m excited to start reaching some new levels, such as being able to do a handstand.</p><p id="df5d" class="iu iv ar iw b ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm jn jo jp jq jr fi bz"><strong class="iw kd">What is your best advice for someone starting to work in your field?<br /></strong>Be intentional in your work. Know how you want to grow in your career and look out for opportunities that will help you build those skills. At the same time, be open to working on things you didn’t plan to. You might be surprised.</p>]]></description>
      <link>https://open.nytimes.com/meeting-katerina-iliakopoulou-lead-software-engineer-82b1dec8cc18</link>
      <guid>https://open.nytimes.com/meeting-katerina-iliakopoulou-lead-software-engineer-82b1dec8cc18</guid>
      <pubDate>Thu, 20 Aug 2020 17:50:00 +0200</pubDate>
    </item>
  </channel>
</rss>
