<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Christopher Heher</title>
    <description>The latest articles on DEV Community by Christopher Heher (@chrisheher).</description>
    <link>https://dev.to/chrisheher</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F390931%2Fdb2c8122-4b79-4ee7-9091-c301d79bdc05.jpeg</url>
      <title>DEV Community: Christopher Heher</title>
      <link>https://dev.to/chrisheher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chrisheher"/>
    <language>en</language>
    <item>
      <title>Why Debugging JavaScript Sucks — And What You Can Do About It</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Tue, 29 Jun 2021 18:46:37 +0000</pubDate>
      <link>https://dev.to/sentry/why-debugging-javascript-sucks-and-what-you-can-do-about-it-1lo7</link>
      <guid>https://dev.to/sentry/why-debugging-javascript-sucks-and-what-you-can-do-about-it-1lo7</guid>
      <description>&lt;p&gt;What makes JavaScript great is also what makes it frustrating to debug. Its asynchronous nature makes it easy to manipulate the DOM in response to user events, but it also makes it difficult to locate problems. And JavaScript’s ubiquity has resulted in a variety of runtimes (e.g. Chromium’s V8, Safari’s JavaScriptCore, and Firefox’s SpiderMonkey) but having so many platforms can cause dizzying idiosyncracies — all of which need to be supported equally.&lt;/p&gt;

&lt;p&gt;This makes pinning down the root cause of your JavaScript errors difficult. Is it a memory leak? Browser-specific bug? Or maybe you referenced the wrong value of &lt;code&gt;this&lt;/code&gt;? And while there are options to debug your JavaScript, none of them are particularly pleasant:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reproducing the issue&lt;/strong&gt; is the equivalent of cooking a poorly received dinner again just to taste what went wrong. And it’s borderline impossible to reproduce the exact conditions of runtime environments, hardware, and network inconsistencies.&lt;/p&gt;

&lt;p&gt;While &lt;strong&gt;console.log&lt;/strong&gt; is great if you’re debugging locally, it’s not really helpful if you can’t reproduce it — or if you want to debug in production. That’s because logging merely identifies where in the codebase you are — but not what the problem is.&lt;/p&gt;

&lt;p&gt;If you have managed to successfully reproduce a bug, &lt;strong&gt;in-browser debugging tools&lt;/strong&gt; are the next step, but if you don’t have &lt;a href="https://docs.sentry.io/platforms/javascript/sourcemaps/"&gt;source maps&lt;/a&gt; available in production, good luck finding the root cause as you squint at minified JavaScript and opaque error codes.&lt;/p&gt;

&lt;h1&gt;
  
  
  It’s Ok To Be Lazy
&lt;/h1&gt;

