# background-work

Published articles for background-work.

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

## Announcing Appwrite Push: push notifications without Firebase

DevFeed: [Announcing Appwrite Push: push notifications without Firebase](<https://devfeed.tech/articles/announcing-appwrite-push-push-notifications-without-firebase-121687.md>)

Original publisher: [Read original article](<https://appwrite.io/blog/post/announcing-appwrite-push>)

Author: Arnab Chatterjee

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

Content type: release

Language: en

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

Topics: [Push Notifications](<https://devfeed.tech/topics/push-notifications.md>), [Appwrite](<https://devfeed.tech/topics/appwrite.md>), [React Native](<https://devfeed.tech/topics/react-native.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [announcements](<https://devfeed.tech/tags/announcements.md>), [api](<https://devfeed.tech/tags/api.md>), [apple](<https://devfeed.tech/tags/apple.md>), [at-least-once-delivery](<https://devfeed.tech/tags/at-least-once-delivery.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [broker](<https://devfeed.tech/tags/broker.md>), [browser](<https://devfeed.tech/tags/browser.md>), [callback](<https://devfeed.tech/tags/callback.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [console](<https://devfeed.tech/tags/console.md>), [container](<https://devfeed.tech/tags/container.md>), [credentials](<https://devfeed.tech/tags/credentials.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [flutter](<https://devfeed.tech/tags/flutter.md>), [ios](<https://devfeed.tech/tags/ios.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [push-notifications](<https://devfeed.tech/tags/push-notifications.md>), [react-native](<https://devfeed.tech/tags/react-native.md>), [token](<https://devfeed.tech/tags/token.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

Appwrite Push delivers messages through an SDK connection to Appwrite, without requiring a Firebase project, service account, or device tokens. After signing in, an app subscribes to the user's messages; servers can send to a user ID, and the SDK handles notifications and tap data. Offline messages are retained for up to seven days, with up to five per topic replayed on reconnect. Delivery differs by platform: Android reconnects on a schedule or can use a foreground service for immediate delivery; iOS uses APNs and a Notification Service Extension to reach suspended apps; web delivery requires an open tab, with missed messages replayed when it reopens. FCM and APNs can remain enabled alongside Appwrite Push; an Appwrite push target is needed for topics, iOS background delivery, or devices with other push targets. Self-hosted support starts with Appwrite 2.6.0.

### Source excerpt

Appwrite Push delivers push notifications from Appwrite straight to your Android, iOS, web, Flutter, and React Native apps, with no Firebase project, service account, or device token to manage.

## Render just removed its AI sandbox time limit -- and Vercel still has a 24-hour cap

DevFeed: [Render just removed its AI sandbox time limit -- and Vercel still has a 24-hour cap](<https://devfeed.tech/articles/render-just-removed-its-ai-sandbox-time-limit-and-vercel-still-has-a-24-hour-cap-117679.md>)

Original publisher: [Read original article](<https://thenewstack.io/render-vercel-ai-sandboxes/>)

Author: Amanda Caswell

Published: 2026-11-04T18:04:17Z

Content type: news

Language: en

Sources: [The New Stack](<https://devfeed.tech/sources/the-new-stack.md>)

Topics: [AI Sandbox](<https://devfeed.tech/topics/ai-sandbox.md>), [AI Infrastructure](<https://devfeed.tech/topics/ai-infrastructure.md>), [Vercel](<https://devfeed.tech/topics/vercel.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>)

Tags: [agent](<https://devfeed.tech/tags/agent.md>), [agent-workflows](<https://devfeed.tech/tags/agent-workflows.md>), [agentic](<https://devfeed.tech/tags/agentic.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-infrastructure](<https://devfeed.tech/tags/ai-infrastructure.md>), [ai-sandbox](<https://devfeed.tech/tags/ai-sandbox.md>), [ai-sandboxes](<https://devfeed.tech/tags/ai-sandboxes.md>), [api](<https://devfeed.tech/tags/api.md>), [applications](<https://devfeed.tech/tags/applications.md>), [aws](<https://devfeed.tech/tags/aws.md>), [backend](<https://devfeed.tech/tags/backend.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [cloud-services](<https://devfeed.tech/tags/cloud-services.md>), [long-running](<https://devfeed.tech/tags/long-running.md>), [render](<https://devfeed.tech/tags/render.md>), [run](<https://devfeed.tech/tags/run.md>), [sandbox](<https://devfeed.tech/tags/sandbox.md>), [sandboxes](<https://devfeed.tech/tags/sandboxes.md>), [vercel](<https://devfeed.tech/tags/vercel.md>)

### AI overview

Render removed its 30-day continuous runtime limit on paid workspace plans, offering AI sandboxes that can suspend when idle and resume with files, memory, and running processes intact. Vercel caps individual sandbox sessions at 24 hours; the article says persistent Vercel sandboxes can restart, but their processes start over. Render's Durable Workflows, written in Python or TypeScript, save each completed step and can resume after a crash on another machine; idempotency keys may be needed if a payment succeeds before its result is saved. Shared Filesystems let sandboxes and workflow tasks access persistent files, but concurrent writes to the same file remain unresolved. Credential brokering attaches secrets to outbound requests so they never enter the sandbox; it is rolling out first to selected customers, while beta developers get controls to block all outbound traffic or allow listed domains. Private sandbox networking is still in development.

### Source excerpt

Render is taking on Vercel with AI sandboxes that can run indefinitely, along with new tools for managing long-running agent The post Render just removed its AI sandbox time limit -- and Vercel still has a 24-hour cap appeared first on The New Stack.

## Priority queues, clearer analytics, Preferred Sources

DevFeed: [Priority queues, clearer analytics, Preferred Sources](<https://devfeed.tech/articles/priority-queues-clearer-analytics-preferred-sources-107778.md>)

Original publisher: [Read original article](<https://changelog.devfeed.tech/priority-queues-clearer-analytics-preferred-sources>)

Published: 2026-10-30T00:00:00Z

Content type: release

Language: en

Sources: [devfeed.tech Changelog](<https://devfeed.tech/sources/devfeed-tech-changelog.md>)

Topics: [Analytics Pipeline](<https://devfeed.tech/topics/analytics-pipeline.md>), [backpressure](<https://devfeed.tech/topics/backpressure.md>), [metric-standardization](<https://devfeed.tech/topics/metric-standardization.md>), [User interface design](<https://devfeed.tech/topics/ui-design.md>)

Tags: [admin](<https://devfeed.tech/tags/admin.md>), [administration](<https://devfeed.tech/tags/administration.md>), [all](<https://devfeed.tech/tags/all.md>), [analytics](<https://devfeed.tech/tags/analytics.md>), [app](<https://devfeed.tech/tags/app.md>), [article](<https://devfeed.tech/tags/article.md>), [automatically](<https://devfeed.tech/tags/automatically.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [browser](<https://devfeed.tech/tags/browser.md>), [capacity](<https://devfeed.tech/tags/capacity.md>), [charts](<https://devfeed.tech/tags/charts.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [collection](<https://devfeed.tech/tags/collection.md>), [control](<https://devfeed.tech/tags/control.md>), [counts](<https://devfeed.tech/tags/counts.md>), [dispatch](<https://devfeed.tech/tags/dispatch.md>), [priority](<https://devfeed.tech/tags/priority.md>), [queues](<https://devfeed.tech/tags/queues.md>), [sources](<https://devfeed.tech/tags/sources.md>)

### AI overview

Background work now uses high, default, and low priority queues with independent worker capacity, helping article processing and feed preparation proceed despite lower-priority work or blocked partner jobs. Admin Overview panels share the selected UTC date range, and failed chart queries show retryable errors while genuinely preparing reports continue to retry automatically. Queue pressure and pipeline views recover from missed analytics updates and indicate when data is catching up or stale. Article previews now link to Google Preferred Sources selection, with theme-aware controls across the website, Chrome, and Edge; packaged extensions retain required icons and favicons. Faro browser telemetry and its collection endpoints were removed from the reader and administration app.

### Source excerpt

This release focuses on keeping the product responsive under load and making admin reporting easier to trust. It also adds a quick way to open Google Preferred Sources from article previews. Faster, more predictable background processing Background work is now organized into high, default, and low priority queues with independent worker capacity. This helps ensure fresh article processing and interactive feed preparation are not slowed down by lower-priority work like notifications. Queue dispatch and worker controls are also more resilient when a slow or contended dependency is involved, so other partner jobs can continue progressing while a blocked job waits to retry. Admin reporting and analytics: clearer, more consistent, more reliable All Overview panels now use the selected UTC date range, including reviews, queues, feed health, and topic demand. Relative ranges like Today resolve once across panels and advance together at UTC midnight, so charts stay in sync even after the page has been inactive. When an Overview chart query fails, the chart now shows a retryable error instead of spinning as if data is still preparing. Reports that are genuinely still preparing continue to retry automatically. Queue pressure and pipeline boards now recover from missed analytics updates, fixing stale running-job counts and outdated pipeline cards. The UI also indicates when current views are catching up or have become stale, while keeping existing data visible. Reader and extensions updates You can now open Google Preferred Sources selection directly from article previews. The control follows your theme on the website, Chrome, and Edge, and required profile icons and favicons remain included in the packaged Chrome and Edge extensions. Faro browser telemetry and its collection endpoints have been removed from the reader and administration app.

## Managed Deep Agents v0.10: Browser Use and Async Subagents

DevFeed: [Managed Deep Agents v0.10: Browser Use and Async Subagents](<https://devfeed.tech/articles/managed-deep-agents-v0-10-browser-use-and-async-subagents-107265.md>)

Original publisher: [Read original article](<https://www.langchain.com/blog/managed-deep-agents-browser-use-and-asynchronous-subagents>)

Author: LangChain Accounts

Published: 2026-10-29T17:03:39Z

Content type: release

Language: en

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

Topics: [supervisor agent pattern](<https://devfeed.tech/topics/supervisor-agent-pattern.md>), [Agent Browser](<https://devfeed.tech/topics/agent-browser.md>), [AI-assisted coding](<https://devfeed.tech/topics/ai-assisted-coding.md>), [Slack](<https://devfeed.tech/topics/slack.md>)

Tags: [accessibility](<https://devfeed.tech/tags/accessibility.md>), [account](<https://devfeed.tech/tags/account.md>), [actions](<https://devfeed.tech/tags/actions.md>), [added](<https://devfeed.tech/tags/added.md>), [agents](<https://devfeed.tech/tags/agents.md>), [api](<https://devfeed.tech/tags/api.md>), [async](<https://devfeed.tech/tags/async.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [browser](<https://devfeed.tech/tags/browser.md>), [can](<https://devfeed.tech/tags/can.md>), [deep](<https://devfeed.tech/tags/deep.md>), [managed](<https://devfeed.tech/tags/managed.md>), [sign](<https://devfeed.tech/tags/sign.md>), [sign-in](<https://devfeed.tech/tags/sign-in.md>), [sites](<https://devfeed.tech/tags/sites.md>), [subagents](<https://devfeed.tech/tags/subagents.md>), [window](<https://devfeed.tech/tags/window.md>), [with](<https://devfeed.tech/tags/with.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

Managed Deep Agents v0.10 adds browser tools for sites without APIs and asynchronous subagents for long-running delegated work. Browsers run in LangSmith sandboxes: thread scope gives each conversation a fresh browser, while user scope carries logins across that person's conversations. At login or two-factor prompts, `browser_handoff` lets a person use the remote window; handoff links expire after 15 minutes, and the agent resumes after control is returned. Async subagents run on their own threads in the shared sandbox, while the orchestrator remains available to the user and can check, update, or cancel tasks. Results reach the agent during a run, wake it when idle, or wait until an approval is answered. The release also routes replies to the originating Slack thread and adds run cancellation there. Breaking changes include removing `connectors.mcp()` and the `connectors/` layout; MCP servers now go in `tools/mcp.ts` or `tools/mcp.py`. For `LANGSMITH_*` variables, shell environment values now take precedence over project `.env` values.

### Source excerpt

Managed Deep Agents v0.10 adds browser use, so agents can work on sites with no API and hand you the window to sign in, and async subagents for background work.

## Hardening Coroutine Tests - Kevin Schildhorn

DevFeed: [Hardening Coroutine Tests - Kevin Schildhorn](<https://devfeed.tech/articles/hardening-coroutine-tests-kevin-schildhorn-98452.md>)

Original publisher: [Read original article](<https://touchlab.co/flake-free-flow-tests-pt1-coroutines>)

Published: 2026-10-23T18:00:00Z

Content type: article

Language: en

Sources: [Touchlab](<https://devfeed.tech/sources/touchlab-enterprise-mobile-innovation-development.md>)

Topics: [coroutine-testing](<https://devfeed.tech/topics/coroutine-testing.md>), [coroutines-flow](<https://devfeed.tech/topics/coroutines-flow.md>), [Dependency injection](<https://devfeed.tech/topics/dependency-injection.md>), [scheduling](<https://devfeed.tech/topics/scheduling.md>)

Tags: [background-work](<https://devfeed.tech/tags/background-work.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [cache](<https://devfeed.tech/tags/cache.md>), [channel](<https://devfeed.tech/tags/channel.md>), [ci](<https://devfeed.tech/tags/ci.md>), [cleanup](<https://devfeed.tech/tags/cleanup.md>), [clock](<https://devfeed.tech/tags/clock.md>), [clocks](<https://devfeed.tech/tags/clocks.md>), [collector](<https://devfeed.tech/tags/collector.md>), [coroutine](<https://devfeed.tech/tags/coroutine.md>), [coroutine-testing](<https://devfeed.tech/tags/coroutine-testing.md>), [coroutines](<https://devfeed.tech/tags/coroutines.md>), [coroutinescope](<https://devfeed.tech/tags/coroutinescope.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [delay](<https://devfeed.tech/tags/delay.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [dispatcher](<https://devfeed.tech/tags/dispatcher.md>), [emissions](<https://devfeed.tech/tags/emissions.md>), [flow](<https://devfeed.tech/tags/flow.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [scheduler](<https://devfeed.tech/tags/scheduler.md>), [tests](<https://devfeed.tech/tags/tests.md>), [turbine](<https://devfeed.tech/tags/turbine.md>)

### AI overview

Use StandardTestDispatcher with the runTest testScheduler, and inject dispatchers, scopes, and clocks so test work uses controlled virtual time. Drive scheduled work with runCurrent, advanceTimeBy, or advanceUntilIdle; inject TimeSource when code reads elapsed time or timestamps. Use backgroundScope for endless observers and settle it with runCurrent or advanceTimeBy; use a cancellable SupervisorJob scope for finite fire-and-forget work. Avoid parallel tests that set global Dispatchers.Main, and reset it after use. For necessary real-thread tests, keep most work virtual, synchronize on signals such as join or awaitItem rather than sleeps, use generous timeouts, cancel created scopes, and assert final values or invariant patterns instead of exact emission sequences. The supplied article excerpt reports substantial ordering variation and stale results in its repeated experiments, and warns that detached failures or shared state can cause false passes and cross-test flakiness.

### Source excerpt

Why coroutine tests flake, and the dispatcher and scheduler habits that stop it.

## Vercel vs Cloudflare vs Self-Hosted for Next.js: Pricing, Limits and Open-Source Alternatives

DevFeed: [Vercel vs Cloudflare vs Self-Hosted for Next.js: Pricing, Limits and Open-Source Alternatives](<https://devfeed.tech/articles/vercel-vs-cloudflare-vs-self-hosted-for-next-js-pricing-limits-and-open-source-alternatives-95345.md>)

Original publisher: [Read original article](<https://ihatereading.in/blogs/vercel-vs-cloudflare-vs-self-hosted-nextjs-pricing-limits-alternatives>)

Author: Shrey Vijayvargiya

Published: 2026-10-22T10:00:00Z

Content type: comparison

Language: en

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

Topics: [Vercel](<https://devfeed.tech/topics/vercel.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>), [Cloudflare Workers](<https://devfeed.tech/topics/cloudflare-workers.md>), [Self-hosted](<https://devfeed.tech/topics/self-hosted.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [adapter](<https://devfeed.tech/tags/adapter.md>), [alternatives](<https://devfeed.tech/tags/alternatives.md>), [apache-2-0](<https://devfeed.tech/tags/apache-2-0.md>), [assets](<https://devfeed.tech/tags/assets.md>), [backend](<https://devfeed.tech/tags/backend.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [backups](<https://devfeed.tech/tags/backups.md>), [bandwidth](<https://devfeed.tech/tags/bandwidth.md>), [billing](<https://devfeed.tech/tags/billing.md>), [blockchain](<https://devfeed.tech/tags/blockchain.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [coding](<https://devfeed.tech/tags/coding.md>), [coolify-vs-dokploy](<https://devfeed.tech/tags/coolify-vs-dokploy.md>), [cost](<https://devfeed.tech/tags/cost.md>), [development](<https://devfeed.tech/tags/development.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [host-next-js-on-cloudflare-workers](<https://devfeed.tech/tags/host-next-js-on-cloudflare-workers.md>), [hosting](<https://devfeed.tech/tags/hosting.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [limits](<https://devfeed.tech/tags/limits.md>), [next-js](<https://devfeed.tech/tags/next-js.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [opennext-cloudflare](<https://devfeed.tech/tags/opennext-cloudflare.md>), [pricing](<https://devfeed.tech/tags/pricing.md>), [product](<https://devfeed.tech/tags/product.md>), [production](<https://devfeed.tech/tags/production.md>), [programming](<https://devfeed.tech/tags/programming.md>), [react](<https://devfeed.tech/tags/react.md>), [self-host-next-js](<https://devfeed.tech/tags/self-host-next-js.md>), [self-hosted](<https://devfeed.tech/tags/self-hosted.md>), [self-hosting](<https://devfeed.tech/tags/self-hosting.md>), [traffic](<https://devfeed.tech/tags/traffic.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [vercel](<https://devfeed.tech/tags/vercel.md>), [vercel-alternatives-open-source](<https://devfeed.tech/tags/vercel-alternatives-open-source.md>), [vercel-pricing-explained](<https://devfeed.tech/tags/vercel-pricing-explained.md>), [vercel-vs-cloudflare](<https://devfeed.tech/tags/vercel-vs-cloudflare.md>), [web-development](<https://devfeed.tech/tags/web-development.md>)

### AI overview

Vercel, Cloudflare Workers, and self-hosting bill for different things, so the cheapest option depends on traffic shape and operating effort. Vercel offers the simplest Next.js deployment and Flat Rate CDN tiers, but commercial apps need Pro and large usage can move to on-demand pricing. Cloudflare charges for Worker requests and CPU while static asset requests and bandwidth are free; OpenNext supports many Next.js features, but the 10 MiB compressed bundle and 128 MB memory limits, CPU usage, and unsupported Node Middleware can block migrations. Self-hosting with a standalone build and tools such as Coolify or Dokploy gives a fixed server bill and supports long-running work, while requiring maintenance, backups, monitoring, and attention to shared caching across instances. The article's traffic cost scenarios are estimates based on stated assumptions and exclude databases, auth, and AI APIs. It recommends comparing actual app requirements and migration work before switching.

### Source excerpt

Vercel vs Cloudflare vs self-hosting for a production Next.js app: verified pricing, the limits that bite, cost tables at three traffic levels, open-source too...

## Driver Mode: Jumping levels of abstraction with agents

DevFeed: [Driver Mode: Jumping levels of abstraction with agents](<https://devfeed.tech/articles/driver-mode-jumping-levels-of-abstraction-with-agents-90002.md>)

Original publisher: [Read original article](<https://medium.com/whatnot-engineering/driver-mode-jumping-levels-of-abstraction-with-agents-8073087bd10a?source=rss----162aeca881b0---4>)

Author: Whatnot Engineering

Published: 2026-10-19T15:51:01Z

Content type: article

Language: en

Sources: [Whatnot Engineering](<https://devfeed.tech/sources/whatnot-engineering.md>)

Topics: [Multi Agent Systems](<https://devfeed.tech/topics/multi-agent-systems.md>), [agent orchestration](<https://devfeed.tech/topics/agent-orchestration.md>), [agentic workflows](<https://devfeed.tech/topics/agentic-workflows.md>), [AI Context Management](<https://devfeed.tech/topics/ai-context-management.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agent](<https://devfeed.tech/tags/ai-agent.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [context](<https://devfeed.tech/tags/context.md>), [details](<https://devfeed.tech/tags/details.md>), [driver](<https://devfeed.tech/tags/driver.md>), [intervene](<https://devfeed.tech/tags/intervene.md>), [machine-learning](<https://devfeed.tech/tags/machine-learning.md>), [map](<https://devfeed.tech/tags/map.md>), [model](<https://devfeed.tech/tags/model.md>), [need](<https://devfeed.tech/tags/need.md>), [overview](<https://devfeed.tech/tags/overview.md>), [pi](<https://devfeed.tech/tags/pi.md>), [research](<https://devfeed.tech/tags/research.md>), [results](<https://devfeed.tech/tags/results.md>), [run](<https://devfeed.tech/tags/run.md>), [running](<https://devfeed.tech/tags/running.md>), [setup](<https://devfeed.tech/tags/setup.md>), [signal](<https://devfeed.tech/tags/signal.md>), [status](<https://devfeed.tech/tags/status.md>), [tools](<https://devfeed.tech/tags/tools.md>)

### AI overview

The author's "driver mode" workflow helps one person oversee several agents by keeping a clear status overview and opening detailed sessions when judgment is needed. In Pi, a small default toolset, manual skills, deferred tools, and project settings keep unused instructions out of each session while making capabilities available on demand. Herdr organizes visible sessions and shows whether agents are working, blocked, or done; background agents surface status and results for work that can wait. These signals direct attention but do not verify correctness: the author checks evidence, uses a separate model to audit completion requirements, and still relies on tests and personal review. Separate git worktrees prevent parallel writers from colliding. A cleanup skill proposes what to close, merge, or archive for the author's approval. The account concerns personal coding, research, and data exploration workflows; it explicitly excludes production agents, which need different guardrails.

### Source excerpt

Eli Bressert | Research (US) The hard part of running several agents isn't starting them. It's knowing which one needs your judgment. During an agent-driven research session, one of my background agents turned red in its status line and kept retrying. I checked on it, saw it was stuck, and told the orchestrator to launch a plain agent instead. The work went on. Without that signal, I'd have waited on a result that wasn't coming. I didn't need to follow every step of the background work. I needed a signal that something was wrong, access to the details, and a way to intervene. That's what I mean by driver mode. My setup uses Pi and Herdr. Below, I'll walk through what I load into each session, which work I keep visible, and how I check results and keep the workspace usable. The operating principles apply beyond those tools. This is for people already using agents to write code, do research, or explore data, who want to run several without losing track of the work. Autonomous agents in production need different guardrails and aren't what I'm covering here. Move between the overview and the decision Donald Knuth called it "jumping levels of abstraction": seeing things at many levels of detail, from high levels down to the lowest. With agents, I need both a view of where the work is headed and access to the specific decision that needs my context. Think of driving with a map app. In the city, you zoom in to see the next turn. On a five-hour drive, you zoom out to check the route. You might reroute because you know about road construction the map doesn't. Agents have similar gaps: a product's cultural nuances, a codebase's history, or what a research field already knows. An overview helps me notice where that context might be missing; the detailed view lets me supply it. Two scarce budgets The model's context is limited. Tool definitions and instructions loaded up front take space alongside the task. Research shows that longer inputs can degrade a model's reasoning, even

## Cyberpunk in an Old ERP: Three Attempts to Make AI Work

DevFeed: [Cyberpunk in an Old ERP: Three Attempts to Make AI Work](<https://devfeed.tech/articles/cyberpunk-in-an-old-erp-three-attempts-to-make-ai-work-77232.md>)

Original publisher: [Read original article](<https://hackernoon.com/cyberpunk-in-an-old-erp-three-attempts-to-make-ai-work?source=rss>)

Author: Ivan Riabkov

Published: 2026-10-08T05:57:25Z

Content type: article

Language: en

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

Topics: [AI-enhanced product development](<https://devfeed.tech/topics/ai-enhanced-product-development.md>), [agentic workflows](<https://devfeed.tech/topics/agentic-workflows.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Home Assistant](<https://devfeed.tech/topics/home-assistant.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [automation](<https://devfeed.tech/tags/automation.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [code](<https://devfeed.tech/tags/code.md>), [digital-transformation](<https://devfeed.tech/tags/digital-transformation.md>), [erp](<https://devfeed.tech/tags/erp.md>), [legacy-systems](<https://devfeed.tech/tags/legacy-systems.md>), [product-management](<https://devfeed.tech/tags/product-management.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>)

### AI overview

A solo builder describes three attempts to introduce an AI assistant into a company's customized 1C ERP. Adoption improved when the assistant moved into the employees' familiar interface, with verification steps for consequential actions and background workflows for routine tasks. The author reports that the latest version became the main way to create orders and handled work estimated at about 1,080 manual hours over two months.

### Source excerpt

I built an AI assistant nobody wanted to use. Three iterations later, it found a home inside a 20-year-old ERP--and took on 1,080 hours of manual work.

## Wrangling Agents With Repeatable Tools | matgreten.dev

DevFeed: [Wrangling Agents With Repeatable Tools | matgreten.dev](<https://devfeed.tech/articles/wrangling-agents-with-repeatable-tools-matgreten-dev-63959.md>)

Original publisher: [Read original article](<https://swamp-club.com/feed/p/54b94bf6-2996-4e5b-a78c-3261fed70c03/go>)

Author: mgreten

Published: 2026-10-02T13:29:09Z

Content type: article

Language: en

Sources: [Swamp Club Feed](<https://devfeed.tech/sources/swamp-club-feed.md>)

Topics: [agentic-coding](<https://devfeed.tech/topics/agentic-coding.md>), [agentic workflows](<https://devfeed.tech/topics/agentic-workflows.md>), [Loop Engineering](<https://devfeed.tech/topics/loop-engineering.md>), [Test automation](<https://devfeed.tech/topics/test-automation.md>), [Developer experience](<https://devfeed.tech/topics/developer-experience.md>)

Tags: [agentic](<https://devfeed.tech/tags/agentic.md>), [agentic-workflows](<https://devfeed.tech/tags/agentic-workflows.md>), [agents](<https://devfeed.tech/tags/agents.md>), [agents-md](<https://devfeed.tech/tags/agents-md.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-coding](<https://devfeed.tech/tags/ai-coding.md>), [ai-coding-agents](<https://devfeed.tech/tags/ai-coding-agents.md>), [api](<https://devfeed.tech/tags/api.md>), [apis](<https://devfeed.tech/tags/apis.md>), [automated](<https://devfeed.tech/tags/automated.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [browser](<https://devfeed.tech/tags/browser.md>), [build](<https://devfeed.tech/tags/build.md>), [coding-agents](<https://devfeed.tech/tags/coding-agents.md>), [framework](<https://devfeed.tech/tags/framework.md>), [swamp](<https://devfeed.tech/tags/swamp.md>), [tooling](<https://devfeed.tech/tags/tooling.md>), [tools](<https://devfeed.tech/tags/tools.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

The author argues that repeatable mechanics belong in executable tools, while agents handle decisions that require judgment. In Swamp, typed methods run defined operations, workflows connect them, and recorded results preserve what happened; agents can still diagnose failures, but encoded procedures do not guarantee identical outcomes or correct work. The PR review flow selects open feedback, skips fresh drafts, uses scoped read-only agents to assess comments and draft replies or fixes, and records suggestions; posting replies and applying changes remain separate decisions. This reduces repeated discovery and coordination, though embedded agents still use tokens. The author notes the costs of excessive gates and paperwork: useful feedback arrived too late and a string check rejected intent-valid plans. The recommended starting point is one useful operation, using a skill or command when sufficient and stronger tooling when execution guarantees are needed.

### Source excerpt

A developer describes using typed models, workflows, and versioned tooling (via a framework called Swamp) to make AI coding agents execute repeatable procedures consistently, rather than rediscovering the same steps each run.

## How to Stop Your Android App from Draining the Battery with Wake Locks

DevFeed: [How to Stop Your Android App from Draining the Battery with Wake Locks](<https://devfeed.tech/articles/how-to-stop-your-android-app-from-draining-the-battery-with-wake-locks-63487.md>)

Original publisher: [Read original article](<https://www.freecodecamp.org/news/how-to-stop-your-android-app-from-draining-the-battery-with-wake-locks/>)

Author: Nikheel Vishwas Savant

Published: 2026-10-01T14:15:11Z

Content type: tutorial

Language: en

Sources: [Free Code Camp](<https://devfeed.tech/sources/freecodecamp-programming-tutorials-python-javascript-git-more.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Doze Mode](<https://devfeed.tech/topics/doze-mode.md>), [adb](<https://devfeed.tech/topics/adb.md>), [android-permissions](<https://devfeed.tech/topics/android-permissions.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-vitals](<https://devfeed.tech/tags/android-vitals.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [battery](<https://devfeed.tech/tags/battery.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [power](<https://devfeed.tech/tags/power.md>), [wake-locks](<https://devfeed.tech/tags/wake-locks.md>)

### AI overview

This tutorial explains how Android wake locks keep the CPU active, why apps leak them through exceptions, early returns, callbacks, and unbalanced reference counts, and how to prevent and detect those leaks. It recommends timeouts, releasing locks in `finally` blocks, using managed background-work APIs where suitable, and checking behavior with Android debugging tools and tests.

### Source excerpt

A wake lock is one of the simplest APIs in Android and one of the easiest to misuse. Acquiring one takes a single line of code. Forgetting to release it can keep a phone's CPU awake for hours, drain t

## OpenAI Launches dots: Always-On GPT-6 Astra Agents That Work From Their Own Cloud Computers

DevFeed: [OpenAI Launches dots: Always-On GPT-6 Astra Agents That Work From Their Own Cloud Computers](<https://devfeed.tech/articles/openai-launches-dots-always-on-gpt-6-astra-agents-that-work-from-their-own-cloud-computers-62183.md>)

Original publisher: [Read original article](<https://www.marktechpost.com/2026/09/29/openai-launches-dots-always-on-gpt-6-astra-agents-that-work-from-their-own-cloud-computers/>)

Author: Michal Sutter

Published: 2026-09-29T18:30:13Z

Content type: news

Language: en

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

Topics: [gpt-6-astra](<https://devfeed.tech/topics/gpt-6-astra.md>), [Managed Inference and Agents](<https://devfeed.tech/topics/managed-inference-and-agents.md>), [codex](<https://devfeed.tech/topics/codex.md>), [Cloud](<https://devfeed.tech/topics/cloud.md>), [agent orchestration](<https://devfeed.tech/topics/agent-orchestration.md>), [Multi Agent Systems](<https://devfeed.tech/topics/multi-agent-systems.md>)

Tags: [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [agents](<https://devfeed.tech/tags/agents.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [ai-infrastructure](<https://devfeed.tech/tags/ai-infrastructure.md>), [ai-shorts](<https://devfeed.tech/tags/ai-shorts.md>), [applications](<https://devfeed.tech/tags/applications.md>), [apps](<https://devfeed.tech/tags/apps.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [astra](<https://devfeed.tech/tags/astra.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [beta](<https://devfeed.tech/tags/beta.md>), [browser](<https://devfeed.tech/tags/browser.md>), [business](<https://devfeed.tech/tags/business.md>), [chatgpt](<https://devfeed.tech/tags/chatgpt.md>), [chatgpt-work](<https://devfeed.tech/tags/chatgpt-work.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [dots](<https://devfeed.tech/tags/dots.md>), [editors-pick](<https://devfeed.tech/tags/editors-pick.md>), [for-devs](<https://devfeed.tech/tags/for-devs.md>), [gpt-6](<https://devfeed.tech/tags/gpt-6.md>), [gpt-6-astra](<https://devfeed.tech/tags/gpt-6-astra.md>), [launches](<https://devfeed.tech/tags/launches.md>), [new-releases](<https://devfeed.tech/tags/new-releases.md>), [openai](<https://devfeed.tech/tags/openai.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [post](<https://devfeed.tech/tags/post.md>), [software-engineering](<https://devfeed.tech/tags/software-engineering.md>), [staff](<https://devfeed.tech/tags/staff.md>), [tech-news](<https://devfeed.tech/tags/tech-news.md>), [technology](<https://devfeed.tech/tags/technology.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>), [work](<https://devfeed.tech/tags/work.md>)

### AI overview

OpenAI introduced dots, persistent GPT-6 Astra agents that run on dedicated cloud computers and browsers. They can work across connected apps and continue in the background, with controls for permissions, review, monitoring, and user oversight. The article describes availability as a managed ChatGPT product for eligible users and workspace plans.

### Source excerpt

OpenAI just introduced dots at their DevDay today. Dots are persistent AI agents powered by GPT-6 Astra. Each dot gets its own cloud computer and browser. It works across 4,000+ apps through ChatGPT plugins and keeps going after you log off. Is it deployable today? Yes, as a managed product. Dots are rolling out in [...] The post OpenAI Launches dots: Always-On GPT-6 Astra Agents That Work From Their Own Cloud Computers appeared first on MarkTechPost.

## Background Work, Push Topics, And Richer Notifications

DevFeed: [Background Work, Push Topics, And Richer Notifications](<https://devfeed.tech/articles/background-work-push-topics-and-richer-notifications-19210.md>)

Original publisher: [Read original article](<https://www.codenameone.com/blog/background-execution-and-push/>)

Author: Shai Almog

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

Content type: tutorial

Language: en

Sources: [CodeName One](<https://devfeed.tech/sources/codename-one.md>)

Topics: [Mobile](<https://devfeed.tech/topics/mobile.md>), [software-development](<https://devfeed.tech/topics/software-development.md>), [Android](<https://devfeed.tech/topics/android.md>), [iOS](<https://devfeed.tech/topics/ios.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [development](<https://devfeed.tech/tags/development.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mobile-development](<https://devfeed.tech/tags/mobile-development.md>), [network](<https://devfeed.tech/tags/network.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [permission](<https://devfeed.tech/tags/permission.md>)

### AI overview

This article describes Codename One updates for constraint-based background work, foreground services, push topic subscriptions, shared-content handling, richer local notifications, and simulator support across Android and iOS.

### Source excerpt

Constraint-based background work, foreground services, push topic subscriptions, shared-content handling, and a much richer local notification API, all with full simulator support.

## AI SaaS Monetization in 2026: What Actually Works

DevFeed: [AI SaaS Monetization in 2026: What Actually Works](<https://devfeed.tech/articles/ai-saas-monetization-in-2026-what-actually-works-9619.md>)

Original publisher: [Read original article](<https://dodopayments.com/blogs/ai-saas-monetization-2026/>)

Author: Ayush Agarwal

Published: 2026-05-15T00:00:00Z

Content type: article

Language: en

Sources: [Dodo Payments Blog](<https://devfeed.tech/sources/dodo-payments-blog.md>)

Topics: [API Monetization](<https://devfeed.tech/topics/api-monetization.md>)

Tags: [2023](<https://devfeed.tech/tags/2023.md>), [2025](<https://devfeed.tech/tags/2025.md>), [2026](<https://devfeed.tech/tags/2026.md>), [accounting](<https://devfeed.tech/tags/accounting.md>), [add-ons](<https://devfeed.tech/tags/add-ons.md>), [adoption](<https://devfeed.tech/tags/adoption.md>), [agent](<https://devfeed.tech/tags/agent.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-chat](<https://devfeed.tech/tags/ai-chat.md>), [ai-products](<https://devfeed.tech/tags/ai-products.md>), [antipatterns](<https://devfeed.tech/tags/antipatterns.md>), [api](<https://devfeed.tech/tags/api.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [billing](<https://devfeed.tech/tags/billing.md>), [capacity](<https://devfeed.tech/tags/capacity.md>), [cash-flow](<https://devfeed.tech/tags/cash-flow.md>), [monetization](<https://devfeed.tech/tags/monetization.md>), [packaging](<https://devfeed.tech/tags/packaging.md>), [pricing](<https://devfeed.tech/tags/pricing.md>), [saas](<https://devfeed.tech/tags/saas.md>)

### AI overview

The article presents a subscription plus usage model as the durable 2026 pattern for AI SaaS: charge a base fee with an included quota, then meter overages, with discounted capacity packs or larger custom commitments for heavier users. It says this balances buyer predictability with seller margin protection, unlike flat pricing that can lose money on power users or pure consumption pricing that can make bills hard to forecast. Suggested packaging includes clear persona-based tiers, pooled team quotas, and optional add-ons; free tiers should have small quotas and throttling because AI usage has variable cost. Accurate metering, visible usage, customer-level cost tracking, and enforced caps support the model and help avoid surprise bills. The article describes Dodo Payments as a Merchant of Record offering usage metering, billing primitives, and automated tax handling. It notes outcome-based pricing is emerging where success can be measured objectively, while most products may benefit from executing the hybrid model well.

### Source excerpt

How AI SaaS companies are pricing, billing, and packaging in 2026. Learn the real monetization patterns for AI products and what to avoid.

## Waiting for PostgreSQL 19 - Online enabling and disabling of data checksums

DevFeed: [Waiting for PostgreSQL 19 - Online enabling and disabling of data checksums](<https://devfeed.tech/articles/waiting-for-postgresql-19-online-enabling-and-disabling-of-data-checksums-33687.md>)

Original publisher: [Read original article](<https://www.depesz.com/2026/04/15/waiting-for-postgresql-19-online-enabling-and-disabling-of-data-checksums/>)

Author: depesz

Published: 2026-04-15T18:05:36Z

Content type: article

Language: en

Sources: [select \* from depesz;](<https://devfeed.tech/sources/select-from-depesz.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [async](<https://devfeed.tech/topics/async.md>), [IO](<https://devfeed.tech/topics/io.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [checksums](<https://devfeed.tech/tags/checksums.md>), [data-checksum](<https://devfeed.tech/tags/data-checksum.md>), [io](<https://devfeed.tech/tags/io.md>), [pg19](<https://devfeed.tech/tags/pg19.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [uncategorized](<https://devfeed.tech/tags/uncategorized.md>), [vacuum](<https://devfeed.tech/tags/vacuum.md>), [waiting](<https://devfeed.tech/tags/waiting.md>)

### AI overview

This article examines a PostgreSQL 19 patch that allows data checksums to be enabled or disabled while a cluster is running. The command is immediate, but rewriting every table and index occurs in the background and can require substantial I/O. The article also discusses cost-delay options for controlling the background worker.

### Source excerpt

On 3rd of April 2026, Daniel Gustafsson committed patch: Online enabling and disabling of data checksums This allows data checksums to be enabled, or disabled, in a running cluster without restricting access to the cluster during processing. Data checksums could prior to this only be enabled during initdb or when the cluster is ... Continue reading "Waiting for PostgreSQL 19 - Online enabling and disabling of data checksums"

## Yields are Up, Latencies are Down: Goroutine Scheduling in CockroachDB

DevFeed: [Yields are Up, Latencies are Down: Goroutine Scheduling in CockroachDB](<https://devfeed.tech/articles/yields-are-up-latencies-are-down-goroutine-scheduling-in-cockroachdb-23789.md>)

Original publisher: [Read original article](<https://cockroachlabs.com/blog/goroutine-scheduling-elastic-admission-control-cockroachdb>)

Author: David Taylor

Published: 2026-04-14T00:00:00Z

Content type: article

Language: en

Sources: [Cockroach Labs](<https://devfeed.tech/sources/cockroach-labs.md>)

Topics: [scheduling](<https://devfeed.tech/topics/scheduling.md>), [CockroachDB](<https://devfeed.tech/topics/cockroachdb.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>)

Tags: [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [backups](<https://devfeed.tech/tags/backups.md>), [cockroachdb](<https://devfeed.tech/tags/cockroachdb.md>), [goroutine](<https://devfeed.tech/tags/goroutine.md>), [scheduling](<https://devfeed.tech/tags/scheduling.md>), [yields](<https://devfeed.tech/tags/yields.md>)

### AI overview

CockroachDB v26.1 pairs elastic admission control with cooperative yielding in a patched Go runtime so background jobs can use CPU capacity while stepping aside when foreground work is ready. The controller adjusts admission using p99 scheduler latency; Yield checks the runtime's runnable work and parks background goroutines under saturation, using natural safe points such as loop iterations and batch boundaries. In reported tests, an IMPORT at 95%+ CPU utilization had scheduling delays below 200µs and concurrent YCSB latency peaked at 4ms, compared with prior delays of 30-50ms and latency spikes above 1000x. Yield overhead was under 1% during CPU-saturating bulk work. Yield complements rather than replaces admission control, which still throttles jobs if delays rise. Work with long critical sections or infrequent yield points can still cause delays, and adding yield points across the codebase remains ongoing.

### Source excerpt

CockroachDB runs background work -- backups, schema changes, statistics collection, changefeeds -- in the same processes that serve user queries. Traditionally, this creates a tension...

## Revision of restrictions on background work from Android 5.0 to 13

DevFeed: [Revision of restrictions on background work from Android 5.0 to 13](<https://devfeed.tech/articles/revision-of-restrictions-on-background-work-from-android-5-0-to-13-25961.md>)

Original publisher: [Read original article](<https://medium.com/its-tinkoff/android-background-restrictions-b63e73fe508?source=rss-7a0a233f88a2------2>)

Author: Kirill Rozov

Published: 2022-11-29T12:54:28Z

Content type: article

Language: en

Sources: [Kirill Rozov](<https://devfeed.tech/sources/stories-by-kirill-rozov-on-medium.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Doze Mode](<https://devfeed.tech/topics/doze-mode.md>), [android-permissions](<https://devfeed.tech/topics/android-permissions.md>)

Tags: [account-management](<https://devfeed.tech/tags/account-management.md>), [adapter](<https://devfeed.tech/tags/adapter.md>), [alarm](<https://devfeed.tech/tags/alarm.md>), [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>), [applications](<https://devfeed.tech/tags/applications.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [battery](<https://devfeed.tech/tags/battery.md>), [broadcast](<https://devfeed.tech/tags/broadcast.md>), [calendar](<https://devfeed.tech/tags/calendar.md>), [data-synchronization](<https://devfeed.tech/tags/data-synchronization.md>), [developers](<https://devfeed.tech/tags/developers.md>), [device](<https://devfeed.tech/tags/device.md>), [download](<https://devfeed.tech/tags/download.md>), [file-system](<https://devfeed.tech/tags/file-system.md>), [firebase](<https://devfeed.tech/tags/firebase.md>), [google](<https://devfeed.tech/tags/google.md>), [google-account](<https://devfeed.tech/tags/google-account.md>), [google-play](<https://devfeed.tech/tags/google-play.md>), [iphone](<https://devfeed.tech/tags/iphone.md>), [notifications](<https://devfeed.tech/tags/notifications.md>)

### AI overview

The excerpt traces Android's shift from flexible background work toward system-managed, battery-conscious execution. Android 5.0 introduced JobScheduler with conditions such as charging and network availability, though the text says it worked reliably only from Android 6.0. Doze and App Standby later constrained network access and triggers; high-priority FCM could wake devices but should be reserved for important events. Android 7 and 8 restricted implicit broadcasts and background services, directing developers toward jobs and foreground services; Android 8 required foreground promotion within five seconds. Later releases added app-use buckets, limits on background location and sensors, foreground-service types, user permission for background location, and tighter rules for starting foreground services and exact alarms. Android 12 expedited jobs offer fewer restrictions but have quotas and execution limits. Android 13 lets users stop foreground work and restrict an app's background activity, while JobScheduler gained upload support and job priorities. The excerpt notes that device vendors can add or change some restrictions and that exact alarms may be delayed.

### Source excerpt

Background restrictions in Android Once upon a time, running in the background was easy. Now Android has a lot of restrictions: running in the background, access to the file system, permissions that need to be approved by Google Play moderators, and others. Developers have to work with all of them. Let's remember where it all started and how the requirements changed with each new version of Android How it started Before Android 5.0, we had the set of tools to run tasks in the background: Alarm Manager. The tool that allows you to set an alarm on your system and receive notifications. Broadcast Intent. It sends notifications about events that are happening on the system (new messages, for example). Service -- Background, Foreground & Bound. Sync Adapter. A special ancient stuff, which is connected to account management for data synchronization. A clear example: when you set up a Google account in Android, you can set up synchronization of your calendar, contacts and other services. Under the hood, it works through the Sync Adapter. The tool has not lived up to our days. Download Manager. A utility that allows you to download files. It is not very smart, but it is simple and convenient. Google Play, for example, is what downloads files with it. The problems appeared because developers did not follow Spider-Man's rule: "With great opportunities for developers comes responsibility for the speed of the system". Google gave them huge opportunities from the first versions of Android, but did not warn them that they were working in a system that was responsible for quality. When users broke something, they didn't blame third-party developers, they said, "Android is lagging, but everything is fast on the iPhone." It turned out that the developers were good and Google was bad. Google decided to deal with this, but to do this, they had to find "enemies" affecting the quality of applications. They turned out to be: Battery size vs. device size. Everyone wants a thin device that

## Preventing WorkManager crashes when updating Android worker classes

DevFeed: [Preventing WorkManager crashes when updating Android worker classes](<https://devfeed.tech/articles/the-curious-case-of-crashing-workers-28699.md>)

Original publisher: [Read original article](<https://jeroenmols.com/blog/2022/04/27/workmanager-crash/>)

Author: info@jeroenmols.com (Jeroen Mols)

Published: 2022-04-27T00:00:00Z

Content type: tutorial

Language: en

Sources: [Jeroen Mols](<https://devfeed.tech/sources/jeroen-mols.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [migration](<https://devfeed.tech/topics/migration.md>), [App](<https://devfeed.tech/topics/app.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [blogs](<https://devfeed.tech/tags/blogs.md>), [crash](<https://devfeed.tech/tags/crash.md>), [crashes](<https://devfeed.tech/tags/crashes.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [migrate](<https://devfeed.tech/tags/migrate.md>), [retry](<https://devfeed.tech/tags/retry.md>), [scheduled](<https://devfeed.tech/tags/scheduled.md>), [workmanager](<https://devfeed.tech/tags/workmanager.md>)

### AI overview

This tutorial explains how Android WorkManager can crash after an app update when pending work references a worker class that was removed, renamed, or moved. It discusses cancelling or migrating pending work and using a custom WorkerFactory.

### Source excerpt

WorkManager is great to schedule background work on Android. However, since scheduled work lives outside of the app lifecycle, you might run into unexpected crashes.

## Kotlin's Flow in ViewModels: it's complicated

DevFeed: [Kotlin's Flow in ViewModels: it's complicated](<https://devfeed.tech/articles/kotlin-s-flow-in-viewmodels-it-s-complicated-25882.md>)

Original publisher: [Read original article](<https://bladecoder.medium.com/kotlins-flow-in-viewmodels-it-s-complicated-556b472e281a?source=rss-54910f05af37------2>)

Author: Christophe Beyls

Published: 2021-08-28T10:42:09Z

Content type: article

Language: en

Sources: [Christophe Beyls](<https://devfeed.tech/sources/stories-by-christophe-beyls-on-medium.md>)

Topics: [coroutines-flow](<https://devfeed.tech/topics/coroutines-flow.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>), [Exception](<https://devfeed.tech/topics/exception.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>), [background-work](<https://devfeed.tech/tags/background-work.md>), [caching](<https://devfeed.tech/tags/caching.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [efficiency](<https://devfeed.tech/tags/efficiency.md>), [exception](<https://devfeed.tech/tags/exception.md>), [flow](<https://devfeed.tech/tags/flow.md>), [fragment](<https://devfeed.tech/tags/fragment.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [google](<https://devfeed.tech/tags/google.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [livedata](<https://devfeed.tech/tags/livedata.md>), [loading](<https://devfeed.tech/tags/loading.md>), [streams](<https://devfeed.tech/tags/streams.md>), [ui](<https://devfeed.tech/tags/ui.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

The article argues that LiveData remains simpler and more efficient for Android UI and ViewModel use, especially for triggers. LiveData caches values, dispatches them according to observer lifecycle and version, and its coroutine builder pauses work when inactive, delays cancellation for five seconds across configuration changes, and does not restart a completed load. Flow collection needs lifecycle-aware cancellation and restart; `launchWhenStarted` can leave hot or callback/channel-backed producers active while collection is suspended, so the article recommends `repeatOnLifecycle` or `flowWithLifecycle`. `StateFlow` with `stateIn(WhileSubscribed(5000L))` shares and replays a cached value, but restarts upstream work after inactivity even if it completed. As a trigger, StateFlow can re-emit its latest value on collection restart and repeat repository work; the proposed cross-collection deduplication workaround is unreliable when downstream transformations are canceled. The author recommends LiveData for UI and ViewModel exposure, using its coroutine builder or converting Flow results to LiveData, while favoring Flow in repositories and data sources.

### Source excerpt

LiveData is still your friend Loading UI data in Android applications can be challenging. The lifecycles of the various screens need to be taken into account, as well as configuration changes leading to the destruction and recreation of Activities. The individual screens of an app constantly toggle between interactive and hidden as the user navigates further and back in an app, switches from one app to another, or the device screen gets locked or unlocked. Each component needs to play fair and only perform active work when given the ball. Configuration changes happen on various occasions: when changing the device orientation, switching the app to multi-window mode or resizing its window size, switching to dark or light mode, changing the default locale or font sizes, and more. Goals of efficiency To achieve efficient data loading in Activities and Fragments leading to the best user experience, the following should be considered: Caching: data that has been loaded successfully and is still valid should be delivered immediately and not loaded a second time. In particular, when an existing Activity or Fragment becomes visible again, or after an Activity gets recreated on configuration change; Avoiding background work: when an Activity or Fragment becomes invisible (moves from the STARTED to the STOPPED state), any ongoing loading work should be paused or canceled in order to save resources. This is especially important for endless streams of data like location updates or periodic refreshes of any kind; No work interruption during configuration changes: this is an exception to the second goal. During configuration changes, an Activity gets replaced by a new instance of it while preserving its state, so canceling ongoing work when the old instance is destroyed to immediately restart it when the new instance is created would be counter-productive. Today: ViewModel and LiveData To help developers reach these goals with code of manageable complexity, Google released the fir

## WorkManager for Background Work in Libraries

DevFeed: [WorkManager for Background Work in Libraries](<https://devfeed.tech/articles/workmanager-for-background-work-in-libraries-15965.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/workmanager-for-background-work-in-libraries>)

Author: Stephen Edwards

Published: 2021-07-21T19:00:00Z

Content type: article

Language: en

Sources: [Square Corner](<https://devfeed.tech/sources/square-corner-blog-medium.md>)

Topics: [Jetpack](<https://devfeed.tech/topics/jetpack.md>)

Tags: [analytics](<https://devfeed.tech/tags/analytics.md>), [android](<https://devfeed.tech/tags/android.md>), [android-jetpack](<https://devfeed.tech/tags/android-jetpack.md>), [background](<https://devfeed.tech/tags/background.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [client-library](<https://devfeed.tech/tags/client-library.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [debug](<https://devfeed.tech/tags/debug.md>), [delegates](<https://devfeed.tech/tags/delegates.md>), [discussion](<https://devfeed.tech/tags/discussion.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [google](<https://devfeed.tech/tags/google.md>), [hilt](<https://devfeed.tech/tags/hilt.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [workmanager](<https://devfeed.tech/tags/workmanager.md>)

### AI overview

The article's RouterWorker pattern lets a library use WorkManager without requiring client apps to supply the library's WorkerFactory or coordinate its initialization. A request targets RouterWorker, which the default factory can construct because it has no custom dependencies; input Data names the delegate Worker and optionally an ID. RouterWorker uses a library-held factory map to create that Worker and forwards startWork() and onStopped(). This lets libraries work with apps that already use WorkManager and apps that do not, avoiding the described initialization handshake. If no delegate is available, the example logs a warning and returns a failed result because the library's work can be picked up elsewhere or may no longer be needed. The pattern waits for the delegate's Result; monitoring its progress would require additional plumbing. The excerpt does not provide a solution to that progress-monitoring question.

### Source excerpt

Making it easy on applications by cleanly sharing the Singleton

## Why we need iOS developers on board with Kotlin/Multiplatform

DevFeed: [Why we need iOS developers on board with Kotlin/Multiplatform](<https://devfeed.tech/articles/why-we-need-ios-developers-on-board-with-kotlin-multiplatform-22868.md>)

Original publisher: [Read original article](<https://medium.com/kodein-koders/why-we-need-ios-developers-on-board-kotlin-multiplatform-ac474e0b508d?source=rss----f311f45ef54---4>)

Author: Salomon BRYS

Published: 2021-05-20T16:28:29Z

Content type: opinion

Language: en

Sources: [Kodein Koders](<https://devfeed.tech/sources/kodein-koders-medium.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [multiplatform](<https://devfeed.tech/topics/multiplatform.md>), [iOS](<https://devfeed.tech/topics/ios.md>), [React Native](<https://devfeed.tech/topics/react-native.md>), [Swift](<https://devfeed.tech/topics/swift.md>), [Tool](<https://devfeed.tech/topics/tool.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-apps](<https://devfeed.tech/tags/android-apps.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [aot](<https://devfeed.tech/tags/aot.md>), [apis](<https://devfeed.tech/tags/apis.md>), [background-work](<https://devfeed.tech/tags/background-work.md>), [battery](<https://devfeed.tech/tags/battery.md>), [business](<https://devfeed.tech/tags/business.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [developers](<https://devfeed.tech/tags/developers.md>), [ios](<https://devfeed.tech/tags/ios.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [native](<https://devfeed.tech/tags/native.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [notifications](<https://devfeed.tech/tags/notifications.md>), [permissions](<https://devfeed.tech/tags/permissions.md>), [phoenix](<https://devfeed.tech/tags/phoenix.md>), [platform](<https://devfeed.tech/tags/platform.md>)

### AI overview

Kotlin/Multiplatform shares business logic while keeping Android and iOS apps native: Android uses Kotlin and Android Studio, while iOS uses Swift and Xcode. The author argues this is unlike React Native's unified application model and still requires platform expertise for areas such as notifications, background work, permissions, and sensors. The excerpt raises investment risk through RoboVM's shutdown without warning or a migration path. It says the author agrees Apple has little incentive to support multiplatform app technologies, but sees Google differently because it promotes services to iOS users; the excerpt ends before explaining further.

### Source excerpt

Last week, we published the testimony of Robbie Hanson, whom we've been working with for several months on the Phoenix-KMM multiplatform application. We thank him again for his valuable feedback. In this post, I want to share my thoughts after reading his, and express my feelings about the state of Kotlin/Multiplatform for iOS developers. First of all, I want to reiterate that we believe that Kotlin/Multiplatform can only thrive with the support of iOS developers. Seeing Kotlin/Multiplatform as "just another React-Native", is a big mistake. In Kotlin/Multiplatform, Android apps are developed with official Android Kotlin APIs and compiled with Android Studio ; while iOS apps are developed with official iOS Swift APIs and compiled with XCode. Kotlin/Multiplatform focuses on what is truly common to these apps : their business. It does not try to provide a unified application model. This is important, because it means that you do need expertise in both Android and iOS native applications to create the best experience on each platform. It goes beyond navigation & UI: notifications, background work, permissions, battery optimization, configuration changes, sensor data retrieval, and more APIs, are exposed in very different ways on iOS and Android. If you want a quality iOS application, get an iOS expert. Kotlin/Multiplatform is not going to change that, and that's a very good thing. The first question we often get when presenting Kotlin/Multiplatform, and specifically from iOS developers is "How safe is it to invest in it?". After all, there's one tool to develop iOS apps that will never disappear : XCode. Our very short tech field history is littered with examples of amazing tech being dropped in a heartbeat. RoboVM was developing an amazing AoT compiler for the JVM to target iOS (a precursor of GraalVM), only to be bought by Microsoft and killed without so much as a warning or a migration strategy. If you worked with RoboVM, you bet on the wrong horse. Your loss. Robbie

## IO vs CPU operations

DevFeed: [IO vs CPU operations](<https://devfeed.tech/articles/io-vs-cpu-operations-25268.md>)

Original publisher: [Read original article](<https://kau.sh/blog/io-cpu-bound-threads/>)

Author: Kaushik Gopal

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

Content type: tutorial

Language: en

Sources: [Kaushik Gopal's Site](<https://devfeed.tech/sources/kaushik-gopal-s-site.md>)

Topics: [Programming](<https://devfeed.tech/topics/programming.md>), [Concurrency](<https://devfeed.tech/topics/concurrency.md>), [IO](<https://devfeed.tech/topics/io.md>), [cpu](<https://devfeed.tech/topics/cpu.md>), [Operating system](<https://devfeed.tech/topics/operating-system.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [background-work](<https://devfeed.tech/tags/background-work.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [io](<https://devfeed.tech/tags/io.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [os](<https://devfeed.tech/tags/os.md>), [programming](<https://devfeed.tech/tags/programming.md>), [thread](<https://devfeed.tech/tags/thread.md>)

### AI overview

The article explains why I/O-bound and CPU-bound work should use different thread pools. I/O operations wait on hardware and can leave threads sleeping, while CPU work performs computation; mixing them can delay CPU work behind I/O waits.

### Source excerpt

This is a fantastic post by Erik where he explains the nuance between IO-bound and CPU-bound operations in programming. ... libraries have dedicated APIs for I/O scheduling work, separate from other types of operations .... but why is this the case? Why don't we use a single thread pool for all background operations? The operating system will handle the scheduling of these threads the same I love how this specific question is framed (a good interview question for advanced mobile developers): Why can't we just split work into: main (or UI) thread and "all other background work" thread pool? This way the UI shouldn't stutter and if you have a pool of threads running in the background, all that background work will conveniently be executed, no problem. Right? Even though both I/O-bound and CPU-bound work need to be executed in the background for mobile development, they have different demands and stress the operating system (OS) differently. Hence the need for different thread pool types to handle this kind of work differently. CPU operations (like number crunching, computation etc.) run incredibly fast I/O operations on the other hand (reading from a database, network etc.) take longer as the OS has to wait for underlying hardware to retrieve and deliver the data Typically the underlying hardware sends out a signal IOWait to the OS while the underlying hardware is out and about doing the IO work Instead of sitting and twiddling its thumbs, the OS should be finishing other tasks in the meantime (especially ones that are not waiting on underlying hardware) through other threads When the operating system encounters an IOwait, it pauses the execution of that thread and is free to pick up another thread that is ready to run. Theoretically, an operating system can have an unlimited number of threads that are sleeping due to IOwait, without the user noticing any difference That last point is subtle: this is why you don't want to mix CPU and I/O threads in the same pool. You coul

## Introducing Resque

DevFeed: [Introducing Resque](<https://devfeed.tech/articles/introducing-resque-70873.md>)

Original publisher: [Read original article](<https://github.blog/news-insights/the-library/introducing-resque/>)

Author: Chris Wanstrath

Published: 2009-11-04T01:36:46Z

Content type: article

Language: en

Sources: [GitHub Blog](<https://devfeed.tech/sources/github-engineering.md>)

Topics: [Sidekiq](<https://devfeed.tech/topics/sidekiq.md>), [sharding](<https://devfeed.tech/topics/sharding.md>), [async](<https://devfeed.tech/topics/async.md>), [processing](<https://devfeed.tech/topics/processing.md>)

Tags: [background-work](<https://devfeed.tech/tags/background-work.md>), [database](<https://devfeed.tech/tags/database.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [library](<https://devfeed.tech/tags/library.md>), [news-insights](<https://devfeed.tech/tags/news-insights.md>), [queues](<https://devfeed.tech/tags/queues.md>), [redis](<https://devfeed.tech/tags/redis.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [the-library](<https://devfeed.tech/tags/the-library.md>)

### AI overview

GitHub introduces Resque, a Redis-backed Ruby library for creating and processing background jobs across multiple queues. The article explains how limitations in earlier job systems--such as queue latency, database overhead, worker management, and limited visibility--led GitHub to build Resque around Redis. Resque adds worker monitoring, a forking model, and configurable failure backends.

### Source excerpt

Resque is our Redis-backed library for creating background jobs, placing those jobs on multiple queues, and processing them later. Background jobs can be any Ruby class or module that responds...