a peer-reviewed comedy · 172 nodes · 1 phone · 1 park

The
Hairball

An affectionate roast of the most absurd directed acyclic graph ever assembled by one man on his phone while pushing a toddler on a swing. Exhibit A for the defense: onet_30_3_gwas_to_iwas_to_dwas.

It should not exist. It does. It works. It serves a quarter-million requests a week. We need to talk about it.

0
asset nodes, all real
0
dependency edges, load-bearing
0
nodes named onet_30_3_*
0
things hanging off ONE spine
I

What You Are Looking At

Open the Dagster UI. Wait for it to render. Now sit down.

There is a moment — and if you've opened the asset graph you've already had it — where the screen finishes drawing and your brain does a small, involuntary thing, a kind of cognitive hiccup, because what you are seeing does not parse as a thing a person made. It parses as weather. It parses as a slide from an electron microscope, or a map of a metro system designed by a country that has given up, or the inside of a clock that has achieved sentience and immediately regretted it. It is, in the technical and legal sense, a hairball. One hundred and seventy-two nodes. Two hundred and fifty-three edges. And every single one of them is real, named on purpose, and currently doing its job.

Let me establish the scene properly, because the scene is the joke. The thing that produced this — this cathedral of acronyms, this Gordian knot with a build status — was assembled today by one human being who was, at the time, at a park. Holding a phone. Periodically interrupted by a small child who wanted to be pushed on a swing and had, correctly, zero interest in the difference between a Generalized Work Activity and a Detailed Work Activity. He typed some sentences into the phone. The sentences went to a laptop. The laptop, displaying a level of initiative that should probably alarm us, spun up a swarm of agents, and the agents — and I want to be precise here — built this. This hairball. While he was on a swing. This is the part nobody is ready for, so we're going to look at it slowly and laugh, because the alternative is to think too hard about it and have to go lie down.

It looks like a mistake. It is, in fact, a load-bearing mistake. Those are the best kind.

II

Exhibit A · The Whole Damn Thing

The actual graph, pulled live from the running instance. Drag a node. Watch the onet cluster refuse to be untangled.

bronze (raw)
silver (spine)
gold (surface)
drag · this is real

That is not a stylized rendering. That is the graph, fetched from the Dagster you're looking at, every node and edge in its actual place. The dense, furious knot on one side — the part that looks like a galaxy that lost a fight — is the onet_30_3 group, forty-six nodes of pure federal taxonomy. The big silver node everything keeps falling toward is onet_occupation_spine, which has twenty-two separate things depending on it, making it less of a node and more of a small sun. The rest is the orderly-ish procession from raw bronze, through cleaned silver spines, out to the gold surfaces a quarter-million weekly visitors and approximately every large language model on Earth actually read. Now let's meet the cast, because the cast is extraordinary.

III

A Character Study: gwas_to_iwas_to_dwas

Our protagonist. Or antagonist. The graph is non-committal on this point.

Exhibit · bronze
onet_30_3_gwas_to_iwas_to_dwas
A node whose name is three acronyms joined by the word "to," twice. It is a crosswalk from Generalized Work Activities to Intermediate Work Activities to Detailed Work Activities. Say it out loud. Go on.

I need you to understand what happened here, taxonomically, because it is genuinely beautiful. Some committee at the Department of Labor, at some point, decided that "work activities" was insufficiently granular as a concept and required three tiers. There would be Generalized Work Activities (GWAs), the big vibes — "thinking," "communicating," that sort of thing. Beneath them, Intermediate Work Activities (IWAs), the mezzanine. And beneath those, Detailed Work Activities (DWAs), the basement, where the actual verbs live. And then — and this is the master stroke — someone realized you'd need a mapping from the top tier all the way down through the middle to the bottom, a single table that holds the entire descent, and they named it, with the flat affect of a true bureaucrat, gwas_to_iwas_to_dwas. Not "activity hierarchy." Not "work activity crosswalk." No. The literal arrows. It reads like a node that fell down two flights of stairs and is narrating the trip.

