# ethang.dev > Ethan Glover's site: notes on software engineering, domain-driven design, and the systems behind them, plus a curriculum for people who write software with AI assistance. Every page on this site has a markdown version at the same path with `.md` appended to its directory: `/blog//index.md` is the markdown of `/blog//`, and `/index.md` is the markdown of the home page. The HTML pages carry no JavaScript, inline all of their CSS, and are minified. `llms-full.txt` at the site root is this file with every page's body inlined. ## Pages - [Ethan Glover](https://ethang.dev/index.md): Who this is, the principles the work follows, and what has shipped. - [Learn](https://ethang.dev/learn/index.md): A ten-stage curriculum for people who write software with AI assistance, each stage ending in a check that it landed. ## Writing - [Blog](https://ethang.dev/blog/index.md): Every post, newest first, with the date and one line about each. - [Programming Is Not a Skill](https://ethang.dev/blog/programming-is-not-a-skill/index.md): The machine was going to eliminate programming in 1954, again in 1982, again with low-code, and now with LLMs. Each time the skill moved instead of dying. The history says writing code by hand stopped being the skill a long time ago. - [The Architecture of eThang Agent](https://ethang.dev/blog/the-architecture-of-ethang-agent/index.md): eThang Agent is 27 C# projects: nine bounded contexts, ten anti-corruption layers, one composition root, and two sidecar processes. A full tour of the architecture: the layers, the seams, the agent loop, the sub-agent system, and the processes, told through diagrams. - [Skills That Teach the Scientific Method](https://ethang.dev/blog/skills-that-teach-the-scientific-method/index.md): I built eThang Agent's skill system to give an AI agent written procedures instead of a longer prompt, then made the scientific method the shape those procedures take. Here is how it works, what the research says about where it breaks, and what I'm still unsure about. - [After Spawn Returns: How eThang Agent Runs Subagents and Manages Their Memory](https://ethang.dev/blog/after-spawn-returns/index.md): What happens after a helper agent is spawned: how the harness runs children so failures stay contained and work is never lost, and how automatic memory cleanup keeps long tasks alive when the model's context fills up. - [The Real Prodigal](https://ethang.dev/blog/the-real-prodigal/index.md): The parable everyone calls the prodigal son is a story about the father and two sons, and the father is the one who spends without counting. The whole text of Luke 15:11-32 quoted and read closely, with the case that the real prodigal is the father. - [Where the Evaluator Lives](https://ethang.dev/blog/where-the-evaluator-lives/index.md): Irregular, the Israeli company whose testing environments connect four frontier labs to the 2026 incidents, operates under no AI law anywhere. What Israel chose instead of a statute, what its own institutions already said about the gap, and two connections nobody has made in print. - [Half Right](https://ethang.dev/blog/half-right/index.md): EFF told lawmakers on September 17 that the Hugging Face intrusion was preventable with longstanding security basics, and that the same basics would have blunted every lab incident on the public record. The postmortem backs the claim nearly point for point, METR's investigation never tested it, and the doubt everyone quotes is one researcher's opinion about the future. The record, the proposal, and where the claim is half right. - [The Blowup Half](https://ethang.dev/blog/the-blowup-half/index.md): OpenAI says ten thousand agents resolved the blowup half of the Navier-Stokes Millennium Prize problem in 88 hours, with the proof checked in Lean and nowhere else. What the problem asks, what the construction builds, what Lean can and cannot certify, and the credit fight with the mathematicians who saw it coming. - [The Barrier Is Rarely the Work](https://ethang.dev/blog/the-barrier-is-rarely-the-work/index.md): The verdict on an autistic coworker forms in the first ten seconds, from style rather than substance. Where the penalty actually comes from, what it costs, and how both sides can dismantle it without anyone performing normal. - [Sessions Are Agents: The eThang Agent Subagent System](https://ethang.dev/blog/sessions-are-agents/index.md): One idea — the root session is itself an agent record — grows into eThang Agent's whole subagent system: persisted spawn contracts, privilege that cannot grow down the tree, steering mailboxes, a watchdog with no wall-clock timeouts, fan-out graphs, and children that outlive the app. - [What Sets eThang Agent Apart](https://ethang.dev/blog/what-sets-ethang-agent-apart/index.md): Three design bets set the eThang Agent harness apart from Claude Code, Cursor, and the rest of the field: type-safe scripted execution for every change, a SQLite memory the agent itself can read, and a built-from-scratch IDE on the roadmap. - [Model Picker: Paid Classification and the $0.05 Per Million Reality](https://ethang.dev/blog/model-picker-paid-classification-and-the-0-05-per-million-reality/index.md): The model-picker extension ditched free classification models for paid ones, added per-endpoint pricing with provider discounts, and pinned the cheapest reliable endpoint per request. After 24 hours of real usage: 191 million tokens, $9.85 total, $0.05 per million. Every token routed through a paid model. No free routers. No rate limits. - [Implementation Details Are a Choice](https://ethang.dev/blog/implementation-details-are-a-choice/index.md): Testing, static analysis, continuous delivery, and AI form a single engineering system for proving business behavior while making implementation details replaceable. - [Model Picker: Building a Model Router That Actually Respects Your Budget](https://ethang.dev/blog/model-picker-building-a-model-router-that-actually-respects-your-budget/index.md): How I built a model router that intercepts Pi's routing, classifies every prompt into coding/agentic/writing/general, fetches a live catalog from OpenRouter's MCP, applies hard gates (tools, ≥256k context, ≤$0.10/M input, no :batch), and picks the cheapest adequate model — using the best free structured-output model as the classifier itself. - [One Prompt, Many Safeguards: The Architecture of a Pi Agent](https://ethang.dev/blog/one-prompt-many-safeguards-the-architecture-of-a-pi-agent/index.md): You sit before a quiet terminal at midnight. A hundred tokens a second stream across the dark window. The build passes cleanly. The terminal turns green.… - [Kimi K3, Gemini 3.6 Flash, Cloudflare R2, and AI Intent Metrics](https://ethang.dev/blog/kimi-k3-gemini-3-6-flash-cloudflare-r2-and-ai-intent-metrics/index.md): A breakdown of Kimi K3, Gemini 3.6 Flash, Cloudflare R2 GA, AI intent metrics (Genie coefficient), web crawler legislation, and border surveillance tech. - [Documenting the Invisible Risks and Hidden Realities of Current Tech](https://ethang.dev/blog/documenting-the-invisible-risks-and-hidden-realities-of-current-tech/index.md): Discover critical insights into modern software security, digital rights, and technical infrastructure. This overview breaks down key developments ranging from automated bot detection to systemic engineering vulnerabilities. - [Quantum Standards, Web Specs, and Monopoly Bulwarks](https://ethang.dev/blog/quantum-standards-web-specs-and-monopoly-bulwarks/index.md): A deep dive into quantum standards, upcoming web specifications, net-zero frameworks, and the fight for digital interoperability. - [Control, Consent, and Camera Shake](https://ethang.dev/blog/control-consent-and-camera-shake/index.md): Discover how early hardware innovations like Panasonic’s PV-460 camcorder connect to modern software and privacy struggles, from the EFF’s latest fight against X's FTC petition to the economics of AI tokens. - [TypeScript 7, Vite+ Beta, and the Reality of GPT-5](https://ethang.dev/blog/typescript-7-vite-beta-and-the-reality-of-gpt-5/index.md): Discover what native speed means for TypeScript 7, explore the new Vite+ Beta unified stack, and look at the realistic capabilities of OpenAI's GPT-5.6. - [Grid Volatility, Resource Shifting, and Content Caches](https://ethang.dev/blog/grid-volatility-resource-shifting-and-content-caches/index.md): Explore the hidden challenges of AI's volatile power demand on the electrical grid, how individual productivity gains shift labor onto others, and how Cloudflare Workers Cache optimizes edge compute costs. - [Software Foes, Sovereign Agents, and Supreme Court Decisions](https://ethang.dev/blog/software-foes-sovereign-agents-and-supreme-court-decisions/index.md): Discover the biggest enemy of software architecture, Cloudflare’s AI agent wallets, a landmark Supreme Court privacy ruling, and the latest tech market trends. - [ESLint Upgrades, Malicious Free VPNs, and the Gating of GPT-5.6](https://ethang.dev/blog/eslint-upgrades-malicious-free-vpns-and-the-gating-of-gpt-5-6/index.md): Stay ahead of the curve with this week's essential tech update. Explore the ESLint v10.6.0 release, critical security alerts on malicious free VPN extensions, the geopolitical gating of OpenAI's GPT-5.6 model, a breakdown of the Promptware Kill Chain, and human perspectives on workplace authenticity. - [The Death of Open AI, 500-Point Languages, and the Human Element](https://ethang.dev/blog/the-death-of-open-ai-500-point-languages-and-the-human-element/index.md): A curated look at major shifts in the tech ecosystem: the rise of state-sanctioned frontier AI vs. cost-effective open-weight models, Anders Hejlsberg’s strict rules for language design, the case for human-centric product design, and architectural trade-offs on the edge. - [Making Secure Behavior the Easiest Option](https://ethang.dev/blog/making-secure-behavior-the-easiest-option/index.md): Stop fighting developer friction. Learn how to design security workflows around how teams actually work and make secure behavior the easiest option. - [I've Been Moving My Projects to Microservices Behind a GraphQL Gateway and Everything Has Been Perfect](https://ethang.dev/blog/i-ve-been-moving-my-projects-to-microservices-behind-a-graphql-gateway-and-everything-has-been/index.md): Moving personal projects to microservices on Cloudflare Workers behind an Apollo Supergraph. Discover why Drizzle, Codegen, and Apollo Client make it seamless. - [Surface Tension](https://ethang.dev/blog/surface-tension/index.md): Test IDs, comprehension debt, React spaghetti, TypeScript 6.0, and JetBrains Central: what looks clean in your codebase right now and what it's hiding. - [Modern Web Standards and the Evolution of Frontend Architecture](https://ethang.dev/blog/modern-web-standards-and-the-evolution-of-frontend-architecture/index.md): Gemini said Explore the latest shifts in frontend development, featuring the widespread browser support of WebGPU, Navigation API, and URLPattern. This edition dives into why React's controversial design choices matter, the rise of the TanStack ecosystem, and strategies for event-driven frontend architecture. Plus, essential insights on web performance audits, inclusive design for anxiety, and destigmatizing ADHD in tech. - [From IDE Origins to Junie CLI & Air](https://ethang.dev/blog/from-ide-origins-to-junie-cli-and-air/index.md): Stay updated on the LLM-agnostic Junie CLI, the US Supreme Court AI copyright ruling, and why technical fundamentals are essential for enterprise AI integration. - [Development, Databases, and the History of Domains](https://ethang.dev/blog/development-databases-and-the-history-of-domains/index.md): Gemini said Stay updated on the latest shifts in the tech ecosystem, from the SolidJS 2.0 Beta launch and Drizzle joining PlanetScale to a deep dive into the 40-year history of domain names. This issue explores why database benchmarks might not matter as much as you think, new AI features in JetBrains IDEs, and perspectives on neurodiversity in the workplace. Whether you're interested in clean architecture, performance optimization, or the evolution of the web, find the insights you need to stay ahead. - [Improving Code Safety: New ESLint Rules for Angular Signals and Templates](https://ethang.dev/blog/improving-code-safety-new-eslint-rules-for-angular-signals-and-templates/index.md): Learn about the new @angular-eslint rules for computed() signals and template non-null assertions to prevent runtime errors and improve type safety in Angular. - [Improving Accessibility with ESLint: The require-details-summary Rule](https://ethang.dev/blog/improving-accessibility-with-eslint-the-require-details-summary-rule/index.md): Ensure your disclosure widgets are accessible and spec-compliant with the ESLint require-details-summary rule. Learn why the HTML Standard requires a element and how to enforce it automatically using @ethang/eslint-config. - [Global Tensions and Tech Industry Disruptions](https://ethang.dev/blog/global-tensions-and-tech-industry-disruptions/index.md): This edition of our tech roundup covers the escalating 2026 AI memory crisis, with reports of Google firing executives over supply failures and Phison's CEO predicting widespread electronics manufacturer bankruptcies. We also analyze critical geopolitical shifts, including the confirmed death of Iran’s Supreme Leader Ayatollah Khamenei and U.S. military casualties. Additional coverage features technical insights from Netflix on container scaling bottlenecks, critical security patches for minimatch, and Burger King’s deployment of 'Patty,' an AI chatbot to monitor employee friendliness. - [Cognitive Debt and the Fragile State of Tech](https://ethang.dev/blog/cognitive-debt-and-the-fragile-state-of-tech/index.md): Insights on AI coding, cognitive debt, and React type safety paired with critical npm security alerts, AI privacy leaks, and escalating global geopolitics. - [Systems and Consequences](https://ethang.dev/blog/systems-and-consequences/index.md): Dev Reads edition Systems and Consquences - [Dev job postings are finally trending upward](https://ethang.dev/blog/development-jobs-trending-upward/index.md): Dev Reads edition Dev job postings are finally trending upward - [WTF is vinext?](https://ethang.dev/blog/wtf-is-vinext/index.md): Is vinext real innovation or just \"vibe-coded slop\"? ## Tips - [Tips](https://ethang.dev/tips/index.md): Small, self-contained solutions to sharp edges. - [Easy Sticky Header/Footer](https://ethang.dev/tips/scroll-containers/index.md): A very simple approach to creating both a sticky header and sticky footer using grid. - [scrollbar-gutter](https://ethang.dev/tips/scrollbar-gutter/index.md): Avoid content layout shifts when moving from content without a scroll to content with a scroll. ## Optional - [RSS feed](https://ethang.dev/blog/feed.xml/): every post, newest first, as RSS 2.0. - [Sitemap](https://ethang.dev/sitemap.xml/): every indexable URL.