# mutation

Published articles for mutation.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## How to evaluate session replay software: a developer's guide

DevFeed: [How to evaluate session replay software: a developer's guide](<https://devfeed.tech/articles/how-to-evaluate-session-replay-software-a-developer-s-guide-24098.md>)

Original publisher: [Read original article](<https://blog.sentry.io/evaluate-session-replay-software/>)

Author: Lindsay Piper

Published: 2026-08-26T09:00:00Z

Content type: tutorial

Language: en

Sources: [Sentry Blog](<https://devfeed.tech/sources/sentry-blog.md>)

Topics: [session replay](<https://devfeed.tech/topics/session-replay.md>), [Playback](<https://devfeed.tech/topics/playback.md>), [sensitive data](<https://devfeed.tech/topics/sensitive-data.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [debug](<https://devfeed.tech/tags/debug.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [developer](<https://devfeed.tech/tags/developer.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [guide](<https://devfeed.tech/tags/guide.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [playback](<https://devfeed.tech/tags/playback.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [sensitive-data](<https://devfeed.tech/tags/sensitive-data.md>), [session-replay](<https://devfeed.tech/tags/session-replay.md>), [tool](<https://devfeed.tech/tags/tool.md>), [ux](<https://devfeed.tech/tags/ux.md>)

### AI overview

A developer guide to evaluating session replay software by comparing recording methods, privacy architecture, error-monitoring integration, overhead, AI debugging compatibility, and mobile support. It distinguishes UX analytics tools from developer debugging tools and explains the tradeoffs between DOM snapshot recording and pixel capture.

### Source excerpt

Compare session replay tools on recording methodology, privacy architecture, integration depth, overhead, AI-readability, and mobile support

## Using Mutation Testing to Evaluate Test Suite Effectiveness

DevFeed: [Using Mutation Testing to Evaluate Test Suite Effectiveness](<https://devfeed.tech/articles/test-your-test-23032.md>)

Original publisher: [Read original article](<https://www.javaadvent.com/2025/12/test-your-test.html>)

Author: Andres Sacco

Published: 2025-12-04T02:02:10Z

Content type: tutorial

Language: en

Sources: [Java Advent Calendar](<https://devfeed.tech/sources/java-advent-calendar.md>)

Topics: [mutation-testing](<https://devfeed.tech/topics/mutation-testing.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [code](<https://devfeed.tech/tags/code.md>), [code-coverage](<https://devfeed.tech/tags/code-coverage.md>), [effective](<https://devfeed.tech/tags/effective.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [mutation-testing](<https://devfeed.tech/tags/mutation-testing.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

The article explains why high code coverage does not necessarily indicate effective tests. It introduces mutation testing, which evaluates a test suite by making small controlled changes to source code and checking whether the tests detect those changes.

### Source excerpt

Creating or modifying an application involves many aspects, such as following best practices and applying design patterns to solve everyday problems. After writing the code, developers usually add unit tests and rely on tools like Sonar to track metrics such as code coverage and highlight potentially untested areas. However, high test coverage does not guarantee [...] The post Test Your Test appeared first on JVM Advent.

## Simplify Your Code: Functional Core, Imperative Shell

DevFeed: [Simplify Your Code: Functional Core, Imperative Shell](<https://devfeed.tech/articles/simplify-your-code-functional-core-imperative-shell-23865.md>)

Original publisher: [Read original article](<http://testing.googleblog.com/2025/10/simplify-your-code-functional-core.html>)

Author: Google Testing Bloggers (noreply@blogger.com)

Published: 2025-10-20T13:53:00Z

Content type: tutorial

Language: en

Sources: [Google Testing Blog](<https://devfeed.tech/sources/google-testing-blog.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [IO](<https://devfeed.tech/topics/io.md>)

Tags: [arham-jain](<https://devfeed.tech/tags/arham-jain.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [email](<https://devfeed.tech/tags/email.md>), [function](<https://devfeed.tech/tags/function.md>), [functional](<https://devfeed.tech/tags/functional.md>), [map](<https://devfeed.tech/tags/map.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [network](<https://devfeed.tech/tags/network.md>), [state](<https://devfeed.tech/tags/state.md>), [test](<https://devfeed.tech/tags/test.md>), [tott](<https://devfeed.tech/tags/tott.md>)

### AI overview

This tutorial explains the functional core, imperative shell pattern: keep pure, testable business logic separate from side effects such as database calls, network requests, email delivery, and external state mutation. It demonstrates the pattern by refactoring expiration-notification code.

### Source excerpt

This article was adapted from a Google Tech on the Toilet (TotT) episode. You can download a printer-friendly version of this TotT episode and post it in your office. By Arham Jain Is your code a tangled mess of business logic and side effects? Mixing database calls, network requests, and other external interactions directly with your core logic can lead to code that's difficult to test, reuse, and understand. Instead, consider writing a functional core that's called from an imperative shell. Separating your code into functional cores and imperative shells makes it more testable, maintainable, and adaptable. The core logic can be tested in isolation, and the imperative shell can be swapped out or modified as needed. Here's some messy example code that mixes logic and side effects to send expiration notification emails to users: // Bad: Logic and side effects are mixed function sendUserExpiryEmail(): void { for (const user of db.getUsers()) { if (user.subscriptionEndDate > Date.now()) continue; if (user.isFreeTrial) continue; email.send(user.email, "Your account has expired " + user.name + "."); } } A functional core should contain pure, testable business logic, which is free of side effects (such as I/O or external state mutation). It operates only on the data it is given. An imperative shell is responsible for side effects, like database calls and sending emails. It uses the functions in your functional core to perform the business logic. Rewriting the above code to follow the functional core / imperative shell pattern might look like: Functional core function getExpiredUsers(users: User[], cutoff: Date): User[] { return users.filter(user => user.subscriptionEndDate <= cutoff && !user.isFreeTrial); } function generateExpiryEmails(users: User[]): Array<[string, string]> { return users.map(user => ([user.email, "Your account has expired " + user.name + "."]) ); } Imperative shell email.bulkSend(generateExpiryEmails(getExpiredUsers(db.getUsers(), Date.now()))); No

## Glitch Effect in Jetpack Compose

DevFeed: [Glitch Effect in Jetpack Compose](<https://devfeed.tech/articles/glitch-effect-in-jetpack-compose-25782.md>)

Original publisher: [Read original article](<https://www.sinasamaki.com/glitch-effect-in-jetpack-compose/>)

Author: sinasamaki

Published: 2025-10-11T08:00:46Z

Content type: tutorial

Language: en

Sources: [sinasamaki](<https://devfeed.tech/sources/sinasamaki.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Graphics](<https://devfeed.tech/topics/graphics.md>), [GUI](<https://devfeed.tech/topics/gui.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [article](<https://devfeed.tech/tags/article.md>), [canvas](<https://devfeed.tech/tags/canvas.md>), [compose](<https://devfeed.tech/tags/compose.md>), [graphics](<https://devfeed.tech/tags/graphics.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [random](<https://devfeed.tech/tags/random.md>), [scale](<https://devfeed.tech/tags/scale.md>), [slices](<https://devfeed.tech/tags/slices.md>), [translation](<https://devfeed.tech/tags/translation.md>)

### AI overview

A tutorial on implementing a glitch effect in Jetpack Compose by drawing composable content to an offscreen buffer, slicing it horizontally, and applying randomized translations, scaling, color overlays, and timed animation.

### Source excerpt

Easily apply sci-fi, cyberpunk effects on to your app

## Unexpected inconsistency in records

DevFeed: [Unexpected inconsistency in records](<https://devfeed.tech/articles/unexpected-inconsistency-in-records-30702.md>)

Original publisher: [Read original article](<https://codeblog.jonskeet.uk/2025/07/19/unexpected-inconsistency-in-records/>)

Author: jonskeet

Published: 2025-07-19T13:04:48Z

Content type: tutorial

Language: en

Sources: [Jon Skeet](<https://devfeed.tech/sources/jon-skeet.md>)

Topics: [C#](<https://devfeed.tech/topics/csharp.md>), [Code](<https://devfeed.tech/topics/code.md>), [bug](<https://devfeed.tech/topics/bug.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [c-sharp](<https://devfeed.tech/tags/c-sharp.md>), [code](<https://devfeed.tech/tags/code.md>), [constructor](<https://devfeed.tech/tags/constructor.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

The article explains an inconsistency in C# records when nondestructive mutation is combined with derived data initialized from constructor parameters. The with-style operation uses a generated copy constructor, copying existing fields rather than recalculating derived values, which can leave the copied record internally inconsistent.

### Source excerpt

Unexpected inconsistency in records The other day, I was trying to figure out a bug in my code, and it turned out to be a misunderstanding on my part as to how C# records work. It's entirely possible that I'm the only one who expected them to work in the way that I did, but ... Continue reading Unexpected inconsistency in records ->

## Gemini in Firebase for Data Connect queries

DevFeed: [Gemini in Firebase for Data Connect queries](<https://devfeed.tech/articles/gemini-in-firebase-for-data-connect-queries-16568.md>)

Original publisher: [Read original article](<https://firebase.blog/posts/2024/11/dataconnect-gemini>)

Author: Andrea Wu

Published: 2024-11-13T00:00:00Z

Content type: tutorial

Language: en

Sources: [Firebase Blog](<https://devfeed.tech/sources/firebase-blog.md>)

Topics: [Firebase](<https://devfeed.tech/topics/firebase.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>), [Database](<https://devfeed.tech/topics/database.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [code](<https://devfeed.tech/tags/code.md>), [database](<https://devfeed.tech/tags/database.md>), [development](<https://devfeed.tech/tags/development.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [firebase-console](<https://devfeed.tech/tags/firebase-console.md>), [gemini](<https://devfeed.tech/tags/gemini.md>), [generate](<https://devfeed.tech/tags/generate.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [integration](<https://devfeed.tech/tags/integration.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [schema](<https://devfeed.tech/tags/schema.md>), [sql-connect](<https://devfeed.tech/tags/sql-connect.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>), [updates](<https://devfeed.tech/tags/updates.md>)

### AI overview

This Firebase article explains how Gemini in Firebase integrates with Firebase Data Connect to generate GraphQL queries and mutations from natural-language prompts. It describes using the Firebase console to review, test, and copy the generated code into client-side applications.

### Source excerpt

News, tutorials, and updates from the Firebase team.

## HTML inert property and React fallback

DevFeed: [HTML inert property and React fallback](<https://devfeed.tech/articles/html-inert-property-and-react-fallback-37283.md>)

Original publisher: [Read original article](<https://muffinman.io/blog/html-inert-property/>)

Author: Stanko

Published: 2023-12-21T00:00:00Z

Content type: tutorial

Language: en

Sources: [Stanko Tadić](<https://devfeed.tech/sources/stanko-tadic.md>)

Topics: [HTML](<https://devfeed.tech/topics/html.md>), [React](<https://devfeed.tech/topics/react.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [aria](<https://devfeed.tech/tags/aria.md>), [browser](<https://devfeed.tech/tags/browser.md>), [code](<https://devfeed.tech/tags/code.md>), [component](<https://devfeed.tech/tags/component.md>), [focus](<https://devfeed.tech/tags/focus.md>), [html](<https://devfeed.tech/tags/html.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [react](<https://devfeed.tech/tags/react.md>), [tabbing](<https://devfeed.tech/tags/tabbing.md>)

### AI overview

This tutorial explains how the HTML inert property disables user interaction, keyboard tabbing, and screen-reader access for an element. It also presents a React fallback that uses tabindex changes and a mutation observer to support older browsers.

### Source excerpt

HTML inert is a relatively new property, but it is supported in all major browsers since April this year. When you set inert on an element, the browser will ignore all user events on it, including tabbing into elements. It will also hide it from screen readers. I like to think of it as a "reversed focus trap". But we can use it to create focus traps for modals by setting inert on the main content. This div has inert property set and if your browser supports it, you won't be able to interact with the button and link below. You can't click meNor me! React fallback component # Before I learned about inert, I built a relatively simple component to achieve the same result. Now I prefer to use the native solution, but on most projects, we still have to support older browsers. My approach is to handle it in the wrapper component, which finds all focusable elements and sets tabindex="-1". After mounting, the mutation observer starts listening and re-sets the tabindex when content is changed. The wrapper itself has aria-hidden="true", which hides it from screen readers. You can try it out on CodePen and see the source code below: const focusableElementsSelector = [ "a[href]", "input", "select", "textarea", "button", "audio[controls]", "video[controls]", "details > summary:first-of-type", "details", "[contenteditable]:not([contenteditable=\"false\"])", "[tabindex]:not([tabindex=\"-1\"])" ].join(", "); const addTabIndex = ($wrapper) => { $wrapper.querySelectorAll(focusableElementsSelector).forEach(($element) => { $element.setAttribute("tabindex", -1); }); }; const removeTabIndex = ($wrapper) => { $wrapper.querySelectorAll(focusableElementsSelector).forEach(($element) => { $element.removeAttribute("tabindex"); }); }; const Inert = ({ enabled, children, ...props }) => { const wrapperRef = useRef(null); const observerRef = useRef( new MutationObserver(() => addTabIndex(wrapper.current)) ); useEffect(() => { if (enabled) { if (wrapperRef.current) { // Add tabindex addTabIndex(wrap

## Leveraging the Snapshot Mutation Policies of Jetpack Compose

DevFeed: [Leveraging the Snapshot Mutation Policies of Jetpack Compose](<https://devfeed.tech/articles/leveraging-the-snapshot-mutation-policies-of-jetpack-compose-25735.md>)

Original publisher: [Read original article](<https://blog.shreyaspatil.dev/leveraging-the-snapshot-mutation-policies-of-jetpack-compose/>)

Author: Shreyas Patil

Published: 2023-01-30T13:30:39Z

Content type: tutorial

Language: en

Sources: [Shreyas Patil's Blog](<https://devfeed.tech/sources/shreyas-patil-s-blog.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [compose](<https://devfeed.tech/tags/compose.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [recompose](<https://devfeed.tech/tags/recompose.md>), [recomposition](<https://devfeed.tech/tags/recomposition.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [state](<https://devfeed.tech/tags/state.md>), [state-management](<https://devfeed.tech/tags/state-management.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A tutorial on SnapshotMutationPolicy in Jetpack Compose, explaining how structural, referential, and never-equal policies determine whether state changes trigger UI recomposition.

### Source excerpt

Understand Snapshot Mutation Policies in Jetpack Compose. Learn how to control when and how your UI recomposes based on state changes.

## Data is immutable

DevFeed: [Data is immutable](<https://devfeed.tech/articles/data-is-immutable-37568.md>)

Original publisher: [Read original article](<https://blog.klipse.tech/databook/2022/06/22/immutable-data.html>)

Author: Yehonathan Sharvit

Published: 2022-06-22T02:34:24Z

Content type: article

Language: en

Sources: [Klipse](<https://devfeed.tech/sources/klipse.md>)

Topics: [data](<https://devfeed.tech/topics/data.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Data structures](<https://devfeed.tech/topics/data-structures.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [clojure](<https://devfeed.tech/tags/clojure.md>), [d](<https://devfeed.tech/tags/d.md>), [data](<https://devfeed.tech/tags/data.md>), [dop](<https://devfeed.tech/tags/dop.md>), [immutability](<https://devfeed.tech/tags/immutability.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [mutation](<https://devfeed.tech/tags/mutation.md>)

### AI overview

This article explains the third principle of Data-Oriented Programming: data is immutable. It describes replacing mutation with new data versions, contrasts this approach in Clojure and JavaScript, and discusses cloning and persistent data structures as implementation strategies.

### Source excerpt

With data separated from code and represented with generic data structures, how are changes to the data managed? DOP is very strict on this question. Mutation of data is not allowed! In DOP, changes to data are accomplished by creating new versions of the data. The reference to a variable may be changed so that it refers to a new version of the data, but the value of the data itself must never change.

## High-Throughput, Formal-Methods-Assisted Fuzzing for LLVM

DevFeed: [High-Throughput, Formal-Methods-Assisted Fuzzing for LLVM](<https://devfeed.tech/articles/high-throughput-formal-methods-assisted-fuzzing-for-llvm-39747.md>)

Original publisher: [Read original article](<https://blog.regehr.org/archives/2148>)

Author: regehr

Published: 2022-05-31T14:56:41Z

Content type: article

Language: en

Sources: [Embedded in Academia](<https://devfeed.tech/sources/embedded-in-academia.md>)

Topics: [Fuzzing/Fuzz testing](<https://devfeed.tech/topics/fuzzing.md>), [LLVM](<https://devfeed.tech/topics/llvm.md>), [Formal methods](<https://devfeed.tech/topics/formal-methods.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [bug](<https://devfeed.tech/topics/bug.md>)

Tags: [bug](<https://devfeed.tech/tags/bug.md>), [formal-methods](<https://devfeed.tech/tags/formal-methods.md>), [fuzzing](<https://devfeed.tech/tags/fuzzing.md>), [llvm](<https://devfeed.tech/tags/llvm.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [testing](<https://devfeed.tech/tags/testing.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>)

### AI overview

The article describes mutation-based fuzzing for LLVM optimization passes, combining a custom LLVM IR mutator with the formal methods tool Alive2 to check whether optimizations are correct or buggy. The authors report that generic mutation with radamsa produced mostly invalid or semantically unchanged tests and found no bugs after several days, motivating a structure-aware mutator that preserves LLVM IR invariants.

### Source excerpt

[This piece is coauthored by Yuyou Fan and John Regehr] Mutation-based fuzzing is based on the idea that new, bug-triggering inputs can often be created by randomly modifying existing, non-bug-triggering inputs. For example, if we wanted to find bugs in a PDF reader, we could grab a bunch of PDF files off the web, mutate [...]

## GraphQL Mutation vs Query - When to use a GraphQL Mutation

DevFeed: [GraphQL Mutation vs Query - When to use a GraphQL Mutation](<https://devfeed.tech/articles/graphql-mutation-vs-query-when-to-use-a-graphql-mutation-23463.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/mutation-vs-query-when-to-use-graphql-mutation>)

Author: Khalil Stemmler

Published: 2021-02-23T17:12:20Z

Content type: tutorial

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [GraphQL](<https://devfeed.tech/topics/graphql.md>), [API](<https://devfeed.tech/topics/api.md>), [Query (disambiguation)](<https://devfeed.tech/topics/query.md>)

Tags: [apollo](<https://devfeed.tech/tags/apollo.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [resolvers](<https://devfeed.tech/tags/resolvers.md>), [server](<https://devfeed.tech/tags/server.md>), [vs](<https://devfeed.tech/tags/vs.md>)

### AI overview

This tutorial explains GraphQL mutations, how they differ from queries, and when to use each operation. It includes mutation examples and discusses server-side resolvers that modify state.

### Source excerpt

This post is part of the Introduction to GraphQL series. You may want to read the previous posts: "What is GraphQL? GraphQL introduction" and "What is a GraphQL Query? GraphQL query examples using Apollo Explorer" So far, we've covered what GraphQL is: a query language and a server-side runtime. But more importantly, GraphQL is the modern way to build declarative, efficient and performant APIs that developers love to work with.

## On let vs const

DevFeed: [On let vs const](<https://devfeed.tech/articles/on-let-vs-const-36183.md>)

Original publisher: [Read original article](<https://overreacted.io/on-let-vs-const/>)

Published: 2019-12-22T00:00:00Z

Content type: opinion

Language: en

Sources: [Dan Abramov](<https://devfeed.tech/sources/dan-abramov.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Code](<https://devfeed.tech/topics/code.md>), [React Hooks](<https://devfeed.tech/topics/react-hooks.md>)

Tags: [eslint](<https://devfeed.tech/tags/eslint.md>), [immutability](<https://devfeed.tech/tags/immutability.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [react](<https://devfeed.tech/tags/react.md>), [react-hooks](<https://devfeed.tech/tags/react-hooks.md>)

### AI overview

This article examines the debate over using JavaScript let versus const. It summarizes arguments about reducing reassignment-related bugs, teaching mutation and assignment distinctions, React Hooks data flow, performance claims, and preserving intent, then presents the author's personal conclusion.

### Source excerpt

So which one should I use?

## Reactive State Mutations via CQRS

DevFeed: [Reactive State Mutations via CQRS](<https://devfeed.tech/articles/reactive-state-mutations-via-cqrs-29374.md>)

Original publisher: [Read original article](<https://arturdryomov.dev/posts/reactive-state-mutations/>)

Author: Artur Dryomov

Published: 2018-10-21T00:00:00Z

Content type: article

Language: en

Sources: [Artur Dryomov](<https://devfeed.tech/sources/artur-dryomov.md>)

Topics: [reactive](<https://devfeed.tech/topics/reactive.md>), [Development](<https://devfeed.tech/topics/development.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>)

Tags: [agile](<https://devfeed.tech/tags/agile.md>), [backend](<https://devfeed.tech/tags/backend.md>), [cache](<https://devfeed.tech/tags/cache.md>), [can](<https://devfeed.tech/tags/can.md>), [development](<https://devfeed.tech/tags/development.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [fetch](<https://devfeed.tech/tags/fetch.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [production](<https://devfeed.tech/tags/production.md>), [qa](<https://devfeed.tech/tags/qa.md>), [reactive](<https://devfeed.tech/tags/reactive.md>), [software](<https://devfeed.tech/tags/software.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [state](<https://devfeed.tech/tags/state.md>), [stateful](<https://devfeed.tech/tags/stateful.md>), [thread](<https://devfeed.tech/tags/thread.md>)

### AI overview

The article introduces state and state mutations in software development, then uses a book-recommendation project to show how changing requirements can make client logic increasingly complicated. It discusses duplicated distributed logic, stateful behavior, side effects, caching, and thread-safety concerns, but the supplied text does not include the proposed CQRS solution.

### Source excerpt

State-state-state. It surrounds us. Think hard enough and everything around will become either a state or a state mutation. The current time is a state and each passing second is a state mutation. A tree can be represented by a state and each drop of rain mutates it, increasing the water supply level and applying the pressure on leaves. The concept is not new, but sometimes it becomes too hard to manage it. Even in software development, which was basically created to represent the world around us in strict terms.

## Sending GraphQL metrics to Datadog with Apollo Engine

DevFeed: [Sending GraphQL metrics to Datadog with Apollo Engine](<https://devfeed.tech/articles/sending-graphql-metrics-to-datadog-with-apollo-engine-23516.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/sending-graphql-metrics-to-datadog-with-apollo-engine-d7876b9dbcba>)

Author: Sashko Stubailo

Published: 2018-04-17T19:56:18Z

Content type: release

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [GraphQL](<https://devfeed.tech/topics/graphql.md>), [datadog](<https://devfeed.tech/topics/datadog.md>), [API](<https://devfeed.tech/topics/api.md>), [Monitoring](<https://devfeed.tech/topics/monitoring.md>), [dashboards](<https://devfeed.tech/topics/dashboards.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [backend](<https://devfeed.tech/tags/backend.md>), [cache](<https://devfeed.tech/tags/cache.md>), [dashboards](<https://devfeed.tech/tags/dashboards.md>), [datadog](<https://devfeed.tech/tags/datadog.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [latency](<https://devfeed.tech/tags/latency.md>), [metrics](<https://devfeed.tech/tags/metrics.md>), [monitoring](<https://devfeed.tech/tags/monitoring.md>), [mutation](<https://devfeed.tech/tags/mutation.md>)

### AI overview

Apollo Engine introduces an integration that sends GraphQL API metrics to Datadog. The integration exports performance and error statistics, including request rates, error rates, cache hit rates, and latency histogram statistics, with GraphQL operation tags for filtering queries and mutations.

### Source excerpt

One of our core tenets on the Apollo team is that we want to enable you to use GraphQL in a way that works with your existing technology investments. It's much easier to convince your coworkers that the benefits of GraphQL are worth the effort if you can bring your favorite tools with you. There are tons of software-as-a-service platforms developers use every day to understand and manage their apps.

## Tutorial: GraphQL Input Types and Custom Resolvers

DevFeed: [Tutorial: GraphQL Input Types and Custom Resolvers](<https://devfeed.tech/articles/tutorial-graphql-input-types-and-custom-resolvers-23399.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/input-types-and-client-caching>)

Author: Evans Hauser

Published: 2017-06-06T00:15:00Z

Content type: tutorial

Language: en

Sources: [Apollo Blog](<https://devfeed.tech/sources/apollo-blog.md>)

Topics: [GraphQL](<https://devfeed.tech/topics/graphql.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [React](<https://devfeed.tech/topics/react.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>)

Tags: [apollo](<https://devfeed.tech/tags/apollo.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [latency](<https://devfeed.tech/tags/latency.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [mutation](<https://devfeed.tech/tags/mutation.md>), [react-router](<https://devfeed.tech/tags/react-router.md>), [react-router-tutorial](<https://devfeed.tech/tags/react-router-tutorial.md>), [resolvers](<https://devfeed.tech/tags/resolvers.md>), [routing](<https://devfeed.tech/tags/routing.md>), [schema](<https://devfeed.tech/tags/schema.md>), [server](<https://devfeed.tech/tags/server.md>), [state](<https://devfeed.tech/tags/state.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

Part 5 of a full-stack GraphQL and React tutorial explains how to build a channel detail view for a messaging application. It covers field arguments in queries, Apollo's normalized cache, GraphQL input types, custom resolvers, and mutations for posting messages.

### Source excerpt

This is part 5 of our full-stack GraphQL + React Tutorial that guides you through creating a messaging application. Each part is self-contained and introduces new key concepts, which means you don't have to do all the other parts before doing this one.