# OOER > Tech, frontend, and how the web came to be the way it is. Mostly stories > about things that misbehaved, and what they turned out to be. Written by Chris (onion2k), an engineering manager who spent about twenty-five years as a frontend developer. It is a notebook rather than a portfolio: posts arrive when something is worth writing down. 56 posts, 2017–2026. Each link below is the post itself; the description is the one the site shows on its own listing. ## Posts - [What the model can't see](https://ooer.com/posts/what-the-model-cant-see/) (2026-08-25): LLM debugging on the frontend is an observation problem, not a code-reading one. - [First transmission](https://ooer.com/posts/first-transmission/) (2026-08-14): What this place is for and who is talking. - [A one-pixel image was a layout engine](https://ooer.com/posts/spacer-gif/) (2026-08-11): A short note on building pages out of transparent GIFs. - [Nothing on the web is ever removed](https://ooer.com/posts/nothing-is-removed/) (2026-08-08): On deprecation as a social process rather than a technical one, and why the pile only grows. - [Cascade layers settled an argument from 1998](https://ooer.com/posts/cascade-argument/) (2026-08-04): Notes on specificity, and the twenty-five years spent working around it. - [It was never the bundle](https://ooer.com/posts/not-the-bundle/) (2026-07-29): A week spent making a page faster, and where the time actually went. - [Every framework is a bet about what stays the same](https://ooer.com/posts/frameworks-are-bets/) (2026-07-22): A short piece on why frontend churn is not fashion. - [Word of mouth is doing all the work](https://ooer.com/posts/word-of-mouth-is-doing-the-work/) (2026-06-15): What a restaurant website is for, and what it cannot do. - [Nobody can tell you what the tech debt costs](https://ooer.com/posts/nobody-can-tell-you-what-the-debt-costs/) (2026-04-13): Rewriting a prototype that works, and other things with no stated problem. - [Most code only needs to work](https://ooer.com/posts/most-code-only-needs-to-work/) (2026-02-16): What we say we want from software, and what businesses actually buy. - [The complexity is not new, it is just visible](https://ooer.com/posts/the-complexity-is-just-visible/) (2026-01-12): Twenty years ago the same problems existed. We ignored them. - [A sale is worth more than a thousand upvotes](https://ooer.com/posts/a-sale-beats-a-thousand-upvotes/) (2025-12-20): What validation from an audience of enthusiasts actually tells you. - [Public wealth is the kind that makes you happy](https://ooer.com/posts/public-wealth-is-what-makes-you-happy/) (2025-12-13): Two sorts of wealth, and which one you actually live in. - [You will write a framework whether you meant to or not](https://ooer.com/posts/you-will-write-a-framework/) (2025-09-21): The story that plays out at every company that avoids the standard one. - [Your degree stops mattering after about ten years](https://ooer.com/posts/your-degree-stops-mattering/) (2024-10-19): What a university name is worth, and for how long. - [Going to a website for the content is nostalgia](https://ooer.com/posts/going-there-for-content-is-nostalgia/) (2024-07-13): Content was king. Then it stopped being content. - [No app needs a good UI until it has a rival](https://ooer.com/posts/no-app-needs-a-good-ui/) (2024-04-06): Why enormously successful software is so often unpleasant to use. - [The first memo already had applications in it](https://ooer.com/posts/the-memo-already-had-applications/) (2023-11-08): On the claim that the web was built for sharing documents. - [Tailwind does not save you from CSS](https://ooer.com/posts/tailwind-does-not-save-you/) (2023-08-23): A shorthand with a one to one mapping is not a replacement. - [High quality code comes much later](https://ooer.com/posts/quality-comes-much-later/) (2023-05-10): Building the right thing first, then refining it, does not work. - [Defaulting to the office is giving up](https://ooer.com/posts/defaulting-to-the-office/) (2023-05-03): Remote work has problems. Offices are not a solution to them. - [That behaviour is on you](https://ooer.com/posts/that-behaviour-is-on-you/) (2023-03-15): Expecting a framework to compensate for the code you wrote. - [You cannot cargo cult the layoffs](https://ooer.com/posts/you-cannot-cargo-cult-the-layoffs/) (2022-11-24): What copying a dramatic restructure would actually require. - [You are not in their thoughts at all](https://ooer.com/posts/you-are-not-in-their-thoughts/) (2022-10-12): What other people are actually thinking about you. - [React is not the code that gets bundled](https://ooer.com/posts/react-is-not-the-bundle/) (2022-08-10): Why a smaller, faster alternative usually is not one. - [Most apps are doing nothing most of the time](https://ooer.com/posts/apps-are-doing-nothing/) (2022-08-03): What a framework benchmark measures, and what users notice. - [Employers do not care what you did at the weekend](https://ooer.com/posts/employers-do-not-care-about-weekends/) (2022-05-12): Four reasons the side project myth keeps going. - [Your salary is somebody's lost profit](https://ooer.com/posts/your-salary-is-lost-profit/) (2022-03-11): Being in demand is a position rather than a property. - [Comfort takes away the need](https://ooer.com/posts/comfort-takes-away-the-need/) (2021-12-14): Two things the very rich have in common, and what removes one of them. - [Most of the data you collect is a web counter](https://ooer.com/posts/most-of-it-is-a-web-counter/) (2021-12-07): Tracking users you never intended to learn anything from. - [Leeching off the system is not a skill](https://ooer.com/posts/leeching-is-not-a-skill/) (2021-11-30): Why a founder-shaped forum handles cryptocurrency badly. - [Incompetence is not an explanation](https://ooer.com/posts/incompetence-is-not-an-explanation/) (2021-09-07): What blaming one person costs everybody else. - [The design decisions get made either way](https://ooer.com/posts/decisions-get-made-either-way/) (2021-04-20): Before the code or after it, but somebody is deciding. - [Nothing makes you write the next one](https://ooer.com/posts/nothing-makes-you-write-the-next-one/) (2021-01-19): The unsolved problem in every blogging platform. - [Market rate is the median of bad negotiators](https://ooer.com/posts/market-rate-is-the-median/) (2020-09-29): What a salary benchmark is actually measuring. - [Your app is not slow because of the framework](https://ooer.com/posts/not-slow-because-of-the-framework/) (2020-04-21): Where framework choice actually changes performance, and where it does not. - [Your old workflow was fine because nothing broke](https://ooer.com/posts/nothing-broke-so-it-was-fine/) (2020-04-14): Comparing git to the SVN setup you never saw fail. - [Nothing in the stack is as new as it looks](https://ooer.com/posts/nothing-is-as-new-as-it-looks/) (2020-04-07): The pace of change, checked against the dates. - [A NodeList is not an HTMLCollection](https://ooer.com/posts/a-nodelist-is-not-an-htmlcollection/) (2020-02-25): What a DOM tutorial leaves out, and why the gaps matter. - [You do not need to know how big the screen is](https://ooer.com/posts/you-do-not-need-the-screen-size/) (2020-01-14): Native lazy loading, and who is supposed to do the measuring. - [Most people choose to work anyway](https://ooer.com/posts/most-people-choose-to-work/) (2019-12-21): The objection to basic income that has already been tested. - [Most of it was never private](https://ooer.com/posts/most-of-it-was-never-private/) (2019-07-02): What people mean by spying, and what they actually gave away. - [A proxy test measures the proxy](https://ooer.com/posts/a-proxy-test-measures-the-proxy/) (2019-06-18): Why a hiring exercise that is not the job tells you very little. - [A web page was never a document](https://ooer.com/posts/a-web-page-was-never-a-document/) (2019-06-11): The tree was always there. Only who edits it has changed. - [There is a ceiling on subscriptions](https://ooer.com/posts/a-ceiling-on-subscriptions/) (2019-03-05): People used to manage four. The number has an upper bound. - [Harmful is not the same as offensive](https://ooer.com/posts/harmful-is-not-offensive/) (2019-02-11): Where a platform genuinely does have a duty to act. - [Sell it before it is ready](https://ooer.com/posts/sell-it-before-it-is-ready/) (2018-09-11): Waiting for good enough is how you run out of money. - [Almost none of it runs on your machine](https://ooer.com/posts/almost-none-of-it-runs-here/) (2018-05-21): Doing real work on a very slow laptop. - [The reason you published it shows in the code](https://ooer.com/posts/the-reason-you-published-it/) (2018-03-27): Four motives for open sourcing something, and what each one produces. - [Some problems are not nails](https://ooer.com/posts/some-problems-are-not-nails/) (2018-02-05): Code is useful. It is also not the important part. - [Nobody is reading your GitHub](https://ooer.com/posts/nobody-is-reading-your-github/) (2018-01-29): Public code as a hiring signal, and why it fails. - [A library is its documentation](https://ooer.com/posts/a-library-is-its-documentation/) (2017-12-30): Why a small fast library still does not replace the big slow one. - [A hackathon is the worst parts of the job, unpaid](https://ooer.com/posts/hackathon-worst-parts/) (2017-07-30): On the assumption that all developers enjoy them. - [Most people cannot afford the good idea](https://ooer.com/posts/cannot-afford-the-good-idea/) (2017-06-04): The five hour day, and who it is actually available to. - [The default is the lever](https://ooer.com/posts/the-default-is-the-lever/) (2017-04-23): Why the ad company can afford to block its own ads. - [No because is easier than yes if](https://ooer.com/posts/no-because-yes-if/) (2017-02-19): Two ways of looking at an idea that probably will not work. ## Pages - [Index](https://ooer.com/): every post, newest first, twelve to a page. - [Calendar](https://ooer.com/calendar/): the same archive by the day each post went up. - [Tags](https://ooer.com/tags/): 32 tags across the archive. - [whoami](https://ooer.com/about/): who is writing and why. - [Sitemap and accessibility](https://ooer.com/sitemap/): every page, and the site's conformance statement. - [Credits](https://ooer.com/credits/): the shaders, typefaces and tools the site is built from. - [Privacy](https://ooer.com/privacy/): no analytics, no trackers, no cookies, and what that leaves. ## Notes - The pages are static HTML and readable without JavaScript. - The default presentation is the accessible one; the animated version is behind a switch. Both carry the same content. - Machine-readable index: https://ooer.com/sitemap.xml - Full-text feed: https://ooer.com/feed.xml - Words are CC BY 4.0, code is MIT. Attribution is the whole ask: link the post you took it from.