&lt;p&gt;Let’s be honest: you didn’t get this far by working hard. You did it by figuring out which tools can do the hard work for you. And &lt;a href="http://sentry.io/for/javascript"&gt;Sentry’s suite of monitoring tools&lt;/a&gt; seamlessly hooks into your runtime environment to do the heavy lifting of debugging for you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.sentry.io/platforms/javascript/"&gt;&lt;strong&gt;Sentry for JavaScript&lt;/strong&gt;&lt;/a&gt; gives you complete context in the form of full stack traces, support for source maps that unminify your code, and direct integration with your source code management tool to help you &lt;a href="https://docs.sentry.io/product/sentry-basics/guides/integrate-frontend/configure-scms/"&gt;identify the commit&lt;/a&gt; that broke your code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ASkphXqo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f4ep5mfbll6ogshoiub1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ASkphXqo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f4ep5mfbll6ogshoiub1.png" alt="suspect-commit"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Suspect commits show you the commit that introduced the error.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our &lt;a href="https://docs.sentry.io/product/issues/issue-details/"&gt;&lt;strong&gt;Issue Details&lt;/strong&gt;&lt;/a&gt; page gives you the device, OS, browser of your user to give you full visibility into what led up to your JavaScript incident. And if you are using &lt;code&gt;console.log&lt;/code&gt; to debug in production, we can capture &lt;a href="https://docs.sentry.io/product/issues/issue-details/breadcrumbs/"&gt;breadcrumbs&lt;/a&gt; to create the trail of events that happened prior to an issue — then use our rich, structured data to see beyond what any log can give you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HK69V_0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s5wt9f8j4kpymcviz4k4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HK69V_0b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s5wt9f8j4kpymcviz4k4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And with &lt;a href="https://docs.sentry.io/product/discover-queries/"&gt;&lt;strong&gt;Discover&lt;/strong&gt;&lt;/a&gt;, our intuitive query builder, you can debug with pre-built searches that filter your JavaScript events, unique errors, errors by URL, and client. Check out Discover’s &lt;a href="https://blog.sentry.io/2020/02/11/new-debugging-superpowers-with-discover"&gt;debugging superpowers&lt;/a&gt; — and how we used it to root out our own &lt;a href="https://blog.sentry.io/2021/02/11/patching-a-flood-of-404s"&gt;404 errors&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Brian Kernighan — the inventor of Unix — said the most effective debugging tool is careful thought. Well, Kernighan didn’t have to didn’t have to debug why a valid regular expression throws an exception on Safari — or deal with the rapid increase of JavaScript-driven web APIs. But with Sentry’s application monitoring tools, you can save your careful thought for where it belongs: your code, not your errors.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Jamstack, Next.js, Netlify, and Sentry: How The Pieces Fit</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Thu, 17 Jun 2021 22:24:00 +0000</pubDate>
      <link>https://dev.to/sentry/jamstack-next-js-netlify-and-sentry-how-the-pieces-fit-4322</link>
      <guid>https://dev.to/sentry/jamstack-next-js-netlify-and-sentry-how-the-pieces-fit-4322</guid>
      <description>&lt;p&gt;Jamstack (Javascript + APIs + Markup) is a web architecture that combines the convenience of pre-built websites with the capacity to handle custom APIs and serverless functions. By separating the frontend UI from backend databases, Jamstack allows developers to structure their application in ways that deliver dynamic content faster. Jamstack also gives you the ability to deploy your frontend directly to a CDN, which enables modular development that can leverage a huge ecosystem of third-party tools — including Sentry.&lt;/p&gt;

&lt;h1&gt;
  
  
  Next.js
&lt;/h1&gt;

&lt;p&gt;Next.js offers everything you want in a JavaScript framework: minimal configuration, TypeScript support, smart bundling, and route prefetching.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"We manage several large customer-facing properties and Next.js gives us the flexibility to easily build static and dynamic pages without spinning up servers or sacrificing the end-user experience. With Next.js, we can see our changes locally in 100s of milliseconds and have reduced build times for our larger projects from 35 minutes to 7."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;–Michael Wickett, Group Manager, Web Development, HashiCorp&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo37xwff8a2lldpepytcq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo37xwff8a2lldpepytcq.png" alt="next.js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And when you install our &lt;a href="https://blog.sentry.io/2021/06/10/sentry-application-monitoring-for-next-js" rel="noopener noreferrer"&gt;freshly-released Next.js SDK&lt;/a&gt;, you get the necessary context to understand how certain events can lead to errors or performance issues in your application. Our &lt;a href="https://docs.sentry.io/platforms/javascript/guides/nextjs/" rel="noopener noreferrer"&gt;Next.js SDK&lt;/a&gt; automatically captures errors, breadcrumbs that show what led to an issue, and all the meta data required to fully diagnose a critical problem.&lt;/p&gt;

&lt;h1&gt;
  
  
  Netlify
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://www.netlify.com/products/?utm_source=netlify.com%2Fblog%2F&amp;amp;utm_medium=blog&amp;amp;utm_campaign=partner-post-sentry" rel="noopener noreferrer"&gt;Netlify platform&lt;/a&gt; combines modern build workflows, serverless functions, and an edge network to deliver simple, secure, and scalable Jamstack applications. With Netlify’s custom testing environments, you’re able to evaluate multiple new features at the same time without needing to schedule feature previews for approval on a single test instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg0zgc5u9vc3rsf6yblm.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg0zgc5u9vc3rsf6yblm.jpeg" alt="netlify"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Sentry Build Plugin for Netlify
&lt;/h1&gt;

&lt;p&gt;And just as Netlify hosts your Jamstack application, Sentry monitors it with our &lt;a href="https://blog.sentry.io/2020/06/08/automating-sentry-releases-with-our-netlify-build-plugin" rel="noopener noreferrer"&gt;Build Plugin&lt;/a&gt;. Not only does our Build Plugin automatically notify you of new releases, it uploads source maps and configures suspect commits within the Sentry platform. And if you do see anything suspicious, Netlify makes it easy to instantly roll back to a previous, sturdier version of your application.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"The most noticeable for us was saving an average of three hours per week on performing deploys, setting up configurations and maintaining infrastructure. For a small web dev team, this has a huge impact."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;–Primož Bevk, Senior IT Strategist at Outfit7&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Discover
&lt;/h1&gt;