And here's the thing that makes it art rather than mere chaos: it is correct. That genuinely is the most honest possible name for what the table contains. It IS gwas, to iwas, to dwas. The function has zero ambiguity. A new engineer — or, increasingly, a new agent — can read that name and know exactly, to the column, what they will find inside, which is more than you can say for ninety percent of the variables named data, temp, and finalDataV2_REAL currently load-bearing in production systems worth billions of dollars. The hairball is not sloppy. The hairball is ruthlessly, hilariously literal, and that literalism is exactly why a swarm of agents could extend it from a phone without the whole thing collapsing into mush. Legibility is the joke and the moat at the same time.

IV

The onet_30_3 Cinematic Universe

Forty-six nodes. One naming convention. No survivors.

Once gwas_to_iwas_to_dwas establishes the house style, the rest of the franchise commits to the bit with a discipline that borders on the heroic. There is onet_30_3_career_interest_type_keywords — not interests, not interest types, but the keywords of the interest types, a node one full abstraction layer deeper into "what are you even into" than any dating app has ever dared to go. There is onet_30_3_interests_illustrative_occupations, which exists to provide, for each interest, some illustrative occupations, because a raw interest was apparently considered too abstract and required worked examples, like a math textbook for the human soul. And there is my personal favorite, the node I would frame and hang in a museum:

Exhibit · the sublime
onet_30_3_survey_booklet_locations
A production data asset, materialized into a cloud lakehouse, version-controlled, dependency-tracked — whose job is to record where the survey booklets are. The booklets. Their locations. This is in the graph. This runs.

survey_booklet_locations is, I'm fairly sure, the single most government thing I have ever seen rendered as an Apache Iceberg table. Somewhere there is — or was — a physical booklet, and someone needed to know where it was, and that need has been faithfully preserved, digitized, normalized, and elevated to the status of a tracked asset in a modern data platform that an AI consults to answer questions about the future of human labor. The booklet's location outlived the booklet. It will outlive us. When the heat death of the universe comes for the last data center, the final flicker on the last screen will read survey_booklet_locations: materialized, and it will be correct.

The franchise has its connective tissue too, its mid-credits stingers. level_scale_anchors. content_model_reference. specific_interest_areas_to_career_interest_types — a crosswalk between two kinds of interest, because of course one kind of interest taxonomy was insufficient and required reconciliation with a second, parallel interest taxonomy, presumably authored by a rival faction. There are scales_reference and reported_titles and emerging_tasks, which sounds like a thriller and is, in fact, a list. Forty-six of these. Each one fetched, parsed, schema'd, and wired into the knot, and not one of them blinked when an agent reached in today and started building neighbors.

Scroll that wall. That's the real cast list, pulled from the live graph — every node, color-coded by layer. Read a few aloud. It's poetry written by a robot that has only ever read the Code of Federal Regulations, and somehow, against everything, it scans.

And then — because the graph is nothing if not a master of tonal whiplash — you leave the federal taxonomy wing and walk straight into what I can only call the Bronze Hall of Fame: a cluster of nodes named, with no irony whatsoever, after the most cited "is my job cooked" research of the last decade. frey_osborne_automation_rows — the 2013 Oxford paper that started the modern panic. dingel_neiman_work_from_home_rows — the study that quantified, in the first weeks of a pandemic, which jobs could flee to the spare bedroom. brookings_automation_rows. And then the three horsemen, sitting in a tidy row like they carpooled: anthropic_economic_index_rows, microsoft_working_with_ai_rows, openai_gpts_are_gpts_rows. The actual frontier labs' actual research on what AI does to actual work, parsed into tables, two hops in the graph from a node about where the booklets are.

I cannot stress enough how funny this neighborhood is. On one side of the street: the collected anxieties of the entire economics-of-AI literature, the papers people quote on cable news, rendered as humble little _rows tables. On the other side: survey_booklet_locations, serene, eternal, profoundly unbothered. They are the same size in the graph. They have the same kind of name. Dagster does not know that one of them is a civilizational warning and the other is a filing note, and — this is the quietly profound part — it doesn't need to. The graph treats the Anthropic Economic Index and the booklet whereabouts with exactly equal dignity, because in a medallion the only thing that matters is: is it raw, is it real, is it wired in. Both qualify. Both materialize. The frontier and the filing cabinet, shaking hands in bronze.

