Pains

726 pains collected

Severity:

Subpar debugging experience

6

Rust's debugging story represents a significant non-trivial problem for developers, with 19.90% reporting it as a big problem. This issue slipped from 2nd to 4th place in priority ranking from 2024 to 2025.

dxRust

Error Handling in Resolvers

6

Developers often forget to properly handle errors in GraphQL resolvers, returning null values instead of throwing errors. This prevents clients from knowing when something goes wrong.

dxGraphQL

Testing GraphQL Queries and Mutations

6

Writing tests for GraphQL queries and mutations is challenging and time-consuming, requiring mocking of multiple data scenarios. Testing complexity increases significantly with complex query structures.

testingGraphQL

Schema Management Complexity

6

As applications grow, managing all types, queries, and mutations becomes messy and difficult to track. Developers must regularly review and update schemas to ensure everything aligns correctly.

architectureGraphQL

Mutation Complexity with Multiple Entities

6

Handling mutations that involve multiple entities and relationships is complex and difficult. Managing data consistency across mutations poses significant challenges for developers.

architectureGraphQL

Async/await complexity and blocking event loop anti-patterns

6

Developers frequently block event loops with sync I/O calls (e.g., using `requests` instead of `aiohttp`), throttling async performance. Missing `await` keywords cause runtime exceptions rather than compile-time hints.

dxPythonasyncioaiohttp+2

Inconsistent and complex pagination patterns

6

GraphQL pagination lacks standardized patterns, especially for multi-dimensional data structures with different requirements at different levels. Implementing pagination for large lists is cumbersome and each service may implement pagination differently.

dxGraphQL

Slow Docker build times in CI/CD pipelines

6

Docker builds are slow on CI/CD pipelines, delaying deployment. Requires manual optimization (reordering Dockerfile, enabling BuildKit) that isn't default behavior.

buildDocker

Weak type hints provide insufficient runtime safety guarantees

6

Type hints (introduced 2015) serve as documentation and IDE hints but don't prevent runtime errors. Changing function return types still compiles fine, failing only at runtime. Async function typing misses missing `await` calls.

dxPythonmypypyright

Slow data processing with vanilla Python loops and lists

6

Python loops and standard lists cannot compete with NumPy/Polars in data-heavy applications. Developers must manually optimize or migrate to specialized libraries for acceptable performance on large datasets.

performancePythonNumPyPandas+3

Steep learning curve and confusing syntax for newcomers

6

Rust's steep learning curve frustrates newcomers, with common complaints about complex syntax, difficulty with intuitive construct selection, self-referential structures, and the borrow checker. Among non-Rust users surveyed, 22% cited Rust as 'too difficult to learn'.

docsRust

Insufficient first-class support for mobile app development

6

Rust doesn't offer out-of-the-box, first-class support for iOS and Android app development, limiting adoption for mobile-focused teams and forcing reliance on workarounds or alternative languages.

ecosystemRustiOSAndroid

Multithreaded communication primitives are safe but inefficient

6

Sync/Send semantics, Mutex, and Arc provide memory safety for concurrent code but have poor CPU cache behavior and performance characteristics, undermining Rust's performance-first positioning for intensive multithreaded applications.

performanceRust

API design mismatch with AI agent adoption

6

89% of developers use generative AI daily, but only 24% design APIs with AI agents in mind. APIs are still optimized for human consumers, causing a widening gap as agent adoption outpaces API modernization.

architectureAI agentsREST APIs

Crate splitting required for reasonable compile times fragmentizes code organization

6

Developers must split projects into many small crates to achieve reasonable compile times, since crates are compiled as single units and circular dependencies are allowed. This artificial fragmentation complicates project structure despite most code lacking true circular dependencies.

buildRust

Silent attrition from accumulated friction despite successful language learning

6

Developers successfully learn Rust but quietly abandon it due to accumulated friction and productivity concerns that compound over time, a pattern not captured by traditional learning curve narratives.

dxRust

Steep learning curve and complex custom abstractions

6

Developers must learn numerous LangChain-specific custom classes and abstractions even for simple tasks, including concepts like LCEL. This adds complexity and makes code harder to understand and debug compared to plain Python or JavaScript approaches.

dxLangChain

Over-engineering and excessive abstraction layers in codebases

6

Developers create unnecessarily complex inheritance chains and abstraction layers that make code difficult to understand. Following a single business logic path requires jumping between ten or more different definitions, making the codebase hard to maintain and reason about.

architectureTypeScript

GitHub Actions cache limit causes repeated dependency downloads in monorepos

6

The previous 10GB cache limit forced teams with large dependencies or multi-language monorepos to have build dependencies evicted before the next workflow run, requiring repeated downloads and slowing builds. While recently increased, this was a long-standing pain point.

performanceGitHub Actions

Framework lags behind rapid evolution of LLM field

6

The LLM field evolves at a breakneck pace but LangChain's abstractions sometimes lag behind latest advancements. Developers cannot leverage cutting-edge techniques and models, and new features introduced by LLM providers (like function calling) take time to be integrated and are sometimes implemented awkwardly.

compatibilityLangChain

Excessive dependency bloat and unnecessary complexity

6

LangChain bundles support for dozens of vector databases, model providers, and tools, pulling in many extra libraries that inflate project complexity even for simple use cases. This affects maintainability, performance, and creates additional points of potential failure, especially in constrained environments.

dependencyLangChain

Cache Expiration Complexity and Long Propagation Times

6

Expiring cached data across distributed networks is complicated and takes a long time. Cache data persists across deployments, making invalidation difficult without proper tools. This is identified as one of the three hardest problems in computer science.

performancecaching

Bot Protection Solutions Are Developer-Unfriendly

6

Existing bot protection solutions are difficult to use, have confusing pricing, have limited effectiveness against non-compliant bots, and most are not developer-friendly. Developers struggle to implement solutions that don't game the system or follow standard conventions like robots.txt.

securityfirewall

Per-seat team pricing scales linearly with developer growth

6

Vercel's Pro plan costs $20/user/month. As teams grow, costs escalate significantly—a 10-developer team faces $2,400/year just for Vercel seats, not counting usage fees. This linear cost scaling makes alternatives with fixed team pricing more attractive.

pricingVercel