&lt;p&gt;It’s not enough to know when a performance issue happened. You need to know who’s impacted by that issue, to what extent, and how it occurred. &lt;a href="https://docs.sentry.io/product/sentry-basics/guides/discover/" rel="noopener noreferrer"&gt;Discover&lt;/a&gt; solves these needs, as you can identify application performance issues, analyze releases, define a metric alert to get notified of similar issue — in addition to evaluating the line of code that’s causing the error.&lt;/p&gt;

&lt;p&gt;Just as application errors are related, the tools to fix those errors should be related as well. It’s why you don’t need a bunch of disconnected tools to monitor your application; you need an integrated, intuitive approach to investigate problems. With Jamstack’s simplicity and Sentry’s visibility, you’re well on your way toward creating — and maintaining — the type of applications that your customers demand.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>nextjs</category>
      <category>netlify</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>How to Find Root Causes (Faster)</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Thu, 17 Jun 2021 21:49:27 +0000</pubDate>
      <link>https://dev.to/sentry/how-to-find-root-causes-faster-2n4g</link>
      <guid>https://dev.to/sentry/how-to-find-root-causes-faster-2n4g</guid>
      <description>&lt;p&gt;Like a bratty teenager, traditional monitoring answers your questions, but does so in a terse, unhelpful manner:&lt;/p&gt;

&lt;p&gt;Why is my page slow?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Guess it’s the API call. It’s a 504 thing — you wouldn’t understand.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ok, so why is the API call slow?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ask your DB query. Gosh!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You need a better conversation with your code — one which gives you contextual clues about your application’s performance. And that’s what we’ve delivered with our new &lt;a href="https://docs.sentry.io/product/sentry-basics/tracing/trace-view/" rel="noopener noreferrer"&gt;Trace View and Quick View&lt;/a&gt; features.&lt;/p&gt;

&lt;h1&gt;
  
  
  Connect your slow-loading dots with Trace View
&lt;/h1&gt;

&lt;p&gt;Trace View gives you a throughline between transactions across all your projects. Now you can follow poor performance to its root cause by drilling down into the details of a single trace as well as crisscrossing between front- and back-end transactions in that trace.&lt;/p&gt;

&lt;p&gt;For example: say you have a React single-page app, and it makes a call to a backend API in Python, which then queries the database. By using Trace View, you can see how your code progresses from the initial call to the final query — and see how related errors react to each other in context.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/GHIqTh_-KTU"&gt;
&lt;/iframe&gt;
&lt;br&gt;
&lt;em&gt;In the above video tutorial, see how you can use Trace View to jump between parent and child transactions and, ultimately, gain a better understanding of your endpoints.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Tl;dr your errors with Quick Trace
&lt;/h1&gt;

&lt;p&gt;You don’t read logs — you scan them. So why should your application monitoring be any different? Quick Trace gives you the context you need to see details at a glance as well as get visibility into the bigger picture. Our Quick Trace minimap helps you navigate related errors and children transactions. With it, you can flit between related errors and performance issues while also being able to order metadata like device, OS, and browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frylv46wiv7vblifdf9u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frylv46wiv7vblifdf9u5.png" alt="quick-trace-screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Quick Trace shows related transactions, along with any errors that occurred in them. Now you can navigate between the events of a trace without having to go back and forth between tabs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Developers know that there’s no such thing as an isolated issue. Many of your frontend errors will have roots in your backend infrastructure — and vice versa. With our new &lt;a href="https://docs.sentry.io/product/sentry-basics/tracing/trace-view/" rel="noopener noreferrer"&gt;Trace View and Quick View&lt;/a&gt;, you’re able to see the problem clearly — so that you can solve it quicker.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Find the Root Cause Faster with Trace View and Quick Trace</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Wed, 16 Jun 2021 19:56:48 +0000</pubDate>
      <link>https://dev.to/chrisheher/find-the-root-cause-faster-with-trace-view-and-quick-trace-4f9b</link>
      <guid>https://dev.to/chrisheher/find-the-root-cause-faster-with-trace-view-and-quick-trace-4f9b</guid>
      <description>&lt;p&gt;Like a bratty teenager, traditional monitoring answers your questions, but does so in a terse, unhelpful manner:&lt;/p&gt;

