# business logic

Published articles for business logic.

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

## Enterprises are sweating legacy IT assets as AI investment grows

DevFeed: [Enterprises are sweating legacy IT assets as AI investment grows](<https://devfeed.tech/articles/enterprises-are-sweating-legacy-it-assets-as-ai-investment-grows-31542.md>)

Original publisher: [Read original article](<https://www.theregister.com/systems/2026/09/16/enterprises-are-sweating-legacy-it-assets-as-ai-investment-grows/5296896>)

Author: Dan Robinson

Published: 2026-09-16T16:15:00Z

Content type: article

Language: en

Sources: [www.theregister.com - Articles](<https://devfeed.tech/sources/www-theregister-com-articles.md>)

Topics: [legacy](<https://devfeed.tech/topics/legacy.md>), [Hardware](<https://devfeed.tech/topics/hardware.md>), [mainframes](<https://devfeed.tech/topics/mainframes.md>), [data](<https://devfeed.tech/topics/data.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [data](<https://devfeed.tech/tags/data.md>), [ensono](<https://devfeed.tech/tags/ensono.md>), [hardware](<https://devfeed.tech/tags/hardware.md>), [it-modernization](<https://devfeed.tech/tags/it-modernization.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [legacy-systems](<https://devfeed.tech/tags/legacy-systems.md>), [mainframes](<https://devfeed.tech/tags/mainframes.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

The article examines how enterprises are dealing with legacy IT assets as AI investment grows. It reports that mainframes and other hardware may contain the data and business logic needed to build AI services.

### Source excerpt

Hardware such as mainframes found to hold the data and business logic needed to build those AI services

## Our Transition to React Native

DevFeed: [Our Transition to React Native](<https://devfeed.tech/articles/our-transition-to-react-native-27402.md>)

Original publisher: [Read original article](<http://engineering.khanacademy.org/posts/react-native-at-khan.htm>)

Author: Khan Academy

Published: 2020-07-09T22:00:00Z

Content type: opinion

Language: en

Sources: [Khan Academy](<https://devfeed.tech/sources/khan-academy.md>)

Topics: [React Native](<https://devfeed.tech/topics/react-native.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [React](<https://devfeed.tech/topics/react.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [architectures](<https://devfeed.tech/tags/architectures.md>), [backend](<https://devfeed.tech/tags/backend.md>), [bridge](<https://devfeed.tech/tags/bridge.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [change](<https://devfeed.tech/tags/change.md>), [code](<https://devfeed.tech/tags/code.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [news](<https://devfeed.tech/tags/news.md>), [react-native](<https://devfeed.tech/tags/react-native.md>)

### AI overview

Khan Academy describes completing its transition to React Native for its iOS and Android apps. The article explains why the team moved away from separate platform codebases and outlines the transition's exploration, straddling, and extinction phases.

### Source excerpt

In 2017, Khan Academy started using React Native in our iOS and Android apps. As of this year, we've reached a big milestone: our transition to React Native is complete! Every screen in the app is rendered in React Native.

## Code Smell 321 - Getter Piggybacking

DevFeed: [Code Smell 321 - Getter Piggybacking](<https://devfeed.tech/articles/code-smell-321-getter-piggybacking-18228.md>)

Original publisher: [Read original article](<https://maximilianocontieri.com/code-smell-321-getter-piggybacking>)

Author: Maxi Contieri

Published: 2026-08-20T02:51:49Z

Content type: article

Language: en

Sources: [Maximiliano Contieri - Software Design](<https://devfeed.tech/sources/maximiliano-contieri-software-design.md>)

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

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [class](<https://devfeed.tech/tags/class.md>), [code](<https://devfeed.tech/tags/code.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>)

### AI overview

This article explains a code smell in which an existing getter is reused to implement business logic outside the object that owns the value. It describes the resulting duplicated rules, broken encapsulation, scattered comparisons, and fragile refactoring, and recommends adding behavior methods, keeping comparisons inside the object, passing collaborators instead of primitives, and using getters mainly for rendering.

### Source excerpt

TL;DR: Don't reuse an existing getter to bolt on new business logic from outside the object. Problems 😔 Duplicated business rules Broken encapsulation Scattered comparison logic Hidden domain kn

## Test & Set

DevFeed: [Test & Set](<https://devfeed.tech/articles/test-set-32253.md>)

Original publisher: [Read original article](<https://publicobject.com/2026/07/13/test-set/>)

Author: Jesse Wilson

Published: 2026-07-13T22:22:27Z

Content type: tutorial

Language: en

Sources: [Public Object](<https://devfeed.tech/sources/public-object.md>)

Topics: [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [Concurrent Programming](<https://devfeed.tech/topics/concurrent-programming.md>), [Code](<https://devfeed.tech/topics/code.md>), [function](<https://devfeed.tech/topics/function.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [concurrency](<https://devfeed.tech/tags/concurrency.md>), [flaky-tests](<https://devfeed.tech/tags/flaky-tests.md>), [function](<https://devfeed.tech/tags/function.md>), [programming](<https://devfeed.tech/tags/programming.md>), [tests](<https://devfeed.tech/tags/tests.md>), [threads](<https://devfeed.tech/tags/threads.md>)

### AI overview

An article about managing concurrency in threaded programs. It discusses the limits of simple and stress tests, describes a trusted concurrency pattern, and presents a helper function that separates business logic from concurrency logic while retrying after a lost race.

### Source excerpt

Working with threads always feels hazardous to me. Non-determinism limits how much we can exercise with simple tests. Stress tests can shake out some bugs, but they're slow and potentially flaky. I don't like flaky tests. So I have a few concurrency patterns that I trust, and I

## Your Architecture Doesn't Rot Overnight

DevFeed: [Your Architecture Doesn't Rot Overnight](<https://devfeed.tech/articles/your-architecture-doesn-t-rot-overnight-26196.md>)

Original publisher: [Read original article](<https://journal.optivem.com/p/your-architecture-doesnt-rot-overnight>)

Author: Valentina Jemuović

Published: 2026-07-07T06:00:37Z

Content type: opinion

Language: en

Sources: [Optivem Journal](<https://devfeed.tech/sources/optivem-journal.md>)

Topics: [legacy](<https://devfeed.tech/topics/legacy.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Software](<https://devfeed.tech/topics/software.md>), [Test-driven development](<https://devfeed.tech/topics/tdd.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [refactor](<https://devfeed.tech/tags/refactor.md>), [requirements](<https://devfeed.tech/tags/requirements.md>)

### AI overview

The article explains how repeated convenience-driven decisions gradually weaken boundaries between business logic and infrastructure. It argues that architectural decay often remains hidden while the application works and tests pass, eventually making seemingly simple changes difficult to locate and implement.

### Source excerpt

As deadlines become tighter, convenience starts winning.

## AI RPG Migration Can Compile and Still Break Business Logic

DevFeed: [AI RPG Migration Can Compile and Still Break Business Logic](<https://devfeed.tech/articles/ai-rpg-migration-can-compile-and-still-break-business-logic-20744.md>)

Original publisher: [Read original article](<https://tomassetti.me/ai-rpg-migration-semantic-gap/>)

Author: Federico Tomassetti

Published: 2026-06-30T08:00:00Z

Content type: opinion

Language: en

Sources: [Federico Tomassetti](<https://devfeed.tech/sources/federico-tomassetti.md>)

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [AI-assisted coding](<https://devfeed.tech/topics/ai-assisted-coding.md>), [Benchmark](<https://devfeed.tech/topics/benchmark.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [benchmarks](<https://devfeed.tech/tags/benchmarks.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [compilation](<https://devfeed.tech/tags/compilation.md>), [legacy-modernization](<https://devfeed.tech/tags/legacy-modernization.md>), [migration](<https://devfeed.tech/tags/migration.md>), [rpg](<https://devfeed.tech/tags/rpg.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

The article argues that AI-assisted RPG migration tools should be evaluated on behavioral equivalence, not only compilation and generated test-pass rates. It cites the AgentModernize study, where the best reported result reached 19.4% behavioral equivalence, and describes gaps between extracting business rules and implementing them faithfully.

### Source excerpt

AI-assisted RPG migration tools report high compilation success rates while silently failing on behavioral equivalence -- packed decimal truncation, activation group persistence, and cycle logic. The benchmarks show why, and what a real accuracy test looks like. The post AI RPG Migration Can Compile and Still Break Business Logic appeared first on Federico Tomassetti.

## A Practical CQRS Split for Read and Write Paths in a Node.js Service

DevFeed: [A Practical CQRS Split for Read and Write Paths in a Node.js Service](<https://devfeed.tech/articles/cqrs-without-the-astronaut-architecture-18106.md>)

Original publisher: [Read original article](<https://thetshaped.dev/p/cqrs-without-the-astronaut-architecture-split-read-write-paths-typescript-nodejs-backend-service>)

Author: The T-Shaped Dev

Published: 2026-06-21T12:19:52Z

Content type: tutorial

Language: en

Sources: [The T-Shaped Dev](<https://devfeed.tech/sources/the-t-shaped-dev.md>)

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

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>)

### AI overview

This tutorial presents a lightweight CQRS approach for a Node.js service: separate business-heavy write operations from read operations that serve screens, without requiring event sourcing or a second database.

### Source excerpt

You don't need event sourcing or a second database. Just split reads from writes, and finally fix the 20-method service nobody wants to open.

## How Monk migrated 100+ workflows from Inngest to Temporal

DevFeed: [How Monk migrated 100+ workflows from Inngest to Temporal](<https://devfeed.tech/articles/how-monk-migrated-100-workflows-from-inngest-to-temporal-35860.md>)

Original publisher: [Read original article](<https://temporal.io/blog/how-monk-migrated-100-workflows-inngest-to-temporal>)

Author: Francesco Coacci

Published: 2026-06-16T00:00:00Z

Content type: article

Language: en

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

Topics: [migration](<https://devfeed.tech/topics/migration.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [test-coverage](<https://devfeed.tech/topics/test-coverage.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [automation](<https://devfeed.tech/tags/automation.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [community](<https://devfeed.tech/tags/community.md>), [coverage](<https://devfeed.tech/tags/coverage.md>), [migration](<https://devfeed.tech/tags/migration.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [pull-request](<https://devfeed.tech/tags/pull-request.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

Monk describes migrating more than 100 live workflows from Inngest to Temporal incrementally, using reversible pull requests, parallel runtimes, feature-flagged cutovers, and no migration freeze. The article explains how this approach kept each workflow coherent and recoverable during the transition.

### Source excerpt

Monk migrated 100+ live workflows from Inngest to Temporal with one reversible PR at a time all while avoiding freezes and rewrites. Here's how.

## Track customer loyalty points with durable workflows

DevFeed: [Track customer loyalty points with durable workflows](<https://devfeed.tech/articles/track-customer-loyalty-points-with-durable-workflows-35824.md>)

Original publisher: [Read original article](<https://temporal.io/blog/entity-workflow-loyalty-points>)

Author: Cecil Phillip

Published: 2026-06-03T00:00:00Z

Content type: tutorial

Language: en

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

Topics: [account](<https://devfeed.tech/topics/account.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Database](<https://devfeed.tech/topics/database.md>), [real-time](<https://devfeed.tech/topics/real-time.md>), [locking](<https://devfeed.tech/topics/locking.md>), [retry](<https://devfeed.tech/topics/retry.md>), [service](<https://devfeed.tech/topics/service.md>), [upgrade](<https://devfeed.tech/topics/upgrade.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [account](<https://devfeed.tech/tags/account.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [customer](<https://devfeed.tech/tags/customer.md>), [database](<https://devfeed.tech/tags/database.md>), [locking](<https://devfeed.tech/tags/locking.md>), [loyalty](<https://devfeed.tech/tags/loyalty.md>), [loyalty-points](<https://devfeed.tech/tags/loyalty-points.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [process](<https://devfeed.tech/tags/process.md>), [query](<https://devfeed.tech/tags/query.md>), [real-time](<https://devfeed.tech/tags/real-time.md>), [retry](<https://devfeed.tech/tags/retry.md>), [service](<https://devfeed.tech/tags/service.md>), [temporal](<https://devfeed.tech/tags/temporal.md>), [temporal-concepts](<https://devfeed.tech/tags/temporal-concepts.md>), [upgrades](<https://devfeed.tech/tags/upgrades.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

This article explains how to track customer loyalty points with durable Entity Workflows in Temporal. Each customer has a persistent workflow that maintains points, tier status, and activity history, while Signals handle accruals, Updates validate redemptions, and Queries read current balances.

### Source excerpt

Track loyalty points with durable Entity Workflows in Temporal. See how to handle accruals, tier upgrades, and redemptions for each customer.

## How Agentic AI Can Bypass the Application Layer's Database Protections

DevFeed: [How Agentic AI Can Bypass the Application Layer's Database Protections](<https://devfeed.tech/articles/the-application-layer-used-to-protect-you-now-it-can-t-34126.md>)

Original publisher: [Read original article](<https://flashdba.com/2026/05/11/the-application-layer-used-to-protect-you-now-it-cant/>)

Author: flashdba

Published: 2026-05-11T11:06:56Z

Content type: opinion

Language: en

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

Topics: [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [agentic](<https://devfeed.tech/tags/agentic.md>), [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [database](<https://devfeed.tech/tags/database.md>), [databases](<https://devfeed.tech/tags/databases.md>), [databases-and-agentic-ai](<https://devfeed.tech/tags/databases-and-agentic-ai.md>), [inferencing](<https://devfeed.tech/tags/inferencing.md>), [performance](<https://devfeed.tech/tags/performance.md>), [rate-limiting](<https://devfeed.tech/tags/rate-limiting.md>)

### AI overview

The article argues that application layers unintentionally protect databases through query abstraction, input validation, rate limiting, and human-oriented traffic patterns. Direct database access by agent frameworks can bypass these protections, allowing unconstrained queries and exposing the database to unfamiliar load and access patterns.

### Source excerpt

The application layer was never designed as a database security boundary - but it acted as one. Agentic AI removes that protection, via bypass or overwhelm, and the database is left exposed.

## Construct with Collaborators, Call with Work

DevFeed: [Construct with Collaborators, Call with Work](<https://devfeed.tech/articles/construct-with-collaborators-call-with-work-23870.md>)

Original publisher: [Read original article](<http://testing.googleblog.com/2026/05/construct-with-collaborators-call-with.html>)

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

Published: 2026-05-05T12:28: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>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [shahar-roth](<https://devfeed.tech/tags/shahar-roth.md>), [tott](<https://devfeed.tech/tags/tott.md>)

### AI overview

A coding guideline explains that long-lived dependencies should be supplied through a constructor, while inputs that vary for each operation should be passed to methods. A ReportGenerator example separates its database and formatter collaborators from a per-call date range.

### 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 Shahar Roth Classes require various objects and parameters to function. The "Construct with Collaborators, Call with Work" guideline can help you construct effective inputs: Use the constructor for collaborators--the dependencies that establish the object's identity. Collaborators stay with the object for its lifetime to enable it to fulfill its ongoing duties. Pass work--the parameters that change with each interaction--to methods. Unique to each call, these inputs provide the specific data needed for an operation such as a file path or database query. Consider a ReportGenerator that needs a database, a formatter, and a date range to generate a report. The database and formatter, as collaborators, are injected via the constructor, while dateRange, which varies per report generation, is passed as a method parameter to the generate method: class ReportGenerator { private final Database database; private final Formatter formatter; // database and formatter are passed as collaborators. ReportGenerator(Database database, Formatter formatter) { this.database = database; this.formatter = formatter; } // dateRange is passed as a parameter. Report generate(Range<Instant> dateRange) { return formatter.format(database.getRecords(dateRange)); } } A single ReportGenerator object can generate multiple reports with different date ranges: ReportGenerator generator = new ReportGenerator(database, formatter); Report report1 = generator.generate(dateRange1); Report report2 = generator.generate(dateRange2); Following the "Construct with Collaborators, Call with Work" guideline promotes: Reusability: Enables instances to be used for multiple, distinct operations. Testability: Separates dependency setup from business logic. Cleaner code: Hides implementation dependencies from the object's users. Predictable behavior: Locks

## How Project Conventions Help AI Agents Write Go Backend Code

DevFeed: [How Project Conventions Help AI Agents Write Go Backend Code](<https://devfeed.tech/articles/how-ai-agents-want-to-write-go-17809.md>)

Original publisher: [Read original article](<https://encore.dev/blog/golang-ai>)

Author: Ivan Cernja

Published: 2026-02-23T00:00:00Z

Content type: article

Language: en

Sources: [Encore Updates](<https://devfeed.tech/sources/encore-updates.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Framework](<https://devfeed.tech/topics/framework.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>)

Tags: [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [apis](<https://devfeed.tech/tags/apis.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [backend](<https://devfeed.tech/tags/backend.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [go](<https://devfeed.tech/tags/go.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>)

### AI overview

The article argues that AI agents produce more consistent Go backend code when a project already provides conventions for service structure, typed APIs, and declared infrastructure. Without those conventions, agents must choose routers, middleware, connection handling, file layouts, error handling, and testing approaches, producing varied but valid architectures.

### Source excerpt

And what happens when you actually let them.

## How Vinted Standardizes Large-Scale Decentralized Data Pipelines

DevFeed: [How Vinted Standardizes Large-Scale Decentralized Data Pipelines](<https://devfeed.tech/articles/orchestrating-success-20441.md>)

Original publisher: [Read original article](<https://vinted.engineering//2025/12/29/orchestrating-success/>)

Author: Oscar Ligthart

Published: 2025-12-29T00:00:00Z

Content type: article

Language: en

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

Topics: [Data Infrastructure](<https://devfeed.tech/topics/data-infrastructure.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [airflow](<https://devfeed.tech/topics/airflow.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>)

Tags: [airflow](<https://devfeed.tech/tags/airflow.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [data](<https://devfeed.tech/tags/data.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [domain](<https://devfeed.tech/tags/domain.md>), [gcp](<https://devfeed.tech/tags/gcp.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [pipelines](<https://devfeed.tech/tags/pipelines.md>), [scale](<https://devfeed.tech/tags/scale.md>)

### AI overview

Vinted describes its migration to cloud-based data infrastructure and the challenges of coordinating dependencies across decentralized teams and domains. The article explains why relying on teams to hand-craft Airflow DAGs would add unnecessary complexity, and discusses adapting the conventional dbt-with-Airflow approach to Vinted's scale and cost constraints.

### Source excerpt

TL;DR: How Vinted standardizes large-scale decentralized data pipelines.

## 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

## Building Your First Kotlin Multiplatform App: From Setup to iOS App Store with Compose Multiplatform (2025 Guide)

DevFeed: [Building Your First Kotlin Multiplatform App: From Setup to iOS App Store with Compose Multiplatform (2025 Guide)](<https://devfeed.tech/articles/building-your-first-kotlin-multiplatform-app-from-setup-to-ios-app-store-with-compose-multiplatform-2025-guide-39342.md>)

Original publisher: [Read original article](<https://kt.academy/article/kmp-to-compose-guide>)

Published: 2025-07-28T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Tutorial](<https://devfeed.tech/topics/tutorial.md>), [cross-platform](<https://devfeed.tech/topics/cross-platform.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [app-store](<https://devfeed.tech/tags/app-store.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [build](<https://devfeed.tech/tags/build.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [clean-architecture](<https://devfeed.tech/tags/clean-architecture.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [development](<https://devfeed.tech/tags/development.md>), [guide](<https://devfeed.tech/tags/guide.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [ios](<https://devfeed.tech/tags/ios.md>), [ios-development](<https://devfeed.tech/tags/ios-development.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [setup](<https://devfeed.tech/tags/setup.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

A tutorial for building Kyklos, a Kotlin Multiplatform subscription-tracking app with shared Compose Multiplatform UI and business logic for Android and iOS. It covers project setup, Clean Architecture, SQLDelight database integration, Material Design 3, testing, and deployment.

### Source excerpt

A comprehensive guide to building your first Kotlin Multiplatform app using Compose Multiplatform, covering setup, development, and deployment

## Announcing new Temporal training courses for .NET developers

DevFeed: [Announcing new Temporal training courses for .NET developers](<https://devfeed.tech/articles/announcing-new-temporal-training-courses-for-net-developers-35926.md>)

Original publisher: [Read original article](<https://temporal.io/blog/new-temporal-training-courses-net-developers>)

Author: Angela Zhou

Published: 2025-02-19T00:00:00Z

Content type: release

Language: en

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

Topics: [.NET](<https://devfeed.tech/topics/net.md>), [SDK](<https://devfeed.tech/topics/sdk.md>), [Error Handling](<https://devfeed.tech/topics/error-handling.md>), [Tooling](<https://devfeed.tech/topics/tooling.md>)

Tags: [announcements](<https://devfeed.tech/tags/announcements.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [consistency](<https://devfeed.tech/tags/consistency.md>), [debug](<https://devfeed.tech/tags/debug.md>), [deploy](<https://devfeed.tech/tags/deploy.md>), [developers](<https://devfeed.tech/tags/developers.md>), [durability](<https://devfeed.tech/tags/durability.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [free](<https://devfeed.tech/tags/free.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [net](<https://devfeed.tech/tags/net.md>), [training](<https://devfeed.tech/tags/training.md>)

### AI overview

Temporal announces that its Temporal 101, Temporal 102, and Crafting an Error Handling Strategy courses are now available for .NET developers. The free, self-paced courses cover durable execution, core concepts, architecture, production practices, debugging, deployment, durability, and error-handling strategies.

### Source excerpt

Our Temporal 101, 102, and Crafting an Error Handling Strategy are now available in .NET. Take one of our free, self-paced, hand-on courses to learn everything you need to know about Temporal.

## Building resilient event-driven architecture for finance with Temporal

DevFeed: [Building resilient event-driven architecture for finance with Temporal](<https://devfeed.tech/articles/building-resilient-event-driven-architecture-for-finance-with-temporal-35750.md>)

Original publisher: [Read original article](<https://temporal.io/blog/building-resilient-event-driven-architecture-for-finserv-with-temporal>)

Author: Tim Imkin

Published: 2025-01-23T00:00:00Z

Content type: tutorial

Language: en

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

Topics: [event driven](<https://devfeed.tech/topics/event-driven.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [reliability](<https://devfeed.tech/topics/reliability.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [coupling](<https://devfeed.tech/tags/coupling.md>), [crashes](<https://devfeed.tech/tags/crashes.md>), [databases](<https://devfeed.tech/tags/databases.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [event-driven-architecture](<https://devfeed.tech/tags/event-driven-architecture.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [retries](<https://devfeed.tech/tags/retries.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [temporal-concepts](<https://devfeed.tech/tags/temporal-concepts.md>)

### AI overview

This article examines the complexity of choreography-based event-driven architecture in financial services, including fragmented business logic, design-level coupling, decentralized error handling, and limited observability. It presents Temporal's durable execution and workflow orchestration as a centralized approach for building more resilient and maintainable systems.

### Source excerpt

Discover how Temporal simplifies event-driven systems, replacing complexity with scalability, reliability, and centralized workflows.

## Enforce Flexible Governance in GraphOS using Custom Checks

DevFeed: [Enforce Flexible Governance in GraphOS using Custom Checks](<https://devfeed.tech/articles/enforce-flexible-governance-in-graphos-using-custom-checks-23286.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/enforce-flexible-governance-in-graphos-using-custom-checks>)

Author: Samuel Collard

Published: 2024-11-26T12:00:00Z

Content type: article

Language: en

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

Topics: [GraphOS](<https://devfeed.tech/topics/graphos.md>), [API Governance](<https://devfeed.tech/topics/api-governance.md>), [API Platform](<https://devfeed.tech/topics/api-platform.md>)

Tags: [api-governance](<https://devfeed.tech/tags/api-governance.md>), [api-platform](<https://devfeed.tech/tags/api-platform.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [continuous-integration](<https://devfeed.tech/tags/continuous-integration.md>), [graphos](<https://devfeed.tech/tags/graphos.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [schema](<https://devfeed.tech/tags/schema.md>), [security-policies](<https://devfeed.tech/tags/security-policies.md>)

### AI overview

Apollo GraphOS supports custom schema checks that let organizations add business logic, security policies, and company-specific rules to the existing schema check workflow. The article introduces the governance use case and begins describing how to configure a custom check through an HTTPS endpoint.

### Source excerpt

Apollo GraphOS now supports custom schema checks, a new feature that addresses API platform teams' demand for enhanced schema governance capabilities. This functionality allows organizations to integrate their own business logic, security policies, and rules into Apollo's existing schema check workflow, ensuring that every schema change adheres to company-specific standards.

## Automating Power BI Measure and Column Descriptions with a Tabular Editor Script

DevFeed: [Automating Power BI Measure and Column Descriptions with a Tabular Editor Script](<https://devfeed.tech/articles/the-pro-trick-for-measure-descriptions-in-power-bi-40846.md>)

Original publisher: [Read original article](<https://mutto.fyi/posts/2024/08/the-trick-measure-description-powerbi/>)

Published: 2024-08-09T00:00:00Z

Content type: tutorial

Language: en

Sources: [Mutt0-ds Notes](<https://devfeed.tech/sources/mutt0-ds-notes.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Script](<https://devfeed.tech/topics/script.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [DevOps](<https://devfeed.tech/topics/devops.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [dev](<https://devfeed.tech/tags/dev.md>), [devops](<https://devfeed.tech/tags/devops.md>), [documentation](<https://devfeed.tech/tags/documentation.md>), [script](<https://devfeed.tech/tags/script.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>)

### AI overview

This tutorial presents a Tabular Editor script in C# that copies DAX code into the Description field for Power BI measures and calculated columns. It also discusses adding comments and ticket IDs for context, and describes a possible TMDL and DevOps pipeline alternative.

### Source excerpt

"How does this MEASURE/COLUMN work?" This is one of the most frequent requests I was receiving. And it's easy to see why. In complex Power...

## How to Use User Location in Applications and Assess Its Limitations

DevFeed: [How to Use User Location in Applications and Assess Its Limitations](<https://devfeed.tech/articles/the-cake-user-location-is-a-lie-17715.md>)

Original publisher: [Read original article](<https://austingil.com/user-location-is-a-lie/>)

Author: Austin

Published: 2024-07-25T14:10:28Z

Content type: article

Language: en

Sources: [Back End - Austin Gil](<https://devfeed.tech/sources/back-end-austin-gil.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [app](<https://devfeed.tech/tags/app.md>), [back-end](<https://devfeed.tech/tags/back-end.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [coding](<https://devfeed.tech/tags/coding.md>), [compliance](<https://devfeed.tech/tags/compliance.md>), [development](<https://devfeed.tech/tags/development.md>), [edge-compute](<https://devfeed.tech/tags/edge-compute.md>), [front-end](<https://devfeed.tech/tags/front-end.md>), [geolocation](<https://devfeed.tech/tags/geolocation.md>), [html](<https://devfeed.tech/tags/html.md>), [ip](<https://devfeed.tech/tags/ip.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [js](<https://devfeed.tech/tags/js.md>), [location](<https://devfeed.tech/tags/location.md>), [location-based](<https://devfeed.tech/tags/location-based.md>), [privacy](<https://devfeed.tech/tags/privacy.md>), [programming](<https://devfeed.tech/tags/programming.md>), [software](<https://devfeed.tech/tags/software.md>), [web-development](<https://devfeed.tech/tags/web-development.md>)

### AI overview

This article examines location-based programming, including use cases such as regional language, currency, store locators, weather data, and geofencing. It distinguishes user-experience, application-logic, and policy or compliance concerns, then discusses four ways to obtain location: user reporting, device heuristics, IP address, and edge compute.

### Source excerpt

A post discussing the nuances around location-based programming. Various ways to access user location, how they can fail, and what to do about it.

## Effective Kotlin Item 20: Do not repeat common algorithms

DevFeed: [Effective Kotlin Item 20: Do not repeat common algorithms](<https://devfeed.tech/articles/effective-kotlin-item-20-do-not-repeat-common-algorithms-39294.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-utils>)

Published: 2024-01-29T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Algorithms](<https://devfeed.tech/topics/algorithms.md>), [functions](<https://devfeed.tech/topics/functions.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [functions](<https://devfeed.tech/tags/functions.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [sorting](<https://devfeed.tech/tags/sorting.md>), [standard-library](<https://devfeed.tech/tags/standard-library.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This Effective Kotlin article explains why developers should extract common, non-project-specific algorithms into named utility functions or libraries. It argues that reuse improves programming speed, readability, maintenance, and consistency, while reducing noise and repeated implementation. The article recommends learning and using standard-library functions where appropriate.

### Source excerpt

Why extracting utility functions is so important for our programs.

## Effective Kotlin Item 19: Do not repeat knowledge

DevFeed: [Effective Kotlin Item 19: Do not repeat knowledge](<https://devfeed.tech/articles/effective-kotlin-item-19-do-not-repeat-knowledge-39282.md>)

Original publisher: [Read original article](<https://kt.academy/article/ek-knowledge>)

Published: 2024-01-08T00:00:00Z

Content type: tutorial

Language: en

Sources: [Kt. Academy](<https://devfeed.tech/sources/kt-academy.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [data](<https://devfeed.tech/topics/data.md>), [Algorithm](<https://devfeed.tech/topics/algorithm.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [algorithm](<https://devfeed.tech/tags/algorithm.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [programming](<https://devfeed.tech/tags/programming.md>), [repeat](<https://devfeed.tech/tags/repeat.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This article explains why repeated knowledge in a programming project can be problematic. It connects copy-paste, DRY, WET, and Single Source of Truth practices, then distinguishes program logic from common algorithms based on how often they change.

### Source excerpt

Why knowledge repetition is so problematic and how it relates to the single responsibility principle.

## Crash course on the Android UI layer | Part 2

DevFeed: [Crash course on the Android UI layer | Part 2](<https://devfeed.tech/articles/crash-course-on-the-android-ui-layer-part-2-22599.md>)

Original publisher: [Read original article](<https://medium.com/bumble-tech/crash-course-on-the-android-ui-layer-part-2-2335171467e0?source=rss----6353b5325b1a---4>)

Author: Manuel Vivo

Published: 2023-12-19T15:58:45Z

Content type: tutorial

Language: en

Sources: [Bumble Tech](<https://devfeed.tech/sources/bumble-tech.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [data](<https://devfeed.tech/topics/data.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [apis](<https://devfeed.tech/tags/apis.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [requirements](<https://devfeed.tech/tags/requirements.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

Part 2 of a series on the Android UI layer explains state holders, saving UI state, state hoisting, and the distinction between business logic and UI logic. It describes how these types of logic should respond to configuration changes.

### Source excerpt

Crash Course on the Android UI Layer | Part 2State Holders and Saving State This blog post series aims to summarise the Android Developer guidance on the UI layer. We'll explore all the entities involved in it, understand the role each part plays, and discuss best practices. By the end of this series, you will have a general understanding of what happens on the UI layer and how to best handle state and logic within it, the various APIs involved, and how to use them. Additionally, we'll provide decision trees to assist you when you're in doubt. In part 1, we covered the UI and the UI state. You should already know the different entities present on the UI layer, and how to think about the UI and UI state effectively. Crash course on the Android UI layer | Part 1 Now it's time for Part 2! We'll cover state holders and other UI layer-related topics such as where to hoist state and save UI state on Android. If you prefer to consume this content in video format, check out the talk I delivered at Droidcon London 2023: Peeling Back the Layers: Unmasking the UI-nknown! State holders State holders simplify the UI by handling logic and/or exposing UI state. In this section, we'll see how to implement state holders and the implementation details to consider. To determine the implementation details, we first need to identify the types of logic commonly found in an Android app. Types of logic We have already discussed that business logic involves implementing the product requirements that specify how application data is created, stored, and modified. When business logic is present in the UI layer, it's recommended to manage this logic at the screen level. We'll see more of this later. Another type of logic is the UI logic. UI logic determines how to display state changes on the screen. While business logic dictates what to do with data, UI logic determines how to visually display it. The UI logic is dependent on the UI configuration. For instance, in a typical app, displaying a d

## Crash Course on the Android UI Layer | Part 2

DevFeed: [Crash Course on the Android UI Layer | Part 2](<https://devfeed.tech/articles/crash-course-on-the-android-ui-layer-part-2-35674.md>)

Original publisher: [Read original article](<https://manuelvivo.dev/crash-course-ui-layer-part-2>)

Author: Manuel Vivo

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

Content type: article

Language: en

Sources: [Manuel Vivo .dev](<https://devfeed.tech/sources/manuel-vivo-dev.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [saving](<https://devfeed.tech/topics/saving.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [screen](<https://devfeed.tech/topics/screen.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [saving](<https://devfeed.tech/tags/saving.md>), [screen](<https://devfeed.tech/tags/screen.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

Part 2 of a series on the Android UI layer explains state holders, state hoisting, saving UI state, and the distinction between business logic and UI logic. It also discusses how UI logic responds to different device configurations, such as phones and tablets.

### Source excerpt

Part 2 - State Holders and Saving State

[Next page](<https://devfeed.tech/tags/business-logic.md?cursor=WyIyMDIzLTEyLTE5VDAwOjAwOjAwKzAwOjAwIiwgImY5NmIzMTlkLWRjN2MtNGEwYS1iZmYyLTZiNGQ3ZDNjNWM5YyJd>)