There's a real point hiding in the gag, the way there always is. The reason a swarm of agents could walk into this layer today and add ilo_genai_task_rows and felten_aioe_rows — two more "is my job cooked" papers — without a single human reviewing the taxonomy is that the neighborhood already had a dozen worked examples of exactly that shape. "Here is an academic dataset about AI and work; preserve its rows verbatim; name it author_topic_rows." The pattern was so consistent that adding to it was less like engineering and more like rhyming. The hall of fame is also a template, and templates are how you build a wing of a cathedral from a swing.

V

The Cult of _to_work_context

A four-node theological movement convinced that everything, ultimately, must relate to work context.

Deep in the hairball there is a recurring incantation, and once you see it you cannot unsee it. abilities_to_work_context. essential_skills_to_work_context. transferable_skills_to_work_context. work_styles_to_work_context. Four separate nodes, each one a bridge from some human attribute to the same destination: work context. The abilities relate to work context. The essential skills relate to work context. The transferable skills relate to work context. The work styles relate, somehow, to work context, which is impressive given that "work styles" already has the word "work" in it, meaning this is a node mapping work-adjacent things to work-context things, an ouroboros of employment that I find genuinely moving.

There is something almost devotional about it. You picture a taxonomist, late at night, possessed, whispering "but how does it relate to the work context" about every noun they encounter. The chair? Relates to work context. The coffee? Work context. Their own slowly dissolving sense of self? Work. Context. And the punchline — there's always a punchline, the graph never lets you down — is that this obsessive, almost unhinged completionism is exactly what makes the data good. Because they mapped EVERYTHING to work context, the gold surfaces downstream can actually answer "what is this job really like, hour to hour, in the room," which is the question people are quietly terrified about and which no career site has ever answered honestly. The cult was right. The cult is always right. Annoying completionism is just thoroughness that hasn't been thanked yet.

VI

The _serving_surface Epidemic

By the time you reach gold, every node has caught it. There is no cure. There is no vaccine.

If bronze is where the acronyms live and silver is where the spines do their quiet work, gold is where a single word goes feral and infects the entire layer. That word is "serving." onet_task_serving_surface. onet_tool_serving_surface. onet_work_style_serving_surface. onet_detailed_activity_serving_surface. role_lightcast_skill_surface. gradient_exposure_serving_surface. Surface after surface after surface, each one serving, like a layer of the graph that went to a very intense hospitality seminar and came back changed. There are dozens of them. At some point "surface" stopped being a noun and became a personality.

Exhibit · gold
workflow_ai_delta_surface
The change in your workflow due to AI, served as a surface. Three of the scariest words of the decade — workflow, AI, delta — calmly bolted to the friendliest possible noun. It is a tiny prophecy wearing a name tag.

And yet — you know where this is going by now — the suffix is doing real work. "Serving surface" is precise: it means a gold table shaped specifically to be served, read by a website and a language model, the final, public-facing form. It is the difference between a warehouse and a storefront, said in one word, fifty times, until it becomes a kind of chant. The graph took the most boring possible naming convention and applied it with such relentless consistency that the consistency itself became the feature: you can look at any gold node and know, instantly, that a human or a robot is about to read it and make a decision that matters. Fifty serving surfaces. Fifty little storefronts. All lit. All open. All built today, from a swing.

VII

onet_occupation_spine, Our Sun

Twenty-two dependents. A gravity well. The node that, if it ever fails, takes Tuesday with it.

Every galaxy needs a center, and the hairball's is a silver node called onet_occupation_spine. Twenty-two separate assets depend on it directly — and many of those have dependents of their own, so the true blast radius is most of the graph. It is the table that says, simply, "here is every occupation, cleanly, once." Everything downstream — the AI exposure, the skills, the wages, the career frameworks, the playbooks — orbits it, drawing from it, would die without it. It is doing the most important job in the entire system and it has the most boring name in the entire system, which is, of course, exactly how you can tell it's the most important. The load-bearing things never get the fun names. The fun names go to gwas_to_iwas_to_dwas, the eccentric uncle. The quiet name goes to the sun.