&lt;p&gt;Why is my page slow? &lt;br&gt;
&lt;em&gt;Guess it’s the API call. It’s a 504 thing — you wouldn’t understand.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ok, so why is the API call slow? &lt;br&gt;
&lt;em&gt;Ask your DB query. Gosh!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You need a better conversation with your code — one which gives you contextual clues about your application’s performance. And that’s what we’ve delivered with our new &lt;a href="https://docs.sentry.io/product/sentry-basics/tracing/trace-view/"&gt;Trace View and Quick View&lt;/a&gt; features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect your slow-loading dots with Trace View
&lt;/h2&gt;

&lt;p&gt;Trace View gives you a throughline between transactions across all your projects. Now you can follow poor performance to its root cause by drilling down into the details of a single trace as well as crisscrossing between front- and back-end transactions in that trace. &lt;/p&gt;

&lt;p&gt;For example: say you have a React single-page app, and it makes a call to a backend API in Python, which then queries the database. By using Trace View, you can see how your code progresses from the initial call to the final query — and see how related errors react to each other in context. &lt;/p&gt;

&lt;h2&gt;
  
  
  Tl;dr your errors with Quick Trace
&lt;/h2&gt;

&lt;p&gt;You don’t read logs — you scan them. So why should your application monitoring be any different? Quick Trace gives you the context you need to see details at a glance as well as get visibility into the bigger picture. Our Quick Trace minimap helps you navigate related errors and children transactions. With it, you can flit between related errors and performance issues while also being able to order metadata like device, OS, and browser. &lt;/p&gt;

&lt;p&gt;Developers know that there’s no such thing as an isolated issue. Many of your frontend errors will have roots in your backend infrastructure — and vice versa. With our new &lt;a href="https://docs.sentry.io/product/sentry-basics/tracing/trace-view/"&gt;Trace View and Quick View&lt;/a&gt;, you’re able to see the problem clearly — so that you can solve it quicker.  &lt;/p&gt;

&lt;p&gt;Try Sentry for &lt;a href="https://sentry.io/orgredirect/try-business/"&gt;free&lt;/a&gt; today or contact us at &lt;a href="//mailto:sales@sentry.io"&gt;sales@sentry.io&lt;/a&gt; to get started.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Measuring Success with Sentry</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Tue, 18 May 2021 22:00:52 +0000</pubDate>
      <link>https://dev.to/sentry/measuring-success-with-sentry-5hjn</link>
      <guid>https://dev.to/sentry/measuring-success-with-sentry-5hjn</guid>
      <description>&lt;p&gt;In the early days of web development, there was one way to measure code: WTFs per minute. It was a metric that could be applied across all languages, as every developer knew what WTF meant (Works That Frustrate, obviously). &lt;/p&gt;

&lt;p&gt;Today, however, code is too intricate — and important — for clever, opaque metrics. You need objective data that communicates the quality and stability of your code — KPIs such as events accepted, transaction outcomes, and crash-free sessions.&lt;/p&gt;

&lt;p&gt;For &lt;a href="https://sentry.io/for/full-stack/"&gt;Measurement May&lt;/a&gt;, we’re building out features designed to deliver the right metrics, all so you can drive the right outcomes for your organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Your 0wn Visibility with Custom Dashboards
&lt;/h2&gt;

