Înapoi la articole →

Cel mai recent articol

Ultima verificare

Urmăritori 0 urmăritori
Articole: 38
  1. Prefer explicit returns in TypeScript

    Make function contracts visible.

  2. Ship Node.js applications as a single executable

    Ship a Node.js application with its runtime.

  3. Start with semantic HTML

    Semantic HTML makes structure and behavior explicit, supports accessibility and avoids rebuilding features the browser already provides.

  4. Make resource lifetime explicit with using

    JavaScript's using and await using declarations make deterministic cleanup and resource ownership part of lexical scope instead of a repeated try/finally convention.

  5. Comments are not a substitute for design

    Commented-out code, TODOs and explanatory prose often hide weak design or unowned work.

  6. Runtime validation is a boundary concern

    Runtime validation belongs where external data becomes application data.

  7. Not every test double is a mock

    Stubs control answers.

  8. Fire and forget still needs an owner

    Choosing not to await a Promise does not remove responsibility for its failure.

  9. Translations belong to the user interface

    Business logic should return application meaning, not localized text or translation keys.

  10. Don't log at the leaf. Log at the root

    When every layer logs the same failure, observability turns into noise.

  11. Boring code is a feature

    Clever code may impress in a pull request.

  12. Time is an external dependency

    Reading the current time looks harmless, but it hides infrastructure inside application logic.

  13. Bugs are not backlog items

    A zero bug policy is not about perfect software.

  14. Clean Architecture protects the happy zone

    Clean Architecture is not only about drawing onions or creating folders.

  15. Don't test what you don't control

    Integration and end-to-end tests become noisy when they depend on systems a team cannot make deterministic or act on.

  16. DevOps is a skill, not a role

    DevOps should not be a ticket queue between product teams and production.

  17. process.exit() forces Node.js to terminate and may abandon pending work.

  18. Chrome DOM breakpoints let you pause on the code that changes, removes or mutates a DOM node.

  19. Write good Git commit messages

    Good Git commit messages are not bureaucracy.

  20. Application performance is a product requirement

    Application performance is not something engineers can optimize in isolation.

  21. Developer experience is a performance feature

    Optimizing developer experience often has a bigger long-term impact than optimizing rendering benchmarks or bundle size.

  22. Pattern matching in TypeScript today

    JavaScript does not have pattern matching yet, but TypeScript developers can model states clearly and use ts-pattern for exhaustive pattern matching today.

  23. Stop using barrel exports in JavaScript

    Barrel exports in JavaScript reduce tree shaking effectiveness, hide dependencies and make code harder to maintain.

  24. Direct access to window, document, navigator and globalThis couples your code to the runtime, makes side effects harder to isolate, and leads to brittle tests.

  25. Stop adding console.log: use logpoints instead

    Logpoints let you inspect runtime behavior without changing your code, polluting commits, or pausing execution.

  26. Why Testing Library is not unit testing

    Testing Library is useful, but rendering components and testing them through the DOM is integration testing, not unit testing.

  27. Why you should not ship test IDs to production

    React Testing Library works best with semantic queries like role and label.

  28. Git LFS solves a real problem for large binary files, but it also adds workflow and operational complexity that teams should adopt intentionally.

  29. git bisect helps you find the commit that introduced a regression, but large squash merges remove the history that makes it truly effective.

  30. Why I do not use enums in TypeScript

    Enums add runtime behavior, work against modern TypeScript workflows, and have simpler alternatives like string literal unions and const objects.

  31. Code coverage shows what your tests execute.

  32. Avoid truthy and falsy checks in TypeScript

    Truthy and falsy checks in TypeScript hide intent and can introduce bugs.

  33. Prefer Task over Promise in TypeScript

    Promises hide failure in an untyped rejection path.

  34. Use Result in TypeScript for expected failures, Maybe for absence, and reserve exceptions for truly exceptional situations.

  35. Why null still causes bugs in TypeScript - and how Maybe types make absence explicit.

  36. Explicit dependencies improve clarity and testability.

  37. Why your unit tests feel fragile

    Unit tests do not feel fragile because testing is hard.

  38. Why I started this Blog

    Why I finally decided to start writing on echooff.dev and what I want this blog to be.