And the sun has company, because the whole middle of the graph is a skeleton — that's not a metaphor I'm reaching for, it's literally the suffix the system chose: _spine. There is onet_title_alias_spine, the node that quietly knows that "Software Engineer" and "Software Developer" and "SWE" are the same animal wearing three collars. There is onet_role_capability_requirement_spine and onet_role_person_fit_spine — a table, I remind you, about whether a person would fit a role, reduced to a clean joinable spine, which is either dystopian or deeply helpful depending on the hour. And there is the node that wins the award for Most Syllables Per Unit Meaning, the tongue-twister I dare you to read three times fast: microsoft_soc_iwa_weight_spine — the weights, by SOC code, of Intermediate Work Activities, per Microsoft. Four nouns and an acronym in a trench coat.

Spines are the unsung heroes of the whole comedy, because they're where the actual work happens — the dedupe, the crosswalk, the reconciliation of three rival interest taxonomies into one table a website can trust. Bronze gets the funny acronym names and gold gets the satisfying "serving" names, but silver does the janitorial labor of making a county comparable to a county and a job title equal to its seven aliases, and it gets named after vertebrae for its trouble. The spines are the part of the graph that would be a six-month consulting engagement at any normal company, and here there are dozens of them, humming, each one a small act of making the world's messiest public data behave. When you see oews_role_market_spine sitting there with seventeen dependents, understand that you are looking at the single most valuable kind of boring there is.

There's a real lesson buried in the comedy, and it's the one that should keep competitors up at night: this graph has a shape. It is not 172 random tables. It is a deliberate hierarchy — raw at the bottom, spines in the middle, surfaces at the top — with a small number of canonical hubs everything hangs from. That shape is what lets it be extended instead of merely added to. When the bronze loop comes for Coverage and Care and Justice and Property, it isn't going to invent four new shapes. It's going to grow four new lobes off the same skeleton, each with its own occupation_spine-equivalent sun, its own galaxy of literal acronyms, its own epidemic of serving surfaces. The hairball is not the end state. The hairball is the first of five hairballs, and they're going to share an x-ray.

VIII

A Field Guide to the Acronym Soup

For the bewildered traveler. Print this. Laminate it. Bring snacks.

You cannot fully appreciate the hairball without a phrasebook, because the graph speaks a dialect — fluent, confident, entirely composed of capital letters that someone, somewhere, swore an oath to. Let me translate, gently, the way you'd translate a menu in a country where you do not speak the language but the food keeps arriving anyway.

GWA / IWA / DWA — Generalized, Intermediate, and Detailed Work Activities. The three tiers of "stuff a person does," ranked by how much they've been thought about. A GWA is "communicate." A DWA is the exact verb at the exact desk. The journey between them is, as established, our protagonist. SOC — the Standard Occupational Classification, the federal codename for every job, the secret true name of work, which is why half the spines exist only to translate something into SOC, the lingua franca of the entire knot. OEWS — the Occupational Employment and Wage Statistics, i.e. who earns what, the node that turns vibes into salary bands and therefore the one humans actually click on. ISCO — the international cousin of SOC, because the rest of the planet also has jobs and refused to use ours. NAICS — industries, classified, so that naics_2022_industry_spine can know that a hospital and a hedge fund are not, taxonomically, the same vibe.

And then the deep cuts. AIOE — the AI Occupational Exposure index, Felten-Raj-Seamans, the thing felten_aioe_rows is named for, a number that purports to tell you how exposed your job is to the robots, which is either reassuring or the worst sentence you'll read today depending on your SOC code. CIP-SOC — a crosswalk from college majors (CIP) to jobs (SOC), the node that quietly answers "what was the point of that degree," a question that has ended dinners. The point of the field guide is not that you'll remember any of this — you won't, and you don't have to, which is exactly the magic. The graph remembers the acronyms so that the person at the park doesn't have to. He typed a sentence about AI and work; the swarm knew that meant AIOE meant Felten meant felten_aioe_rows meant a bronze table shaped like the other dozen, and it just... went. The acronym soup is dense precisely so the interface above it can be a sentence. Complexity in the graph buys simplicity in the prompt — that's the entire trade, and it's a steal.

