Pains

726 pains collected

Severity:

AWS VPC and subnet configuration is confusing and restrictive

5

AWS VPC networking topology is confusing, with non-intuitive constraints like subnets being restricted to single availability zones ('one subnet equals one availability zone'). This creates gotchas when designing multi-AZ deployments.

configAWS VPCAWS

AWS cost optimization tooling is reactive and lagging

5

AWS cost management tools (Trusted Advisor, Cost Explorer) provide only historical analysis and recommendations, not proactive guidance. They lag real-time spending and cannot predict whether current costs will match forecasts, making it difficult to catch cost overruns early.

monitoringAWSAWS Trusted Advisor

AWS NAT Gateway pricing model is heavy-handed and inconsistent with cloud elasticity promise

5

NAT Gateway pricing is inconsistent with cloud elasticity promises—developers are charged for provisioning NAT Gateways even when not using them heavily, creating unexpected cost surprises and misalignment between pay-as-you-go expectations and actual billing.

configAWSAWS NAT Gateway

Fragmented console experience across multiple services

5

Deploying an app requires managing resources scattered across different AWS console sections (S3, CloudFront, Route 53, EC2/Fargate/Lambda+API Gateway, RDS/DynamoDB, billing alarms). These services don't integrate well out-of-the-box, forcing context switching and manual coordination.

dxAWSS3CloudFront+7

Gossip protocol introduces higher failover latency than consensus algorithms

5

Redis uses a gossip protocol and majority voting for failure detection instead of formal consensus algorithms like Raft or Paxos, reducing implementation complexity but increasing latency during failover operations.

performanceRedis

AWS feature rollout is unpredictable and not customer-driven

5

AWS does not communicate when services will be ready or whether specific requirements will be supported. Features evolve unpredictably, and if AWS doesn't add needed functionality within required timeframes, developers must compose workaround services.

ecosystemAWS

Difficulty navigating complex foreign key relationships

5

Developers struggle to navigate database schemas with many foreign keys, jumping between related tables creates confusion and slows development speed even though foreign keys improve database architecture and performance.

dxPostgreSQL

Only receiving first validation error slows debugging cycles

5

PostgreSQL validation returns only the first error per record, forcing developers to iterate through multiple correction cycles to resolve all data integrity issues. This extends debugging workflows substantially.

dxPostgreSQL

Complex decision-making between specialized PostgreSQL extensions

5

Developers must make complex architectural decisions about which PostgreSQL extensions to use. For example, PostGIS for geospatial needs and pgvector for ML/embedding use cases are "killer apps," but selecting and integrating specialized extensions requires significant expertise.

architecturePostgreSQLPostGISpgvector

Table Bloat from Lack of Regular VACUUM

5

Failing to run VACUUM regularly can lead to bloated tables and degraded performance. Without VACUUM, PostgreSQL cannot reclaim space from deleted rows, accumulating dead tuples that consume disk space and slow down query performance over time.

maintenancePostgreSQL

PostgreSQL configuration and management are overly complex with many non-obvious settings

5

PostgreSQL requires extensive tuning across memory management, vacuum, background writer, write-ahead log, and free-space map settings. Configuration files are long with many unnecessary options for typical users. Default logging is unhelpful for new users, and there is no built-in out-of-band monitoring to diagnose startup failures or query issues without manually launching backends.

configPostgreSQL

Difficulty managing missing primary keys at scale

5

Managing tables without primary keys presents challenges that scale poorly. No decent solution exists for identifying and managing missing primary keys in large-scale PostgreSQL deployments.

architecturePostgreSQL

Provider configuration repetition and manual management of duplicated code

5

Terraform requires manual, repetitive copy-paste of provider configuration across multiple modules and environments. This duplication increases maintenance burden and introduces errors when updating provider settings.

dxTerraformproviders

HCL syntax is awkward and creates steep onboarding curve

5

The Terraform configuration language (HCL) is unintuitive compared to standard programming languages. Concepts like conditional logic, looping with for_each, and mapping collections are unnecessarily cumbersome. Few developers have deep Terraform experience, slowing team onboarding.

dxTerraformHCL

Cryptic error messages and poor documentation

5

Terraform error messages are often baffling, especially with complex modules or provider bugs. Documentation quality varies widely and lacks sufficient detail. Error context is insufficient for troubleshooting, making debugging slow and frustrating.

docsTerraform

Terraform feels deceptively simple but hides deep complexity in real-world usage

5

Initial Terraform tasks (provisioning a bucket) appear simple, but complexity emerges across backends, providers, variables, modules, environments, workspaces, and dependency management. Understanding what code actually does in production requires deep system knowledge.

dxTerraform

Monolithic file structures impede navigation and collaboration

5

Cramming numerous resources, data sources, and variables into single .tf files becomes increasingly difficult to navigate, troubleshoot, and collaborate on as infrastructure expands, slowing down team productivity.

dxTerraform

Shallow merge() function prevents nested configuration composition

5

Terraform's merge() function only performs shallow merging, not deep merging of nested maps and objects. This prevents clean composition of default configurations with user-supplied overrides and makes merging multi-level data structures awkward.

dxTerraformHCL

Long-lived branches in Terraform repos violate infrastructure best practices

5

Unlike application code, infrastructure can only have one version deployed at a time. Keeping multiple long-lived branches in a Terraform repository is not common practice, limiting collaboration models and creating merge complexity.

dxTerraform

WebAssembly support is incomplete

5

Go's WebAssembly (WASM) support remains half-baked compared to Rust and TypeScript, which dominate in the WASM development arena.

compatibilityGoWebAssembly

Insufficient enterprise support for Redis Community Edition

5

Redis Community Edition lacks enterprise-level support and advanced features. Organizations struggle to address performance bottlenecks, troubleshoot issues, or receive critical security updates without paid support.

ecosystemRedis

Difficulty identifying trustworthy and reliable third-party modules

5

26% of developers report difficulty finding trustworthy Go modules. Developers lack reliable quality signals, maintenance indicators, and usage context to evaluate third-party modules.

dependencyGo

Cannot extend types from other packages, requires wrapping boilerplate

5

Go doesn't allow adding methods to types from different or standard library packages. Instead, developers must create wrapper types, resulting in additional boilerplate and code that is harder to understand and maintain.

languageGo

Python-centric AI ecosystem documentation makes Go adoption harder

5

Most documented paths for getting started with AI-powered applications are Python-centric, causing organizations to start in Python before migrating to Go. This creates friction in the adoption of Go for production AI workloads.

docsGoPythonAI agents