Pains
2403 pains collected
50% of developers neglect testing in Go projects
5Half of Go developers fail to write adequate unit tests, despite Go's testing package being available. This widespread neglect of testing reduces code reliability and maintainability.
Linux distribution short-term support cycles
5Many Linux distributions do not provide long-term support (LTS), leaving users with short support windows (e.g., one year after release). This instability between releases discourages adoption for production use.
Notification concurrency errors persist despite main-thread guarantees
5Developers receive concurrency-related errors when accessing main actor APIs through notifications, even when those notifications are guaranteed to post on the main thread. This creates confusing false positives that require workarounds.
Package manager allows only sequential installations with lock file
5APT uses a global lock file that prevents parallel package installations from multiple terminals, creating a serious usability limitation when attempting concurrent package management operations.
Swift's strict type system creates learning curve friction
5Developers transitioning from Objective-C find Swift's compile-time type enforcement restrictive and frustrating initially, as it prevents patterns they're accustomed to (like dynamic typing and loose type checking). The strict requirements feel like they 'hold you back' during the onboarding phase.
Improper optional handling and force unwrapping patterns
5Developers frequently mishandle Swift's optional type system, either overusing force unwrapping (which crashes on nil) or creating complex optional chains. The Codable protocol adds messy try/catch syntax that's error-prone and difficult to debug when misused.
Fragmentation in PHP ecosystem with numerous competing libraries and frameworks
5The PHP ecosystem is vast and fragmented with many competing libraries, frameworks, and tools, making it difficult for developers to choose the right tools and maintain consistent patterns.
Code style preferences not aligned with model training
5Claude Code's generated code often diverges from developer style preferences, preferring complex language constructs (like unnecessary subprocess spawning) over simple function calls. Developers must maintain external style guides and repeatedly re-prompt the model to enforce preferences.
Linux distribution fragmentation and inconsistent user experiences
5The proliferation of Linux distributions with different goals, release cycles, and designs creates fragmentation. This leads to inconsistent user experiences, varying documentation quality, and confusion for users navigating different systems and compatibility solutions.
Swift Interoperability with Objective-C and Type System Strictness
5Swift's interactions with Objective-C and strict compiler rules make it difficult to work with legacy code. Type casting issues, particularly converting between String and NSString/AnyObject types, and constant unwrapping requirements complicate development.
Limited Revenue-Sharing and Monetization Opportunities for ISVs
5Stripe lacks built-in revenue-sharing programs and flexible monetization options for integrated software vendors, limiting their ability to capitalize on transactions and generate recurring revenue from payment processing.
Code Synchronization Between Local and Remote Development Environments
5Stripe's architecture of keeping code on developer laptops while execution happens in the cloud requires complex synchronization. This makes it harder to run code-generation tools, linters, and automated migration tools that need to act on code, creating awkward and occasionally unreliable workflows.
Type system complexity and API validation overhead
5Swift's type system requires developers to define validators for every external API, library, and database input. This is tedious and unique among languages the developers have used, yet the type system isn't sufficiently powerful to justify the overhead. Issues often stem from external libraries outside the developer's control.
Platform Complexity Overwhelming for Non-Technical Users
5While developers appreciate Stripe's flexibility, the platform's complexity overwhelms non-technical users and business owners without technical backgrounds. No-code options like Payment Links and Checkout are limited in customization and scalability.
Compiler errors do not catch certain runtime errors
5Swift's compiler fails to catch certain error conditions, leading to crashes or unexpected behavior at runtime. Error handling is incomplete, leaving edge cases undetected.
Lack of abstract classes complicates inheritance patterns
5Swift lacks abstract classes, requiring developers to decompose into concrete base classes and protocols. This leads to complicated generic signatures, requires significant experimentation, and can cause compiler crashes.
Difficulty creating design systems in SwiftUI
5SwiftUI lacks a natural, straightforward mechanism for creating reusable design systems. Developers must choose between adding modifiers to every component, creating artificial extensions, or scattering style constants throughout the codebase—none of which are clean solutions.
No standard library for GUI development, poor third-party solutions
5Go lacks a standard library for GUI development. Third-party solutions exist but lack proper integration and comprehensive documentation, hindering cross-platform graphical application development.
Expensive error wrapping and stack trace overhead
5Error wrapping up the call stack and garbage collection of intermediate objects is nearly as expensive as try-catch, yet requires manual coding. Stack traces provide redundant information most of the time and lack a mechanism to toggle them.
Incomplete cross-platform support limits market applicability
5While Swift supports Apple platforms, Linux, and Windows, it was originally designed for iOS and remains best for native iOS. Cross-platform development lags behind React Native, Xamarin, and Flutter.
Symbol-based visibility causes variable shadowing and naming conflicts
5Go's reliance on symbol case for visibility (uppercase=public, lowercase=private) creates unintended variable shadowing. Developers cannot use natural names like 'user' for a user variable because it shadows the user type, forcing awkward one-letter naming conventions.
Python-centric AI ecosystem documentation makes Go adoption harder
5Most 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.
Error handling complexity with thrown exceptions as control flow
5Using thrown errors as stand-ins for expected error handling makes types non-exhaustive and unclear about what can go wrong. Try-catch blocks are scattered throughout implementations and not all thrown errors are caught correctly, leading to hard-to-follow error management patterns.
Unorganized database schema structure due to single public schema
5All tables, views, and functions default to the `public` schema in Supabase Studio, leading to poor organization and difficulty managing data as projects grow. Lack of logical separation for different data types (user data, billing, admin-only) creates maintenance challenges.