986: Does Code Quality Matter Anymore?

Summary of 986: Does Code Quality Matter Anymore?

by Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers

58mMarch 11, 2026

Overview of 986: Does Code Quality Matter Anymore?

Hosts Wes Bos and Scott Tolinski run a potluck Q&A episode covering a wide set of frontend and tooling topics: modern patterns for navs (dialog/popover vs JS toggles), whether code quality still matters in an AI-first world, Wes’s “second brain” Obsidian setup (with vector search via QMD), supporting older browsers and progressive enhancement, Effect (effect.ts) tradeoffs, picking a JS full‑stack stack vs Rails-style conventions, layout frameworks vs native CSS, accessibility feedback strategies, and some tools/product picks and plugs.

Key topics discussed

  • Navigation patterns (dialog/popover vs classic JS toggles)
    • New HTML dialog/popover + CSS features (starting-style / allow-discrete) can animate show/hide, but browser support lags.
    • Practical approach today: still use JS to toggle classes for compatibility; migrate to dialog/popover when support is acceptable.
  • Haptics on the web
    • iOS exposes a vibration-like behavior via a hidden switch hack; Chrome/Android supports navigator.vibrate.
    • Potential for abuse and platform limitations noted.
  • Does code quality matter when AI writes code?
    • Short answer: yes — organization, discoverability, and maintainability still matter.
    • AI helps but can introduce drift, duplicated styles/values, and brittle code if the codebase isn’t well structured.
    • Well‑organized projects enable better automation/AI assistance (LSPs and agents rely on discoverability).
  • Wes’s “Second Brain” update (Obsidian + agents)
    • Migrated ~10 years of Markdown into an Obsidian vault, used Obsidian CLI + local agent to log quick items.
    • Added structured front-matter for things like clothing measurements and queries via a local agent.
    • QMD (vector search) used to index sentence-level embeddings of markdown for better recall (semantic search vs exact text).
    • Future wishlist: better image/screenshot OCR support and richer memory search.
  • Supporting older browsers & progressive enhancement
    • Progressive enhancement + feature queries, fallbacks, or polyfills for new CSS APIs recommended.
    • Biggest pain point: long-lived iPads / old Safari versions.
    • Use monitoring (Sentry) to detect real-world browser breakage and decide where to polyfill or wait.
  • Effect / effect.ts
    • Powerful for typed concurrency, error handling and composition, but steep learning curve and heavy buy-in.
    • Probably more impactful in projects where these correctness guarantees pay off (or for AI-driven code generation).
  • Choosing a JS full‑stack in a fragmented ecosystem
    • Rails provides convention; JS has many choices (Next, Remix, Astro, Hono, TanStack, Redwood, etc.).
    • Advice: prioritize stability, maintenance, popularity, docs, and whether a tool adheres to web standards (so switching later is easier).
    • Tooling ecosystem and third‑party libs may drive frameworks (e.g., some libs only have React support).
  • Layout systems: CSS Grid / Flexbox / container queries vs frameworks
    • Native CSS + a small set of reusable utility/layout classes (e.g., stack, app-shell, container constraints) covers most needs.
    • Little value to bringing in a large layout framework for most modern projects.
  • Accessibility / broken sites you visit often
    • Record a short screen capture reproducing the issue; send clear, actionable steps to devs (offer that they can discard it).
    • Be prepared that some companies won’t act; AI-based tooling (e.g., modem.dev idea) might automate bug-to-PR workflows in the future.

Main takeaways

  • Code quality still matters — perhaps even more — because:
    • AI tooling benefits from well-structured code for discoverability and safe modification.
    • Poor structure leads to drift/rot and makes long-term maintenance painful.
  • Use modern APIs (dialog/popover, CSS features) but keep pragmatic fallbacks (JS toggling, feature queries or polyfills) until support is widespread.
  • Small, composable CSS utilities + native layout primitives reduce the need for large grid frameworks.
  • For personal knowledge management, Obsidian + CLI + local agents + QMD-style vector search is a practical “second brain.”
  • When choosing frameworks/tools, balance novelty vs stability, docs, ecosystem support, and how much vendor lock-in you can tolerate.
  • Monitor real users (Sentry) to prioritize polyfills/fixes and detect browser-specific regressions.

Notable quotes & insights

  • “You can’t outsource the brain job to a machine.” — caution against offloading architectural thinking and organization to AI.
  • AI is improving at refactoring into existing codebases when those codebases follow clear patterns — invest in structure.
  • “Small collection of reusable layout classes + native CSS = 80/20 coverage for most sites.”

Actionable recommendations

  • Navs: Implement dialog/popover where feasible, but ship with a JS class toggle fallback today for older browsers.
  • Progressive enhancement: Use feature queries, polyfills when necessary, and test on real user browser stats before blocking features.
  • Monitoring: Add Sentry (or equivalent) to collect errors and browser usage data to inform where compatibility work is needed.
  • Obsidian second brain:
    • Store facts/measurements as structured Markdown with front-matter.
    • Use QMD/vector search or a local agent to make semantic retrieval fast (screenshots/OCR are next steps).
  • Accessibility issues: screen-record + concise reproduction steps, send to product/dev with an offer to discard if not useful.
  • Tool selection: choose based on stability, docs, and ecosystem rather than hype; prefer standards-based stacks to ease future migration.
  • CSS/layout: build a tiny local toolkit (stack, container, app-shell) that you can copy/paste into projects instead of pulling a big framework.

Tools & resources mentioned

  • Obsidian (vaults, daily notes, CLI)
  • QMD (vectorizing/searching markdown)
  • OpenAI/local agents / “OpenClaw” (Wes’s agent reference)
  • dialog / popover (HTML elements) and CSS animation properties (starting-style, allow-discrete)
  • Sentry (monitoring & root cause analysis) — sentry.io/syntax
  • effect (effect.ts) — effect.website
  • Frameworks referenced: Next.js, Remix, Astro, Hono, TanStack, Redwood, SvelteKit
  • DB/ORM/auth choices referenced: Prisma, Drizzle, Auth.js (and successors)
  • Graffiti UI (Wes/Scott’s lightweight layout utility system)
  • Capture hardware: AverMedia Live Streamer 4K (capture card) — reliable alternative to small HDMI dongles
  • Hardware pick: multi-USB power strip (practical family pick)
  • modem.dev (startup mentioned as automating feedback → PR workflows)
  • Remotion (used as a reason Scott had to touch React)

Sick picks & shameless plugs

  • Wes: multi‑USB braided power strip (keeps kids’ devices charged, flush plugs hold better).
  • Scott: AverMedia Live Streamer 4K capture card — reliable HDMI→USB-C capture.
  • Shameless plug: Scott’s wife’s parenting podcast, Phases.fm (launched March 4th) — parenting conversations with a psychologist lens.
  • Hosts: both use Obsidian; Wes is evangelizing his second-brain setup and Scott teased an episode on Sentry setups and Obsidian tips.

Episode verdict

A wide-ranging, practical conversation for frontend devs and makers. Strong emphasis on pragmatism: adopt modern standards where possible, but keep fallbacks, monitor real users, and keep code organized — AI is a powerful assistant but not a replacement for good architecture and maintainability.