Pains

726 pains collected

Severity:

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

Channel panic behavior and missing operations create footguns

7

Sending to a closed channel panics instead of returning an error or boolean. Channels also lack common blocking queue operations like peeking or fetching multiple items. Producers blocked on a closed channel panic, and improper usage easily leaks goroutines.

languageGo

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

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

Go instrumentation and observability requires significant manual effort

7

Setting up instrumentation in Go is painful and time-consuming, requiring 6-8 months of effort. Unlike Java or Python where OpenTelemetry works out-of-the-box, Go requires significant manual boilerplate and careful context propagation.

monitoringGoOpenTelemetry

Dependency management and go get don't support version pinning at scale

7

Go's go get and package structure don't support pinning dependencies to different versions, making reproducible builds and dependency management frustrating for projects with many dependencies. This is a critical gap for a language geared toward large-scale projects.

dependencyGo

Go lacks modern language features like generics, enums, and pattern matching

7

28% of developers want language features missing from Go that are available in other languages. Common requests include proper enums, union types, sum types, pattern matching, and nil pointer safety. Existing generics are criticized as half-baked.

compatibilityGo

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

Complex state logistics in CI/CD automation pipelines

7

Automation pipelines and scripting struggle to handle stateful resource management and state logistics across multiple code paths, despite being critical for continuous integration.

deployTerraformIaCCI/CD

GitHub Actions complexity leads to unmaintainable CI/CD spaghetti code

7

GitHub Actions encourages poor practices because common tasks (e.g., sending Slack messages) have convoluted official solutions. Developers end up hand-rolling scripts, creating an undocumented black box system that becomes unmaintainable at scale without external tooling like NX.

dxGitHub Actions

Over 50% of users experience state-related issues

7

A HashiCorp survey revealed that more than half of Terraform users encounter state-related problems, indicating widespread technical complexity and inadequate state management solutions.

otherTerraformIaC

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 control plane reliability and infrastructure issues

7

GitHub Actions suffers from recurring control plane problems including broker/backend message relay failures, hung logs, unexplained outages, and unsafe default behaviors (e.g., safe_sleep). These are long-standing issues that undermine trust in CI/CD reliability.

deployGitHub Actions

Difficulty incorporating existing infrastructure into Terraform

7

Terraform users struggle to bring existing infrastructure stacks under management because Terraform cannot automatically incorporate them into its state without manual intervention.

onboardingTerraformIaC

Error handling patterns are verbose and outdated

7

Go's repetitive if err != nil pattern is seen as verbose boilerplate compared to modern error handling in Rust and TypeScript. Developers report fatigue and decreased productivity in large codebases, and 28% of survey respondents want language features for better error handling.

dxGo

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

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

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

Legacy application compatibility during migration

7

Migrating legacy applications to AWS can fail due to outdated dependencies and incompatible configurations. Requires thorough assessment and code refactoring.

migrationAWS

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

Query complexity and performance degradation

7

GraphQL queries can become increasingly complex as projects grow, with deeply nested queries and over-fetching of fields leading to poor performance, extensive database joins, and slow execution times. Query complexity assessment is difficult and clients can crater performance without guardrails.

performanceGraphQL

Validation and testing capabilities are immature

7

Terraform lacks a robust, built-in testing framework for HCL. Unit testing is difficult and integration testing (spinning up real infrastructure) is slow and expensive. Teams resort to embedding validation scripts or hacks, leading to accidental infrastructure drifts reaching production.

testingTerraform

Cloud API rate limits and eventual consistency issues during large applies

7

Large Terraform applies trigger API throttling (429 errors) when hitting per-account or per-region cloud provider limits. Additionally, eventually-consistent cloud services may not reflect changes immediately, causing subsequent API calls to fail or return stale data.

networkingTerraformAWScloud providers

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
15678931