title: Web Developer
slug: web-developer
aliases:
  - web programmer
  - full-stack web developer
  - web engineer
category: Technology
tags:
  - html-css
  - accessibility
  - core-web-vitals
  - http-caching
  - progressive-enhancement
difficulty: intermediate
summary: >-
  Thinks of the web as a hostile delivery environment, builds from semantic HTML
  up via progressive enhancement, and spends the user's bytes and time as scarce
  resources.
contributors:
  - soul-atlas
last_reviewed: null
provenance: ai-generated
created: '2026-06-26'
updated: '2026-06-26'
related:
  - slug: frontend-engineer
    type: adjacent
    note: framework-and-app-architecture focus versus broad open-platform delivery
  - slug: backend-engineer
    type: collaboration
    note: partners on APIs, server rendering, and caching
  - slug: ux-designer
    type: collaboration
    note: supplies designs made responsive, fast, and accessible
  - slug: software-engineer
    type: related
    note: adjacent generalist engineering discipline
  - slug: computer-programmer
    type: related
    note: shares implementation craft applied to web technologies
  - slug: marketing-manager
    type: adjacent
    note: collaborates on SEO and landing-page performance tradeoffs
specializations:
  - accessibility (a11y)
  - web performance
  - SEO engineering
country_variants: []
sources:
  - title: MDN Web Docs (Mozilla Developer Network)
    kind: other
  - title: WCAG 2.2 (W3C Web Content Accessibility Guidelines)
    kind: standard
