From the PayPal Mafia to the Google AI Talent Diaspora
In the early 2000s, a scrappy digital payments startup called PayPal produced an unlikely legacy. When PayPal was acquired by eBay in 2002, its early team dispersed — and that “PayPal Mafia” went on to seed a generation of Silicon Valley giants. Alumni like Elon Musk, Reid Hoffman, Peter Thiel, David Sacks, Max Levchin, Roelof Botha, and others became founders or key leaders of companies including LinkedIn, YouTube, Yelp, Yammer, SpaceX, Tesla, Palantir, Sequoia Capital, Affirm, and more.
This legendary cohort, immortalized by a 2007 Fortune photo spread with its members dressed in gangster attire, exemplified how one talent hub can trigger waves of innovation across industries.
It wasn’t just luck; it was the power of a concentrated environment where brilliant minds cross-pollinated ideas. The PayPal Mafia’s influence showed that when top talent converges in one place and time, the aftershocks can remake the tech landscape.
Talent Hubs and Waves of Innovation
As Mark Twain once said “History Doesn’t Repeat Itself, but It Often Rhymes”, and we see it with these talent hubs.
Innovation often comes in waves, emerging from concentrated environments rich in expertise, resources, and ambition. PayPal’s success bred a network of trust and collaboration among its alumni, who remained connected and propelled each other into new ventures.
This underscores a broader pattern: talent attracts talent, creating a self-reinforcing cycle where success begets more success. Just as Silicon Valley itself gained momentum from tight-knit communities of innovators (from the Fairchild Semiconductor “Traitorous Eight” in the 1960s to the PayPal Mafia decades later), each generation of tech seems to have its epicenter. People go where the action is: “talent attracts talent” in a virtuous loop.
This dynamic doesn’t just yield one company’s success — it creates diasporas of skilled people who carry their know-how into new realms.
The PayPal alumni, for example, leveraged the mentorship and insight gained from each other to tackle electric vehicles, social networks, defense tech, video streaming and beyond. In their wake, they left clues about how to engineer an innovation wave.
Two decades later, we saw a similar pattern playing out in a different domain — not in payments or social media, but in artificial intelligence. The new epicenter was not a startup acquired in a frenzy, but a tech giant’s research labs.
Google Brain & DeepMind: The AI Era’s Talent Epicenter
Fast forward to the 2010s: if you were an AI researcher with big ambitions, Google was the place to be. Google had started an internal research effort called Google Brain around 2011, and in 2014 it acquired the London-based lab DeepMind. Together, these units became an undisputed nexus of AI talent. By the mid-2010s, Google employed an astonishing roster of the world’s top AI minds.
Why did so many luminaries congregate there? Google (and its subsidiary DeepMind) offered virtually unparalleled resources — computing power (think of Google’s custom TPUs), huge datasets, and an environment that encouraged publication and open research (pro innovation and exploration). Just as importantly, the presence of visionaries like Hinton (a pioneer of deep learning), Andrew Ng, Jeff Dean, and DeepMind’s co-founder Demis Hassabis created a strong gravitational pull. Top researchers wanted to work with other top researchers. The result was a virtuous cycle much like PayPal’s: talent attracting more talent, snowballing into breakthrough after breakthrough. Google Brain and DeepMind churned out innovations like the Transformer architecture (the foundation of today’s NLP revolution) and AlphaGo’s groundbreaking triumph in Go.
Yet, for all this concentration of brainpower, the story didn’t end with Google holding a monopoly on AI progress. In fact, Google’s very success in amassing talent set the stage for an AI diaspora — a new generation of AI startups and labs founded or led by ex-Googlers.
Get Miguel Parente’s stories in your inbox
Join Medium for free to get updates from this writer.
In a striking irony, Google’s vast pool of talent may have bred a sense of complacency — even leading to the classic “innovator’s dilemma.” When OpenAI launched ChatGPT in late 2022, it blindsided Google, despite the company’s years-long head start in AI research.
The Great AI Diaspora: From Google to New AI Ventures
Just as the PayPal Mafia dispersed to launch a who’s who of Web 2.0 companies, the 2020s are seeing Google Brain/DeepMind alumni spearheading many of the most exciting (and well-funded) AI ventures. It’s a trend that underscores how closely today’s AI ecosystem is entwined with Google’s legacy. Consider some of the highest-profile examples:
- OpenAI — Co-founded in late 2015 by Ilya Sutskever, who left his role as a star research scientist at Google Brain to become OpenAI’s Chief Scientist. OpenAI’s mission to build safe AGI (and its breakthrough with ChatGPT) might never have happened without Google’s prior nurturing of talent. Interestingly, OpenAI’s formation was reportedly catalyzed by Elon Musk’s concern that Google was “gobbling up” AI talent via DeepMind— a direct reaction that led to a new hub of innovation outside Google’s control.
- Anthropic — Founded in 2021 by Dario Amodei and others after a high-profile departure from OpenAI. Dario Amodei had earlier been a Google Brain researcher before joining OpenAI. Now as CEO of Anthropic, he leads work on the Claude language model and a company explicitly focused on AI safety research. In many ways, Anthropic represents the ethos of the Google/DeepMind research culture transplanted into a startup: big compute, cutting-edge models, and a strong emphasis on ethics and safety.
- Character.AI — Created in late 2021 by Noam Shazeer and Daniel De Freitas, two engineers who had been instrumental in Google’s conversational AI projects (they were key developers of the chatbot precursor LaMDA). Frustrated with the pace of big-company development, they left Google to build their own AI chatbot service. By designing Character.AI as a platform for users to create and converse with custom chatbot “characters”, Shazeer and de Freitas brought a very Google-y idea (open-ended conversational AI) into the startup realm — and in 2023 their former employer even inked a deal with Character.AI, a twist that brought Noam Shazeer back to Google to co-lead its AI efforts.
- Cohere — Launched in 2019 by Aidan Gomez, Nick Frosst, and Ivan Zhang — all Toronto-based researchers with ties to Google Brain. Gomez, notably, was one of the co-authors of the landmark “Attention Is All You Need” Transformer paper as a 20-year-old intern at Google. He left Google Brain to start Cohere and build large language models for enterprise use. His co-founder Nick Frosst was a protégé of Geoffrey Hinton at Google. Cohere’s existence is a testament to the idea that even interns and junior researchers at a talent hub like Google Brain can take that expertise and run with it in a startup setting.
- Mistral AI — Founded in 2023 by Arthur Mensch after he left DeepMind’s Paris office. Mensch had been working on large language models at DeepMind; now Mistral aims to be a European champion in AI, known for open-model releases and a focus on efficiency.
- xAI — When Elon Musk set out in 2023 to found a new AI company to rival OpenAI, he tapped the Google/DeepMind network as well. xAI’s initial team included several researchers poached from Google’s ranks — for example, Igor Babuschkin, whom Musk recruited from DeepMind to serve as xAI’s engineering lead.
These examples are just the tip of the iceberg. The broader pattern is clear: a significant number of top researchers and engineers from Google Brain/DeepMind in the 2010s have since scattered into new organizations that are defining the cutting edge of AI.
I built a quick React dashboard, with the help of ChatGPT, to visualize this fascinating talent diaspora and how it has shaped the modern AI landscape:
You can easily play with it too:
import React, { useMemo, useState, useEffect } from "react";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { Checkbox } from "@/components/ui/checkbox";
import { Download, ListFilter, Grid3X3, Rows, Search, RefreshCw } from "lucide-react";
import { ResponsiveContainer, PieChart, Pie, Cell, Tooltip, Legend, BarChart, Bar, XAxis, YAxis, CartesianGrid } from "recharts";
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover";
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from "@/components/ui/command";
import { ScrollArea } from "@/components/ui/scroll-area";
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table";
import { Slider } from "@/components/ui/slider";
import { Separator } from "@/components/ui/separator";
// -----------------------------------------------------------------------------
// Constants
// -----------------------------------------------------------------------------
const COLORS = [
"#6366F1", "#22C55E", "#F59E0B", "#EF4444", "#06B6D4",
"#8B5CF6", "#84CC16", "#F97316", "#14B8A6", "#A855F7", "#10B981"
];
// --- Data --------------------------------------------------------------------
// One person per record
const RAW = [
{ name: "Geoffrey Hinton", googleRoleYears: "Google VP & Engineering Fellow (2013–2023)", currentRole: "Independent Researcher", impact: "Deep learning pioneer; Turing Award winner", lineage: "U. Toronto → Google → Independent", notes: "Left Google to speak freely about AI risks" },
{name: "Dario Amodei", googleRoleYears: "Senior Research Scientist, Google Brain (2016–2018)", currentRole: "Co-founder & CEO, Anthropic", impact: "Scaling laws; led GPT-2/3 at OpenAI; frontier-model safety", lineage: "Google Brain → OpenAI → Anthropic", notes: "Prominent voice on AI safety and policy"},
{ name: "Ilya Sutskever", googleRoleYears: "Research Scientist, Google Brain (2011–2015)", currentRole: "Co-founder, Safe Superintelligence Inc. (ex-OpenAI)", impact: "seq2seq models, GPT-architecture lineage", lineage: "Google Brain → OpenAI → SSI", notes: "Co-led GPT-2 and GPT-3 research" },
{ name: "Noam Shazeer", googleRoleYears: "Senior Staff Research Scientist, Google Brain (2011–2021)", currentRole: "Co-founder & CEO, Character.AI", impact: "Transformer & MoE architectures", lineage: "Google Brain → Character.AI", notes: "Defined LLM training scaling era" },
{ name: "Daniel De Freitas", googleRoleYears: "Research Scientist, Google Research (Meena Project)", currentRole: "Co-founder & President, Character.AI", impact: "Early conversational AI", lineage: "Google → Character.AI", notes: "Partnered with Noam Shazeer" },
{ name: "Ashish Vaswani", googleRoleYears: "Google Brain Research Scientist (2014–2021)", currentRole: "Co-founder, Essential AI", impact: "Lead author, ‘Attention Is All You Need’", lineage: "Google Brain → Adept → Essential", notes: "Defined Transformer paradigm" },
{ name: "Niki Parmar", googleRoleYears: "Google Brain Research Scientist (2014–2021)", currentRole: "Co-founder, Essential AI", impact: "Transformer co-author", lineage: "Google Brain → Adept → Essential", notes: "Early deep learning pioneer" },
{ name: "Aidan Gomez", googleRoleYears: "Google Brain Intern (2017)", currentRole: "Co-founder & CEO, Cohere", impact: "Transformer co-author; Cohere LLMs", lineage: "Google Brain → Cohere", notes: "Canadian AI ecosystem leader" },
{ name: "Jakob Uszkoreit", googleRoleYears: "Google Brain Scientist (2010–2020)", currentRole: "Co-founder & CEO, Inceptive (AI for RNA design)", impact: "Transformer co-author", lineage: "Google Brain → Inceptive", notes: "Cross-disciplinary biotech-AI" },
{ name: "Llion Jones", googleRoleYears: "Google Brain Research Scientist (2014–2022)", currentRole: "Co-founder, Sakana AI", impact: "Transformer co-author", lineage: "Google Brain → Sakana AI", notes: "Leads bio-inspired model research" },
{ name: "Łukasz Kaiser", googleRoleYears: "Google Brain (2014–2021)", currentRole: "Research Scientist, Apple ML", impact: "TensorFlow, seq2seq, T5", lineage: "Google Brain → OpenAI → Apple", notes: "Key in neural translation systems" },
{ name: "Illia Polosukhin", googleRoleYears: "Google Research (2014–2017)", currentRole: "Co-founder, NEAR Protocol", impact: "Transformer co-author; Web3-AI bridge", lineage: "Google → NEAR", notes: "Mixed AI & blockchain" },
{ name: "Mustafa Suleyman", googleRoleYears: "DeepMind Co-founder (2010–2019), VP AI Policy (Google 2020–2022)", currentRole: "CEO, Microsoft AI", impact: "DeepMind founder, Inflection co-founder", lineage: "DeepMind → Google → Inflection → Microsoft", notes: "Now leads Copilot/Bing/Edge AI" },
{ name: "Karén Simonyan", googleRoleYears: "DeepMind Principal Scientist (2014–2022)", currentRole: "CTO, Microsoft AI", impact: "VGGNet, Inflection co-founder", lineage: "DeepMind → Inflection → Microsoft", notes: "Deep learning architect" },
{ name: "Arthur Mensch", googleRoleYears: "DeepMind Paris Researcher (2017–2022)", currentRole: "Co-founder & CEO, Mistral AI", impact: "Founded Europe’s leading open-weight LLM startup", lineage: "DeepMind → Mistral", notes: "Represents EU’s AI autonomy" },
{ name: "David Ha", googleRoleYears: "Google Brain Research Scientist (2016–2022)", currentRole: "Co-founder & CEO, Sakana AI", impact: "Generative visual reasoning, neuroevolution", lineage: "Google Brain → Sakana AI", notes: "Champion of creativity in ML" },
{ name: "Chris Olah", googleRoleYears: "Google Brain (2015–2018)", currentRole: "Co-founder, Anthropic", impact: "Interpretability & visualization", lineage: "Google Brain → OpenAI → Anthropic", notes: "Influenced safety research culture" },
{ name: "Jan Leike", googleRoleYears: "DeepMind Researcher (2016–2021)", currentRole: "Head of Alignment, Anthropic", impact: "AI alignment theory", lineage: "DeepMind → OpenAI → Anthropic", notes: "Left OpenAI over safety disputes" },
{ name: "Jacob Devlin", googleRoleYears: "Google Brain (2017–2023)", currentRole: "AI Researcher, OpenAI", impact: "BERT author", lineage: "Google Brain → OpenAI", notes: "Pioneered NLP pretraining" },
{ name: "Fei-Fei Li", googleRoleYears: "Chief Scientist, Google Cloud AI (2017–2018)", currentRole: "Professor; Co-Director, Stanford HAI", impact: "ImageNet, CV breakthroughs", lineage: "Google Cloud → Stanford", notes: "Global AI policy voice" },
{ name: "Andrew Ng", googleRoleYears: "Co-founder, Google Brain (2011–2014)", currentRole: "CEO, Landing AI; Founder, DeepLearning.AI", impact: "Online AI education, early deep learning", lineage: "Google → Baidu → DeepLearning.AI", notes: "Democratized AI education" },
{ name: "John Giannandrea", googleRoleYears: "SVP Search & AI, Google (2010–2018)", currentRole: "SVP ML & AI Strategy, Apple", impact: "Led Search AI, RankBrain", lineage: "Google → Apple", notes: "Brought ML into iOS and Siri" },
{ name: "Ian Goodfellow", googleRoleYears: "Google Brain (2014–2016) → DeepMind (2022–)", currentRole: "Senior Director, DeepMind", impact: "Invented GANs", lineage: "Google → Apple → DeepMind", notes: "Bridged academic and applied AI" },
{ name: "Samy Bengio", googleRoleYears: "Senior Scientist, Google Brain (2007–2021)", currentRole: "Senior Director, Apple AI Research", impact: "Mentor of Sutskever, Goodfellow", lineage: "Google → Apple", notes: "Left after ethical AI controversy" },
{ name: "Timnit Gebru", googleRoleYears: "Co-Lead, Ethical AI, Google Research (2018–2020)", currentRole: "Founder, DAIR Institute", impact: "AI fairness and governance", lineage: "Google → DAIR", notes: "Public ethics advocate" },
{ name: "Margaret Mitchell", googleRoleYears: "Co-Lead, Ethical AI, Google Research (2018–2021)", currentRole: "Chief Ethics Scientist, Hugging Face", impact: "Responsible AI frameworks", lineage: "Google → Hugging Face", notes: "Leading ethical AI in open source" },
{ name: "Barret Zoph", googleRoleYears: "Google Brain (2016–2022)", currentRole: "VP Research (Post-training), OpenAI", impact: "AutoML, NASNet", lineage: "Google → OpenAI", notes: "Works on LLM training optimization" },
{ name: "Sara Hooker", googleRoleYears: "Google Brain (2017–2021)", currentRole: "VP Research, Cohere / Founder, Cohere For AI", impact: "Model compression, inclusion in AI", lineage: "Google → Cohere", notes: "Open collaboration advocate" },
{ name: "Hugo Larochelle", googleRoleYears: "DeepMind Montreal Lead (2016–2025)", currentRole: "Head of Research, Mila (Québec AI Institute)", impact: "Meta-learning, representation learning", lineage: "DeepMind → Mila", notes: "Academic leadership return" },
{ name: "Igor Babuschkin", googleRoleYears: "DeepMind Research Scientist (2017–2023)", currentRole: "Researcher, xAI", impact: "Reinforcement learning, AlphaStar", lineage: "DeepMind → xAI", notes: "Key Musk recruit" },
{ name: "Zihang Dai", googleRoleYears: "Google Brain Researcher (2018–2022)", currentRole: "Research Scientist, xAI", impact: "Transformer-XL, long-context models", lineage: "Google → xAI", notes: "Specialized in long-context LLMs" },
{ name: "Christian Szegedy", googleRoleYears: "Google Research Scientist (2012–2022)", currentRole: "Research Scientist, xAI", impact: "Inception, DeepDream, symbolic AI", lineage: "Google → xAI", notes: "Hybrid reasoning focus" },
{ name: "Laurent Sifre", googleRoleYears: "DeepMind Research Scientist (2014–2022)", currentRole: "Researcher, xAI", impact: "AlphaFold, AlphaGo team", lineage: "DeepMind → xAI", notes: "Part of DeepMind’s core RL legacy" },
{ name: "Yuhuai (Tony) Wu", googleRoleYears: "Google Brain (2017–2021)", currentRole: "Research Scientist, xAI", impact: "Symbolic reasoning, hybrid ML", lineage: "Google → xAI", notes: "Focused on mathematical reasoning" },
];
// Derive helper fields: company tags from currentRole, years span length estimate, org type
function enrich(records) {
return records.map((r) => {
const current = r.currentRole || "";
const org = (current.match(/,\s*([^,]+)$/)?.[1] || current).trim();
const company = (current.split(", ").pop() || "").trim();
// Extract rough start/end years from googleRoleYears
const years = r.googleRoleYears.match(/(19|20)\d{2}–(19|20)\d{2}|(19|20)\d{2}–|–(19|20)\d{2}|(19|20)\d{2}/g);
const nums = years ? years.join(" ").match(/(19|20)\d{2}/g) : [];
let start = null, end = null;
if (nums && nums.length >= 1) start = parseInt(nums[0]);
if (nums && nums.length >= 2) end = parseInt(nums[nums.length - 1]);
// Tag by lineage endpoints
const tags = [];
if (/OpenAI/i.test(r.lineage) || /OpenAI/i.test(current)) tags.push("OpenAI");
if (/Anthropic/i.test(r.lineage) || /Anthropic/i.test(current)) tags.push("Anthropic");
if (/Cohere/i.test(current)) tags.push("Cohere");
if (/Character\.AI|Character AI/i.test(current)) tags.push("Character.AI");
if (/Mistral/i.test(current)) tags.push("Mistral");
if (/xAI/i.test(current)) tags.push("xAI");
if (/Microsoft AI|Microsoft/i.test(current)) tags.push("Microsoft");
if (/Apple/i.test(current)) tags.push("Apple");
if (/DeepMind/i.test(r.googleRoleYears) || /DeepMind/i.test(r.lineage)) tags.push("DeepMind alum");
if (/Google Brain|Google Research|Google Cloud|Google/i.test(r.googleRoleYears)) tags.push("Google alum");
return { ...r, org, company, googleStart: start, googleEnd: end, tags };
});
}
const DATA = enrich(RAW);
// --- Small utilities ----------------------------------------------------------
const uniq = (arr) => Array.from(new Set(arr.filter(Boolean)));
const groupCounts = (rows, keyFn) => {
const m = new Map();
rows.forEach((r) => {
const k = keyFn(r);
if (!k && k !== 0) return;
m.set(k, (m.get(k) || 0) + 1);
});
return Array.from(m, ([name, value]) => ({ name, value }));
};
// Aggregate small slices into "Other" for cleaner pies
function aggregateSmall(list, threshold = 2, maxSlices = 10) {
if (!Array.isArray(list)) return [];
const sorted = [...list].sort((a, b) => b.value - a.value);
const big = [];
let other = 0;
for (const item of sorted) {
if (item.value >= threshold && big.length < maxSlices) {
big.push(item);
} else {
other += item.value;
}
}
if (other > 0) big.push({ name: "Other", value: other });
return big;
}
function exportCSV(rows) {
const headers = [
"Name",
"Google/DeepMind Role & Years",
"Current Role / Org",
"Notable Work / Impact",
"Lineage / Transition Path",
"Comments / Notes",
"Tags",
];
const lines = [headers.join(",")];
rows.forEach((r) => {
const row = [
r.name,
r.googleRoleYears,
r.currentRole,
r.impact,
r.lineage,
r.notes,
(r.tags || []).join(";")
].map((v) => `"${(v ?? "").replaceAll('"', '""')}"`);
lines.push(row.join(","));
});
const blob = new Blob([lines.join("\n")], { type: "text/csv;charset=utf-8;" });
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = "google_deepmind_ai_diaspora.csv";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
}
// Simple multi-select (Command palette inside a Popover)
function MultiSelect({ label, options, values, onChange, buttonText = "Filter" }) {
const selected = new Set(values || []);
return (
<div className="flex flex-col gap-2">
<label className="text-sm text-muted-foreground">{label}</label>
<Popover>
<PopoverTrigger asChild>
<Button variant="outline" className="justify-between min-w-[220px] h-10">
<div className="flex items-center gap-2">
<ListFilter className="h-4 w-4" />
<span className="font-medium">{buttonText}</span>
</div>
<span className="text-muted-foreground">{selected.size || 0} selected</span>
</Button>
</PopoverTrigger>
<PopoverContent className="p-0 w-[280px]">
<Command>
<CommandInput placeholder={`Search ${label.toLowerCase()}...`} />
<CommandEmpty>No results.</CommandEmpty>
<CommandGroup>
<ScrollArea className="h-64">
{options.map((opt) => (
<CommandItem
key={opt}
onSelect={() => {
const next = new Set(selected);
next.has(opt) ? next.delete(opt) : next.add(opt);
onChange(Array.from(next));
}}
>
<Checkbox checked={selected.has(opt)} className="mr-2" />
{opt}
</CommandItem>
))}
</ScrollArea>
</CommandGroup>
</Command>
</PopoverContent>
</Popover>
</div>
);
}
// -----------------------------------------------------------------------------
// Lightweight self-tests (dev only) so we don't regress basic helpers
// -----------------------------------------------------------------------------
function runSelfTests() {
try {
// groupCounts basic
const gc = groupCounts([{ x: "A" }, { x: "A" }, { x: "B" }], (r) => r.x);
console.assert(gc.find((d) => d.name === "A")?.value === 2, "groupCounts A should be 2");
console.assert(gc.find((d) => d.name === "B")?.value === 1, "groupCounts B should be 1");
// enrich company parse
const sample = enrich([{ currentRole: "VP Research, OpenAI", googleRoleYears: "(2019–2020)" }])[0];
console.assert(sample.company === "OpenAI", `company should be OpenAI, got ${sample.company}`);
// tag extraction non-empty for known entries
const someTags = DATA.find((d) => d.name === "Noam Shazeer")?.tags || [];
console.assert(someTags.includes("Character.AI") && someTags.includes("Google alum"), "tags should include Character.AI and Google alum");
// aggregateSmall should bucket tiny groups into Other
const agg = aggregateSmall([{ name: "A", value: 5 }, { name: "B", value: 1 }, { name: "C", value: 1 }], 2, 10);
console.assert(agg.some((x) => x.name === "Other" && x.value === 2), "aggregateSmall should create Other=2");
} catch (e) {
console.warn("Self-tests threw", e);
}
}
export default function DiasporaDashboard() {
const [q, setQ] = useState("");
const [view, setView] = useState("cards"); // 'cards' | 'table'
const [companyFilter, setCompanyFilter] = useState([]);
const [tagFilter, setTagFilter] = useState([]);
const [yearRange, setYearRange] = useState([2007, 2025]);
const [sortBy, setSortBy] = useState("name");
useEffect(() => {
// Run tiny self-tests in dev
try { runSelfTests(); } catch {}
}, []);
const allCompanies = useMemo(() => uniq(DATA.map((d) => d.company)), []);
const allTags = useMemo(() => uniq(DATA.flatMap((d) => d.tags)), []);
const minYear = 2007;
const maxYear = 2025;
const resetAll = () => {
setQ("");
setCompanyFilter([]);
setTagFilter([]);
setYearRange([minYear, maxYear]);
setSortBy("name");
};
// ---------------------------------------------
// Core filtered view (computed first!)
// ---------------------------------------------
const filtered = useMemo(() => {
const qLower = q.trim().toLowerCase();
return DATA.filter((d) => {
const matchesText = !qLower
|| [d.name, d.googleRoleYears, d.currentRole, d.impact, d.lineage, d.notes]
.join(" ")
.toLowerCase()
.includes(qLower);
const inCompany = companyFilter.length === 0 || companyFilter.includes(d.company);
const inTags = tagFilter.length === 0 || d.tags.some((t) => tagFilter.includes(t));
// Year overlap with [start, end]
const s = d.googleStart ?? minYear;
const e = d.googleEnd ?? maxYear;
const overlaps = s <= yearRange[1] && (e || s) >= yearRange[0];
return matchesText && inCompany && inTags && overlaps;
}).sort((a, b) => {
if (sortBy === "name") return a.name.localeCompare(b.name);
if (sortBy === "company") return a.company.localeCompare(b.company);
if (sortBy === "start") return (a.googleStart || 0) - (b.googleStart || 0);
if (sortBy === "end") return (a.googleEnd || 0) - (b.googleEnd || 0);
return 0;
});
}, [q, companyFilter, tagFilter, yearRange, sortBy]);
// ---------------------------------------------
// Charts (computed AFTER filtered)
// ---------------------------------------------
const companyCounts = useMemo(() => groupCounts(filtered, (r) => r.company), [filtered]);
const pieCompanyData = useMemo(() => aggregateSmall(companyCounts, 2, 9), [companyCounts]);
const byStartYear = useMemo(() => groupCounts(filtered, (r) => r.googleStart), [filtered]);
const byTagRaw = useMemo(() => groupCounts(filtered.flatMap((r) => (r.tags || []).map((t) => ({ tag: t }))), (x) => x.tag), [filtered]);
const topTagData = useMemo(() => [...byTagRaw].sort((a, b) => b.value - a.value).slice(0, 10), [byTagRaw]);
// Empty state component
const EmptyState = ({ onReset }: { onReset: () => void }) => (
<div className="flex items-center justify-center py-16">
<Card className="w-full max-w-3xl border-dashed shadow-sm">
<CardContent className="py-16">
<div className="mx-auto h-14 w-14 rounded-2xl bg-muted flex items-center justify-center mb-4">
<Search className="h-7 w-7 text-muted-foreground" />
</div>
<h3 className="text-xl font-semibold text-center">No alumni match your search</h3>
<p className="text-sm text-muted-foreground text-center mt-1">
Try adjusting your search terms or filters.
</p>
<div className="mt-6 flex items-center justify-center gap-2">
<Button variant="outline" onClick={onReset}>
<RefreshCw className="mr-2 h-4 w-4" /> Reset filters
</Button>
</div>
</CardContent>
</Card>
</div>
);
return (
<div className="min-h-screen bg-gradient-to-b from-background to-muted/40 p-6">
<div className="mx-auto max-w-7xl space-y-6">
{/* Header */}
<div className="flex items-center justify-between">
<div>
<h1 className="text-3xl font-bold tracking-tight">Google / DeepMind AI Diaspora</h1>
<p className="text-muted-foreground">Explore the people who shaped modern AI and where they went next.</p>
</div>
<div className="flex gap-2">
<Button variant="outline" onClick={() => exportCSV(filtered)}>
<Download className="mr-2 h-4 w-4" /> Export CSV
</Button>
<Button
variant="outline"
onClick={resetAll}
>
<RefreshCw className="mr-2 h-4 w-4" /> Reset
</Button>
</div>
</div>
{/* Controls */}
<Card className="border-dashed">
<CardContent className="pt-6 grid gap-4 md:grid-cols-2 lg:grid-cols-3">
<div className="flex flex-col gap-2">
<label className="text-sm text-muted-foreground">Search</label>
<div className="relative">
<Search className="absolute left-2 top-2.5 h-4 w-4 text-muted-foreground" />
<Input
value={q}
onChange={(e) => setQ(e.target.value)}
placeholder="Search names, orgs, impact, lineage..."
className="pl-8"
/>
</div>
</div>
<MultiSelect
label="Company (current)"
buttonText="Filter companies"
options={allCompanies}
values={companyFilter}
onChange={setCompanyFilter}
/>
<MultiSelect
label="Tags"
buttonText="Filter tags"
options={allTags}
values={tagFilter}
onChange={setTagFilter}
/>
<div className="col-span-1 md:col-span-2 lg:col-span-3">
<div className="flex items-center justify-between">
<span className="text-sm text-muted-foreground">Google/DeepMind years overlap</span>
<div className="text-xs text-muted-foreground">{yearRange[0]} – {yearRange[1]}</div>
</div>
<div className="pt-3 px-2">
<Slider min={2007} max={2025} step={1} value={yearRange} onValueChange={setYearRange} className="w-full" />
</div>
</div>
<div className="flex items-center gap-3">
<label className="text-sm text-muted-foreground">Sort by</label>
<div className="flex gap-2">
<Button variant={sortBy === "name" ? "default" : "outline"} size="sm" onClick={() => setSortBy("name")}>
Name
</Button>
<Button variant={sortBy === "company" ? "default" : "outline"} size="sm" onClick={() => setSortBy("company")}>
Company
</Button>
<Button variant={sortBy === "start" ? "default" : "outline"} size="sm" onClick={() => setSortBy("start")}>
Google Start
</Button>
<Button variant={sortBy === "end" ? "default" : "outline"} size="sm" onClick={() => setSortBy("end")}>
Google End
</Button>
</div>
</div>
<div className="flex items-center gap-3">
<label className="text-sm text-muted-foreground">View</label>
<div className="flex gap-2">
<Button variant={view === "cards" ? "default" : "outline"} size="sm" onClick={() => setView("cards")}>
<Grid3X3 className="mr-2 h-4 w-4" /> Cards
</Button>
<Button variant={view === "table" ? "default" : "outline"} size="sm" onClick={() => setView("table")}>
<Rows className="mr-2 h-4 w-4" /> Table
</Button>
</div>
</div>
</CardContent>
</Card>
{/* Results summary */}
<div className="flex items-center justify-between">
<div className="text-sm text-muted-foreground">{filtered.length} people</div>
<div className="flex flex-wrap gap-2">
{tagFilter.map((t) => (
<Badge key={t} variant="secondary">
{t}
</Badge>
))}
</div>
</div>
{/* Charts */}
<Card>
<CardHeader>
<CardTitle className="text-lg">Overview</CardTitle>
</CardHeader>
<CardContent className="grid gap-6 lg:grid-cols-3">
{/* Pie: distribution by current company */}
<div className="h-72">
<div className="text-sm font-medium mb-2">Allocation by current company</div>
<ResponsiveContainer width="100%" height="100%">
<PieChart margin={{ right: 48, bottom: 10 }}>
<Pie data={pieCompanyData} dataKey="value" nameKey="name" outerRadius={80} label={false} labelLine={false}>
{pieCompanyData.map((entry, index) => (
<Cell key={`c-${index}`} fill={COLORS[index % COLORS.length]} />
))}
</Pie>
<Tooltip />
{/* Smaller legend to avoid overlapping the Overview title */}
<Legend verticalAlign="bottom" height={24} wrapperStyle={{ fontSize: 9 }} />
</PieChart>
</ResponsiveContainer>
</div>
{/* Bar: start year distribution */}
<div className="h-72">
<div className="text-sm font-medium mb-2">Google/DeepMind start-year distribution</div>
<ResponsiveContainer width="100%" height="100%">
<BarChart data={byStartYear}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="name" tick={{ fontSize: 12 }} />
<YAxis allowDecimals={false} />
<Tooltip />
<Bar dataKey="value">
{byStartYear.map((entry, index) => (
<Cell key={`b-${index}`} fill={COLORS[index % COLORS.length]} />
))}
</Bar>
</BarChart>
</ResponsiveContainer>
</div>
{/* Bar: tag distribution */}
<div className="h-72">
<div className="text-sm font-medium mb-2">Tag distribution (top 10)</div>
<ResponsiveContainer width="100%" height="100%">
<BarChart data={topTagData} layout="vertical">
<CartesianGrid strokeDasharray="3 3" />
<XAxis type="number" allowDecimals={false} />
<YAxis type="category" dataKey="name" width={90} tick={{ fontSize: 12 }} />
<Tooltip />
<Bar dataKey="value">
{topTagData.map((entry, index) => (
<Cell key={`t-${index}`} fill={COLORS[index % COLORS.length]} />
))}
</Bar>
</BarChart>
</ResponsiveContainer>
</div>
</CardContent>
</Card>
{/* Content */}
{filtered.length === 0 ? (
<EmptyState onReset={resetAll} />
) : view === "cards" ? (
<div className="grid gap-4 sm:grid-cols-2 lg:grid-cols-3">
{filtered.map((p) => (
<Card key={p.name} className="hover:shadow-lg transition-shadow">
<CardHeader>
<CardTitle className="text-xl flex items-center justify-between">
{p.name}
<div className="flex gap-1 flex-wrap justify-end">
{p.tags.slice(0, 3).map((t) => (
<Badge key={t} variant="outline" className="rounded-full text-[10px]">
{t}
</Badge>
))}
</div>
</CardTitle>
<p className="text-xs text-muted-foreground">{p.googleRoleYears}</p>
</CardHeader>
<CardContent className="space-y-2">
<div>
<div className="text-sm font-medium">Current</div>
<div className="text-sm text-muted-foreground">{p.currentRole}</div>
</div>
<Separator />
<div>
<div className="text-sm font-medium">Impact</div>
<div className="text-sm text-muted-foreground">{p.impact}</div>
</div>
<div>
<div className="text-sm font-medium">Lineage</div>
<div className="text-sm text-muted-foreground">{p.lineage}</div>
</div>
{p.notes && (
<div>
<div className="text-sm font-medium">Notes</div>
<div className="text-sm text-muted-foreground">{p.notes}</div>
</div>
)}
</CardContent>
</Card>
))}
</div>
) : (
<Card>
<CardContent className="p-0">
<Table>
<TableHeader>
<TableRow>
<TableHead>Name</TableHead>
<TableHead>Google/DeepMind Role & Years</TableHead>
<TableHead>Current Role / Org</TableHead>
<TableHead>Impact</TableHead>
<TableHead>Lineage</TableHead>
<TableHead>Tags</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{filtered.map((p) => (
<TableRow key={p.name}>
<TableCell className="font-medium">{p.name}</TableCell>
<TableCell className="text-xs text-muted-foreground">{p.googleRoleYears}</TableCell>
<TableCell>{p.currentRole}</TableCell>
<TableCell className="text-sm">{p.impact}</TableCell>
<TableCell className="text-xs text-muted-foreground">{p.lineage}</TableCell>
<TableCell className="max-w-[220px]">
<div className="flex flex-wrap gap-1">
{p.tags.map((t) => (
<Badge key={t} variant="secondary" className="rounded-full text-[10px]">
{t}
</Badge>
))}
</div>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</CardContent>
</Card>
)}
{/* Footer note */}
<p className="text-xs text-muted-foreground text-center pb-4">
Tip: Use tag filters (e.g., Anthropic, OpenAI, Character.AI, Mistral, xAI, Microsoft, Apple) to explore sub-diasporas.
</p>
</div>
</div>
);
}Conclusion
What’s clear is that talent hubs matter. They accelerate learning and ambition in a way that remote, isolated efforts rarely do. But equally important is the diaspora that follows — the seeding of new ideas in new places, which ensures that innovation doesn’t stagnate in one silo.
I find it both poetic and exciting that the very tools those Google researchers helped create are now enabling more people than ever to participate in the AI era. It’s an expansive, inclusive progression of technology.
Ultimately, this dissemination of talent might make AI development more resilient. Different organizations can check and balance each other — for example, if one lab races ahead irresponsibly, others might emphasize caution and influence the industry to course-correct.
We’re watching in real time as the “graduates” of Google Brain and DeepMind steer the global conversation on AI. In government hearings, it’s often these startup founders and research leaders testifying about safety. In academic conferences, the cutting-edge papers are coming not just from Google but from a dozen other outfits founded by its alumni.
In short, Google’s AI legacy lives on, distributed across the industry and deeply embedded in efforts to shape AI for the better.








