Products · Product
JavaScript
Raised as a usability problem by 473 people on Hacker News over 20 years (2007–2026), in 451 threads.
No issue was raised by at least 3 people in 3 threads this year.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
Every issue, all time, most people first
Conflicting tool configurations create a convoluted build setupUnreviewed
20072026- Too many confusing, overlapping build tools and module systems to understand2026-03-22
- Modern build tools are a Rube Goldberg machine that is painful when they break2025-12-12
- Configuring multiple dev tools so their rules don't conflict is very hard2023-01-11
Too much configuration needed to set up a front-end projectUnreviewed
20072026- Too many overlapping tools (yarn, npm, npx, gulp, webpack) feel confusing and overwhelming2025-06-02
- Tooling is complex and config formats keep changing, so returning projects is confusing2024-06-22
- Tooling is slow, buggy, and sometimes produces incorrect results2022-10-16
Scoping and 'this' are unintuitive to new developersUnreviewed
20072026- Pre-ES6 scoping forced ugly workarounds like that = this to be written2024-08-22
- Confusing scoping, 'this' behaviour and many object-creation styles hinder learners2021-12-17
- Dynamically scoped 'this' causes frequent bugs and confuses beginners learning functions2020-03-28
Loose equality rules cause bugs; must remember to avoid ==Unreviewed
20072026- Equality comparisons behave unintuitively, requiring complex lookup charts to predict results2024-06-17
- Loose equality is not transitive, which confuses people writing comparisons2021-04-01
- Loose equality is non-transitive, so results are confusing and hard to predict2021-03-31
Async function fails silently when no try/catch is usedUnreviewed
20072026- Async functions that never resolve fail silently, with no built-in notification2020-04-27
- Missing await makes promise failures silent, so bugs go unnoticed2018-07-26
- Async function failed silently when no try/catch was used2018-07-04
Fast-changing tools and tutorials make setup hard for beginnersUnreviewed
20072026- Official docs change drastically, leaving the user confused about which tool to use2024-10-10
- Hard to find which beginner tool to start with from a Google search2022-05-27
- Hard to tell which tool does the task; defaults not obvious, forcing manual reading of docs2022-05-27
Combined default and named import syntax confuses learnersUnreviewed
20072026- Mixing import and require caused hours of frustrating, painful debugging2023-09-08
- Simple imports need import assertions, import maps, and a server; hard to use without tooling2023-05-03
- Module and import behavior is so intricate it causes headaches and frustration2022-05-27
Cannot open JavaScript-driven links in a new tabUnreviewed
20072026- Can't open links in a new tab in some web apps2023-12-28
- Hijacked links can't be right-clicked to open in a new tab2022-03-01
- Links don't behave as expected because JavaScript replaces normal clicking and scrolling2020-12-09
Date API is hard to use, causing many bugsUnreviewed
20072026- Easy to misuse date strings, causing wrong calendar dates in browsers2026-03-11
- Date API is incomprehensible and painful to use, causing many bugs2025-07-12
- Date API is really difficult to work with for developers2025-01-21
Days spent configuring TypeScript projects with too many choicesUnreviewed
20072026- Spends days configuring TypeScript projects; too many choices and config to wade through2023-07-03
- TypeScript is very slow to type check even small projects2023-05-11
- Must manually set up linting, formatting, and TypeScript before the environment is usable2023-04-27
Newline-based semicolon rule is too complex to predictUnreviewed
20072026- Silently inserted semicolon after return makes function return undefined2025-04-07
- ASI exceptions around return make code with line breaks easy to get wrong2022-04-11
- Semicolon rules, multiple scoping schemes, 'new' and type coercion confuse learners2021-02-05
Type coercion results are unpredictable without memorising corner casesUnreviewed
20072026- Type coercion results are unpredictable without memorising arbitrary corner-case rules2025-07-19
- Implicit coercion causes surprising bugs and is baffling compared to other languages2024-10-21
- Hidden coercion rules and easy-to-miss extra equals cause bugs2021-12-25
Destructuring syntax reads backwards, more confusing than assignmentUnreviewed
20072026- Destructuring looks too similar to array literals, so code is slow to scan2018-12-27
- Nested destructuring is confusing to read and more verbose to write2016-10-24
- Destructuring syntax is non-obvious and took too long to understand2016-10-24
Callback nesting makes async code hard to read and followUnreviewed
20072026- Callback nesting makes async code hard to read and follow2015-03-24
- Async code ends up as cascades of confusing callbacks, with no good native constructs2015-03-21
- Nested callbacks look visually cluttered with parens and braces, hard to read2013-03-03
Date silently converts times to local time, surprising peopleUnreviewed
20072026- Date silently converts times to local time, causing bugs people don't expect2026-01-13
- Date object silently converts to browser timezone, so developers easily make errors2025-04-14
- Loses the original time zone, so cross-timezone dates become hard to work with2024-12-04
Forgetting var silently creates a global variableUnreviewed
20072026- Forgetting var silently creates a global variable2015-10-08
- Var declared inside an if block is unexpectedly visible outside it, which is confusing2014-08-22
- Variables default to global scope with no block scope, making mistakes easy2010-05-14
Cryptic error messages and stack traces make failures hard to diagnoseUnreviewed
20072026- Error prefixes and file/line numbers clutter stack traces, making them unpleasant to read2022-04-08
- Cryptic error messages and stack traces make failures hard to diagnose2021-12-16
- Stack traces for async code are often useless, making debugging horrifying2017-08-24
Constructors callable as plain functions cause silent mistakesUnreviewed
20072026- Too many ways to define a class, so developers keep forgetting which to use2016-10-31
- Constructors can be called as plain functions, so programmers easily make silent mistakes2014-05-01
- Constructors, prototypes and implicit declarations are unintuitive and hard to work with2013-08-01
Tools take seconds to process a few thousand lines of JSUnreviewed
20072026- Multiple JS build and compile steps take far too long to run2025-06-12
- Simple pages take 20 seconds to load due to huge JavaScript and sequential requests2024-09-06
- Developers wait seconds for tools to process a few thousand lines of JS2021-05-03
Nested promises unexpectedly flatten, causing days of confusionUnreviewed
20072026- Hard to conceptualize what happens when many promises are composed2019-01-22
- Nested promises unexpectedly flatten, counter to other language constructs, costing days of confusion2018-02-16
- Promise code syntax looks different from equivalent sequential code, making it harder to read2013-08-31
Syntax gets in the way of seeing what code doesUnreviewed
20072026- JavaScript syntax becomes too much of an obstruction to seeing what code does2014-11-13
- Can't pick out the flow of existing JavaScript code when modifying it2012-02-12
- Navigating large JavaScript codebases is cryptic and hard to follow2011-04-29
Null and undefined distinction and coercion make code error-proneUnreviewed
20072026- Confusing null/undefined distinction and type coercion make code error-prone and inconsistent2023-05-11
- Undefined behavior and mysterious errors when writing code2019-12-19
- Confusing null/undefined values and type checks, forgotten between infrequent uses2016-12-09
Promises and arrow functions make async debugging harderUnreviewed
20072026- Hard to trace execution and reason about promise chains in the debugger2020-03-31
- Promises and arrow functions make async debugging and scope reasoning harder for developers2018-03-16
- Debugging is harder because each callback creates its own function scope2012-09-17
Tiny code changes cause initially undetectable scoping bugsUnreviewed
20072026- Dynamically bound this causes subtle bugs that programmers keep getting caught by2020-03-28
- Silent failures and scoping mistakes make bugs hard to find and debug2015-02-09
- Tiny code changes cause confusing, initially undetectable bugs due to scoping2012-02-14
Web app UIs render choppily and inconsistently across browsersUnreviewed
20072026- Browser freezes while processing data in JS web apps2018-07-26
- Web app UIs are slower, choppier and inconsistently rendered across browsers2018-05-31
- Sites built with JS frameworks are slow to load and laggy, with delayed input on mobile.2014-06-04
Unreviewed issues were grouped by machine: Claude Haiku labelled each comment as a usability complaint, named what it's about and summed up the problem in a line, and a small model grouped similar problems. Nobody has checked them by hand. Expect mistakes.
The newest 50 complaints
- Couldn't find a way to turn off anti-aliasing, so terminal text stayed blurry2026-10-16
- Can't remember exact date string syntax and must repeatedly copy-paste ISO strings2026-09-07
- Custom dropdowns don't work correctly with the keyboard2026-04-12
- Passing an argument to next() is clunky and the first call silently ignores it2026-04-07
- Too many confusing, overlapping build tools and module systems to understand2026-03-22
- Easy to misuse date strings, causing wrong calendar dates in browsers2026-03-11
- Native streams behave terribly under load, with bizarre drops in activity when consumer is slower2026-02-27
- Date silently converts times to local time, causing bugs people don't expect2026-01-13
- Sharing memory between JavaScript worker threads is awkward and hard to use2026-01-10
- Modern build tools are a Rube Goldberg machine that is painful when they break2025-12-12
- Becomes unusable for large apps; designed only for small scripts2025-11-07
- Top-level let/const and class bindings can't be redeclared or reloaded in a REPL or script2025-10-04
- Bundling tools change almost monthly, so it's unclear which to pick and what breaks2025-08-14
- Threading in JavaScript is very hard to use, needing complex synchronization and restrictive security headers2025-07-26
- Unintuitive syntax and weird features make template literals hard to use for storing templates2025-07-19
- Type coercion results are unpredictable without memorising arbitrary corner-case rules2025-07-19
- Syntax is unintuitive, and comparing arrays needs dependencies installed2025-07-19
- Date API is incomprehensible and painful to use, causing many bugs2025-07-12
- Multiple JS build and compile steps take far too long to run2025-06-12
- Synchronizing threads requires copying data through RPC layers, making shared memory hard to use2025-06-07
- Could never get the browser FFmpeg port working, even with AI help2025-06-04
- Too many overlapping tools (yarn, npm, npx, gulp, webpack) feel confusing and overwhelming2025-06-02
- New syntax features are confusing and hard to read for less experienced developers2025-05-17
- Reactive tables lose scroll and state on back navigation and can't link to a page2025-05-12
- Loader sits at 7%, waits seconds, then jumps to 100% before content2025-05-10
- Debugger often fails to stop on breakpoints for no apparent reason2025-04-24
- Date object silently converts to browser timezone, so developers easily make errors2025-04-14
- Silently inserted semicolon after return makes function return undefined2025-04-07
- Language makes competent developers prone to maddening, hard-to-spot bugs2025-04-04
- Flashy marketing docs sites are a pain versus a standardized documentation tool2025-03-26
- Screen reader users can't find or stay within JS pop-up menus and dialogs2025-03-08
- Date API is really difficult to work with for developers2025-01-21
- Too many subtly different features, so newcomers can't grasp it and learn by trial and error2024-12-28
- Modern JavaScript frameworks are overly complex and hard to learn from their documentation2024-12-19
- Loses the original time zone, so cross-timezone dates become hard to work with2024-12-04
- Explicit polyfill imports are error-prone, and async loading prevents controlling load order2024-10-27
- Implicit coercion causes surprising bugs and is baffling compared to other languages2024-10-21
- Official docs change drastically, leaving the user confused about which tool to use2024-10-10
- Too many overlapping ways to do the same thing, with confusing rules2024-10-10
- Debugger is useless because each await drops you into the event loop; can't see overall state2024-10-04
- Losing promises keep running after a race; cancelling them needs manual AbortController plumbing2024-10-04
- Simple pages take 20 seconds to load due to huge JavaScript and sequential requests2024-09-06
- Must call separate UTC methods; formatting via toLocaleString is unintuitive2024-08-25
- Date types conflate dates, times and datetimes; surprise mutability causes problems2024-08-24
- Pre-ES6 scoping forced ugly workarounds like that = this to be written2024-08-22
- Tooling is complex and config formats keep changing, so returning projects is confusing2024-06-22
- Weird APIs, silent errors, and hard to tell which libraries are good2024-06-22
- Import maps needed to resolve bare specifiers in browser, which is ugly and confusing2024-06-20
- Equality comparisons behave unintuitively, requiring complex lookup charts to predict results2024-06-17
- Returns UTF-16 code units, not characters, so it silently misleads until non-ASCII text appears2024-04-30