Pains

2403 pains collected

Category:
Tech:
Severity:

Python performance limitations due to lack of compilation

6

Python is slow because it is not compiled, making it unsuitable for performance-critical applications compared to compiled languages.

performancePython

Terminal-first workflow required for basic tasks

6

Linux forces users to open a terminal for routine operations like installing software, fixing dependencies, and setting up drivers. This creates poor UX even for developers who prefer GUI-based workflows.

dxLinux

Migration conflicts in parallel development workflows

6

When two developers create migrations on separate branches, merging creates unresolved conflicts in migration history. Manual intervention is required to fix migration order, usually by resetting and re-running migrations against the development database.

migrationPrisma

GPU Acceleration Not Seamless in Java for AI Workloads

6

GPU acceleration support in Java requires extra setup and tuning compared to Python, and forcing GPU allocation per application instance (even when idle) creates scaling and maintenance challenges with higher infrastructure costs and lower resource efficiency.

performanceJavaGPUCUDA

Outdated package versions and insufficient repository updates

6

Certain Linux distributions maintain outdated package versions in their repositories and don't update frequently enough. Alternative packaging formats attempted as solutions (like Flatpak forks) lack functionality and provide minimal improvement.

dependencyLinuxFlatpak

Linux desktop display protocol fragmentation (X11 vs Wayland)

6

Developers must support multiple display protocols—X11 and Wayland—as Linux transitions from X11 to Wayland. Not all distributions have fully adopted Wayland, and XWayland compatibility is inconsistent, causing software to run less smoothly than on X11.

compatibilityX11WaylandXWayland

Silent attrition from accumulated friction despite successful language learning

6

Developers successfully learn Rust but quietly abandon it due to accumulated friction and productivity concerns that compound over time, a pattern not captured by traditional learning curve narratives.

dxRust

Debugging and performance optimization are time-consuming and difficult

6

Identifying and resolving bugs and performance issues in Swift is time-consuming and requires deep understanding of Swift's internals. The language's strict type system and memory management model make optimization non-obvious.

performanceSwift

Limited third-party library ecosystem compared to mature languages

6

Swift has significantly fewer third-party libraries and frameworks compared to Java, Python, or other mature languages. This makes it difficult to quickly build complex features without reinventing the wheel.

ecosystemSwift

Linux debugger (gdb) complexity and poor UI compared to Visual Studio

6

GDB and its frontends are significantly less user-friendly than Visual Studio's debugger. They have a steep learning curve, and discovering and configuring advanced features (e.g., build-id directories, substitute-path) requires extensive effort.

testinggdb

Crate splitting required for reasonable compile times fragmentizes code organization

6

Developers must split projects into many small crates to achieve reasonable compile times, since crates are compiled as single units and circular dependencies are allowed. This artificial fragmentation complicates project structure despite most code lacking true circular dependencies.

buildRust

Poor AWS documentation quality and accessibility

6

AWS documentation is difficult to navigate, unclear, and poorly organized. It reads as if written in isolation without practical developer context. The SSO/IAM Identity Center URL is so hard to remember developers build custom redirectors. Documentation doesn't effectively explain relationships between services or provide clear decision trees.

docsAWS

Rapid language evolution creates compatibility and versioning uncertainty

6

Swift's frequent updates and changes create doubt about code compatibility with future versions. Developers worry whether code written today will compile tomorrow, and managing versioning across teams and dependencies is challenging.

compatibilitySwift

TypeScript compiler rewrite creates breaking changes and toolchain friction

6

Microsoft is rewriting the TypeScript compiler in Go with breaking changes planned for TypeScript 7, plus new Node.js native TypeScript support that only strips types without type-checking. This creates ecosystem fragmentation where tools have different capabilities and developers must understand multiple execution paths.

migrationTypeScriptNode.jsGo

SwiftUI Preview doesn't work with UIKit legacy projects

6

The Preview feature in SwiftUI requires building the entire project and fails with compatibility errors when UIKit is present in the codebase. This prevents developers from using Previews to speed up development in mixed UIKit/SwiftUI projects.

compatibilitySwiftUIUIKitXcode

Multithreaded communication primitives are safe but inefficient

6

Sync/Send semantics, Mutex, and Arc provide memory safety for concurrent code but have poor CPU cache behavior and performance characteristics, undermining Rust's performance-first positioning for intensive multithreaded applications.

performanceRust

CloudFormation lacks cross-platform compatibility

6

CloudFormation is AWS-specific and not portable to other cloud providers, creating vendor lock-in. Developers prefer third-party tools like Terraform and Ansible for portability.

compatibilityCloudFormationTerraformAnsible

Complex IAM and user management (root vs IAM confusion)

6

AWS's user and permission management system is convoluted, particularly the distinction between root accounts and IAM accounts. Adding users and accounts to organizations is non-intuitive, making it harder than competing platforms like GCP.

configAWS IAM

Insufficient first-class support for mobile app development

6

Rust doesn't offer out-of-the-box, first-class support for iOS and Android app development, limiting adoption for mobile-focused teams and forcing reliance on workarounds or alternative languages.

ecosystemRustiOSAndroid

Limited support for stored procedures and triggers

6

SQLite lacks support for stored procedures and has only basic trigger functionality, making it difficult to implement complex business logic and data manipulation operations on the database server side. This limits extensibility for enterprise use cases.

architectureSQLite

Scalability Limitations for Large-Scale Projects

6

Vue.js lacks scalability and is not suitable for large-scale enterprise projects due to its narrow community, lack of corporate backing, and limited support infrastructure compared to React or Angular.

architectureVue.js

React Ecosystem Fragmentation and Too Many Choices

6

Developers face overwhelming fragmentation across state management (Redux, Zustand, Context), routing (React Router, etc.), server-side rendering (Next.js, alternatives), and other core concerns. 11% of developers specifically cited ecosystem complexity as a pain point, describing it as navigating competing solutions and rapidly evolving metaframeworks.

ecosystemReactReduxZustand+3

Immutability requirement breaks reactive updates

6

Svelte requires developers to reassign arrays/objects rather than mutate them in-place to trigger reactivity. In-place mutations silently fail to update the UI, creating a non-obvious reactivity trap that violates typical JavaScript patterns.

dxSvelte

Insufficient Security Implementation Knowledge

6

Developers struggle to understand and properly implement security measures (23% reported challenge in Q1 2021). There is uncertainty about best practices and what measures are actually necessary for different contexts.

security