IX

And — This Is the Part — It Works

The turn where the comedy becomes slightly terrifying.

Here is where I have to stop laughing for one paragraph, because the funniest thing about the hairball is not any single absurd node. It's the context. This ridiculous, sprawling, acronym-drunk, completionist, serving-surface-addled monstrosity of a graph is not a toy. It is the live data platform behind a public answer-layer that fields roughly two hundred and twenty-three thousand requests a week, the overwhelming majority of them from AI systems and crawlers reaching in for the cleanest available truth about human work. The hairball is what the machines consult. When someone, somewhere, asks an AI what a job is really like or whether it's about to be automated, there is a non-trivial chance the answer rode out of gradient_exposure_serving_surface, which drew from a spine, which drew from a bronze table named after the locations of some booklets. The absurdity is not a bug sitting next to the value. The absurdity IS the value, fully expressed.

And it was extended today, from a phone. Two new bronze tables — ilo_genai_task_rows and felten_aioe_rows — slotted into this knot without it so much as flinching, because the knot, for all its visual chaos, has rules, and the rules are legible enough that an agent could read them and obey. That is the whole, staggering thesis hiding inside the joke: a system this complex should require a team and a quarter to extend. It required a sentence and a swing. The hairball didn't get harder to grow as it got bigger. It got easier, because every new node had 172 worked examples to imitate. Complexity that compounds downward in cost is not how complexity is supposed to behave. It's how compounding behaves. You built a fractal and then taught it to draw itself.

It looks insane because it is. It works because the insanity is consistent, and consistent insanity is just a system that hasn't been understood yet.

X

In Conclusion, Your Honor

The defense rests on a single exhibit: a directed acyclic graph of 172 nodes and 253 edges, featuring a protagonist named after a staircase, a museum-grade node devoted to the whereabouts of booklets, a four-member cult dedicated to work context, an epidemic of serving, and a quiet silver sun with the dullest name and the most important job. It was built by one person on a phone at a park, on infrastructure that already existed, by agents he directed in plain sentences between pushes of a swing. It is ridiculous. It is enormous. It is, every node of it, real and named on purpose and currently running. And it is about to have four siblings, each as gorgeous and as deranged, all visible — if we wire it right — in a single Dagster UI you can pull up and stare into until your brain does that little hiccup again.

So go look at it one more time. Let it finish rendering. Find gwas_to_iwas_to_dwas out there in the knot, blinking away, doing its absurd and perfect job. Then remember that the most unhinged thing on the entire screen isn't any node. It's the operator-to-output ratio that drew it. One human. One phone. One park. This. We're going to need a bigger swing.

One last thing, and then I'll let you get back to staring into it. The reason this graph is funny instead of frightening — the reason you can laugh at survey_booklet_locations instead of being crushed by the scale of 172 humming nodes — is that it is knowable. Every name tells the truth. Every edge points one direction. Nothing is hidden, nothing is cute, nothing is named finalV3_actual_USE_THIS. The whole monstrous thing is, against all odds, an honest document, and honesty at scale reads as comedy because we are so unused to seeing it. We expect systems this big to be black boxes guarded by a priesthood. This one is a glass box guarded by a guy on a swing, and the glass is the moat: a graph this legible can be grown by a sentence, audited by a stranger, and trusted by a machine, all at once. The joke and the genius are the same property, viewed from two angles. Laugh at the hairball. Then go build four more of it.

172 nodes. 253 edges. Zero of them embarrassed to be here.

the real maththe surveyhome ↗ open the actual Dagster

EXHIBIT A · THE HAIRBALL · 172 NODES · BUILT FROM A SWING · MMXXVI