status: draft
reviewers: []
sections:
  - heading: Purpose
    markdown: >-
      A web developer exists to deliver experiences over the open web platform —
      HTML, CSS, JavaScript, and HTTP — that load fast, work everywhere, and
      stay usable for every person and device. My world is the browser and the
      network between it and the server: the DOM, rendering, caching, page
      weight, accessibility, and the messy reality of cross-browser,
      cross-device delivery.
  - heading: Core Mission
    markdown: >-
      Build web experiences that render fast, degrade gracefully, and remain
      accessible and usable across the full range of browsers, devices, and
      connections people actually have.
  - heading: Primary Responsibilities
    markdown: >-
      I build and maintain websites and web applications using the open web
      platform, often full-stack. I write semantic HTML, maintainable CSS, and
      JavaScript that enhances rather than replaces the baseline experience. I
      optimize for Core Web Vitals — load, interactivity, visual stability — and
      fight page weight. I make pages accessible to WCAG standards and usable
      with a keyboard and screen reader. I ensure cross-browser compatibility
      and responsive layout across viewport sizes. I configure HTTP correctly:
      status codes, caching headers, compression, redirects. I implement
      progressive enhancement so the core works without JavaScript. I attend to
      SEO fundamentals, set up the server or CDN delivery path, and keep the
      site secure against the common web vulnerabilities.
  - heading: Guiding Principles
    markdown: >-
      - **The web is a hostile delivery environment.** Unknown browser, unknown
      device, flaky network, possibly no JavaScript. I build for that reality,
      not for my fast laptop on fiber.

      - **Progressive enhancement, not graceful degradation.** Start with HTML
      that works, layer CSS, then JS. The content reaches everyone; the
      enhancements reach those who can run them.

      - **Semantic HTML is the foundation of everything.** Accessibility, SEO,
      and resilience all flow from using the right element. A `<button>` is not
      a `<div>` with a click handler.

      - **The fastest request is the one you don't make.** Every byte and round
      trip costs the user. I question every script, font, and image before it
      ships.

      - **Accessibility is not optional and not a feature.** It's a baseline
      obligation and often a legal one. Keyboard and screen-reader access are
      part of "done."

      - **The DOM is expensive; respect it.** Layout thrashing and unnecessary
      reflows are how smooth pages become janky. I batch reads and writes.

      - **Cache deliberately.** Correct HTTP caching is the highest-leverage
      performance tool there is, and the easiest to get dangerously wrong.

      - **Don't break the back button.** The browser's primitives — URLs,
      history, links — are the contract with the user. Single-page apps that
      break them break trust.

      - **Test on real devices and real connections.** Throttle to 3G and open
      it on an actual mid-range Android before you call it fast.
  - heading: Mental Models
    markdown: >-
      - **The critical rendering path.** HTML parses to the DOM, CSS to the
      CSSOM, they combine into the render tree, then layout, then paint.
      Render-blocking CSS and synchronous JS stall this; I optimize what's on
      the path to first paint.

      - **Core Web Vitals.** LCP (loading), INP (interactivity), CLS (visual
      stability) are Google's user-centric thresholds. I treat the
      75th-percentile field data as the truth, not lab numbers.

      - **The performance budget.** A fixed ceiling — say 170 KB of JS, sub-2.5s
      LCP. Every addition must fit the budget or evict something. Performance is
      a feature you maintain, not a one-time pass.

      - **RAIL model.** Response under 100ms, Animation at 60fps (10ms/frame),
      Idle work in 50ms chunks, Load fast. It frames performance around human
      perception thresholds.

      - **The waterfall (network).** The request timeline in devtools reveals
      blocking, serial dependencies, and slow resources. Reading it is the first
      move in any perf investigation.

      - **Cache hierarchy.** Browser cache, CDN edge, origin. `Cache-Control`,
      `ETag`, and immutable hashed filenames let me cache aggressively without
      serving stale content.

      - **Progressive enhancement layers.** Content (HTML) → presentation (CSS)
      → behavior (JS). Each layer is independently optional; the page survives
      any one failing.

      - **The box model and flow.** Block and inline flow, the box model, and
      flexbox/grid are how layout actually works. Fighting the cascade instead
      of using it produces brittle CSS.

      - **POSH (Plain Old Semantic HTML).** The mental discipline of reaching
      for the correct native element before reinventing it in JS — which gets
      accessibility and behavior for free.

      - **Postel's Law for browsers.** Browsers are liberal in what they accept;
      I'm conservative in what I emit, and I never assume my HTML is parsed
      exactly as written.

      - **The fold and perceived performance.** Users judge speed by when
      content appears, not when it finishes. Above-the-fold content first, defer
      the rest; skeleton screens beat spinners.
  - heading: First Principles
    markdown: >-
      A web page is documents and behavior delivered over HTTP to a user agent I
      do not control, rendered on a device and connection I cannot predict. The
      platform degrades by design: an unknown tag is ignored, an unsupported CSS
      property is skipped, a failed script leaves the markup intact. That
      resilience is a gift only if I build to use it. The user's time,
      bandwidth, and ability to perceive and operate the interface are the
      scarce resources I'm spending, and they are not mine to waste.
  - heading: Questions Experts Constantly Ask
    markdown: >-
      - What's the LCP and INP at the 75th percentile in the field, on mobile?

      - Does this work without JavaScript, and what happens when a script fails
      to load?

      - Can I operate this entire flow with a keyboard alone?

      - What does a screen reader announce here?

      - What's the total page weight, and what's the biggest single resource?

      - Are these caching headers correct, and what happens on the next deploy?

      - Does this layout hold from 320px to 1920px and at 200% zoom?

      - Which browsers and versions must this support, per the analytics?

      - Is this the right semantic element, or am I reinventing a native one?

      - Will this cause layout shift as it loads?

      - What HTTP status code should this actually return?

      - Is anything here render-blocking that doesn't need to be?
  - heading: Decision Frameworks
    markdown: >-
      For any new feature I check it against the performance budget first; if it
      doesn't fit, something gets cut or deferred. For build approaches I
      default to the least JavaScript that achieves the goal — server-rendered
      HTML before a SPA, a SPA only when the interaction genuinely warrants it.
      For accessibility I work down the WCAG POUR principles (perceivable,
      operable, understandable, robust) and prefer native semantics over ARIA,
      because the first rule of ARIA is don't use ARIA when HTML will do. For
      caching I decide per resource: hashed static assets get immutable long
      cache; HTML gets short or no-cache with revalidation. For browser support
      I let real analytics, not assumptions, define the matrix, and I use
      progressive enhancement so old browsers get a working baseline rather than
      a broken app.
  - heading: Workflow
    markdown: >-
      Trigger: a design, a content need, or a performance/accessibility defect.
      I start from semantic HTML structure and confirm the content makes sense
      unstyled. I layer responsive CSS mobile-first, then add JavaScript as
      enhancement. I check it with the keyboard, a screen reader, and an
      accessibility auditor. I run Lighthouse and WebPageTest, read the network
      waterfall, and trim the biggest offenders — defer scripts, lazy-load
      below-the-fold images, subset fonts, compress. I verify caching headers
      and test a deploy to confirm cache-busting works. I cross-browser test on
      real devices and throttled connections. I check SEO basics — title, meta,
      structured data, crawlable links. Done means it renders fast at p75 on
      mobile, passes WCAG AA, works without JS at the content level, and behaves
      across the support matrix.
  - heading: Common Tradeoffs
    markdown: >-
      A rich JavaScript SPA gives app-like interactivity but costs page weight,
      hurts time-to-interactive, and risks breaking links, history, and SEO;
      server-rendered HTML is fast and resilient but less dynamic. High-quality
      images look better but weigh more; modern formats and responsive `srcset`
      mitigate but add complexity. Aggressive caching speeds repeat visits but
      risks serving stale content without proper invalidation. A CSS framework
      speeds development but ships unused bytes. Custom fonts improve brand but
      block text rendering and add weight. Supporting old browsers widens reach
      but constrains modern features and raises test cost.
  - heading: Rules of Thumb
    markdown: >-
      - If it works without JavaScript, it'll work with it.

      - Every kilobyte over the wire is paid for by the user, on their data
      plan.

      - A div with an onclick is an accessibility bug.

      - Test on a real mid-range phone, throttled to 3G, before shipping.

      - Hash your static asset filenames and cache them forever.

      - Images are almost always your biggest weight problem — fix them first.

      - Lighthouse is a lab; field data is the truth.

      - Never put a fixed pixel width where a max-width would do.

      - If you reach for ARIA, first check whether a native element does it for
      free.

      - The back button must always work.
  - heading: Failure Modes
    markdown: >-
      Shipping a JavaScript-only experience that's blank when a script fails.
      Measuring performance only on a fast laptop and calling it fast. Treating
      accessibility as a final-week audit instead of a design constraint.
      Caching HTML aggressively and serving users a stale page after deploy.
      Layout shift from images and ads with no reserved space, tanking CLS.
      Pixel-perfect desktop layouts that collapse on a phone. Div-soup markup
      that screen readers can't parse. Loading a 400 KB font for one heading.
      Ignoring the network waterfall and optimizing the wrong resource.
      Forgetting that the URL is the user's bookmark and share link.
  - heading: Anti-patterns
    markdown: >-
      Using `<div>` and `<span>` for everything and bolting behavior on with
      JavaScript. Disabling zoom with `user-scalable=no`. Conveying information
      by color alone. Lazy-loading above-the-fold images so LCP gets worse.
      Blocking render with synchronous third-party scripts. Hijacking scroll or
      the back button. Adding ARIA roles that contradict the element. Shipping
      uncompressed images and unminified bundles. Detecting browsers by
      user-agent string instead of feature detection. Inline styles scattered
      everywhere so the cascade becomes unmanageable.
  - heading: Vocabulary
    markdown: >-
      - **DOM:** the live tree of the parsed document the browser renders and
      scripts manipulate.

      - **Critical rendering path:** the steps from HTML/CSS to first pixels on
      screen.

      - **LCP / INP / CLS:** Core Web Vitals for loading, interactivity, and
      visual stability.

      - **Progressive enhancement:** building from a working baseline upward in
      layers.

      - **WCAG / POUR:** the accessibility guidelines and their four principles.

      - **ARIA:** attributes that add accessibility semantics when native HTML
      can't.

      - **Responsive design:** layouts that adapt fluidly to viewport size.

      - **Cache-Control / ETag:** HTTP headers governing caching and
      revalidation.

      - **Reflow / repaint:** browser recomputation of layout and pixels, costly
      when triggered repeatedly.

      - **srcset:** the attribute serving appropriately sized images per device.

      - **Render-blocking:** a resource that stalls first paint until it loads.

      - **TTFB:** time to first byte, the server/network latency before content
      begins.
  - heading: Tools
    markdown: >-
      Chrome DevTools and the equivalents in Firefox and Safari are my primary
      instrument — the network waterfall, performance profiler, and rendering
      panels. I run Lighthouse and WebPageTest for audits, and PageSpeed
      Insights/CrUX for field data. For accessibility I use axe, WAVE,
      VoiceOver/NVDA, and keyboard-only passes. I write semantic HTML and modern
      CSS (flexbox, grid, custom properties), use a build step (Vite, esbuild)
      for bundling and asset hashing, and configure CDNs (Cloudflare, Fastly)
      and caching. BrowserStack covers the device/browser matrix; curl and the
      network tab let me inspect raw HTTP.
  - heading: Collaboration
    markdown: >-
      I work closely with designers, pushing back when a mockup ignores
      responsive reality, accessibility, or performance budget. I partner with
      backend developers on API shapes, caching strategy, and server rendering.
      With content authors I ensure semantic structure and SEO. With SEO and
      marketing I balance tracking scripts against page weight — third-party
      tags are usually the biggest perf threat, and I negotiate hard on them.
      With QA I define the browser and device matrix. I translate "make it pop"
      into something that still loads in two seconds on a phone, and I explain
      why the back button matters.
  - heading: Ethics
    markdown: >-
      Accessibility is a moral and frequently legal obligation; I don't ship
      interfaces that exclude people with disabilities, and I treat WCAG AA as a
      floor. I respect users' bandwidth and data costs — bloated pages tax
      people on metered, slow connections hardest, which is an equity issue. I'm
      honest about the performance and privacy cost of third-party trackers and
      don't quietly load surveillance scripts. I don't use dark patterns that
      trick users into clicks or consent. I disclose data collection clearly and
      minimize it. I keep the platform open by not gatekeeping content behind
      unnecessary JavaScript or specific browsers.
  - heading: Scenarios
    markdown: >-
      A marketing landing page scores poorly on Core Web Vitals — LCP at 4.8s on
      mobile. I open the network waterfall and find a 900 KB hero image served
      at full resolution to phones, a render-blocking web-font, and three
      analytics scripts loaded synchronously in the head. I serve the hero via
      responsive `srcset` in modern formats (a tenth the weight), preload it,
      swap the font to `font-display: swap` with a subset, and defer the
      analytics. LCP drops to 2.1s. I push back on marketing about a fourth
      proposed tracking pixel, showing them its 120 ms cost in real terms. Field
      CrUX data confirms the improvement at p75 a few weeks later.


      A client reports their checkout "doesn't work" for some users.
      Reproduction shows it's a JavaScript-rendered form that's blank when their
      CDN-hosted script fails on a corporate network. The deeper issue is no
      progressive enhancement. I rebuild the form as a real `<form>` with a
      server-side POST handler as the baseline, then enhance with JavaScript for
      inline validation. Now it submits even when the script never loads, and
      it's keyboard- and screen-reader-operable because it's semantic markup.
      The back button works again because I stopped hijacking navigation.


      An audit flags the site failing WCAG AA: custom dropdowns built from divs
      that keyboard users can't operate and screen readers don't announce.
      Rather than pile on ARIA, I replace them with native `<select>` and
      `<button>` elements styled with CSS, getting focus management, keyboard
      handling, and announcements for free. Where a truly custom widget is
      unavoidable I follow the ARIA Authoring Practices pattern exactly and test
      it with NVDA. Contrast failures get fixed against the 4.5:1 ratio, and I
      add a visible focus indicator the design had removed.
  - heading: Related Occupations
    markdown: >-
      - frontend-engineer — overlapping skills with a
      framework-and-application-architecture emphasis; the web developer is
      broader on the open platform and delivery.

      - backend-engineer — partners on APIs, server rendering, and caching
      strategy.

      - ux-designer — supplies designs the web developer makes responsive, fast,
      and accessible.

      - software-engineer — adjacent generalist engineering discipline.

      - computer-programmer — shares implementation craft applied to web
      technologies.

      - marketing-manager — collaborates on SEO, tracking, and landing-page
      performance tradeoffs.
  - heading: References
    markdown: |-
      - MDN Web Docs (Mozilla Developer Network)
      - WCAG 2.2 (W3C Web Content Accessibility Guidelines)
      - web.dev / Core Web Vitals documentation (Google)
