# API Design

Published articles for API Design.

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

## Why API design must account for consumer coupling

DevFeed: [Why API design must account for consumer coupling](<https://devfeed.tech/articles/you-can-refactor-everything-except-your-api-42752.md>)

Original publisher: [Read original article](<https://newsletter.francofernando.com/p/you-can-refactor-everything-except>)

Author: Franco Fernando

Published: 2026-09-18T07:42:00Z

Content type: article

Language: en

Sources: [The Polymathic Engineer](<https://devfeed.tech/sources/the-polymathic-engineer.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [article](<https://devfeed.tech/tags/article.md>), [backend](<https://devfeed.tech/tags/backend.md>), [coupling](<https://devfeed.tech/tags/coupling.md>), [refactor](<https://devfeed.tech/tags/refactor.md>)

### AI overview

This article introduces API design through the problem of consumer coupling. It explains why published interfaces become difficult to change when internal and external consumers depend on them, and argues that APIs should be designed from the consumers' perspective.

### Source excerpt

Coupling, not naming. First article on API design.

## How API Design Is Evolving for AI Agents, Security, Reliability, and Compliance

DevFeed: [How API Design Is Evolving for AI Agents, Security, Reliability, and Compliance](<https://devfeed.tech/articles/6-ways-traditional-api-design-has-changed-forever-34948.md>)

Original publisher: [Read original article](<https://nordicapis.com/6-ways-traditional-api-design-has-changed-forever/>)

Author: J Simpson

Published: 2026-09-17T07:00:00Z

Content type: article

Language: en

Sources: [Nordic APIs](<https://devfeed.tech/sources/nordic-apis.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [reliability](<https://devfeed.tech/topics/reliability.md>), [Security](<https://devfeed.tech/topics/security.md>)

Tags: [agents](<https://devfeed.tech/tags/agents.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [api](<https://devfeed.tech/tags/api.md>), [api-architecture](<https://devfeed.tech/tags/api-architecture.md>), [api-as-a-product](<https://devfeed.tech/tags/api-as-a-product.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [api-discovery](<https://devfeed.tech/tags/api-discovery.md>), [api-security](<https://devfeed.tech/tags/api-security.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [blog](<https://devfeed.tech/tags/blog.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [rate-limiting](<https://devfeed.tech/tags/rate-limiting.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [security](<https://devfeed.tech/tags/security.md>)

### AI overview

This article examines six ways API design is evolving as APIs serve AI agents and other machine consumers, with implications for security, reliability, and regulatory compliance.

### Source excerpt

For over two decades, API design and architecture remained remarkably consistent. Perhaps it's the outsized influence of Roy Fielding's RESTful dissertation, but API designers have stuck to the principles of stateless architecture, resource-based endpoints, and HTTP commands to an impressive degree. That's all starting to change, now that we've radically recontextualized the way we use ...

## 10 Tips for Preparing APIs for Agentic Access

DevFeed: [10 Tips for Preparing APIs for Agentic Access](<https://devfeed.tech/articles/10-tips-for-preparing-apis-for-agentic-access-12643.md>)

Original publisher: [Read original article](<https://nordicapis.com/10-tips-for-preparing-apis-for-agentic-access/>)

Author: J Simpson

Published: 2026-08-27T11:40:00Z

Content type: article

Language: en

Sources: [Nordic APIs](<https://devfeed.tech/sources/nordic-apis.md>)

Topics: [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [observability](<https://devfeed.tech/topics/observability.md>), [Security](<https://devfeed.tech/topics/security.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Cloudflare](<https://devfeed.tech/topics/cloudflare.md>)

Tags: [agentic](<https://devfeed.tech/tags/agentic.md>), [agentic-ai](<https://devfeed.tech/tags/agentic-ai.md>), [ai](<https://devfeed.tech/tags/ai.md>), [ai-agents](<https://devfeed.tech/tags/ai-agents.md>), [api-best-practices](<https://devfeed.tech/tags/api-best-practices.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [api-discovery](<https://devfeed.tech/tags/api-discovery.md>), [api-documentation](<https://devfeed.tech/tags/api-documentation.md>), [api-monitoring](<https://devfeed.tech/tags/api-monitoring.md>), [api-security](<https://devfeed.tech/tags/api-security.md>), [apis](<https://devfeed.tech/tags/apis.md>), [artificial-intelligence](<https://devfeed.tech/tags/artificial-intelligence.md>), [blog](<https://devfeed.tech/tags/blog.md>), [json-schema](<https://devfeed.tech/tags/json-schema.md>), [oauth](<https://devfeed.tech/tags/oauth.md>), [observability](<https://devfeed.tech/tags/observability.md>), [openapi-specification](<https://devfeed.tech/tags/openapi-specification.md>), [security](<https://devfeed.tech/tags/security.md>), [workflows](<https://devfeed.tech/tags/workflows.md>)

### AI overview

Ten ways to prepare APIs for agentic access by improving discovery, security, observability, workflows, and predictable design for AI agents.

### Source excerpt

In May 2026, Cloudflare released a new tool called isitagentready.com. It analyzes a URL for everything an agentic AI would need to interact with a site and then returns a score out of 100. Even better still, it breaks down its assessment by category, letting you know how your site performs for discoverability, accessibility from ...

## The HTTP QUERY Method and RFC 10008

DevFeed: [The HTTP QUERY Method and RFC 10008](<https://devfeed.tech/articles/new-http-method-just-dropped-meet-query-33347.md>)

Original publisher: [Read original article](<https://blog.ratnesh-maurya.com/blog/rfc-10008-http-query-method-explained>)

Author: ratneshmaurya2311@gmail.com (Ratnesh Maurya)

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

Content type: tutorial

Language: en

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

Topics: [HTTP](<https://devfeed.tech/topics/http.md>), [Query (disambiguation)](<https://devfeed.tech/topics/query.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [backend](<https://devfeed.tech/tags/backend.md>), [examples](<https://devfeed.tech/tags/examples.md>), [http](<https://devfeed.tech/tags/http.md>), [query](<https://devfeed.tech/tags/query.md>), [web-development](<https://devfeed.tech/tags/web-development.md>), [web-development-http-backend-api-design](<https://devfeed.tech/tags/web-development-http-backend-api-design.md>)

### AI overview

This tutorial explains the HTTP QUERY method described in RFC 10008, including why GET and POST may be insufficient for complex searches and how QUERY works through examples.

### Source excerpt

HTTP finally has a QUERY method. Learn what RFC 10008 changes, why GET and POST fell short for complex searches, and how QUERY works -- with simple examples.

## Using bots to implement fixes from pull request review comments

DevFeed: [Using bots to implement fixes from pull request review comments](<https://devfeed.tech/articles/just-fix-their-pr-37630.md>)

Original publisher: [Read original article](<https://swizec.com/blog/just-fix-their-pr>)

Author: hi@swizec.com (Swizec Teller)

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

Content type: opinion

Language: en

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

Topics: [Code review](<https://devfeed.tech/topics/code-review.md>), [Pull Request](<https://devfeed.tech/topics/pull-request.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [engineering-culture](<https://devfeed.tech/topics/engineering-culture.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [code-review](<https://devfeed.tech/tags/code-review.md>), [code-reviews](<https://devfeed.tech/tags/code-reviews.md>), [knowledge-sharing](<https://devfeed.tech/tags/knowledge-sharing.md>), [pull-requests](<https://devfeed.tech/tags/pull-requests.md>)

### AI overview

The article argues that bots can implement fixes requested in pull request review comments, allowing developers to review the changes and merge them when appropriate. It presents this as useful for small fixes and notes that code owners may need to re-verify the result.

### Source excerpt

You know what's better than a code review comment? A fix.

## Resource Names for Enterprise TypeScript Monorepos

DevFeed: [Resource Names for Enterprise TypeScript Monorepos](<https://devfeed.tech/articles/resource-names-for-enterprise-typescript-monorepos-18982.md>)

Original publisher: [Read original article](<https://www.robinwieruch.de/typescript-monorepo-resource-names/>)

Author: Robin Wieruch

Published: 2026-03-30T06:50:46Z

Content type: tutorial

Language: en

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

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Code](<https://devfeed.tech/topics/code.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [code](<https://devfeed.tech/tags/code.md>), [consistency](<https://devfeed.tech/tags/consistency.md>), [enterprise](<https://devfeed.tech/tags/enterprise.md>), [monorepo](<https://devfeed.tech/tags/monorepo.md>), [monorepo-resource-id](<https://devfeed.tech/tags/monorepo-resource-id.md>), [resource-oriented-design-typescript](<https://devfeed.tech/tags/resource-oriented-design-typescript.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [typescript-resource-names](<https://devfeed.tech/tags/typescript-resource-names.md>), [utilities](<https://devfeed.tech/tags/utilities.md>)

### AI overview

This tutorial explains how to standardize resource names in multi-service TypeScript monorepos. It presents hierarchical resource naming, based on the Google API Design Guide, as a shared convention that replaces ad hoc string interpolation and supports consistent encoding and decoding across services.

### Source excerpt

How to bring consistency to multi-service TypeScript applications by treating resource names and resource types as first-class concepts with shared utilities ...

## Pagination at Scale: Why OFFSET and SKIP Will Eventually Break Your API

DevFeed: [Pagination at Scale: Why OFFSET and SKIP Will Eventually Break Your API](<https://devfeed.tech/articles/pagination-at-scale-why-offset-and-skip-will-eventually-break-your-api-39566.md>)

Original publisher: [Read original article](<https://ankit-rana.com/logs/14-pagination-offset-vs-cursor/>)

Author: hello@ankit-rana.com

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

Content type: tutorial

Language: en

Sources: [Ankit Rana | Mechanical Sympathy](<https://devfeed.tech/sources/ankit-rana-mechanical-sympathy.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [Database](<https://devfeed.tech/topics/database.md>), [MongoDB](<https://devfeed.tech/topics/mongodb.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [b-tree](<https://devfeed.tech/tags/b-tree.md>), [cursor](<https://devfeed.tech/tags/cursor.md>), [database-performance](<https://devfeed.tech/tags/database-performance.md>), [latency](<https://devfeed.tech/tags/latency.md>), [mongodb](<https://devfeed.tech/tags/mongodb.md>), [pagination](<https://devfeed.tech/tags/pagination.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [scale](<https://devfeed.tech/tags/scale.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

This article explains why OFFSET and SKIP pagination become slower and more memory-intensive as page depth increases. It presents cursor-based, or keyset, pagination as an alternative that uses an indexed range seek and reads a fixed number of rows, keeping fetch cost largely constant with list depth. The trade-off is that cursor pagination does not provide reliable absolute page numbers.

### Source excerpt

OFFSET does not seek. The engine fetches offset plus limit rows, sorts them, and discards the first N, so cost grows linearly with page depth. Cursor pagination passes the last seen key instead of a page number, letting the B+ tree seek in logarithmic time and read a fixed number of rows, which keeps latency flat at any depth. The price is losing absolute page numbers.

## Designing Resilient APIs: Failure-Handling Patterns for Distributed Systems

DevFeed: [Designing Resilient APIs: Failure-Handling Patterns for Distributed Systems](<https://devfeed.tech/articles/designing-resilient-apis-failure-handling-patterns-for-distributed-systems-39563.md>)

Original publisher: [Read original article](<https://ankit-rana.com/logs/11-resilient-api-design-patterns/>)

Author: hello@ankit-rana.com

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

Content type: tutorial

Language: en

Sources: [Ankit Rana | Mechanical Sympathy](<https://devfeed.tech/sources/ankit-rana-mechanical-sympathy.md>)

Topics: [distributed-systems](<https://devfeed.tech/topics/distributed-systems.md>), [Resilience](<https://devfeed.tech/topics/resilience.md>), [API](<https://devfeed.tech/topics/api.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [apis](<https://devfeed.tech/tags/apis.md>), [async](<https://devfeed.tech/tags/async.md>), [distributed-systems](<https://devfeed.tech/tags/distributed-systems.md>), [fault-tolerance](<https://devfeed.tech/tags/fault-tolerance.md>), [idempotency](<https://devfeed.tech/tags/idempotency.md>), [jitter](<https://devfeed.tech/tags/jitter.md>), [observability](<https://devfeed.tech/tags/observability.md>), [outages](<https://devfeed.tech/tags/outages.md>), [reliability](<https://devfeed.tech/tags/reliability.md>), [resilience](<https://devfeed.tech/tags/resilience.md>), [retries](<https://devfeed.tech/tags/retries.md>), [systems](<https://devfeed.tech/tags/systems.md>)

### AI overview

A practical guide to designing resilient APIs in distributed systems. It covers fail-fast validation, graceful degradation, idempotency for safe retries, and bounded retry policies using exponential backoff, jitter, attempt limits, and total time budgets.

### Source excerpt

Resilience is failing in controlled ways rather than not failing. Validate and fail fast at the boundary, degrade gracefully by serving cached or reduced responses, require an idempotency key for side-effecting operations, and bound retries with exponential backoff, jitter, an attempt cap, and a total time budget. Unbounded retries amplify outages.

## Transitioning from REST to gRPC: System Design and Tradeoffs

DevFeed: [Transitioning from REST to gRPC: System Design and Tradeoffs](<https://devfeed.tech/articles/transitioning-from-rest-to-grpc-system-design-and-tradeoffs-39558.md>)

Original publisher: [Read original article](<https://ankit-rana.com/logs/06-grpc-vs-rest/>)

Author: hello@ankit-rana.com

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

Content type: tutorial

Language: en

Sources: [Ankit Rana | Mechanical Sympathy](<https://devfeed.tech/sources/ankit-rana-mechanical-sympathy.md>)

Topics: [gRPC](<https://devfeed.tech/topics/grpc.md>), [Remote Procedure Call (RPC)](<https://devfeed.tech/topics/rpc.md>), [Code](<https://devfeed.tech/topics/code.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [JSON](<https://devfeed.tech/topics/json.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [client](<https://devfeed.tech/tags/client.md>), [grpc](<https://devfeed.tech/tags/grpc.md>), [http](<https://devfeed.tech/tags/http.md>), [json](<https://devfeed.tech/tags/json.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [protobuf](<https://devfeed.tech/tags/protobuf.md>), [rest](<https://devfeed.tech/tags/rest.md>), [rpc](<https://devfeed.tech/tags/rpc.md>), [schema](<https://devfeed.tech/tags/schema.md>), [server](<https://devfeed.tech/tags/server.md>), [system-design](<https://devfeed.tech/tags/system-design.md>)

### AI overview

This tutorial explains how gRPC uses .proto service definitions and Protocol Buffers to generate typed client and server code, serialize messages, and communicate over HTTP/2. It compares gRPC with REST and recommends gRPC for internal service-to-service calls needing low latency, schema-first contracts, or streaming, while retaining REST with JSON at the edge for browsers and external consumers.

### Source excerpt

gRPC defines services in a .proto file, compiles them into typed client and server code, and transports binary protobuf over HTTP/2. Choose it for internal service-to-service calls that need low latency, schema-first contracts, or streaming, and keep REST with JSON at the edge where browsers and external consumers live.

## From Syntax Checker to Critical Reviewer: How We Convinced AI to Catch Real API Quality Issues

DevFeed: [From Syntax Checker to Critical Reviewer: How We Convinced AI to Catch Real API Quality Issues](<https://devfeed.tech/articles/from-syntax-checker-to-critical-reviewer-how-we-convinced-ai-to-catch-real-api-quality-issues-22633.md>)

Original publisher: [Read original article](<https://www.wix.engineering/post/from-syntax-checker-to-critical-reviewer-how-we-forced-ai-to-catch-real-api-quality-issues>)

Author: Wix Engineering

Published: 2026-01-07T10:09:21Z

Content type: opinion

Language: en

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

Topics: [API](<https://devfeed.tech/topics/api.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Developer experience](<https://devfeed.tech/topics/developer-experience.md>), [Usability](<https://devfeed.tech/topics/usability.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [developer-experience](<https://devfeed.tech/tags/developer-experience.md>), [mental-models](<https://devfeed.tech/tags/mental-models.md>), [technical](<https://devfeed.tech/tags/technical.md>), [usability](<https://devfeed.tech/tags/usability.md>)

### AI overview

The article examines how an AI tool reviewing API designs focused on measurable issues such as naming, formatting, and typos while missing developer-experience problems involving workflows, hidden rules, mental models, and usability. It describes this as a recurring bias and explains how the tool was adjusted to produce more critical reviews.

### Source excerpt

Building an AI tool to review API design taught us something fundamental about how AI approaches quality: it confidently optimizes for the least important parts. Instead of flagging the quality issues that actually hurt developers, like confusing workflows, hidden rules, or inconsistent mental models, it focused on the safe, measurable stuff: naming patterns, formatting mistakes, even typos. Developer experience issues just didn't get caught, even though in our case, we specifically asked for...

## XML Modelling in OpenAPI 3.2: A Quiet but Important Upgrade for Enterprise Teams

DevFeed: [XML Modelling in OpenAPI 3.2: A Quiet but Important Upgrade for Enterprise Teams](<https://devfeed.tech/articles/xml-modelling-in-openapi-3-2-a-quiet-but-important-upgrade-for-enterprise-teams-30964.md>)

Original publisher: [Read original article](<https://developerhub.io/blog/xml-modelling-in-openapi-3-2-a-quiet-but-important-upgrade-for-enterprise-teams/>)

Author: Zaid Daba'een

Published: 2025-11-14T14:54:07Z

Content type: tutorial

Language: en

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

Topics: [OpenAPI Specification](<https://devfeed.tech/topics/openapi.md>), [XML](<https://devfeed.tech/topics/xml.md>), [upgrade](<https://devfeed.tech/topics/upgrade.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [enterprise](<https://devfeed.tech/tags/enterprise.md>), [openapi](<https://devfeed.tech/tags/openapi.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>), [xml](<https://devfeed.tech/tags/xml.md>)

### AI overview

OpenAPI 3.2 expands XML modelling with clearer support for namespaces, attributes, mixed content, and precisely named nested wrappers. The article explains how these capabilities address limitations in OpenAPI 3.1 and reduce reliance on parallel XSDs, proprietary extensions, and prose documentation.

### Source excerpt

OpenAPI 3.2 modernises XML support with richer modelling, proper attribute handling, and nested structures. It removes old workarounds and gives enterprise teams clearer, more accurate ways to define their XML based APIs.

## Structured Tags in OpenAPI 3.2: Organising APIs the Way They Deserve

DevFeed: [Structured Tags in OpenAPI 3.2: Organising APIs the Way They Deserve](<https://devfeed.tech/articles/structured-tags-in-openapi-3-2-organising-apis-the-way-they-deserve-30959.md>)

Original publisher: [Read original article](<https://developerhub.io/blog/structured-tags-openapi-3-2/>)

Author: Zaid Daba'een

Published: 2025-10-26T21:00:37Z

Content type: article

Language: en

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

Topics: [OpenAPI Specification](<https://devfeed.tech/topics/openapi.md>), [Documentation](<https://devfeed.tech/topics/documentation.md>), [API](<https://devfeed.tech/topics/api.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [api-documentation](<https://devfeed.tech/tags/api-documentation.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [modular](<https://devfeed.tech/tags/modular.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [openapi](<https://devfeed.tech/tags/openapi.md>), [sdks](<https://devfeed.tech/tags/sdks.md>), [structured](<https://devfeed.tech/tags/structured.md>)

### AI overview

OpenAPI 3.2 adds structured, hierarchical tags that let APIs organize endpoints into nested categories. The article explains how this can improve documentation navigation, SDK organization, and maintainability for large or modular APIs.

### Source excerpt

OpenAPI 3.2 introduces structured tags, allowing APIs to organize endpoints into nested categories for clearer, more maintainable documentation.

## Turning Hypermedia APIs into MCPs

DevFeed: [Turning Hypermedia APIs into MCPs](<https://devfeed.tech/articles/turning-hypermedia-apis-into-mcps-20523.md>)

Original publisher: [Read original article](<https://code.dblock.org/2025/09/18/turning-hypermedia-apis-into-mcps.html>)

Author: Daniel Doubrovkine (dblock@dblock.org)

Published: 2025-09-18T09:00:00Z

Content type: tutorial

Language: en

Sources: [Daniel Doubrovkine](<https://devfeed.tech/sources/daniel-doubrovkine.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [Model Context Protocol (MCP)](<https://devfeed.tech/topics/model-context-protocol-mcp.md>), [MCP Server](<https://devfeed.tech/topics/mcp-server.md>), [REST API](<https://devfeed.tech/topics/rest-api.md>), [Ruby](<https://devfeed.tech/topics/ruby.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Slack](<https://devfeed.tech/topics/slack.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [apis](<https://devfeed.tech/tags/apis.md>), [hypermedia](<https://devfeed.tech/tags/hypermedia.md>), [mcp](<https://devfeed.tech/tags/mcp.md>), [mcp-server](<https://devfeed.tech/tags/mcp-server.md>), [mcps](<https://devfeed.tech/tags/mcps.md>), [model-context-protocol](<https://devfeed.tech/tags/model-context-protocol.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [rest](<https://devfeed.tech/tags/rest.md>), [rest-api](<https://devfeed.tech/tags/rest-api.md>), [ruby](<https://devfeed.tech/tags/ruby.md>), [slack](<https://devfeed.tech/tags/slack.md>)

### AI overview

This tutorial shows how to expose a Hypermedia API as an MCP server using the Ruby gem hyperclient-mcp. It uses the open-source S'Up Slack bot to demonstrate resource discovery, starting the server, connecting it to Claude, and querying bot and team information.

### Source excerpt

I've written and talked extensively about Hypermedia APIs for about a decade. The HATEOAS constraints in representing resources for a RESTful API has numerous advantages in API design, readability, discoverability, and performance over a hand-rolled REST API. Unfortunately, adoption of Hypermedia APIs is very low compared to, for example GraphQL, but I find the implementation a lot simpler and continue adding Hypermedia APIs to my pet projects. At its root a Hypermedia API looks like so. { "_links": { "self": { "href": "https://sup2.playplay.io/api" }, "status": { "href": "https://sup2.playplay.io/api/status" }, "team": { "href": "https://sup2.playplay.io/api/teams/{id}", "templated": true }, ... } } The above example is an extract from this API. For this post we will use one of my Slack bots called S'Up, which generates fresh triads of team members in Slack to meet for coffee every week in an informal standup. The bot is open-source and you can try it here. Because the Hypermedia API structure is fixed with only "resources" and "links" (and similar to API frameworks such as GraphQL) you don't need an application-specific client to interact with the API. In Ruby, the most popular generic Hypermedia client is Hyperclient. With the API above, a client can retrieve the bot status, and using an API token obtained from an existing installation some team information. api = Hyperclient.new('https://sup2.playplay.io/api') do |client| client.headers['X-Access-Token'] = ENV.fetch('TOKEN', nil) end status = api.status puts "Bot is #{status.ping['presence']['presence']}." team = api.team(id: '1234') puts "Team name is '#{team.name}'." This will output "Bot is online." and "Team name is 'dblock'." for my installation. In this case, the generic client knew nothing about "team" - it was discovered programmatically and was, in a way, self-documenting. Unsurprisingly, this idea of templated resources is reused almost exactly the same way in the model context protocol (MCP). Therefor

## Ep. 2: Elevating Software Design in Go: Package Architecture in Modern Development

DevFeed: [Ep. 2: Elevating Software Design in Go: Package Architecture in Modern Development](<https://devfeed.tech/articles/ep-2-elevating-software-design-in-go-package-architecture-in-modern-development-22235.md>)

Original publisher: [Read original article](<https://www.ardanlabs.com/blog/2024/05/elevating-software-design-in-go-package-architecture-in-modern-development-ep-2.html>)

Published: 2024-05-21T00: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>), [Software Engineering](<https://devfeed.tech/topics/software-engineering.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [code-modularity](<https://devfeed.tech/tags/code-modularity.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [go](<https://devfeed.tech/tags/go.md>), [go-development](<https://devfeed.tech/tags/go-development.md>), [go-projects](<https://devfeed.tech/tags/go-projects.md>), [integrity](<https://devfeed.tech/tags/integrity.md>), [modularity](<https://devfeed.tech/tags/modularity.md>), [package-architecture](<https://devfeed.tech/tags/package-architecture.md>), [scalability](<https://devfeed.tech/tags/scalability.md>), [software-design](<https://devfeed.tech/tags/software-design.md>)

### AI overview

This video episode explains package architecture in Go. It emphasizes clear boundaries between components, focused package functionality, avoiding generic packages such as "Utils" or "Common," and the role of robust type systems in maintainable software.

### Source excerpt

Introduction: In this insightful episode, Bill dives deep into the realm of package design, shedding light on its crucial role in software development. Here are three key takeaways for Go developers: Code Modularity: Learn how Go's packaging system creates essential firewalls between program components, enhancing maintainability. Focused Functionality: Discover the importance of designing packages that provide specific functionality, fostering code clarity. Avoiding Pitfalls: Bill warns against common package design mistakes like centralized "common" packages, promoting a layered approach to maintainable code.

## Diagrams and API design with AI

DevFeed: [Diagrams and API design with AI](<https://devfeed.tech/articles/diagrams-and-api-design-with-ai-39071.md>)

Original publisher: [Read original article](<https://blog.devdetails.com/p/diagrams-and-api-design-with-ai>)

Author: Mike

Published: 2023-06-14T03:37:00Z

Content type: tutorial

Language: en

Sources: [Dev Details](<https://devfeed.tech/sources/dev-details.md>)

Topics: [coding](<https://devfeed.tech/topics/coding.md>), [OpenAPI Specification](<https://devfeed.tech/topics/openapi.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [ChatGPT](<https://devfeed.tech/topics/chatgpt.md>), [plantuml](<https://devfeed.tech/topics/plantuml.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [coding](<https://devfeed.tech/tags/coding.md>), [example](<https://devfeed.tech/tags/example.md>), [openapi](<https://devfeed.tech/tags/openapi.md>), [plantuml](<https://devfeed.tech/tags/plantuml.md>)

### AI overview

Part 3 of a practical series demonstrates using ChatGPT to visualize a URL shortening service design with a PlantUML sequence diagram and generate an OpenAPI specification. It compares ChatGPT 3.5 and ChatGPT 4 for these tasks and explains how an API-first specification supports parallel UI and server development.

### Source excerpt

Part 3 of a practical example of using AI for coding

## Google Accompanist: Experimental Jetpack Compose Libraries for API Feedback

DevFeed: [Google Accompanist: Experimental Jetpack Compose Libraries for API Feedback](<https://devfeed.tech/articles/all-about-google-accompanist-28442.md>)

Original publisher: [Read original article](<https://composables.com/blog/accompanist>)

Author: Alex Styl

Published: 2023-04-06T00:00:00Z

Content type: article

Language: en

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

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Google](<https://devfeed.tech/topics/google.md>), [Library](<https://devfeed.tech/topics/library.md>), [API](<https://devfeed.tech/topics/api.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [compose](<https://devfeed.tech/tags/compose.md>), [google](<https://devfeed.tech/tags/google.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [open-source](<https://devfeed.tech/tags/open-source.md>)

### AI overview

Google Accompanist is an open-source collection of Jetpack Compose libraries used to trial new APIs and gather developer feedback. Libraries may later move into the official Jetpack Compose dependency when their APIs mature.

### Source excerpt

Google's secret test lab for all things Compose

## A Brief Overview over the Most Common jOOQ Types

DevFeed: [A Brief Overview over the Most Common jOOQ Types](<https://devfeed.tech/articles/a-brief-overview-over-the-most-common-jooq-types-28928.md>)

Original publisher: [Read original article](<https://blog.jooq.org/a-brief-overview-over-the-most-common-jooq-types/>)

Author: lukaseder

Published: 2022-09-06T12:30:37Z

Content type: tutorial

Language: en

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

Topics: [SQL](<https://devfeed.tech/topics/sql.md>), [API](<https://devfeed.tech/topics/api.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [Structured-data](<https://devfeed.tech/topics/structured-data.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [cheat-sheet](<https://devfeed.tech/tags/cheat-sheet.md>), [configuration](<https://devfeed.tech/tags/configuration.md>), [context](<https://devfeed.tech/tags/context.md>), [dependency-injection](<https://devfeed.tech/tags/dependency-injection.md>), [dsl](<https://devfeed.tech/tags/dsl.md>), [jdbc](<https://devfeed.tech/tags/jdbc.md>), [jooq](<https://devfeed.tech/tags/jooq.md>), [jooq-3-17](<https://devfeed.tech/tags/jooq-3-17.md>), [jooq-in-use](<https://devfeed.tech/tags/jooq-in-use.md>), [logging](<https://devfeed.tech/tags/logging.md>), [overview](<https://devfeed.tech/tags/overview.md>), [queryparts](<https://devfeed.tech/tags/queryparts.md>), [r2dbc](<https://devfeed.tech/tags/r2dbc.md>), [sql](<https://devfeed.tech/tags/sql.md>), [syntax](<https://devfeed.tech/tags/syntax.md>), [type-system](<https://devfeed.tech/tags/type-system.md>), [types](<https://devfeed.tech/tags/types.md>)

### AI overview

This tutorial provides a cheat sheet of the most important types in the jOOQ API, covering configuration, scopes, settings, and DSL APIs. It notes that jOOQ 3.17 includes more than 160 settings and explains how several type groups support query construction, execution, lifecycle management, and dependency injection.

### Source excerpt

For new users working with jOOQ for the first time, the number of types in the jOOQ API can be overwhelming. The SQL language doesn't have many such "visible" types, although if you think about SQL the way jOOQ does, then they're there just the same, but hidden from users via an English style syntax. ... Continue reading A Brief Overview over the Most Common jOOQ Types ->

## Rolling out Roles

DevFeed: [Rolling out Roles](<https://devfeed.tech/articles/rolling-out-roles-11978.md>)

Original publisher: [Read original article](<https://incident.io/blog/rolling-out-roles>)

Author: Isaac Seymour

Published: 2022-03-11T00:00:00Z

Content type: article

Language: en

Sources: [The incident.io Blog](<https://devfeed.tech/sources/the-incident-io-blog.md>)

Topics: [Authorization](<https://devfeed.tech/topics/authorization.md>), [Authentication](<https://devfeed.tech/topics/authentication.md>), [API](<https://devfeed.tech/topics/api.md>), [Front end](<https://devfeed.tech/topics/frontend.md>), [incident](<https://devfeed.tech/topics/incident.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [frontend](<https://devfeed.tech/tags/frontend.md>), [incident](<https://devfeed.tech/tags/incident.md>), [incident-channel](<https://devfeed.tech/tags/incident-channel.md>), [incident-management](<https://devfeed.tech/tags/incident-management.md>), [incident-response](<https://devfeed.tech/tags/incident-response.md>), [outage](<https://devfeed.tech/tags/outage.md>), [post-mortem](<https://devfeed.tech/tags/post-mortem.md>), [slack](<https://devfeed.tech/tags/slack.md>), [slack-incident](<https://devfeed.tech/tags/slack-incident.md>)

### AI overview

The article explains how incident.io introduced user roles and permission scopes to support private incidents and future permission levels. It describes using fixed customer-facing roles backed by granular scopes, centralized authorization checks in APIs, and type-safe scope handling in the frontend through a generated client.

### Source excerpt

Take a peek behind the scenes at how we built user roles into our product, and rolled them out to our existing users

## Migrating Your Design System to Jetpack Compose: Part 2

DevFeed: [Migrating Your Design System to Jetpack Compose: Part 2](<https://devfeed.tech/articles/migrating-your-design-system-to-jetpack-compose-part-2-25663.md>)

Original publisher: [Read original article](<https://adambennett.dev/2020/12/migrating-your-design-system-to-jetpack-compose-part-2/>)

Published: 2020-12-07T07:38:38Z

Content type: tutorial

Language: en

Sources: [Posts on Adam Bennett](<https://devfeed.tech/sources/posts-on-adam-bennett.md>)

Topics: [Design system](<https://devfeed.tech/topics/design-system.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Library](<https://devfeed.tech/topics/library.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [algorithms](<https://devfeed.tech/tags/algorithms.md>), [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [blog](<https://devfeed.tech/tags/blog.md>), [career](<https://devfeed.tech/tags/career.md>), [component](<https://devfeed.tech/tags/component.md>), [compose](<https://devfeed.tech/tags/compose.md>), [design](<https://devfeed.tech/tags/design.md>), [design-system](<https://devfeed.tech/tags/design-system.md>), [development](<https://devfeed.tech/tags/development.md>), [engineering](<https://devfeed.tech/tags/engineering.md>), [finance](<https://devfeed.tech/tags/finance.md>), [functional](<https://devfeed.tech/tags/functional.md>), [growth](<https://devfeed.tech/tags/growth.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [java](<https://devfeed.tech/tags/java.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [library](<https://devfeed.tech/tags/library.md>), [money](<https://devfeed.tech/tags/money.md>), [opinions](<https://devfeed.tech/tags/opinions.md>), [software](<https://devfeed.tech/tags/software.md>), [startups](<https://devfeed.tech/tags/startups.md>), [techniques](<https://devfeed.tech/tags/techniques.md>), [thoughts](<https://devfeed.tech/tags/thoughts.md>), [training](<https://devfeed.tech/tags/training.md>), [tutorial](<https://devfeed.tech/tags/tutorial.md>), [typography](<https://devfeed.tech/tags/typography.md>)

### AI overview

Part two of a series on migrating a design system to Jetpack Compose, covering custom theming, integration with existing APIs, risks from a rapidly changing library, and API design considerations.

### Source excerpt

Welcome back to the second article in my series about migrating design systems to Jetpack Compose, where I talk about our experiences at Cuvva and how you can apply what we learnt to your team. In part one, I talked about planning ahead, modularisation and getting your team onboard. In part two, I'll talk about custom theming, about building ontop of existing APIs, how to minimise risk from relying on a rapidly changing library and pose a question about API design.

## Kotlin Multiplatform Mobile: Launching & Maintaining an Open Source Library - Touchlab

DevFeed: [Kotlin Multiplatform Mobile: Launching & Maintaining an Open Source Library - Touchlab](<https://devfeed.tech/articles/kotlin-multiplatform-mobile-launching-maintaining-an-open-source-library-touchlab-38275.md>)

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

Published: 2020-10-08T18:28:34Z

Content type: article

Language: en

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

Topics: [kotlin multiplatform mobile](<https://devfeed.tech/topics/kotlin-multiplatform-mobile.md>), [Library](<https://devfeed.tech/topics/library.md>), [Open Source](<https://devfeed.tech/topics/open-source.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [community](<https://devfeed.tech/tags/community.md>), [kotlin-multiplatform](<https://devfeed.tech/tags/kotlin-multiplatform.md>), [kotlin-multiplatform-mobile](<https://devfeed.tech/tags/kotlin-multiplatform-mobile.md>), [library](<https://devfeed.tech/tags/library.md>), [mobile](<https://devfeed.tech/tags/mobile.md>), [multiplatform](<https://devfeed.tech/tags/multiplatform.md>), [open-source](<https://devfeed.tech/tags/open-source.md>), [touchlabshare](<https://devfeed.tech/tags/touchlabshare.md>)

### AI overview

A Touchlab community discussion features engineer Russell Wolf explaining how he created and maintains Multiplatform Settings, an open-source library for Kotlin Multiplatform Mobile. He discusses its career impact, community feedback, roadmap, and code and API design decisions.

### Source excerpt

Russell is a multiplatform engineer at Touchlab. He tells the story of how he decided to develop an open-source library for Kotlin Multiplatform Mobile.

## Kotlin and Exceptions

DevFeed: [Kotlin and Exceptions](<https://devfeed.tech/articles/kotlin-and-exceptions-26024.md>)

Original publisher: [Read original article](<https://elizarov.medium.com/kotlin-and-exceptions-8062f589d07?source=rss-4762e889f8fc------2>)

Author: Roman Elizarov

Published: 2020-06-10T08:18:06Z

Content type: article

Language: en

Sources: [Stories by Roman Elizarov on Medium](<https://devfeed.tech/sources/stories-by-roman-elizarov-on-medium.md>)

Topics: [Exception](<https://devfeed.tech/topics/exception.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Java](<https://devfeed.tech/topics/java.md>), [Error Handling](<https://devfeed.tech/topics/error-handling.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [code](<https://devfeed.tech/tags/code.md>), [error-handling](<https://devfeed.tech/tags/error-handling.md>), [exception-handling](<https://devfeed.tech/tags/exception-handling.md>), [exceptions](<https://devfeed.tech/tags/exceptions.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

The article examines Kotlin exceptions by tracing their origins to Java checked exceptions. It explains how checked exceptions were intended to reduce missed error checks, then discusses problems including boilerplate, overly broad API declarations, ignored exceptions, and poor compatibility with Java 8 lambdas and streams.

### Source excerpt

Photo by John Mark Arnold on Unsplash What are Kotlin Exceptions and how should you use them? To figure it out let's look at their origins first. Exceptions came to Kotlin from Java. The story with exceptions in Java is complicated, though. I'll give a brief overview. The Origin Java has a unique concept of checked exceptions that were designed to solve the problem of verbose and error-prone error-handling (pun intended). In languages predating Java, like in venerable C, you have to write code like shown in this snippet when doing basic input/output: file = fopen("file.txt", "r"); if (file == NULL) { // handle error & return } // work with file, check for error after each file operation Every time you perform an operation that might fail due to some external circumstance, which happens especially often with files and network, you have to write code that checks the corresponding error condition and handles it. That's tedious, easy to forget, hard to debug. Java set on a noble goal to eliminate this problem. The solution was to use checked exceptions. Every file I/O operation is declared as throws IOException in Java and the compiler checks that you either handle it or declare that you rethrow it. The beauty of this is that you can write exception-handling code once for a whole bunch of I/O operations and you cannot forget writing it since the Java compiler is there to help you. file = FileInputStream("file.txt"); // throws IOException No error-handling boilerplate, no more missed error checks. It was such a bliss to program in Java... for a while. Problems Problems with checked exceptions accumulated over the years. Memory input/output APIs like ByteArrayInputStream were still declared to throw IOException that you had to handle even though it never happened, people abused checked exceptions in API design leading to long, contagious lists of thrown exceptions, developers routinely caught and ignored checked exceptions just to fit some exception-throwing API under an in

## The Dog Riddle

DevFeed: [The Dog Riddle](<https://devfeed.tech/articles/the-dog-riddle-27084.md>)

Original publisher: [Read original article](<https://zsmb.co/the-dog-riddle/>)

Author: Márton Braun

Published: 2019-04-25T18:00:00Z

Content type: article

Language: en

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

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [API](<https://devfeed.tech/topics/api.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [code](<https://devfeed.tech/tags/code.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [marton-braun](<https://devfeed.tech/tags/marton-braun.md>), [sealed](<https://devfeed.tech/tags/sealed.md>), [sealed-class](<https://devfeed.tech/tags/sealed-class.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

A Kotlin API design challenge asks readers to model cats and dogs, including dogs with optional breeds, while enforcing valid syntax and predictable instance creation. The article discusses submitted solutions, a common singleton-related pitfall, sealed hierarchies, and exhaustive expressions.

### Source excerpt

A fun little challenge in Kotlin API design. Give it a try!

## Kotlin Delegated Properties for Designing a Simple Android Library API

DevFeed: [Kotlin Delegated Properties for Designing a Simple Android Library API](<https://devfeed.tech/articles/delightful-delegate-design-27043.md>)

Original publisher: [Read original article](<https://web.archive.org/web/20200513142755/https://blog.autsoft.hu/delightful-delegate-design/>)

Author: Márton Braun

Published: 2019-04-11T19:00:00Z

Content type: tutorial

Language: en

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

Topics: [API](<https://devfeed.tech/topics/api.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Library](<https://devfeed.tech/topics/library.md>), [implementation](<https://devfeed.tech/topics/implementation.md>), [Android](<https://devfeed.tech/topics/android.md>), [properties](<https://devfeed.tech/topics/properties.md>), [factory function](<https://devfeed.tech/topics/factory-function.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [api-design](<https://devfeed.tech/tags/api-design.md>), [delegates](<https://devfeed.tech/tags/delegates.md>), [factory-function](<https://devfeed.tech/tags/factory-function.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [library](<https://devfeed.tech/tags/library.md>), [properties](<https://devfeed.tech/tags/properties.md>)

### AI overview

This tutorial explains API design choices in the Krate Android SharedPreferences wrapper. It shows how Kotlin delegated properties can encapsulate reusable logic, persist values across application restarts, and hide concrete implementations behind a simple interface and factory function.

### Source excerpt

When developing a library, designing an easy to use API while hiding unnecessary implementation details from clients is fundamental. Let's look at some API design choices we've made for our library Krate, an Android SharedPreferences wrapper.

## Optimized for Change

DevFeed: [Optimized for Change](<https://devfeed.tech/articles/optimized-for-change-36186.md>)

Original publisher: [Read original article](<https://overreacted.io/optimized-for-change/>)

Published: 2018-12-12T00:00:00Z

Content type: opinion

Language: en

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

Topics: [API](<https://devfeed.tech/topics/api.md>), [Requirements](<https://devfeed.tech/topics/requirements.md>)

Tags: [api-design](<https://devfeed.tech/tags/api-design.md>), [apis](<https://devfeed.tech/tags/apis.md>), [change](<https://devfeed.tech/tags/change.md>), [code](<https://devfeed.tech/tags/code.md>), [developer](<https://devfeed.tech/tags/developer.md>), [optimized](<https://devfeed.tech/tags/optimized.md>)

### AI overview

The article argues that good API design must account not only for readability, correctness, and performance, but also for how API consumers' code will evolve. It calls this "second order" API design and says APIs should accommodate changes such as moving, renaming, generalizing, optimizing, and fixing code.

### Source excerpt

What makes a great API?

[Next page](<https://devfeed.tech/tags/api-design.md?cursor=WyIyMDE4LTEyLTEyVDAwOjAwOjAwKzAwOjAwIiwgIjNhZmUxNjJiLTg3NTctNDQ1NS1iYzM2LWY2Y2I2YWM5YzgyNCJd>)