# decoupling

Published articles for decoupling.

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

## Making ServiceLoader usable: a provider factory

DevFeed: [Making ServiceLoader usable: a provider factory](<https://devfeed.tech/articles/making-serviceloader-usable-a-provider-factory-18932.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/serviceloader-provider-factory/>)

Author: Stefano Fago

Published: 2026-07-12T00:00:00Z

Content type: tutorial

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Code](<https://devfeed.tech/topics/code.md>), [JSON Web Tokens](<https://devfeed.tech/topics/jwt.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [decoupling](<https://devfeed.tech/tags/decoupling.md>), [design-patterns](<https://devfeed.tech/tags/design-patterns.md>), [java](<https://devfeed.tech/tags/java.md>), [json](<https://devfeed.tech/tags/json.md>), [jwt](<https://devfeed.tech/tags/jwt.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [serviceloader](<https://devfeed.tech/tags/serviceloader.md>), [spi](<https://devfeed.tech/tags/spi.md>)

### AI overview

This article presents a provider-factory pattern for Java ServiceLoader. Instead of loading a service implementation directly, ServiceLoader loads a small factory with a no-argument constructor; the factory then constructs the service and can support implementation selection and custom constructors. The pattern is illustrated with a mock payments system and is related to decoupling JSON and JWT capabilities from concrete libraries.

### Source excerpt

I keep coming back to java.util.ServiceLoader. I have used it to put a JSON layer behind a contract, so the core code carries no direct dependency on any particular JSON library, and I can swap the implementation without touching callers. The same shape works for JWT handling, where the concrete library might be jose4j or another JOSE implementation, and you can easily find other decoupling use-cases.

## AI gateways: why and how

DevFeed: [AI gateways: why and how](<https://devfeed.tech/articles/ai-gateways-why-and-how-18916.md>)

Original publisher: [Read original article](<https://blog.frankel.ch/ai-gateways/>)

Author: Nicolas Fränkel

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

Content type: article

Language: en

Sources: [Nicolas Fränkel](<https://devfeed.tech/sources/nicolas-frankel.md>)

Topics: [Amazon API Gateway](<https://devfeed.tech/topics/amazon-api-gateway.md>), [LLMs](<https://devfeed.tech/topics/llms.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>), [Claude](<https://devfeed.tech/topics/claude.md>), [Security](<https://devfeed.tech/topics/security.md>), [litellm](<https://devfeed.tech/topics/litellm.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Load Balancing](<https://devfeed.tech/topics/load-balancing.md>), [observability](<https://devfeed.tech/topics/observability.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [ai-gateway](<https://devfeed.tech/tags/ai-gateway.md>), [anthropic](<https://devfeed.tech/tags/anthropic.md>), [api-gateway](<https://devfeed.tech/tags/api-gateway.md>), [backend](<https://devfeed.tech/tags/backend.md>), [caching](<https://devfeed.tech/tags/caching.md>), [claude](<https://devfeed.tech/tags/claude.md>), [claude-code](<https://devfeed.tech/tags/claude-code.md>), [coding-assistant](<https://devfeed.tech/tags/coding-assistant.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [devstral](<https://devfeed.tech/tags/devstral.md>), [gateway](<https://devfeed.tech/tags/gateway.md>), [litellm](<https://devfeed.tech/tags/litellm.md>), [llm](<https://devfeed.tech/tags/llm.md>), [llms](<https://devfeed.tech/tags/llms.md>), [load-balancing](<https://devfeed.tech/tags/load-balancing.md>), [mistral](<https://devfeed.tech/tags/mistral.md>), [observability](<https://devfeed.tech/tags/observability.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [routing](<https://devfeed.tech/tags/routing.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [security](<https://devfeed.tech/tags/security.md>), [technical](<https://devfeed.tech/tags/technical.md>)

### AI overview

This article explains how AI gateways apply the API gateway pattern to AI clients and LLM backends. It discusses using a gateway to centralize model and provider management, governance, cost control, routing, caching, failover, load balancing, and observability, and considers routing Claude Code requests to another provider.

### Source excerpt

Before working for 2 years on the Apache APISIX API gateway, I was mainly oblivious to API gateways. It's only by working with them that I understood their value. Decoupling the client and the server unlocks a lot of options: moving authentication to the API Gateway, securing APIs, deduplicating API requests, etc. In this post, I want to describe how the same pattern applies to AI. AI gateways AI gateways work in a similar way.

## Your event-driven architecture is a distributed monolith -- and that's fine, if you measure it

DevFeed: [Your event-driven architecture is a distributed monolith -- and that's fine, if you measure it](<https://devfeed.tech/articles/your-event-driven-architecture-is-a-distributed-monolith-and-that-s-fine-if-you-measure-it-38795.md>)

Original publisher: [Read original article](<https://fidelitas.io/2026/05/event-driven-distributed-monolith/>)

Author: fidelitas.io

Published: 2026-05-15T10:30:00Z

Content type: opinion

Language: en

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

Topics: [event driven](<https://devfeed.tech/topics/event-driven.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>), [Traces](<https://devfeed.tech/topics/traces.md>), [interface](<https://devfeed.tech/topics/interface.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [coupling](<https://devfeed.tech/tags/coupling.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [event-driven-architecture](<https://devfeed.tech/tags/event-driven-architecture.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [observability](<https://devfeed.tech/tags/observability.md>), [schemas](<https://devfeed.tech/tags/schemas.md>), [services](<https://devfeed.tech/tags/services.md>), [traces](<https://devfeed.tech/tags/traces.md>)

### AI overview

This opinion article argues that event-driven systems can become distributed monoliths when message brokers hide rather than remove coupling. It focuses on explicit, versioned, validated schemas and traces as ways to reveal dependencies and diagnose failures.

### Source excerpt

Async messaging didn't decouple your services; it hid the coupling. Here's how to find the seams again with traces, schemas, and a healthy fear of fan-out.

## An Interactive Study of Publish/Subscribe Messaging for Event-Driven Backend Systems

DevFeed: [An Interactive Study of Publish/Subscribe Messaging for Event-Driven Backend Systems](<https://devfeed.tech/articles/what-is-pub-sub-17831.md>)

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

Author: Ivan Cernja

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

Content type: tutorial

Language: en

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

Topics: [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>), [Messaging](<https://devfeed.tech/topics/messaging.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [event driven](<https://devfeed.tech/topics/event-driven.md>)

Tags: [decoupling](<https://devfeed.tech/tags/decoupling.md>), [developers](<https://devfeed.tech/tags/developers.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [event-driven](<https://devfeed.tech/tags/event-driven.md>), [events](<https://devfeed.tech/tags/events.md>), [flow](<https://devfeed.tech/tags/flow.md>), [messaging](<https://devfeed.tech/tags/messaging.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [publisher](<https://devfeed.tech/tags/publisher.md>), [subscriber](<https://devfeed.tech/tags/subscriber.md>)

### AI overview

An interactive tutorial explains publish/subscribe messaging by contrasting it with direct service calls. It shows how topics decouple publishers from subscribers, support fan-out, and let subscribers process messages independently, including when downstream services are unavailable.

### Source excerpt

An interactive study of publish/subscribe messaging

## What is the BFF Pattern?

DevFeed: [What is the BFF Pattern?](<https://devfeed.tech/articles/what-is-the-bff-pattern-34694.md>)

Original publisher: [Read original article](<https://newsletter.systemdesigncodex.com/p/what-is-the-bff-pattern>)

Author: Saurabh Dashora

Published: 2026-04-07T08:41:56Z

Content type: tutorial

Language: en

Sources: [System Design Codex](<https://devfeed.tech/sources/system-design-codex.md>)

Topics: [BFF](<https://devfeed.tech/topics/bff.md>), [Amazon API Gateway](<https://devfeed.tech/topics/amazon-api-gateway.md>), [backends](<https://devfeed.tech/topics/backends.md>), [client](<https://devfeed.tech/topics/client.md>), [interface](<https://devfeed.tech/topics/interface.md>), [resiliency](<https://devfeed.tech/topics/resiliency.md>), [Orchestration](<https://devfeed.tech/topics/orchestration.md>), [rate-limiting](<https://devfeed.tech/topics/rate-limiting.md>)

Tags: [api-gateway](<https://devfeed.tech/tags/api-gateway.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [backends](<https://devfeed.tech/tags/backends.md>), [bff](<https://devfeed.tech/tags/bff.md>), [cache-control](<https://devfeed.tech/tags/cache-control.md>), [client](<https://devfeed.tech/tags/client.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [rate-limiting](<https://devfeed.tech/tags/rate-limiting.md>), [resiliency](<https://devfeed.tech/tags/resiliency.md>)

### AI overview

The article explains the Backends-for-Frontends (BFF) pattern, in which dedicated API gateways serve different client types such as web browsers, mobile apps, and public or partner APIs. It describes how BFFs tailor APIs, isolate client-specific logic, and support functions including rate limiting, authentication, header sanitization, and cache control. It also discusses benefits such as resiliency, client-specific optimization, and faster development, along with drawbacks including code duplication and increasing complexity.

### Source excerpt

And when do you need it?

## Patterns & Best Practices in Event-Driven Systems

DevFeed: [Patterns & Best Practices in Event-Driven Systems](<https://devfeed.tech/articles/patterns-best-practices-in-event-driven-systems-30800.md>)

Original publisher: [Read original article](<https://devblog.kogan.com/blog/patterns-amp-best-practices-in-event-driven-systems>)

Author: Victor Wenas

Published: 2025-12-08T06:14:51Z

Content type: tutorial

Language: en

Sources: [Kogan.com](<https://devfeed.tech/sources/kogan-com.md>)

Topics: [event driven](<https://devfeed.tech/topics/event-driven.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [architecture-pattern](<https://devfeed.tech/tags/architecture-pattern.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [event-driven](<https://devfeed.tech/tags/event-driven.md>), [event-sourcing](<https://devfeed.tech/tags/event-sourcing.md>), [latency](<https://devfeed.tech/tags/latency.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

This tutorial explains three event-driven architecture patterns: event notification, Event-Carried State Transfer, and Event Sourcing. It describes their trade-offs, including service coupling, additional data fetches, payload size, schema management, resilience, and latency.

### Source excerpt

Designing Robust, Scalable, Maintainable Event Architectures Event-driven architecture (EDA) gives teams the ability to build decoupled, scalable systems that evolve independently. In the previous article, we introduced the idea using a restaurant analogy: instead of shouting instructions across the kitchen, teams place "dockets" on the rail and stations take what they need. We'll continue that analogy lightly in this post--sprinkling it here and there--while focusing on the engineering patterns that make event-driven systems work in practice. Core Patterns in Event-Driven ArchitecturePattern 1: Event Notification An event notification is a tiny message that simply declares "something happened." It doesn't contain all the details--just enough for downstream systems to react. Think of it like a kitchen bell dinging: The bell doesn't contain the meal. It's just a signal. The cook still needs to check the ticket rail (the database) for the details of the order 12345. Example { "eventName": "OrderCreated", "orderId": 12345, "createdAt": "2025-11-26T01:00:00Z" } Why it's useful Extremely lightweight Easy to publish, easy to fan out Consumers decide how much extra data they need Trade-offs Consumers must fetch details themselves More cross-service calls -> more coupling Higher latency when many consumers query upstream systems Use this pattern when the event is a simple trigger--like a bell, not a full meal. Pattern 2: Event-Carried State Transfer (ECST) In Event-Carried State Transfer, the event carries all required data so consumers don't need to make additional calls. It's the equivalent of the chef not only ringing the bell but also placing the complete plated dish on the pass. No one needs to ask questions--everything needed is right there. { "eventName": "OrderPacked", "orderId": 12345, "items": [ { "sku": "ABC123", "qty": 2 } ], "warehouseId": 19, "totalWeightGrams": 1850 } Why it's powerful Zero need for back-calls -> full decoupling Highly resilient--consumers can proces

## \*People\* detangle a ball of mud

DevFeed: [\*People\* detangle a ball of mud](<https://devfeed.tech/articles/people-detangle-a-ball-of-mud-37632.md>)

Original publisher: [Read original article](<https://swizec.com/blog/people-detangle-a-ball-of-mud>)

Author: hi@swizec.com (Swizec Teller)

Published: 2025-11-15T00:00:00Z

Content type: opinion

Language: en

Sources: [Swizec Teller](<https://devfeed.tech/sources/swizec-teller.md>)

Topics: [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [software-architecture](<https://devfeed.tech/topics/software-architecture.md>), [Development](<https://devfeed.tech/topics/development.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [async](<https://devfeed.tech/tags/async.md>), [complexity](<https://devfeed.tech/tags/complexity.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [ownership](<https://devfeed.tech/tags/ownership.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [processes](<https://devfeed.tech/tags/processes.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>), [software-architecture](<https://devfeed.tech/tags/software-architecture.md>), [teams](<https://devfeed.tech/tags/teams.md>)

### AI overview

This opinion argues that teams and processes, rather than a lone architect, are the best way to gradually untangle a deteriorating "ball of mud" codebase. Giving teams ownership, allowing space for refactoring, formalizing recurring patterns, and discussing interfaces before coding can encourage decoupled subsystems.

### Source excerpt

Ball of mud is the world's most popular software architecture. The one we all use at work. But it sucks to work with. So what do you do?

## Reliable Django Signals

DevFeed: [Reliable Django Signals](<https://devfeed.tech/articles/reliable-django-signals-33901.md>)

Original publisher: [Read original article](<https://hakibenita.com/django-reliable-signals>)

Author: Haki Benita

Published: 2025-10-29T22:00:00Z

Content type: tutorial

Language: en

Sources: [Haki Benita](<https://devfeed.tech/sources/haki-benita.md>)

Topics: [Django](<https://devfeed.tech/topics/django.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [modules](<https://devfeed.tech/topics/modules.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [django](<https://devfeed.tech/tags/django.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [modules](<https://devfeed.tech/tags/modules.md>)

### AI overview

This article explains that Django signals can be unreliable because of their underlying transport. It presents an alternative transport implementation using background tasks to make signals more reliable and safer for mission-critical workflows.

### Source excerpt

Django signals are extremely useful for decoupling modules and implementing complicated workflows. However, the underlying transport for signals makes them unreliable and subject to unexpected failures.In this article, I present an alternative transport implementation for Django signals using background tasks which makes them reliable and safer to use in mission critical workflows.

## Programming Priorities

DevFeed: [Programming Priorities](<https://devfeed.tech/articles/programming-priorities-38390.md>)

Original publisher: [Read original article](<https://blog.danlew.net/2025/03/11/programming-priorities/>)

Author: Dan Lew

Published: 2025-03-11T14:00:44Z

Content type: opinion

Language: en

Sources: [Dan Lew Blog](<https://devfeed.tech/sources/dan-lew-blog.md>)

Topics: [Maintainability](<https://devfeed.tech/topics/maintainability.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Development](<https://devfeed.tech/topics/development.md>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>)

Tags: [automated](<https://devfeed.tech/tags/automated.md>), [code](<https://devfeed.tech/tags/code.md>), [code-design](<https://devfeed.tech/tags/code-design.md>), [coupling](<https://devfeed.tech/tags/coupling.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [development](<https://devfeed.tech/tags/development.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [programming](<https://devfeed.tech/tags/programming.md>), [readability](<https://devfeed.tech/tags/readability.md>), [software](<https://devfeed.tech/tags/software.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [tests](<https://devfeed.tech/tags/tests.md>)

### AI overview

This article presents a priority order for code design: functionality first, maintainability second, and other concerns afterward. It argues that maintainable code reduces the time and risk involved in future changes, allowing later refactoring and optimization. Suggested practices include automated tests, good architecture, decoupling, encapsulation, readable code, and useful comments.

### Source excerpt

Software development (or, you know, life in general) is all about juggling priorities. For this post, I'm thinking specifically about code design priorities. You only have a limited amount of time to implement a feature, so you have to pick and choose which aspects of it to spend

## Encryption using data-specific keys

DevFeed: [Encryption using data-specific keys](<https://devfeed.tech/articles/encryption-using-data-specific-keys-29010.md>)

Original publisher: [Read original article](<https://code.cash.app/encryption-using-data-keys>)

Author: Yoav Amit

Published: 2024-12-12T00:00:00Z

Content type: article

Language: en

Sources: [Cash App Code Blog](<https://devfeed.tech/sources/cash-app-code-blog.md>)

Topics: [Encryption](<https://devfeed.tech/topics/encryption.md>), [Cryptography](<https://devfeed.tech/topics/cryptography.md>), [Security](<https://devfeed.tech/topics/security.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Back end](<https://devfeed.tech/topics/backend.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [gRPC](<https://devfeed.tech/topics/grpc.md>), [Kafka](<https://devfeed.tech/topics/kafka.md>)

Tags: [access-control](<https://devfeed.tech/tags/access-control.md>), [backend](<https://devfeed.tech/tags/backend.md>), [cloud](<https://devfeed.tech/tags/cloud.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [encryption](<https://devfeed.tech/tags/encryption.md>), [git](<https://devfeed.tech/tags/git.md>), [kafka](<https://devfeed.tech/tags/kafka.md>), [kms](<https://devfeed.tech/tags/kms.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [security](<https://devfeed.tech/tags/security.md>), [server-security-encryption](<https://devfeed.tech/tags/server-security-encryption.md>)

### AI overview

Cash App describes its evolution from service-centric application-layer encryption to a data-centric model called "Data Keys," which associates encryption keys directly with the data they protect. The change was made to improve flexibility and scalability as encryption expanded across services, gRPC transport infrastructure, and Kafka.

### Source excerpt

Associating encryption keys with the data they protect

## Feature-based React Architecture

DevFeed: [Feature-based React Architecture](<https://devfeed.tech/articles/feature-based-react-architecture-18959.md>)

Original publisher: [Read original article](<https://www.robinwieruch.de/react-feature-architecture/>)

Author: Robin Wieruch

Published: 2024-11-25T05:50:46Z

Content type: tutorial

Language: en

Sources: [Robin Wieruch](<https://devfeed.tech/sources/robin-wieruch.md>)

Topics: [React](<https://devfeed.tech/topics/react.md>), [ui](<https://devfeed.tech/topics/ui.md>), [data](<https://devfeed.tech/topics/data.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [components](<https://devfeed.tech/tags/components.md>), [data](<https://devfeed.tech/tags/data.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [domain](<https://devfeed.tech/tags/domain.md>), [feature-based-react-architecture](<https://devfeed.tech/tags/feature-based-react-architecture.md>), [fetch](<https://devfeed.tech/tags/fetch.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [react](<https://devfeed.tech/tags/react.md>)

### AI overview

This tutorial explains how to organize large React applications with a feature-based architecture. It discusses decoupling features, focusing components and data-fetching functions on their domains, and separating related UI and database operations.

### Source excerpt

How to create a feature-based React architecture that allows large scale applications ...

## Optimizing Data Fetching with Apollo Client: Leveraging useFragment and Colocated Fragments

DevFeed: [Optimizing Data Fetching with Apollo Client: Leveraging useFragment and Colocated Fragments](<https://devfeed.tech/articles/optimizing-data-fetching-with-apollo-client-leveraging-usefragment-and-colocated-fragments-23477.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/optimizing-data-fetching-with-apollo-client-leveraging-usefragment-and-colocated-fragments>)

Author: Tyler Goelz

Published: 2024-05-10T10:50:08Z

Content type: tutorial

Language: en

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

Topics: [apollo-client](<https://devfeed.tech/topics/apollo-client.md>), [client](<https://devfeed.tech/topics/client.md>), [React](<https://devfeed.tech/topics/react.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [apollo-client](<https://devfeed.tech/tags/apollo-client.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [cache](<https://devfeed.tech/tags/cache.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [fragments](<https://devfeed.tech/tags/fragments.md>), [maintainability](<https://devfeed.tech/tags/maintainability.md>), [performance](<https://devfeed.tech/tags/performance.md>), [react](<https://devfeed.tech/tags/react.md>)

### AI overview

This article explains how Apollo Client's useFragment hook and colocated fragments can reduce over-fetching while keeping data requirements close to the components that use them. It discusses separating responsibility for declaring data needs from accountability for fetching data, and notes that useFragment accesses fragment data from Apollo Client's normalized cache.

### Source excerpt

When building complex applications today, Apollo Client users typically reach for to get data to their components. This is no surprise as this is considered a best practice by the Apollo Client documentation. However, this can cause challenges while trying to minimize over-fetching while maintaining a clear separation of concern.

## Redefining API Strategy: Why Netflix Platform Engineering Chose Federated GraphQL

DevFeed: [Redefining API Strategy: Why Netflix Platform Engineering Chose Federated GraphQL](<https://devfeed.tech/articles/redefining-api-strategy-why-netflix-platform-engineering-chose-federated-graphql-23491.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/redefining-api-strategy-why-netflix-platform-engineering-chose-federated-graphql>)

Author: Ishwari Lokare

Published: 2024-03-13T12:37:32Z

Content type: article

Language: en

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

Topics: [GraphQL](<https://devfeed.tech/topics/graphql.md>), [Netflix](<https://devfeed.tech/topics/netflix.md>), [Platform Engineering](<https://devfeed.tech/topics/platform-engineering.md>), [API](<https://devfeed.tech/topics/api.md>), [Streaming](<https://devfeed.tech/topics/streaming.md>), [systems](<https://devfeed.tech/topics/systems.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [apollo-federation](<https://devfeed.tech/tags/apollo-federation.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [events](<https://devfeed.tech/tags/events.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [monolithic-architecture](<https://devfeed.tech/tags/monolithic-architecture.md>), [netflix](<https://devfeed.tech/tags/netflix.md>), [platform-engineering](<https://devfeed.tech/tags/platform-engineering.md>), [scale](<https://devfeed.tech/tags/scale.md>), [streaming](<https://devfeed.tech/tags/streaming.md>)

### AI overview

The article examines Netflix's 15-year evolution across five generations of APIs and its adoption of federated GraphQL. It describes how Netflix used Apollo Federation to unify APIs across platforms, decouple domain teams, and support independent API ownership while retaining an integrated Consumer Edge API.

### Source excerpt

The Netflix API evolution is a saga worth exploring, spanning 15 years and five generations of APIs, culminating in GraphQL adoption to meet the growing demands of its industry-leading streaming platform. Bruce Wang, Director of Product Platform Systems at Netflix, sat down with Matt DeBergalis, CTO at Apollo GraphQL, to discuss Netflix's extensive API journey and the adoption of GraphQL in an insightful fireside discussion during the GraphQL Summit 2023.

## A Journey from Monolith to Micro frontends at Udemy -- Part 2 of 3

DevFeed: [A Journey from Monolith to Micro frontends at Udemy -- Part 2 of 3](<https://devfeed.tech/articles/a-journey-from-monolith-to-micro-frontends-at-udemy-part-2-of-3-26358.md>)

Original publisher: [Read original article](<https://medium.com/udemy-engineering/transforming-frontend-architecture-a-journey-from-monolith-to-micro-frontends-at-udemy-part-2-c9bd7ede5f1c?source=rss----19c6d3367ed4---4>)

Author: Hamza ERBAY

Published: 2024-01-08T18:30:04Z

Content type: article

Language: en

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

Topics: [Front end](<https://devfeed.tech/topics/frontend.md>), [Next.js](<https://devfeed.tech/topics/next-js.md>), [React](<https://devfeed.tech/topics/react.md>), [Hackathon](<https://devfeed.tech/topics/hackathon.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [GraphQL](<https://devfeed.tech/topics/graphql.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [collaboration](<https://devfeed.tech/tags/collaboration.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [graphql](<https://devfeed.tech/tags/graphql.md>), [hackathon](<https://devfeed.tech/tags/hackathon.md>), [hackathons](<https://devfeed.tech/tags/hackathons.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [micro-frontends](<https://devfeed.tech/tags/micro-frontends.md>), [next-js](<https://devfeed.tech/tags/next-js.md>), [performance](<https://devfeed.tech/tags/performance.md>), [react](<https://devfeed.tech/tags/react.md>), [static-site](<https://devfeed.tech/tags/static-site.md>)

### AI overview

This second article in a three-part series describes Udemy's hackathon exploration of decoupling its monolithic frontend into micro frontends. It explains the limitations of tightly coupled React components, the choice of Next.js, and criteria used to select the Featured topics page as an initial candidate.

### Source excerpt

Transforming Frontend Architecture: A Journey from Monolith to Micro Frontends at Udemy -- Part 2 of 3 By: Chris Nienhuis, Hamza Erbay, Matthew Bise, Nathan Chapman, Seth Hodgson, Trey Briggs, Charles Pham Photo by Hamza Erbay on UnsplashIntroduction In the previous section, we discussed the challenges in our current monolith architecture and the reasons why we are keen on transitioning to a micro frontend architecture. Now, we are going to delve into the hackathon event at Udemy where we explored the idea of decoupling our frontend structure, the preparations we made, and the options we considered for this transformation. If you missed Part 1 of this series, it is located here: Transforming frontend Architecture: A Journey from Monolith to Micro frontends at Udemy -- Part 1... Udemy Hackathon During the Hackathon event at Udemy, which we organize every six months, I had the opportunity to meet some amazing people in 2021. We collaborated on ideas for decoupling the frontend structure, which was a great experience. Our team comprised Chris Nienhuis, Hamza Erbay, Matthew Bise, Nathan Chapman, and Trey Briggs. We would like to thank Seth Hodgson for bringing us together. Preparation Our React components are currently tightly linked to the monolith runtime environment, making it impossible to use them across our various sites or in different rendering environments -- client-side, server-side, or offline via static site generation tools (B2C/B2B, support center, blogs, microsites, etc.). Udemy Monolith's high-level architecture Decoupling the frontend would improve our daily workflow and make it easier to make significant style changes across the apps. After researching modern frontend technologies, we chose Next.js for its strong community support and performance. Then, we worked on the high-level structure for the hackathon. Analyze the inventory The hackathon posed challenges related to our infrastructure and GraphQL integration that needed to be addressed. Our goal was t

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

## Generics vs. Interfaces

DevFeed: [Generics vs. Interfaces](<https://devfeed.tech/articles/generics-vs-interfaces-22185.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2022/12/generic-vs-interfaces.html>)

Published: 2022-12-16T00:00:00Z

Content type: tutorial

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>), [Binance](<https://devfeed.tech/topics/binance.md>), [backends](<https://devfeed.tech/topics/backends.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [adapter-pattern](<https://devfeed.tech/tags/adapter-pattern.md>), [api](<https://devfeed.tech/tags/api.md>), [api-server](<https://devfeed.tech/tags/api-server.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [decoding](<https://devfeed.tech/tags/decoding.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [encoding](<https://devfeed.tech/tags/encoding.md>), [function](<https://devfeed.tech/tags/function.md>), [generics](<https://devfeed.tech/tags/generics.md>), [go](<https://devfeed.tech/tags/go.md>), [go-api-server](<https://devfeed.tech/tags/go-api-server.md>), [gorm](<https://devfeed.tech/tags/gorm.md>), [http](<https://devfeed.tech/tags/http.md>), [interfaces](<https://devfeed.tech/tags/interfaces.md>), [reusable-code](<https://devfeed.tech/tags/reusable-code.md>), [solid](<https://devfeed.tech/tags/solid.md>), [solid-principles](<https://devfeed.tech/tags/solid-principles.md>), [transactions](<https://devfeed.tech/tags/transactions.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

A video explains how generic functions and adapter functions can reduce code duplication and decouple business logic from API server handlers in Go. It demonstrates HTTP handlers, GORM database transactions, performance evaluation with PPROF, and generic data encoding and decoding.

### Source excerpt

Introduction In this video, Paulo shows the benefit of leveraging generic functions to write less code that does more. He starts by walking you through an API server he initially wrote that makes use of Go's default HTTP handlers with a sprinkle of GORM to manage database transactions. He then refactors that code by introducing the concept of adapter functions. Paulo's approach consists of decoupling his business logic with his API code. To achieve this, he defines an adapter function that will establish a bridge between his business logic and API server handlers. This proves to be an effective way to abstract request processing and handling. This approach also promotes code reusability because the business logic is loosely coupled with the API service invoking it.

## AWS FIFO Queues with Message Groups for Atomic Processing at Scale

DevFeed: [AWS FIFO Queues with Message Groups for Atomic Processing at Scale](<https://devfeed.tech/articles/aws-fifo-queues-with-message-groups-for-atomic-processing-at-scale-23895.md>)

Original publisher: [Read original article](<https://medium.com/smg-real-estate/aws-fifo-queues-with-message-groups-for-atomic-processing-at-scale-dc70f8820b16?source=rss----2186e5b9bd8f---4>)

Author: Nick De Cooman

Published: 2022-03-03T09:55:58Z

Content type: tutorial

Language: en

Sources: [Homegate Engineering Blog - Medium](<https://devfeed.tech/sources/homegate-engineering-blog-medium.md>)

Topics: [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [Serverless](<https://devfeed.tech/topics/serverless.md>), [event driven](<https://devfeed.tech/topics/event-driven.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Publish-subscribe pattern](<https://devfeed.tech/topics/pubsub.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [aws](<https://devfeed.tech/tags/aws.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [distributed](<https://devfeed.tech/tags/distributed.md>), [event](<https://devfeed.tech/tags/event.md>), [event-driven](<https://devfeed.tech/tags/event-driven.md>), [events](<https://devfeed.tech/tags/events.md>), [fifo](<https://devfeed.tech/tags/fifo.md>), [serverless](<https://devfeed.tech/tags/serverless.md>), [sns](<https://devfeed.tech/tags/sns.md>), [sqs](<https://devfeed.tech/tags/sqs.md>)

### AI overview

A tutorial on using AWS FIFO queues and message groups to process events for multiple objects in parallel while ensuring that only one instance processes events for the same object at a time. It presents a serverless architecture using SNS, SQS, and Lambda for atomic listing ingestion.

### Source excerpt

How to process multiple objects in parallel with the guarantee that for each unique object, only a single instance is processed simultaneously In a distributed, event-driven architecture, many challenges arise when processing large sets of data. One of them is the need for scalability when handling event streams with a substantial throughput. The challenge becomes even more complicated when processing these events involves atomic operations. In this case, we cannot simply process multiple events in parallel. As an example, let's say that we are building a service that ingests listings into our platform. The ingestion process involves several steps and requires multiple API operations. As a result, the whole ingestion can take up to several seconds per listing to complete. Now, here is where it gets tricky: a constraint of our service is that, while we are processing a listing, we cannot process other events for the same listing. The ingestion should be considered an atomic operation, and hence, only a single execution per listing can be performed simultaneously. At Homegate, we run most of our infrastructure on AWS in a serverless fashion. At the core of this, Lambda functions execute application logic. A common pattern is to use SNS topics to fan-out messages, and SQS for acting as a decoupling buffer between an SNS topic and some Lambda function. For our ingester service, a logical architecture could look like this: Listing events are published to a dedicated SNS topic. An SQS queue subscribes to this topic and consumes the events. Here, the events are buffered until a Lambda instance removes them from the queue and processes the corresponding listing. Under normal circumstances -- in which the processing would not involve an atomic operation -- this architecture would be a good fit. It would scale automatically relative to the number of Lambda instances that consume events from the queue, without much additional configuration. However, in the case where we cannot p

## Crucial developer practices: Decoupling deployments and releases

DevFeed: [Crucial developer practices: Decoupling deployments and releases](<https://devfeed.tech/articles/crucial-developer-practices-decoupling-deployments-and-releases-39890.md>)

Original publisher: [Read original article](<https://mende.io/blog/decoupling-deployments-and-releases/>)

Author: tobi@techunicorn.builders (Tobias Mende)

Published: 2021-11-27T12:02:00Z

Content type: article

Language: en

Sources: [Tobias Mende](<https://devfeed.tech/sources/tobias-mende.md>)

Topics: [feature flags](<https://devfeed.tech/topics/feature-flags.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [releases](<https://devfeed.tech/topics/releases.md>), [systems](<https://devfeed.tech/topics/systems.md>), [Risk](<https://devfeed.tech/topics/risk.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [continuous](<https://devfeed.tech/tags/continuous.md>), [continuous-deployment-software-development-software-craft](<https://devfeed.tech/tags/continuous-deployment-software-development-software-craft.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [deployments](<https://devfeed.tech/tags/deployments.md>), [developer](<https://devfeed.tech/tags/developer.md>), [feature-flags](<https://devfeed.tech/tags/feature-flags.md>), [practices](<https://devfeed.tech/tags/practices.md>), [risk](<https://devfeed.tech/tags/risk.md>), [test](<https://devfeed.tech/tags/test.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

The article explains why growing systems should decouple deployments from releases. It focuses on release toggles, a type of transient feature flag that lets developers change application behavior at runtime, gradually roll out changes, roll them back, and test in production without breaking the system.

### Source excerpt

Crucial developer practices: Decoupling deployments and releases When systems are small and the risk of introducing defects when changing its behaviour is low, these changes can happen during deployment. However, when systems grow, the behaviour becomes more complex and more people are working on the system, it is essential to decouple behaviour changes, the releases, from deployments.

## Thoughts about State Handling on Android

DevFeed: [Thoughts about State Handling on Android](<https://devfeed.tech/articles/thoughts-about-state-handling-on-android-27088.md>)

Original publisher: [Read original article](<https://zsmb.co/thoughts-about-state-handling-on-android/>)

Author: Márton Braun

Published: 2020-06-04T14:00:00Z

Content type: opinion

Language: en

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

Topics: [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [App](<https://devfeed.tech/topics/app.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [applications](<https://devfeed.tech/tags/applications.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [ui](<https://devfeed.tech/tags/ui.md>), [zsmb](<https://devfeed.tech/tags/zsmb.md>), [zsmb-co](<https://devfeed.tech/tags/zsmb-co.md>), [zsmb13](<https://devfeed.tech/tags/zsmb13.md>), [zsmbco](<https://devfeed.tech/tags/zsmbco.md>)

### AI overview

This subjective introduction examines the challenge of maintaining consistent UI state in Android applications. It discusses mutable widget hierarchies, the MVP architecture, and how Presenter assumptions can lead to inconsistent or conflicting UI updates. Jetpack Compose is presented as a possible future way to reduce these problems.

### Source excerpt

Handling the state of UI correctly is one of the prominent challenges of Android apps. Here are my subjective thoughts about some different approaches, which ones I tend to choose, and why.

## Architecting an iOS networking layer: Part 1

DevFeed: [Architecting an iOS networking layer: Part 1](<https://devfeed.tech/articles/architecting-an-ios-networking-layer-part-1-24561.md>)

Original publisher: [Read original article](<https://medium.com/bleeding-edge/architecting-an-ios-networking-layer-part-1-f2ad8417a6ce?source=rss----d8ebe85cdc0f---4>)

Author: Martin Höller

Published: 2019-04-01T10:01:29Z

Content type: tutorial

Language: en

Sources: [Bleeding Edge - Medium](<https://devfeed.tech/sources/bleeding-edge-medium.md>)

Topics: [iOS](<https://devfeed.tech/topics/ios.md>), [networking](<https://devfeed.tech/topics/networking.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [App](<https://devfeed.tech/topics/app.md>), [Protocol (disambiguation)](<https://devfeed.tech/topics/protocol.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [backend](<https://devfeed.tech/tags/backend.md>), [clean-code](<https://devfeed.tech/tags/clean-code.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [interface](<https://devfeed.tech/tags/interface.md>), [ios](<https://devfeed.tech/tags/ios.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [networking](<https://devfeed.tech/tags/networking.md>), [protocol](<https://devfeed.tech/tags/protocol.md>), [software-development](<https://devfeed.tech/tags/software-development.md>), [swift](<https://devfeed.tech/tags/swift.md>), [test](<https://devfeed.tech/tags/test.md>)

### AI overview

This tutorial explains how Clue redesigned its iOS app's networking layer from a singleton-based implementation into a more modular architecture. It describes the limitations of the old design and introduces HTTPClient, protocols, request classes, separation of concerns, and improved testability.

### Source excerpt

Cleaner and more modular building blocksIllustration by Marta Pucci In this two part series, we will go through the networking layer we use in our iOS app at Clue. Part 1 covers how we moved our networking layer to a cleaner more modular architecture 🤓 Part 2 includes a demo project on how we use it to make our network requests 🥳 Let's get started! Our iOS app makes use of a third-party library to handle the finer details of the networking requests to our server. Our interface to this library used to be a singleton class, through which all our service calls would be executed and handled. Whilst this worked and was "okay" for one or two service calls, it very quickly got out of control as our app grew and we needed something better! Let's see why this old implementation was so limiting and what we wanted to achieve with the new architecture. Limitations of the old implementation The singleton class had too many responsibilities. It needed to construct each service call with the endpoint, body and parameters as well as handle the success and failure of each call. It lacked separation of concerns between the networking and the business logic layer. It lacked testability as it required mocking of the backend and extensive test case setups. It was tightly coupled with a third party library, making it harder to replace if needed. Goals of the new architecture Move away from the singleton class anti-pattern. Instead of having a singleton class for all the requests, each request is a class of its own and builds up its networking stack. Improved testability. Increased decoupling between the networking and the business layer by separating the response handling from the network requests implementation. Easy to use interface to create a network request. Let's now go through the main building blocks of the new architecture. HTTPClient The HTTPClient class is responsible for performing the actual network request and conforms to the HTTPClientProviding protocol. We abstract this i

## Clean architecture for Android with Kotlin: a pragmatic approach for starters

DevFeed: [Clean architecture for Android with Kotlin: a pragmatic approach for starters](<https://devfeed.tech/articles/clean-architecture-for-android-with-kotlin-a-pragmatic-approach-for-starters-27142.md>)

Original publisher: [Read original article](<https://antonioleiva.com/clean-architecture-android>)

Published: 2018-09-30T00:00:00Z

Content type: tutorial

Language: en

Sources: [Antonio Leiva](<https://devfeed.tech/sources/antonio-leiva.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Dependency Inversion](<https://devfeed.tech/topics/dependency-inversion.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Programming](<https://devfeed.tech/topics/programming.md>), [Object-oriented programming (OOP)](<https://devfeed.tech/topics/oop.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [clean-architecture](<https://devfeed.tech/tags/clean-architecture.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [dependency-inversion](<https://devfeed.tech/tags/dependency-inversion.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [oop](<https://devfeed.tech/tags/oop.md>), [programming](<https://devfeed.tech/tags/programming.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A pragmatic introductory tutorial on clean architecture for Android apps using Kotlin. It focuses on dependency inversion, explains the tradeoff between decoupling and added complexity, and introduces a five-layer application structure.

### Source excerpt

Everything Android, Kotlin and other random topics

## Query Components with Apollo

DevFeed: [Query Components with Apollo](<https://devfeed.tech/articles/query-components-with-apollo-23487.md>)

Original publisher: [Read original article](<https://www.apollographql.com/blog/query-components-with-apollo-ec603188c157>)

Author: Kureev Alexey

Published: 2017-12-13T22:42:00Z

Content type: tutorial

Language: en

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

Topics: [apollo-client](<https://devfeed.tech/topics/apollo-client.md>), [client](<https://devfeed.tech/topics/client.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Testing](<https://devfeed.tech/topics/testing.md>)

Tags: [apollo](<https://devfeed.tech/tags/apollo.md>), [apollo-client](<https://devfeed.tech/tags/apollo-client.md>), [business-logic](<https://devfeed.tech/tags/business-logic.md>), [community](<https://devfeed.tech/tags/community.md>), [components](<https://devfeed.tech/tags/components.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [express](<https://devfeed.tech/tags/express.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This article explains Query Components with Apollo Client, focusing on declarative data-fetching logic, separation of concerns, abstraction of the data-management layer, mutations, and testing.

### Source excerpt

A couple of months ago, we started to use Apollo Client (+React Native) at Werkspot. From the very beginning, Apollo overwhelmed us by the simplicity and flexibility it provides. It inspired us to create our own vision about technology and experiment with various approaches to data fetching that we think are worth sharing. Enjoy the ride! 🚀 Anatomy of Query Components One of the very powerful concepts that we found for ourselves with Apollo is Query Components.

## How to Test Django Signals Like a Pro

DevFeed: [How to Test Django Signals Like a Pro](<https://devfeed.tech/articles/how-to-test-django-signals-like-a-pro-33910.md>)

Original publisher: [Read original article](<https://hakibenita.com/how-to-test-django-signals-like-a-pro>)

Author: Haki Benita

Published: 2017-02-17T22:00:00Z

Content type: tutorial

Language: en

Sources: [Haki Benita](<https://devfeed.tech/sources/haki-benita.md>)

Topics: [Django](<https://devfeed.tech/topics/django.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [modules](<https://devfeed.tech/topics/modules.md>), [context](<https://devfeed.tech/topics/context.md>)

Tags: [articles](<https://devfeed.tech/tags/articles.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [django](<https://devfeed.tech/tags/django.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [modules](<https://devfeed.tech/tags/modules.md>), [testing](<https://devfeed.tech/tags/testing.md>)

### AI overview

This tutorial explains how to test Django signals. It first demonstrates testing signal arguments by connecting a handler, then introduces a context manager to reduce the boilerplate involved in connecting, running, saving arguments, and disconnecting handlers.

### Source excerpt

Django signals are extremely useful for decoupling modules. They allow a low-level Django app to send events for other apps to handle without creating a direct dependency. Signals are easy to set up, but harder to test. In this article we implement a context manager for testing Django signals, step by step.

## Video: Design Philosophy in Go

DevFeed: [Video: Design Philosophy in Go](<https://devfeed.tech/articles/video-design-philosophy-in-go-22118.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2016/12/developing-a-design-philosophy-in-go.html>)

Published: 2016-12-05T00:00:00Z

Content type: article

Language: en

Sources: [William Kennedy](<https://devfeed.tech/sources/william-kennedy.md>)

Topics: [Go Language](<https://devfeed.tech/topics/go-language.md>)

Tags: [ardan-labs](<https://devfeed.tech/tags/ardan-labs.md>), [blog](<https://devfeed.tech/tags/blog.md>), [decoupling](<https://devfeed.tech/tags/decoupling.md>), [go](<https://devfeed.tech/tags/go.md>), [go-programming](<https://devfeed.tech/tags/go-programming.md>), [golang](<https://devfeed.tech/tags/golang.md>), [programming](<https://devfeed.tech/tags/programming.md>), [talk](<https://devfeed.tech/tags/talk.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

A video talk from the Vancouver Meetup presents a design philosophy for Go, focusing on decoupling from change.

### Source excerpt

This is a talk that I gave at the Vancouver Meetup on November 29th, 2016. The talk covers topics around developing your own design philosophy with a focus on decoupling from change. These are things I cover extensively in the Ultimate Go Classes. Here is the material that is covered in the talk. Review the Grouping and Decoupling topics. Watch Design Philosophy in Go

[Next page](<https://devfeed.tech/tags/decoupling.md?cursor=WyIyMDE2LTEyLTA1VDAwOjAwOjAwKzAwOjAwIiwgIjZjMWQ3NWRjLTE5OTgtNGJjYy1iOGM1LTU1NWY4NTlmNmVkYiJd>)