Pains

726 pains collected

Severity:

Missing Redis connection failure handling and retry logic

7

Developers frequently fail to implement proper error handling and retry logic for Redis connection failures, leading to data loss, inconsistent application state, and cascading failures.

dxRedis

GitHub Actions pricing changes break enterprise budgets with short notice

7

GitHub suddenly introduced additional per-minute charges for GitHub Actions minutes in December, breaking established budgets across enterprise teams. No per-second billing option exists, and the announcement left no time for departments to adjust fiscal budgets, creating surprise costs mid-fiscal-year.

otherGitHub Actions

Slow debugging workflow and high friction in GitHub Actions UI

7

Debugging failed builds in GitHub Actions requires multiple page loads and clicks, each with significant loading spinners. Navigation is unreliable—the back button behaves unpredictably, forcing developers to memorize URLs or search browser history. The entire debugging experience is described as navigating bureaucratic forms.

debugGitHub Actions

CSS-in-JS Runtime Overhead Hurts Core Web Vitals

7

CSS-in-JS libraries like Styled Components run JavaScript in the browser to hash class names and inject styles dynamically, causing style recalculations on every injection. This significantly degrades LCP, FCP, and INP metrics.

performanceNext.jsStyled ComponentsReact

Migration complexity when converting large JavaScript codebases to TypeScript

7

Migrating large JavaScript projects to TypeScript requires careful planning and resources. Attempting 100% perfect types from day one causes delays, while the overhead of compilation time, build steps, and complex configurations frustrates teams transitioning from pure JavaScript.

migrationTypeScriptJavaScript

Caching keys without TTL causes unbounded memory growth

7

Storing cache keys without expiration causes indefinite accumulation over time, leading to unbounded memory growth, increased eviction pressure, and out-of-memory errors. Keys added without TTLs because "data never changes" persist even after assumptions change, causing unpredictable eviction behavior.

storageRedis

Horizontal scalability limitations at high load

7

PostgreSQL lacks native horizontal scalability features. When instance sizes become insufficient, teams experience downtime during scaling operations. Aurora vacuuming and scaling issues persist, and teams desire alternatives like CockroachDB that support true horizontal scaling without downtime.

architecturePostgreSQLAuroraCockroachDB

Redis single-threaded architecture limits multi-core scaling

7

Redis' single-threaded design cannot effectively utilize modern multi-core processors, requiring additional instances to scale horizontally. This increases hardware costs, operational complexity, and leaves CPU cores underutilized even on commodity servers.

performanceRedis

Middleware runs in restricted hybrid runtime with limited APIs

7

Next.js middleware executes in a hybrid runtime that supports only a restricted subset of Web APIs and Node.js, preventing direct database connections, file system access, and session management. This awkward middle ground doesn't align with common development patterns.

compatibilityNext.js

GitHub Actions security model is obscure with many pitfalls and exceptions

7

The security architecture contains too many edge cases and inconsistencies (e.g., not recommending self-hosted runners in public repos). This expanded attack surface makes it easy to introduce vulnerabilities inadvertently while setting up workflows.

securityGitHub Actions

AWS Cognito SSO implementation is buggy and frustrating

7

Setting up AWS Cognito for SSO is unreliable with multiple bugs and non-functional components. The integration experience is messy and frustrating, lacking stability and clarity.

authAWS Cognito

Create React App Sunset and Migration Pain

7

Create React App, used by most React developers, was sunset in February 2025, forcing migrations to alternative tooling. This creates significant disruption and requires developers to rebuild their setup and dependency chains, generating migration headaches.

migrationCreate React App

Redis Cluster management is complex and error-prone

7

Managing Redis Cluster at scale involves complex resharding, partition rebalancing, and data coordination. Online migrations and scaling require careful orchestration and are prone to errors, with automation still requiring multiple manual steps and risk of downtime or data inconsistencies.

configRedisRedis Cluster

Slow Rust compile times

7

Rust compilation is notably slower compared to other programming languages, creating friction in the development workflow and reducing developer productivity.

buildRustrustc

Direct Redis connections without proxy cause reconnect floods and failovers

7

When many clients connect directly to Redis instances without a proxy, network disruptions trigger reconnect floods that overwhelm the single-threaded Redis process, forcing cascading failovers and loss of availability.

networkingRedis

Library incompatibility issues with Next.js and Three.js

7

Integrating Three.js with Next.js creates compatibility issues that are difficult to resolve, breaking expected library functionality and causing significant frustration during development.

compatibilityNext.jsThree.js

AWS vendor lock-in and service discontinuation risk

7

AWS services can be discontinued or changed in breaking ways that force major application rewrites. Combined with deep vendor lock-in from using service-specific features, developers face long-term risk of forced refactoring or application unavailability.

compatibilityAWS

Provider versioning lock file inconsistency and reproducibility failures

7

Even with version constraints in code, if the .terraform.lock.hcl file is not committed and consistently used across environments, teams experience "works on my machine" drift where different environments use different provider versions despite identical configuration.

dependencyTerraformproviders

Uncontrolled Container Resource Consumption Causing Host Crashes

7

Docker containers lack explicit resource constraints by default and can consume all available CPU and memory, potentially causing cascading host crashes and resource contention. While workarounds exist using resource limit flags, the default permissive behavior poses significant operational risk.

securityDocker

Read-heavy workload performance without proper replica/caching architecture

7

Read-heavy workloads like reporting and analytics can severely degrade performance if read replicas and caching layers aren't properly configured. This requires upfront architectural planning that many teams delay.

performancePostgreSQL

Create React App Limitations and Eject Dilemma

7

Create React App presents a false choice: either stick 100% with the preset or completely eject and lose all updates. It lacks support for server-side rendering and static site generation, creating significant limitations for production applications. The eject mechanism is inflexible and unforgiving.

ecosystemCreate React App

Default Security Configuration Weaknesses

7

PostgreSQL default installations can allow passwordless logins ('Trust' method) if not managed, lack robust password policies, do not enable SSL/TLS encryption by default, and commonly grant unnecessary superuser privileges. Many vulnerabilities stem from misconfiguration and operational oversight rather than software flaws.

securityPostgreSQL

Inconsistent Data Structure Concurrency Model

7

Go's built-in data structures (maps, slices, arrays) are not thread-safe despite the language's strong concurrency support. Developers must manually implement synchronization using goroutines, channels, or the sync package, creating inconsistency in how concurrency is handled.

concurrencyGo

Schema migrations cause downtime due to exclusive locking on busy tables

7

Certain PostgreSQL schema changes (like adding NOT NULL UNIQUE columns or renaming columns) require exclusive locks that block all other queries. On busy tables, migrations can be delayed waiting for exclusive locks, causing production downtime. Constraint backfilling and backwards-incompatible changes require multi-step migration processes.

deployPostgreSQL