Pains

204 pains collected

Severity:

Fragmented codebase from mixing server functions with tRPC

6

Limitations of Next.js server functions force developers to use alternatives like tRPC for some backend tasks, resulting in inconsistent architectural patterns and parallel caching systems. This fragmentation increases complexity.

architectureNext.jstRPCTanStack Query

TypeScript type inference limitations with dynamic runtime values

6

TypeScript struggles with objects assembled dynamically at runtime in value space. Developers must manually explain type relationships using complex features like const assertions, mapped types, and type assertions, making it cumbersome to work with dynamically constructed data.

dxTypeScript

Performance optimization across diverse workload types

6

Performance optimization has emerged as the #1 operational challenge (46%), displacing earlier basic adoption concerns. Organizations struggle to optimize performance across databases, AI/ML, and traditional containerized workloads simultaneously.

performanceKubernetesAI/ML

TypeScript type system cannot model intermediate state mutations in imperative loops

6

TypeScript's type system assumes variables have exactly one type and cannot change types. When building objects iteratively through mutations in for loops, TypeScript cannot model these intermediate state transitions, making it impossible to properly type such functions without workarounds like 'as' assertions.

compatibilityTypeScript

Python performance limitations due to lack of compilation

6

Python is slow because it is not compiled, making it unsuitable for performance-critical applications compared to compiled languages.

performancePython

Limited Flexibility and Customization in Next.js Framework

6

Next.js's conventions and built-in features, while streamlining development, limit flexibility for custom configurations or workflows. Companies with unique requirements struggle with routing, data fetching, or build process customization.

architectureNext.js

Steep learning curve requires mastering multiple Next.js subsystems

6

Learning Next.js requires mastering not just React, but also its routing model, rendering modes, proprietary caching behavior, deployment quirks, and middleware runtime. This multi-layered complexity creates a steep onboarding barrier for newcomers.

docsNext.jsReact

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

Docker Compose version field incompatibility

6

Modifying the Docker Compose version field can silently disable features. Advancing the version makes previously valid compose files invalid, and there's no clear migration path or warning system.

compatibilityDocker

Stateless GitHub Actions prevent efficient caching and computation reuse

6

GitHub Actions are stateless, making it difficult to reuse computation within VMs without relying on external tools like Make or Just. Even with caching layers, developers cannot reliably persist state between runs, forcing redundant rebuilds and slowing feedback loops.

performanceGitHub ActionsMakeJust

Heavy Middleware Logic Increases Time to First Byte

6

Middleware that runs on every request with large libraries or poor tree-shaking increases TTFB, which directly affects FCP and LCP metrics.

performanceNext.js

Misuse of 'any' type disables type safety entirely

6

Using 'any' in TypeScript bypasses all type checking, leaving developers vulnerable to runtime errors that should have been caught at compile time. This common anti-pattern defeats the purpose of using TypeScript for type safety.

compatibilityTypeScript

Docker volume permission mismatches (UID/GID)

6

File ownership mismatches occur when mounting volumes, causing "Permission Denied" errors. Requires manual UID/GID matching or SELinux context configuration.

configDocker

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

Steep Learning Curve for Docker Adoption

6

Developers transitioning from other infrastructure approaches find Docker difficult to master despite initial ease of use. The steep learning curve is compounded by Docker extensions and additional tools that increase platform complexity, and rapid updates that make it hard to maintain proficiency.

dxDocker

PID1 Signal Semantics and Zombie Process Management

6

Docker inherits UNIX process management design issues where special init processes must be run to handle zombie process reaping. The PID1 signal semantics differ from other processes, causing compatibility problems with applications that don't account for these differences, though this can be mitigated with the --init flag.

compatibilityDocker

Time estimation across development workflows

6

Estimating task duration is the most consistent pain point across all developer roles (31% of IT professionals, 42% of experienced developers, 49% of decision-makers). This affects sprint planning and project delivery prediction.

dx

Debugging difficult due to framework internals opacity

6

Error handling and debugging in Next.js often leads developers into opaque framework internals, making it difficult to understand and resolve issues. The 'black box' nature of the framework complicates troubleshooting.

debuggingNext.js

Missing Dynamic Imports Lead to Oversized Initial Bundle

6

Without using next/dynamic, components that aren't needed on initial page load (like modals) get shipped in the main bundle, increasing bundle size and harming LCP, FCP, and INP.

performanceNext.jsReact

Pull request review bottlenecks

6

Pull request review is flagged as a top workflow blocker (25% of developers), slowing team coordination and delaying merges. No structured tooling has effectively reduced this friction point.

dxGitGitHub

Slow test execution within Docker containers

6

Running tests from within Docker containers takes excruciatingly long to complete, adding significant overhead to the development and testing workflow.

performanceDocker

Pod misconfiguration and affinity rule errors

6

Misconfigured Kubernetes affinity rules cause Pods to schedule on incorrect Nodes or fail to schedule at all. Affinity configurations support complex behavior but are easy to misconfigure with contradictory rules or impossible selectors.

configKubernetes

Test failures from broken dependencies overshadow assertion errors

6

Unit tests fail during setup (broken dependencies, missing object properties) rather than at assertions. PyTest cannot run tests after dependency refactoring, delaying detection of actual logic bugs.

testingPythonpytest

Non-local development environment complexity

6

64% of developers now use non-local cloud environments as primary setup, but this introduces coordination and debugging challenges that weren't present in local-only workflows, requiring new tooling and practices.

dxDocker