&lt;p&gt;Understanding the state of your application starts with understanding the errors, transactions, and attachments that make up your event data. With our latest update to &lt;a href="https://docs.sentry.io/product/dashboards/custom-dashboards/"&gt;Dashboards&lt;/a&gt;, you’re able to surface critical event data as well as share that data across your organization. While we’ve equipped Dashboards with a library of &lt;a href="https://sentry.io/features/dashboards/"&gt;prebuilt widgets&lt;/a&gt; — issues by region, performance over time, release quality over time — you can also build your own custom queries within your personal dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/73OltikqARGMLOmjJkd0Q8/89a2109003ebc600a220c937a323c0aa/dashboard_custom.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/73OltikqARGMLOmjJkd0Q8/89a2109003ebc600a220c937a323c0aa/dashboard_custom.png" alt="dashboard-custom"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And you can enhance your visibility even more when you combine Dashboards with Discover, our query builder. Say you've built a widget that compiles top issues across all your projects: &lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/4Cy5V3fMl6jDq6ihrKD0F/c658e0f2a39ccfab2b6c9c635c09bac9/Screen_Shot_2021-05-16_at_8.45.38_PM.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/4Cy5V3fMl6jDq6ihrKD0F/c658e0f2a39ccfab2b6c9c635c09bac9/Screen_Shot_2021-05-16_at_8.45.38_PM.png" alt="dashboard-widget-top-issues "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you open this widget in &lt;a href="https://sentry.io/features/custom-queries/"&gt;Discover&lt;/a&gt;, you can measure progress across multiple projects over time while also comparing additional filters — unhandled errors, URL, browser type, etc. This way, instead of scrolling through listed queries, you’re able to provide clear visualizations to higher-level managers so you can achieve consensus over what to do next. &lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/4aPpjhdedg6QwzdjqOjFCT/341c19ac44b073d7f5a308081c594ea7/Screen_Shot_2021-05-16_at_8.47.24_PM.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/4aPpjhdedg6QwzdjqOjFCT/341c19ac44b073d7f5a308081c594ea7/Screen_Shot_2021-05-16_at_8.47.24_PM.png" alt="dashbaord-to-discover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  All Details, One View with Project Details
&lt;/h2&gt;

&lt;p&gt;It’s a common plight among developers: twenty tabs open, just to figure out one problem. Your errors, transactions, and sessions shouldn’t be spread across different screens. They should be available on one screen, and at a glance. Our new &lt;a href="https://docs.sentry.io/product/projects/project-details/"&gt;Project Details&lt;/a&gt; page unifies a developer’s monitoring experience across all aspects of a project - health, speed, recent alerts, and releases. With it, you’re able to see project-wide KPIs for stability (crash-free sessions), velocity (number of releases), and performance (Apdex score). You can also compare this data over time so that you’re able to track incremental progress.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/2974hx3YpvHoBQqYsTXf9i/547b473031c396eacc2ae84ecc8a2973/project_details.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/2974hx3YpvHoBQqYsTXf9i/547b473031c396eacc2ae84ecc8a2973/project_details.png" alt="project-detail"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Know How Much Sentry You’re Using with Org Stats
&lt;/h2&gt;

&lt;p&gt;For developers who manage other developers, statistics is the language you use to control spend, manage quotas, and create efficiencies. With our new &lt;a href="https://docs.sentry.io/product/accounts/quotas/org-stats/"&gt;Org Stats&lt;/a&gt; page, you now have the information you need to see which areas of your codebase demand the most resources. With it, you can track how many issues are being created — and resolved — per week for each project. Charts and tables also provide insight into per-project usage over time of your errors, transactions, and attachments. Now you can not only see which projects had a recent spike, but you can also link to the project details screen and immediately see what needs to be addressed.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/5WaKnb3DOYGNHXfFXMwrqV/fde6607dd7730913e9b44c72da4bcd74/org-stats-page.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/5WaKnb3DOYGNHXfFXMwrqV/fde6607dd7730913e9b44c72da4bcd74/org-stats-page.png" alt="org-stats-page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Measurement May is upon us. Here’s a primer on Google’s upcoming &lt;a href="https://blog.sentry.io/2021/05/05/measuring-user-experience-with-web-vitals/"&gt;Web Vitals update&lt;/a&gt;, and also &lt;a href="https://us06web.zoom.us/webinar/register/1916196546728/WN_cTW7PIYURvqn2eJz2FQ9rg"&gt;join us&lt;/a&gt; on May 20th for a live demo on how to build custom dashboard widgets and much more. &lt;/p&gt;

&lt;p&gt;New to Sentry? Try it for &lt;a href="https://sentry.io/orgredirect/try-business/"&gt;free&lt;/a&gt; today or contact &lt;a href="//mailto:sales@sentry.io"&gt;sales@sentry.io&lt;/a&gt; to get started.&lt;/p&gt;

</description>
      <category>orgstats</category>
      <category>quicktrace</category>
      <category>customdashboards</category>
      <category>measurementmay</category>
    </item>
    <item>
      <title>Measuring User Experience with Web Vitals
</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Fri, 07 May 2021 16:54:49 +0000</pubDate>
      <link>https://dev.to/sentry/measuring-user-experience-with-web-vitals-2fjf</link>
      <guid>https://dev.to/sentry/measuring-user-experience-with-web-vitals-2fjf</guid>
      <description>&lt;p&gt;Top of search for you means top of mind for your customers. And with Google’s upcoming Page Experience update to &lt;a href="https://sentry.io/for/web-vitals"&gt;Web Vitals&lt;/a&gt; taking place in a few weeks, now’s the right time to optimize your user experience. But before you can optimize your user’s experience, you need to be able to measure it. We’re kicking off Measurement May by breaking down how Google uses Web Vitals data — and how you can instrument that data with Sentry. &lt;/p&gt;

