# business logic

Business logic is the software layer that encodes domain-specific rules, constraints, validations, and workflows governing an enterprise's data and operations.

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

## When to use SAST versus an LLM security scanner

DevFeed: [When to use SAST versus an LLM security scanner](<https://devfeed.tech/articles/when-to-use-sast-versus-an-llm-security-scanner-31474.md>)

Original publisher: [Read original article](<https://about.gitlab.com/blog/sast-vs-llm-security-scanner/>)

Author: Chris Widstrom

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

Content type: comparison

Language: en

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

Topics: [Security](<https://devfeed.tech/topics/security.md>), [LLM security](<https://devfeed.tech/topics/llm-security.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Application Security](<https://devfeed.tech/topics/application-security.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Frontier Model](<https://devfeed.tech/topics/frontier-model.md>), [audit trail](<https://devfeed.tech/topics/audit-trail.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [application-security](<https://devfeed.tech/tags/application-security.md>), [audit-trail](<https://devfeed.tech/tags/audit-trail.md>), [features](<https://devfeed.tech/tags/features.md>), [frontier-model](<https://devfeed.tech/tags/frontier-model.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llm-security](<https://devfeed.tech/tags/llm-security.md>), [product](<https://devfeed.tech/tags/product.md>), [sast](<https://devfeed.tech/tags/sast.md>), [security](<https://devfeed.tech/tags/security.md>), [vulnerabilities](<https://devfeed.tech/tags/vulnerabilities.md>)

### AI overview

This comparison explains when to use static application security testing (SAST) and when to use LLM-based security review. SAST provides predictable, repeatable, low-cost scanning across commits, while LLMs can reason about context and identify some intent-based or novel issues. The article recommends using both according to the task and scan scope.

### Source excerpt

You're probably running some version of this experiment already: Point a frontier model at a merge request and ask it to double as a vulnerability scanner. On a single merge request, it often works well. The model reads the code, reasons about what it's supposed to do, and catches real issues, sometimes ones a pattern-based scanner misses entirely. So the next thought is reasonable: If a model reviews one merge request this well, why not let it replace the scanner across your whole pipeline? That's where it breaks down. Running a frontier model as your primary scanner on every commit across an enterprise codebase costs more and behaves less predictably, than asking it to review one merge request. If you run application security for a platform or product team, the decision was never mutually exclusive: static application security testing (SAST) or LLM scanners. It's which one runs where. Get that split right and you keep deterministic coverage on every commit, add reasoning where it earns its place, and avoid both an unpredictable inference bill and gaps in your audit trail. Here's how the two compare: Deterministic scanner (SAST)AI-based review (LLM)CostBetter Fractions of a cent per scan, fixed and predictable. A paid inference call per scan; cost scales with code volume and is hard to forecast.ConsistencyBetter Flags the same vulnerabilities, every time. Can flag or miss different vulnerabilities on the same code, run to run.Audit evidenceBetter Reproducible: same fixed method every time, mapped to a CWE Output can vary between runs, harder to use as standalone audit evidence.Vulnerability typesDepends on the vulnerability type Pattern-based, traceable flaws (injection)Depends on the vulnerability type Intent-based and novel flaws: missing auth checks, broken ownership logic, and issues not yet mapped to a CVE or CWE. Could reason about business logic using context from issues, epics, and docs.Validating a finding Flags potential vulnerabilities; can't confirm whe

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

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

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

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

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

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

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

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

Author: Manuel Vivo

Published: 2023-12-13T17:03:40Z

Content type: tutorial

Language: en

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

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

Tags: [android](<https://devfeed.tech/tags/android.md>), [app-architecture](<https://devfeed.tech/tags/app-architecture.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>), [state-management](<https://devfeed.tech/tags/state-management.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

Part 1 of a series explains the Android UI layer, UI state, and the roles of the UI, data, and optional domain layers. It introduces separation of concerns, state holders, unidirectional data flow, and related best practices.

### Source excerpt

Crash Course on the Android UI Layer | Part 1The UI and UI 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. This is part 1, where we're covering the UI and the UI state. Part 2 covers state holders and other UI layer-related topics such as where to hoist state and save 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! The UI layer in the grand scheme of things The UI layer isn't the only layer you can find in a typical app architecture. Alongside it, you can also find the data layer and sometimes, the domain layer. According to the Android Architecture documentation: The UI layer displays data on the screen. The data layer exposes application data and contains the vast majority of the business logic of the app. The domain layer is an optional layer that aims to 1) simplify and 2) reuse the potential business logic complexity of the UI layer. No less, no more. Note: The business logic is what gives value to your application. It's the implementation of product requirements that determines how your app fetches, stores, and modifies data.Architecture layers in a typical Android app: The UI, data, and domain layersEntities in the UI layer The UI layer consists of three distinct entities with clearly defined responsibilities. This distinction helps with separation of concerns, enhances testability, and promotes reusability. The UI, or UI elements, render data on the screen. The UI state describes the data to render on the

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

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

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

Author: Manuel Vivo

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

Content type: tutorial

Language: en

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

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

Tags: [android](<https://devfeed.tech/tags/android.md>), [app-architecture](<https://devfeed.tech/tags/app-architecture.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [save](<https://devfeed.tech/tags/save.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This first part of a series explains Android's UI layer and UI state. It describes how the UI layer fits alongside the data and optional domain layers, and outlines the responsibilities of UI elements, UI state, and optional state holders.

### Source excerpt

Part 1 - The UI and UI State

## 5 ways Temporal Cloud can help startups

DevFeed: [5 ways Temporal Cloud can help startups](<https://devfeed.tech/articles/5-ways-temporal-cloud-can-help-startups-35695.md>)

Original publisher: [Read original article](<https://temporal.io/blog/5-ways-temporal-cloud-can-help-startups>)

Author: Meagan Speare

Published: 2023-11-28T05:00:00Z

Content type: article

Language: en

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

Topics: [Development](<https://devfeed.tech/topics/development.md>), [reliability](<https://devfeed.tech/topics/reliability.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [iteration](<https://devfeed.tech/topics/iteration.md>), [retry](<https://devfeed.tech/topics/retry.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [developers](<https://devfeed.tech/tags/developers.md>), [development](<https://devfeed.tech/tags/development.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [iteration](<https://devfeed.tech/tags/iteration.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [retry](<https://devfeed.tech/tags/retry.md>), [startups](<https://devfeed.tech/tags/startups.md>)

### AI overview

This article explains how Temporal Cloud may help startup teams by accelerating feature development, abstracting state management and retry handling, improving reliability through durable execution, and making distributed-systems development more accessible. It also describes Temporal Cloud for Startups, which offers free credits and support.

### Source excerpt

We've frequently heard from developers at startups that Temporal Cloud would provide substantial benefits for their projects, but remains just out of reach of their limited budgets. To help these developers, we recently launched Temporal Cloud for Startups

## Implementing Multiplatform Kotlin Mobile

DevFeed: [Implementing Multiplatform Kotlin Mobile](<https://devfeed.tech/articles/implementing-multiplatform-kotlin-mobile-39207.md>)

Original publisher: [Read original article](<https://kt.academy/article/ak-kmp-kmm>)

Published: 2023-09-25T00:15:00Z

Content type: tutorial

Language: en

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

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [Development](<https://devfeed.tech/topics/development.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [logic](<https://devfeed.tech/tags/logic.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [text-to-speech](<https://devfeed.tech/tags/text-to-speech.md>), [workshop-learning-programming](<https://devfeed.tech/tags/workshop-learning-programming.md>)

### AI overview

This tutorial explains how Kotlin Multiplatform Mobile can share business logic between Android and iOS applications. It covers shared modules, generated platform libraries, ViewModel expect/actual classes, coroutine scopes, and interfaces for platform-specific dependencies such as text-to-speech.

### Source excerpt

How in Kotlin we can implement Android and iOS projects with shared logic.

## Configurable Features using Kotlin Multiplatform

DevFeed: [Configurable Features using Kotlin Multiplatform](<https://devfeed.tech/articles/configurable-features-using-kotlin-multiplatform-24742.md>)

Original publisher: [Read original article](<https://medium.com/yazio-engineering/configurable-features-using-kotlin-multiplatform-12e7c1c57221?source=rss----65bd178b00af---4>)

Author: Artem Zasypalov

Published: 2023-09-01T06:55:38Z

Content type: tutorial

Language: en

Sources: [YAZIO Engineering - Medium](<https://devfeed.tech/sources/yazio-engineering-medium.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [client library](<https://devfeed.tech/topics/client-library.md>)

Tags: [business-logic](<https://devfeed.tech/tags/business-logic.md>), [compose](<https://devfeed.tech/tags/compose.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [development](<https://devfeed.tech/tags/development.md>), [feature-engineering](<https://devfeed.tech/tags/feature-engineering.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [library](<https://devfeed.tech/tags/library.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [mobile-app-development](<https://devfeed.tech/tags/mobile-app-development.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [product-development](<https://devfeed.tech/tags/product-development.md>), [software-development](<https://devfeed.tech/tags/software-development.md>)

### AI overview

YAZIO describes using Kotlin Multiplatform to make its onboarding feature configurable. A shared module provides configuration structures and validation for both the mobile app and a Compose Desktop Flow Configurator, allowing product teams to construct and experiment with screen flows without code changes for existing screen types.

### Source excerpt

At YAZIO we love working efficiently. All business logic of our app's new features is written using Kotlin Multiplatform, and we share its code up to the ViewModels. This approach reduces engineering effort, increases stability, and conserves resources. We are always on the lookout for the next step. Some screens and even entire features require swift reactions in changing situations to provide the highest level of experience to our users. The first candidate was Onboarding. Our creative Product Team strives for excellence in first user impressions, meaning that changes in this part of the app occur more frequently than in others. That's why our Development department decided to make this feature not just flexible for content changes, but fully configurable. This means that engineering effort will be reduced to zero for changes that involve only existing Screen Types. Here comes our first term. A Screen Type is a combination of layout and business logic used for the screen in a Flow. And a Flow is a sequence of screens presented to a user in the feature. Our goal was to provide the Product team with a way to construct Flows and use them in the app without code changes. We took advantage of Kotlin Multiplatform again. First, we decided to have a single source of truth for both the app and the Flow Configurator. Configuration data structures and their validations are in a separate multiplatform module. This module is shared between our KMM client library with business logic and the Compose Desktop Flow Configurator app. In the Configurator, we can use our Screen Types to create screen instances and connect them to construct a Flow, create branching to cover all user's questions and concerns, and experiment with content and screen sequences. The saved configuration is then exported and used in the YAZIO mobile app. By delegating responsibility for screen sequences and content, we didn't neglect the safety of our solution. Each flow undergoes a series of validations to

## To choreograph or orchestrate your saga, that is the question

DevFeed: [To choreograph or orchestrate your saga, that is the question](<https://devfeed.tech/articles/to-choreograph-or-orchestrate-your-saga-that-is-the-question-36076.md>)

Original publisher: [Read original article](<https://temporal.io/blog/to-choreograph-or-orchestrate-your-saga-that-is-the-question>)

Author: Emily Fortuna

Published: 2023-07-13T15:30:00Z

Content type: article

Language: en

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

Topics: [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [microservices architecture](<https://devfeed.tech/topics/microservices-architecture.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [backend](<https://devfeed.tech/tags/backend.md>), [debug](<https://devfeed.tech/tags/debug.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [microservices-architecture](<https://devfeed.tech/tags/microservices-architecture.md>), [monolith](<https://devfeed.tech/tags/monolith.md>), [orchestration](<https://devfeed.tech/tags/orchestration.md>), [ordering](<https://devfeed.tech/tags/ordering.md>)

### AI overview

This article explains the saga pattern for tasks that span microservice boundaries and compares choreography with orchestration. It describes how choreography uses message passing and local service knowledge, while distributed ordering requirements can make control flow harder to understand and debug.

### Source excerpt

An explanation of orchestration and choreography of microservices, and how Temporal works under the hood. Find out how and why.

## VIPER Architecture for iOS Apps

DevFeed: [VIPER Architecture for iOS Apps](<https://devfeed.tech/articles/viper-architecture-for-ios-apps-24758.md>)

Original publisher: [Read original article](<https://medium.com/ymedialabs-innovation/viper-architecture-for-ios-apps-656ee687ba76?source=rss----8b5620c36355---4>)

Author: Surbhi Gupta

Published: 2023-05-18T14:59:24Z

Content type: tutorial

Language: en

Sources: [ymedialabs-innovation - Medium](<https://devfeed.tech/sources/ymedialabs-innovation-medium.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [Code](<https://devfeed.tech/topics/code.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [ui](<https://devfeed.tech/topics/ui.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [mvc](<https://devfeed.tech/topics/mvc.md>)

Tags: [apps](<https://devfeed.tech/tags/apps.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [code](<https://devfeed.tech/tags/code.md>), [controllers](<https://devfeed.tech/tags/controllers.md>), [flow](<https://devfeed.tech/tags/flow.md>), [ios](<https://devfeed.tech/tags/ios.md>), [modular](<https://devfeed.tech/tags/modular.md>), [mvc](<https://devfeed.tech/tags/mvc.md>), [mvvm](<https://devfeed.tech/tags/mvvm.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [swift](<https://devfeed.tech/tags/swift.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viper](<https://devfeed.tech/tags/viper.md>)

### AI overview

This tutorial explains VIPER, an architectural pattern for iOS apps. It describes how VIPER divides each module into View, Presenter, Interactor, Entity, and Router components, with separate responsibilities and delegation-based communication.

### Source excerpt

What is a Good Architecture? Architecture serves as a blueprint for a system. It provides a mechanism to communicate between various components and abstracts the complexity. It is important to separate out code components so that they are identifiable, serve a single purpose/responsibility and also fit logically. Code should be scalable, stable upon expansion, and flexible, which brings in the need for a good architecture. A good architecture not only helps in the success of the product but also allows for easy maintenance and makes people's lives easier. This article will talk about VIPER architecture, which is used to build many large projects. What is VIPER? VIPER is an architectural pattern like MVC and MVVM. One of the major issues with MVC and MVVM is bulky controllers. VIPER solves this problem by following Single Responsibility Principle and making the code more modular. Flow of Control Each module created with VIPER has five classes, each with their own responsibilities. No class does anything other than the specified role. These classes are listed below: View: It is responsible for only maintaining and displaying the view. It picks up any user interactions and passes the information to the presenter to decide the next step. Unlike other architecture patterns like MVC or MVVM, its sole responsibility is to manage and show the UI. Presenter: It is the only class that interacts with all other components except Entity. It is the decision-making engine for routing the flow. Interactor: It interacts with Entity and contains business logic. This class is where all the API calls and database interactions are added. Entity: Data model that is used by the interactor. Router: It does all the wire-framing or navigation from one module to another based on the information passed by the presenter. An ideal folder structure would be like below: Ideal Folder Structure with VIPER The communication between various components follows a delegation pattern. One component calls

## ViewModels in Jetpack Compose: Their Uses, Alternatives, and Setup

DevFeed: [ViewModels in Jetpack Compose: Their Uses, Alternatives, and Setup](<https://devfeed.tech/articles/why-you-need-viewmodels-and-why-you-don-t-28461.md>)

Original publisher: [Read original article](<https://composables.com/blog/viewmodels-in-jetpack-compose>)

Author: Alex Styl

Published: 2023-05-13T00:00:00Z

Content type: tutorial

Language: en

Sources: [Composables - Concise, no-fluff video tutorials for Android developers](<https://devfeed.tech/sources/composables-concise-no-fluff-video-tutorials-for-android-developers.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [API](<https://devfeed.tech/topics/api.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [configuration](<https://devfeed.tech/topics/configuration.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [architecture-design](<https://devfeed.tech/tags/architecture-design.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

A tutorial explaining Android ViewModels in Jetpack Compose, including how they preserve data across configuration changes, hold UI-related business logic, and emit updated state. It also discusses when ViewModels may not be necessary, alternatives outside Android, and the dependencies used to access them in composables.

### Source excerpt

Everything you need to know about ViewModels in Jetpack Compose

## Do-It-Yourself Compose Multiplatform Navigation with Decompose

DevFeed: [Do-It-Yourself Compose Multiplatform Navigation with Decompose](<https://devfeed.tech/articles/do-it-yourself-compose-multiplatform-navigation-with-decompose-25916.md>)

Original publisher: [Read original article](<https://proandroiddev.com/diy-compose-multiplatform-navigation-with-decompose-94ac8126e6b5?source=rss-43bae76e8f81------2>)

Author: Isuru Rajapakse

Published: 2023-02-09T09:02:35Z

Content type: tutorial

Language: en

Sources: [Stories by Isuru Rajapakse on Medium](<https://devfeed.tech/sources/stories-by-isuru-rajapakse-on-medium.md>)

Topics: [compose-multiplatform](<https://devfeed.tech/topics/compose-multiplatform.md>), [navigation](<https://devfeed.tech/topics/navigation.md>), [Android](<https://devfeed.tech/topics/android.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Processes](<https://devfeed.tech/topics/processes.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-app-development](<https://devfeed.tech/tags/android-app-development.md>), [androiddev](<https://devfeed.tech/tags/androiddev.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [component](<https://devfeed.tech/tags/component.md>), [compose-multiplatform](<https://devfeed.tech/tags/compose-multiplatform.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [process](<https://devfeed.tech/tags/process.md>)

### AI overview

A tutorial on building Compose Multiplatform navigation with Decompose for Android and desktop. It explains how to share navigation logic, retain and scope ViewModels, and restore ViewModel state after process death while using a custom architecture.

### Source excerpt

How to survive configuration changes, survive process death and scope ViewModels without going all-in with Decompose 🫢 Decompose recently went 1.0.0 🙌. I think it's a good opportunity to share my specific use case with Decompose where I use it to share navigation logic between Android and Desktop, without going all in with Decompose's Component pattern. Here are some of the problems you would run into - in extracting the navigation to the shared code Abstraction of common navigation. Retaining and scoping your view models Restoring the view models state after the process death. Doesn't Decompose solve all these problems? Why not go all in? This was really just a preference. I wanted to do my own architecture for my app and an inheritance-based component approach wasn't my forte. Luckily Decompose allows you to use parts of it and couple your navigation with business logic (if you want to). Decompose provides you with extensive customisation options to tailor the library to your needs. That's what I ended up doing at the end An Update! 📰 I've decided to publish the implementations of this article as a library called Decompose-Router. This should save you some time if you want to implement this on your own app. If you don't care about the implementation details and just want to use the library, head over there. GitHub - xxfast/Decompose-Router: A Compose-multiplatform navigation library that leverage Decompose to create an API inspired by Conductor The Goal 🥅 This is what we will be working towards. @Parcelize sealed class Screen: Parcelable { object List : Screen() data class Details(val detail: String) : Screen() } @Composable fun ListDetailScreen() { val router: Router<Screen> = rememberRouter(listOf(List)) RoutedContent( router = router, animation = stackAnimation(slide()), ) { screen -> when (screen) { List -> ListScreen(onSelect { detail -> router.push(detail) } ) is Details -> DetailsScreen(screen.detail) } } } @Composable fun ListScreen(onSelect: (detail: Stri

## State holders and state production in the UI Layer

DevFeed: [State holders and state production in the UI Layer](<https://devfeed.tech/articles/state-holders-and-state-production-in-the-ui-layer-35679.md>)

Original publisher: [Read original article](<https://manuelvivo.dev/state-holders-ui-layer>)

Author: Manuel Vivo

Published: 2022-10-25T00:00:01Z

Content type: tutorial

Language: en

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

Topics: [ui](<https://devfeed.tech/topics/ui.md>), [LineageOS](<https://devfeed.tech/topics/lineageos.md>), [Development](<https://devfeed.tech/topics/development.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>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [dev](<https://devfeed.tech/tags/dev.md>), [screen](<https://devfeed.tech/tags/screen.md>), [state](<https://devfeed.tech/tags/state.md>), [talk](<https://devfeed.tech/tags/talk.md>), [talks](<https://devfeed.tech/tags/talks.md>), [ui](<https://devfeed.tech/tags/ui.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

An Android Dev Summit 2022 talk about producing UI state and managing UI complexity with state holders. It explains the differences between UI and business logic, ViewModels and plain state holder classes, and state versus events.

### Source excerpt

Android Dev Summit 2022 talk

## Simple string localization in Kotlin Multiplatform

DevFeed: [Simple string localization in Kotlin Multiplatform](<https://devfeed.tech/articles/simple-string-localization-in-kotlin-multiplatform-24740.md>)

Original publisher: [Read original article](<https://medium.com/xorum-io/simple-string-localization-in-kmm-beaffc5e7a17?source=rss----92bb7980cc9f---4>)

Author: Yev Kanivets

Published: 2021-08-14T16:30:03Z

Content type: tutorial

Language: en

Sources: [xorum.io - Medium](<https://devfeed.tech/sources/xorum-io-medium.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Localization (l10n)](<https://devfeed.tech/topics/localization.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [article](<https://devfeed.tech/tags/article.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-multiplatform-mobile](<https://devfeed.tech/tags/kotlin-multiplatform-mobile.md>), [mobile](<https://devfeed.tech/tags/mobile.md>)

### AI overview

This tutorial explains how to access localized strings from Kotlin Multiplatform Mobile shared code while retaining native string localization on Android and iOS. It outlines the platforms' differing localization mechanisms and presents an approach for retrieving localized, formatted, and plural strings from shared code.

### Source excerpt

Kotlin Multiplatform Mobile gives us a lot of freedom on what to share and how to share between native mobile applications. Usually, it's just the shared business logic, and no user-facing things live in the common KMM module. But sometimes we need more ... This article will describe a simple (no 3rd party needed) way to access and use localized strings from the KMM module. This approach is based on the native string localization provided by Android and iOS applications, so no changes to strings management are needed from your side. Native localization iOS and Android have similar approaches to the localization of strings with some major differences in details. Let's do a quick recap to get context before diving into the KMM stuff. On both operating systems, we have all localizable strings extracted to files (one per language) in the form of key-value lists. Once the application is run on the user's device, the operating system detects the closest language file and uses it to render your app's UI. Rather straightforward. The main difference can be seen when it comes to using those strings in the code though. https://medium.com/media/cc9c336339f06c04a4b01f98ad707e2c/href On Android, you have a generated R class, which contains all string keys, accessible during the compilation, so you have an auto-completion and compile-time check for the existence of all strings you are trying to use. https://medium.com/media/fb7cfa6d362cd3fd353fa29bd35a64e1/href On iOS, you pass the string key to NSLocalizedString, which is resolved and localized during the runtime, so you don't have the auto-completion and compile-time check. String key is used as the default value. KMM localization To me, strings are one of the most user-facing parts of mobile applications, so I'm not sure that we should share it or have just one strings file in a KMM module. My take on it is that we should leave the power of strings to native platforms and developers. Even though, we still may need to access those

## My journey to Temporal

DevFeed: [My journey to Temporal](<https://devfeed.tech/articles/my-journey-to-temporal-36071.md>)

Original publisher: [Read original article](<https://temporal.io/blog/tihomir-journey-to-temporal>)

Author: Tihomir Surdilovic

Published: 2021-06-03T07:00:00Z

Content type: opinion

Language: en

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

Topics: [Open Source](<https://devfeed.tech/topics/open-source.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [architectures](<https://devfeed.tech/tags/architectures.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [programming](<https://devfeed.tech/tags/programming.md>), [story](<https://devfeed.tech/tags/story.md>), [temporal-voices](<https://devfeed.tech/tags/temporal-voices.md>)

### AI overview

A developer describes a 12-year journey through open-source workflow technologies before joining Temporal. The article explains that Temporal integrates with existing applications and architectures while allowing developers to make selected business logic resilient, transactional, and stateful.

### Source excerpt

I have been involved with open-source workflow technologies since 2009, right when they started taking off. Back then we were enthusiastic about it but more importantly, the work was done with the right mindset.

## 2020: Online Conferences

DevFeed: [2020: Online Conferences](<https://devfeed.tech/articles/2020-online-conferences-34613.md>)

Original publisher: [Read original article](<https://tapoueh.org/blog/2020/11/2020-online-conferences/>)

Author: Dimitri Fontaine PostgreSQL Major Contributor; Author

Published: 2020-11-27T12:10:00Z

Content type: article

Language: en

Sources: [Dimitri Fontaine](<https://devfeed.tech/sources/dimitri-fontaine.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [backend](<https://devfeed.tech/tags/backend.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [conferences](<https://devfeed.tech/tags/conferences.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [sql](<https://devfeed.tech/tags/sql.md>), [virtual](<https://devfeed.tech/tags/virtual.md>)

### AI overview

The article discusses participating in online Postgres community events in 2020, including Postgres Vision and an online interview. It also introduces the author's view that SQL queries implement part of an application's business logic and considers how that logic should be divided between SQL and the backend.

### Source excerpt

Among a lot of other changes, the year 2020 brings Online Conferences to us. In the Postgres community too we now record our talks at home and send a video file to be playedto a virtual audience, and sometimes shared later in a platform online. So this year I did participate in Postgres Vision 2020 where I did deliver a talk about The Art of PostgreSQL. This a talk all about the book that I have written and self-publish at The Art of PostgreSQL: learn how to turn thousands of lines of code into simple SQL queries.

## Netflix Chooses Kotlin Multiplatform to Power Android and iOS Studio Mobile Apps - Touchlab

DevFeed: [Netflix Chooses Kotlin Multiplatform to Power Android and iOS Studio Mobile Apps - Touchlab](<https://devfeed.tech/articles/netflix-chooses-kotlin-multiplatform-to-power-android-and-ios-studio-mobile-apps-touchlab-38302.md>)

Original publisher: [Read original article](<https://touchlab.co/netflix-kotlin-multiplatform>)

Published: 2020-10-30T01:16:48Z

Content type: news

Language: en

Sources: [Touchlab | Enterprise Mobile Innovation & Development](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [Kotlin Multiplatform](<https://devfeed.tech/topics/kotlin-multiplatform.md>), [Netflix](<https://devfeed.tech/topics/netflix.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [cross-platform](<https://devfeed.tech/topics/cross-platform.md>), [business logic](<https://devfeed.tech/topics/business-logic.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [announcement](<https://devfeed.tech/tags/announcement.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [cross-platform](<https://devfeed.tech/tags/cross-platform.md>), [development](<https://devfeed.tech/tags/development.md>), [faang](<https://devfeed.tech/tags/faang.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kmp](<https://devfeed.tech/tags/kmp.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [netflix](<https://devfeed.tech/tags/netflix.md>), [touchlabshare](<https://devfeed.tech/tags/touchlabshare.md>)

### AI overview

Netflix has publicly adopted Kotlin Multiplatform and put it into production for mobile technologies used in the physical production of film and television. The article explains that KMP complements platform-specific development and is intended to replace shared business logic rather than entire platform toolchains.

### Source excerpt

Netflix is the 1st FAANG org to put Kotlin Multiplatform (KMP) into production. The team is using KMP to innovate in the physical production of Film & TV.

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