Pains
726 pains collected
N+1 Query Problem and DataLoader Usage
7Developers frequently forget to batch queries in GraphQL, resulting in N+1 query problems that cause slow performance and unnecessary database strain. Solutions like DataLoader are required to optimize query execution.
Schema Stitching and Composition Complexity
7Combining multiple schemas from different data sources into a single coherent schema is complex and time-consuming. Developers must carefully map data relationships and ensure schema consistency, especially in applications with many data sources.
Network latency and infrastructure constraints in enterprise environments
7In corporate production environments, database requests traverse multiple network hops through firewalls and antivirus software, causing severe latency issues. Developers lack control over database configuration and cannot install extensions like PGVector, PG Cron, or PG Crypto, and often don't know which region their database is deployed in.
Long onboarding time for enterprises hiring Rust developers
7When enterprises hire large teams of backend engineers, the cost and time to onboard them into Rust is substantial, with most teams expecting months before new hires can contribute meaningfully. This creates significant friction for rapid team scaling.
Query plan instability causes unpredictable performance degradation
7PostgreSQL query execution plans can become unstable, causing previously performing queries to suddenly degrade. Developers must use advanced tools like Query Plan Management (QPM) and pg_hint_plan to ensure consistent query performance.
Over-Fetching and Under-Fetching Data
7Developers struggle to balance data retrieval efficiency. Requesting excessive data degrades performance, while requesting too little data causes multiple round trips to the server, impacting application speed and responsiveness.
No built-in monitoring and logging observability
7Standard 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.
Implicit dependencies and dependency graph resolution failures
7Terraform relies on explicit references to infer resource dependencies, but real-world dependencies are often implicit (side effects, plain string IDs). When Terraform cannot see these relationships, it fails to determine correct resource ordering, causing apply failures or resource conflicts.
Horizontal scalability limitations at high load
7PostgreSQL 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.
Slow linking phase in compilation
7The linking phase is performed from scratch every time and is a major bottleneck in the build process. Since Rust delegates linking to external system linkers, performance improvements are limited, though the Rust team is attempting to switch to faster linkers by default.
Ineffective caching due to query variability
7Traditional HTTP caching mechanisms struggle with GraphQL because each unique query variation is treated as a distinct request. Parameterized queries (e.g., different $userId values) create cache misses. Additionally, query permutations can be exploited to spam server memory with cache entries.
Complex configuration and monitoring required for replication and high availability
7Managing PostgreSQL replication requires intricate configuration and careful monitoring to prevent data loss or corruption. Achieving high availability demands automated failover mechanisms, load balancing between primary and standby servers, and selecting the appropriate replication strategy.
Image bloat and unused dependencies increasing attack surface
7In-use vulnerabilities dropped below 6% in 2025, but image bloat has quintupled. Heavier, less-optimized container images increase attack surfaces despite fewer known CVEs, creating a security paradox.
Inefficient write architecture compared to other databases
7PostgreSQL has an inefficient architecture for write operations compared to alternatives like MySQL. This limitation was significant enough for organizations like Uber to switch database systems.
GraphQL federation complexity and security challenges
7Implementing schema federation or stitching across multiple services is complex, slow, and difficult to secure. Federation introduces fragility and inter-domain dependencies that are hard to manage and debug at scale.
Docker Desktop Licensing Model and Commercial Cost
7Docker Desktop is no longer free for commercial use in larger organizations. Paid subscriptions (Pro, Team, or Business) are mandatory for organizations exceeding either of two thresholds, forcing significant OPEX increases. This licensing shift has driven developer evaluation of alternative solutions like Podman and Finch.
Unpredictable behavior from uncontrolled state modifications
7When 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.
Read-heavy workload performance without proper replica/caching architecture
7Read-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.
Write-heavy workload bottlenecks without proper indexing and partitioning
7Write-heavy workloads with financial transactions and real-time updates require careful indexing and partitioning strategies to avoid slow inserts and locking issues. Without these, performance suffers significantly.
Operational toil and fragmented incident response workflows
7Manual deployments, inconsistent workflows, and fragmented observability across tools increase on-call load and MTTR. Engineers jump between tools during incidents instead of fixing issues, driving burnout and slower delivery due to constant firefighting.
Default Security Configuration Weaknesses
7PostgreSQL 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.
PostgreSQL failover on Kubernetes requires additional tooling expertise
7While Kubernetes can restart failed pods, it doesn't provide PostgreSQL-specific failover capabilities needed for production. Teams must implement tools like Patroni for proper leader election and failover, adding complexity and requiring dual expertise in both PostgreSQL and Kubernetes.
Query complexity and performance degradation
7GraphQL 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.
Terraform state drift from manual cloud console changes
7Teams circumvent Terraform workflows by making changes directly in cloud provider consoles, causing state files to become out of sync with actual infrastructure. This drift prevents accurate planning and can lead to unexpected behavior during subsequent Terraform operations.