&lt;h2&gt;
  
  
  Web Vitals Basics
&lt;/h2&gt;

&lt;p&gt;This past May, Google introduced &lt;a href="https://blog.sentry.io/2020/11/10/sentry-fall-semester-web-vitals-101"&gt;Web Vitals&lt;/a&gt;, a set of three key user experience metrics:&lt;/p&gt;

&lt;p&gt;Largest Contentful Paint (LCP) measures a page’s &lt;strong&gt;loading&lt;/strong&gt;. The goal here should be a LCP within 2.5 seconds once the page starts loading. &lt;/p&gt;

&lt;p&gt;First Input Delay (FID)  measures a page’s &lt;strong&gt;interactivity&lt;/strong&gt;. A solid user experience here means there’s a FID of less than 100 milliseconds.&lt;/p&gt;

&lt;p&gt;Cumulative Layout Shift (CLS) measures a page’s &lt;strong&gt;visual stability&lt;/strong&gt;. For a good user experience, CLS should be less than 0.1 seconds..&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/393zMaJyvc56O9Nku46LAN/bc6e592f9e2af5d252519d0a83a06f4a/dd.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/393zMaJyvc56O9Nku46LAN/bc6e592f9e2af5d252519d0a83a06f4a/dd.png" alt="dd"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Web Vitals + Page Experience
&lt;/h2&gt;

&lt;p&gt;After their upcoming Page Experience update, Google will evaluate your web pages moving forward with these four metrics:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mobile Friendliness&lt;/strong&gt; determines whether content is responsive to mobile devices — making sure joins and on-page components are stable for a spectrum of devices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Safe Browsing&lt;/strong&gt; assesses whether a site has issues with malware, phishing, and hacked content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTTPS&lt;/strong&gt; evaluates whether the site’s association is secure and if the site is being served over HTTPS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-Intrusive Interstitials&lt;/strong&gt; ensures that certain content won’t be blocked for pop-up content as a user explores the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results Are In (Your Content)
&lt;/h2&gt;

&lt;p&gt;It makes sense that &lt;em&gt;Google’s&lt;/em&gt; Web Vitals will impact how your website will be ranked in search. But Google’s aim here isn’t to be some fussy stickler about how you build out your content — it’s to raise the conversation around content itself. With these new guardrails, Google is able to push down content created for its own sake, and elevate content that’s created with a user’s experience in mind. &lt;/p&gt;

&lt;h2&gt;
  
  
  The E-Commerce Impact
&lt;/h2&gt;

&lt;p&gt;Because they’re often large (thousands of SKUs), complex (dynamic pricing and backend security measures), and dependent on search (via keywords), e-commerce services in particular will benefit from increased Web Vitals and site performance. And because each page in an e-commerce domain is indexable and searchable, every product page now represents an opportunity to generate revenue — if it has strong Web Vitals data. &lt;/p&gt;

&lt;h2&gt;
  
  
  Be Performant. Use Performance.
&lt;/h2&gt;

&lt;p&gt;With Performance, you’re able to compare user metrics such as network speed, browser, device, and region against Web Vitals thresholds. This helps you see those specific transactions which are slowing your user’s experience down. You can hone in even further by building a custom query in Discover — say, adding event tags as filters to your query. &lt;/p&gt;

&lt;p&gt;In this webinar, Sentry Product Manager Jeremy Bourque demonstrates how you can set up Sentry's performance monitoring to surface poor-performing pages through Web Vitals. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rEhs0S3YaN0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;While gathering Web Vitals data is important, you still need visibility of that data across all your projects. With our new Quick Trace feature, you’re able to easily navigate between errors and performance issues via a mini-map. And our Trace View gives you a waterfall visualization across all your transaction times, so you can see what project is responsible for the most problems. With it, you’re able to see dependencies of any given trace in a single view as well as what projects they live in. &lt;/p&gt;

&lt;p&gt;For some, Web Vitals represents an inconvenient data hoop that their code has to jump through. For others — and hopefully, you — Web Vitals is an opportunity to distinguish yourself in the marketplace, as less than 15% of sites are optimized well enough to pass a Core Web Vitals assessment. It’s the metric that can be the difference between your customer buying — or bouncing.&lt;/p&gt;

