Pains
2403 pains collected
Separation of concerns violated by mixing styles with markup
3Tailwind mixes CSS styling concerns directly into HTML markup, violating traditional separation of concerns principles and resulting in code that looks like inline styles, which many developers find aesthetically unpleasant.
TypeScript encourages named exports over default exports, hindering SOLID design
3TypeScript's tooling and community practices push developers toward named exports, which contradicts SOLID principles by increasing coupling and forcing knowledge of internal identifiers. This design pressure creates poor module encapsulation and makes refactoring harder, not easier.
Inadequate naming conventions and semantic CSS decision paralysis
3Plain CSS requires developers to make consistent naming decisions (e.g., .btn vs .button, .card-header vs .header-card), creating maintenance burden and consistency challenges across projects and teams.
Duplicate content management and canonical tags
3Duplicate content harms SEO performance, especially when content management systems generate multiple URLs for the same content. Developers must use canonical tags and 301 redirects to manage duplicates.
Speed of CSS language evolution outpaces developer adoption
3CSS is evolving rapidly with new features introduced constantly, making it difficult for developers to keep up with learning curve and adoption timelines.
Variable scope misunderstandings causing bugs
3Unfamiliarity with PHP's variable scope rules leads to bugs where variables are not accessible in expected contexts. Developers struggle to understand function scope, global scope, and class scope, causing unpredictable behavior.
AI-generated CSS produces generic, homogenized designs
3AI-assisted CSS generation tools produce generic 'AI slop' outputs lacking creative spark, potentially homogenizing the web and reducing design quality and uniqueness.
Code organization and semantic structure maintenance
3HTML code can easily become disorganized with numerous divs and spans, making it difficult to maintain, especially in larger projects. Developers struggle to keep code clean while using semantic HTML elements properly.
Confusing UI with unclear terminology and unnecessary controls
3Claude Code's VS Code extension (and similar tools like Copilot) have cluttered UIs with jargon that confuses developers unfamiliar with AI tooling ('agent mode'), unnecessary buttons (microphone icons), and unclear interaction patterns.
API clients don't natively support asynchronous communication
3Sentry API clients lack native asynchronous communication support. Custom implementation required. Additionally, filtering by fingerprints is not possible despite fingerprint tracking being available.
Prompt caching feature underutilized by developers
3Many developers overlook prompt caching capabilities, which can reduce input costs by up to 90% for repetitive workflows, resulting in unnecessary API spend.
Limited statistics available via API for error rate analysis
3API provides limited statistics for error rate analysis. More granular error rate metrics would be helpful. Limited programmatic access to metrics compared to competitor offerings.
Overusing MongoDB transactions without real need
3Developers often use MongoDB multi-document transactions for single-document updates, which are already atomic. This adds latency and resource overhead unnecessarily, as atomic operators are sufficient for single-document operations.
Limited availability of async-proficient Python developers
3Python developers comfortable with async programming and the async paradigm are fewer than those experienced with traditional sync frameworks. This hiring dynamic shift makes it harder to staff FastAPI projects, as async expertise is still relatively niche.
Smaller ecosystem and community compared to Webpack
3Although growing quickly, Vite's ecosystem is newer and smaller than Webpack's, potentially limiting available plugins, integrations, and community resources.
Nginx configuration changes have speculative performance gains without quantification
3Performance optimizations in nginx configurations (like static asset prefix handling) are often implemented without actual benchmarking or measurement. The actual performance impact is unknown, making it difficult to justify configuration complexity or understand whether changes provide meaningful benefits.
Azure payment method restrictions and account management
3Azure enforces arbitrary payment method restrictions (e.g., requiring bank transfer instead of card for new subscriptions) even across accounts with existing high-volume card payments, creating administrative friction.
Operator Overloading Rules Are Arbitrary and Irregular
3C++ operator overloading rules are arbitrary, irregular, and clumsy. Examples include asymmetric pre/postincrement operator definitions and inconsistent nothrow-new behavior, making the feature unpredictable and error-prone.
Developers running outdated Git versions miss features and bug fixes
3Git continues to evolve with new features and improvements, but developers neglect to regularly update. Running outdated versions means missing new functionalities, bug fixes, and performance improvements.
Misuse of bitwise and arithmetic operators
3Bitwise operators (&, |, ^) are frequently misunderstood and misused in conditions and loops (accounting for ~5% of programming errors). Arithmetic operations like division by zero also cause crashes when edge cases are not validated (affecting ~25% of developers).
Lack of native tuple support creates library proliferation
3Java does not natively support tuples, forcing developers to import and manage numerous third-party implementations. This creates maintenance challenges and code fragmentation.
Hard-to-remember CSS syntax
2CSS has many features with complex or counter-intuitive syntax that developers struggle to remember, increasing cognitive load and requiring frequent reference checks.
Missing PHP opening and closing tags in code
2New developers frequently forget to include opening and closing PHP tags (<?php ?>) at the beginning and end of their code, resulting in parsing failures and code not executing as expected.
Reserved keyword usage as variable names
2Using PHP reserved keywords (class, break, function, etc.) as variable names results in conflicts and unexpected behavior. This common mistake by new developers breaks code logic.