Pains

204 pains collected

Severity:

Vendor lock-in with Vercel makes migration to other hosting providers difficult

8

Features work seamlessly on Vercel but become problematic when deployed elsewhere, creating tight coupling to Vercel's infrastructure. Some developers have inherited projects so tightly coupled to Vercel that migrating to other hosting providers like AWS proved nearly impossible, sometimes requiring complete rewrites.

compatibilityNext.jsVercel

Multi-cluster visibility and context gaps

8

Production Kubernetes deployments span multiple clusters across clouds, regions, and environments without centralized visibility. When incidents occur, teams lack context on what broke and where, leading to slower incident detection, configuration drift, and higher outage risk.

monitoringKubernetes

CI/CD pipeline failures and environment discrepancies after upgrade

8

Existing CI/CD pipelines tuned for previous Next.js versions unexpectedly fail after upgrading to Next.js 16. Local development environments diverge from production servers, creating 'works on my machine' scenarios that are difficult to debug.

deployNext.js

N+1 query problem causes excessive database calls

8

Developers frequently fetch all list items then make separate database calls for each item's related data, resulting in exponential query multiplication (e.g., 21 queries instead of 2 for 20 blog posts with author data). This becomes catastrophic in production with large datasets.

performanceNext.js

Docker build reproducibility issues with dependency version changes

8

Docker builds pulling dependencies from the public internet during build time cannot guarantee reproducibility over time. Different versions of dependencies may be pulled on subsequent builds, and if exact versions are no longer available, Docker throws errors, blocking deployments.

buildDocker

Compilation failures without error reporting

8

The build toolchain completes compilation while silently omitting code without throwing errors. Developers see 'successful' builds that are actually missing critical bits, making debugging extremely difficult and leading to runtime failures.

buildNext.js

Lack of Built-In CSRF Protection in Next.js

8

Next.js does not include built-in Cross-Site Request Forgery protection, requiring developers to implement their own protection mechanisms or applications remain vulnerable to CSRF attacks.

securityNext.js

Over-privileged GitHub Actions workflows

8

99.8% of GitHub Actions workflows are over-privileged, meaning repositories grant excessive permissions that increase vulnerability to attacks. Secrets are scoped at repository or organization level, flowing broadly by default in reusable workflows without fine-grained controls to bind credentials to specific execution contexts.

securityGitHub Actions

Network policies not enforced by default

8

Kubernetes clusters lack default network policies, allowing unrestricted Pod-to-Pod communication. Pods without explicit NetworkPolicy objects have no networking restrictions, significantly increasing attack surface and enabling compromised containers to direct malicious traffic to sensitive workloads.

securityKubernetes

Third-party scripts block page rendering and cause severe performance impacts

8

Analytics, chat widgets, ads, and social media embeds loaded synchronously in the document head block entire page rendering, causing blank screens for users. Slow analytics scripts add 2-3 seconds to load time; problematic chat widgets have caused apps to become unusable with 8-second load times.

performanceNext.js

Runtime errors in large JavaScript backend systems due to lack of type enforcement

7

Pure JavaScript in large-scale backend systems allows functions to receive unexpected parameters without enforcement, leading to hidden bugs that are difficult to refactor safely. Consistency across large codebases with hundreds of thousands of lines becomes challenging without static typing.

compatibilityJavaScriptNode.js

Docker disk space exhaustion

7

Docker's /var/lib/docker directory fills up with unused images, volumes, and logs, causing "No Space Left on Device" errors. Manual cleanup is required.

storageDocker

Container entrypoint complexity and process termination

7

Complex tasks hidden in single entrypoints cause containers to terminate unexpectedly. If the entrypoint process dies, the entire container fails, making debugging difficult and requiring workarounds.

dxDocker

Restrictive Type Checking Blocks Valid Language Patterns

7

TypeScript's type system prevents developers from using certain valid JavaScript patterns. For example, nested function definitions within objects don't work properly, forcing developers to use less natural workarounds like the builder pattern.

compatibilityTypeScript

Job market oversaturation and salary stagnation for Python developers

7

Python's accessibility flooded the market with junior developers, creating intense competition for entry-level roles. Companies migrate to Go or Kotlin for performance/type safety, and AI startups prefer Julia/Rust, leaving Python devs maintaining legacy models.

ecosystemPythonGoKotlin+3

Competition from faster emerging languages (Mojo, Julia, Zig, Rust)

7

Mojo offers Python interoperability with C-level speed; Julia dominates scientific computing; Rust leads systems programming; Zig and WebAssembly-centric languages dominate edge/IoT. Python loses use-case ownership across domains.

ecosystemPythonMojoJulia+3

Unpredictable behavior from uncontrolled state modifications

7

When application state can be modified from multiple places without clear patterns, developers cannot easily reason about code execution. Bugs manifest in unexpected components, making debugging extremely difficult and technical debt accumulates through duplicated and stale state.

architectureTypeScript

Docker Compose security audit and third-party file inspection

7

Third-party Docker Compose files often contain security issues like unnecessary port exposures that compromise systems. Developers must manually inspect every file, but no tooling provides automated security validation.

securityDocker

Supply-chain attacks and security audit burden on PyPI dependencies

7

Malicious packages exploiting pip vulnerabilities peaked in 2024. Companies mandate expensive audits and SBOM generation, with developers spending more time on compliance than coding. Python's dynamic typing complicates security reviews.

securityPythonPyPIpip

Docker socket access and privilege escalation risks

7

Docker runs as root by default and requires Unix domain socket access for communication. This creates privilege escalation risks and security considerations that developers must understand but are not well-documented.

securityDocker

No built-in monitoring and logging observability

7

Standard Kubernetes lacks native observability features for monitoring cluster utilization, application errors, and performance data. Teams must deploy additional observability stacks like Prometheus to gain visibility into spiking memory, Pod evictions, and container crashes.

monitoringKubernetesPrometheus

Skills shortage in Kubernetes and SRE expertise

7

Managing Kubernetes add-ons, cluster operations, and platform engineering requires cross-disciplinary talent (SRE, security, developers) that is in short supply. Teams struggle to staff and retain experienced Kubernetes operators and SREs, delaying critical work.

dxKubernetes

Corporate abandonment and open-source library maintenance burden

7

Key corporate backers (Google TensorFlow, Microsoft PyTorch) shifted to competing languages/frameworks. Maintainer burnout led to stalled updates (Django), abandoned libraries, and forced teams to maintain forks or rewrite codebases.

ecosystemPythonTensorFlowPyTorch+2

TypeScript compile-time safety provides no runtime protection

7

TypeScript's type checking guarantees internal correctness but cannot protect against untrusted external API inputs, backend response drift, corrupted local storage, malformed environment variables, or user-generated content. At scale, this gap between compile-time and runtime safety becomes critical.

securityTypeScript