&lt;p&gt;Measurement May is just getting started.  In an upcoming &lt;a href="https://us06web.zoom.us/webinar/register/1916196546728/WN_cTW7PIYURvqn2eJz2FQ9rg"&gt;live workshop&lt;/a&gt;, a Sentry Solutions Engineer will show you how you can analyze event data to measure the health of your application.&lt;/p&gt;

&lt;p&gt;Get started with &lt;a href="https://docs.sentry.io/product/performance/"&gt;Performance&lt;/a&gt; and drop us a line at our &lt;a href="https://forum.sentry.io/"&gt;forum&lt;/a&gt; or on &lt;a href="https://discord.com/invite/sentry"&gt;Discord&lt;/a&gt;. And if you’re new to Sentry, you can try it for &lt;a href="https://sentry.io/orgredirect/try-business/"&gt;free&lt;/a&gt; today or write to &lt;a href="//mailto:sales@sentry.io"&gt;sales@sentry.io&lt;/a&gt; to get started.&lt;/p&gt;

</description>
      <category>webvitals</category>
    </item>
    <item>
      <title>Issue Detail Performance Improvements</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Fri, 09 Apr 2021 21:56:32 +0000</pubDate>
      <link>https://dev.to/sentry/issue-detail-performance-improvements-348a</link>
      <guid>https://dev.to/sentry/issue-detail-performance-improvements-348a</guid>
      <description>&lt;p&gt;One of Sentry’s most-trafficked pages is our issue details page, as it helps our customers understand the root cause of an error. For those of you who are new to Sentry, we define an issue as a group of similar events. And to render these issue details, we need to fetch a significant amount of data from these events — counts, charts, and other metadata.&lt;/p&gt;

&lt;p&gt;There are two components to this page: latest event, and summary statistics. And the problem we faced was that the page was loading the latest event only after loading the summary statistics, creating response times of more than a second.&lt;/p&gt;

&lt;p&gt;We had no idea what — or why — this was happening. First, we worked toward solving the what. Using &lt;a href="https://sentry.io/for/performance/"&gt;Performance&lt;/a&gt;, we noticed that the latest event loaded only after the summary statistics loaded; that is, we could see the second request could only start after the first request had finished.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/7ne4bx9Rvnth02fm4I5kHO/d9bf251b8d69fcd61835b160ce484eab/image3.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/7ne4bx9Rvnth02fm4I5kHO/d9bf251b8d69fcd61835b160ce484eab/image3.png" alt="dogfood-issues1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, the why: looking into the issue page’s &lt;a href="https://docs.sentry.io/platforms/javascript/guides/react/performance/"&gt;React&lt;/a&gt; component tree, we noticed that the latest event component was a child of the summary component.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/7x4sYNyd8k1Xg6mMlka19D/b97788c7b811d37fa0452325a98ea985/Group_1.jpg" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/7x4sYNyd8k1Xg6mMlka19D/b97788c7b811d37fa0452325a98ea985/Group_1.jpg" alt="dogfood-issues2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Although we were fetching the data for the latest event in its component, because this component could only begin rendering after its parent has fully rendered (which in turn is blocked by the parent request), the two requests were not parallelized.&lt;/p&gt;

&lt;p&gt;Our fix was to begin loading data from both endpoints higher in the component tree, allowing us to parallelize both requests. Then we passed the result down so each component can render as soon as its data became available.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/698SmrDiQIZO6jfNdfNqND/78ef343dd2c82ff8b9c23ddaaffa7247/image4.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/698SmrDiQIZO6jfNdfNqND/78ef343dd2c82ff8b9c23ddaaffa7247/image4.png" alt="dogfood-issues3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the fix, the issue page’s P75 response time dropped by about 1 second:&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/5sH13CrBVSRdBkjw6KfLYT/9efd71304acdc77f2b2bfb0ddbac747c/image2.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/5sH13CrBVSRdBkjw6KfLYT/9efd71304acdc77f2b2bfb0ddbac747c/image2.png" alt="dogfood-issues4"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You can’t fix what you can’t see. And because Performance gave us the visibility into the two requests that needed to be parallelized (but weren’t), we were able to find the quickest path to a solution — and a faster page for our customers.&lt;/p&gt;

</description>
      <category>performance</category>
    </item>
    <item>
      <title>Using Feature Flags in Sentry</title>
      <dc:creator>Christopher Heher</dc:creator>
      <pubDate>Fri, 09 Apr 2021 16:42:30 +0000</pubDate>
      <link>https://dev.to/sentry/using-feature-flags-in-sentry-1dc8</link>
      <guid>https://dev.to/sentry/using-feature-flags-in-sentry-1dc8</guid>
      <description>&lt;p&gt;From testing in production to running A/B tests, feature flags have a range of uses. At Sentry, one way we use feature flags is to safely allow beta access to new features for some of our “Early Adopter” customers. &lt;/p&gt;

&lt;p&gt;Because you can set multiple combinations of feature flags, every user is likely to have a different experience. While that's great for finding answers and iterating on product, it can be increasingly difficult to determine where certain &lt;a href="https://sentry.io/for/full-stack/"&gt;errors&lt;/a&gt; and &lt;a href="https://sentry.io/for/performance/"&gt;performance&lt;/a&gt; issues are coming from. Are my users having trouble because they are part of experiment A or experiment B — or some combination of the two?&lt;/p&gt;

&lt;h3&gt;
  
  
  Tagging feature flags
&lt;/h3&gt;

&lt;p&gt;Thankfully, Sentry can answer these questions using tags. Tags are key/value string pairs that you can bind to your events and transactions.&lt;/p&gt;

&lt;p&gt;You'll want to set a new tag for each feature flag you want to surface in Sentry. Here is some code in one of my apps that passes in the &lt;code&gt;show_widget&lt;/code&gt; feature flag for a given user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;Sentry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;dsn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;__DSN__&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;Sentry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;show_widget&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;showWidget&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After you start passing in feature flag data, you'll begin seeing your new tags in Sentry. In the example below, you can see that this issue primarily impacts those users who are seeing our new widget feature.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/1TfLBdKcLqOoxfgA7AjLm4/166d33972e3fe9597870b40369b837a8/screenshot-issue-details-focus.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/1TfLBdKcLqOoxfgA7AjLm4/166d33972e3fe9597870b40369b837a8/screenshot-issue-details-focus.png" alt="flg1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Discover + Tags
&lt;/h3&gt;

&lt;p&gt;Once you have your tags set up, you can use &lt;a href="https://docs.sentry.io/product/discover-queries/"&gt;Discover&lt;/a&gt; to see which combination of feature flags are causing errors or performance issues.&lt;br&gt;
In Sentry, navigate to Discover and click Build A New Query. Then, add columns for each of the feature flags/experiments in question.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/32OrNRVSazTN97AaNfnZ9a/a69db0832c64408b3883000d36006b6d/screenshot-discover-columns-focused.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/32OrNRVSazTN97AaNfnZ9a/a69db0832c64408b3883000d36006b6d/screenshot-discover-columns-focused.png" alt="flg2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've done that, you'll be able to see which flags are causing problems for your users.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/em6l9zw4tzag/2oJ0J0209ixlHSCxgb8bnV/fdb359e2a23b74a3b9d58941ef943b49/screenshot-discover.png" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/em6l9zw4tzag/2oJ0J0209ixlHSCxgb8bnV/fdb359e2a23b74a3b9d58941ef943b49/screenshot-discover.png" alt="flg3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It looks as if errors were primarily impacting the intersection of users who have both the show widget feature enabled and variation 2 of our new checkout experiment. From here, we’re able to use Discover to drill down exactly what issue is causing problems. Then we can decide which feature flag needs to be disabled until we have had the chance to fix the problem. Crisis averted.&lt;/p&gt;

&lt;p&gt;Feature flags allow you to control access for a variety of release scenarios: new features for early adopters, organizations with special plans, or even incremental releases. By safely activating — or deactivating — certain features, flags can close your feedback loop, while allowing you to address an issue without the pressure and stress of a live incident.&lt;/p&gt;

&lt;p&gt;Want to learn more about what we’ve done with feature flags? Here’s our latest &lt;a href="https://blog.sentry.io/2021/03/25/using-sentry-performance-to-make-sentry-performant"&gt;Dogfooding Chronicles&lt;/a&gt; post. If you’re new to Sentry, you can try it for &lt;a href="https://sentry.io/orgredirect/try-business/"&gt;free&lt;/a&gt; today.&lt;/p&gt;

</description>
      <category>featureflags</category>
    </item>
  </channel>
</rss>
