You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Force-fit Netflix's culture memo onto the current records, to see the strain - #90
This is a force fit, on purpose, so we can see the strain. It maps the Netflix culture memo onto the current principle records. It does not change the schema or the architecture, and it does not claim the memo fits.
Source: https://www.jobs.netflix.com/culture, heading "The Best Work of Our Lives." Opened from #89. This pull request does not close that issue. The memo still needs a model that can hold a narrative.
The BIQ picker reads its own question bank, so the companion change is kindel/biq#72. Porridge's picker reads this index once the index is on main. This pull request does not change porridge. A Netflix single on the porridge site will 404 until someone syncs stubs there.
What landed on the current model
Company netflix, block 10000, set title "Culture Memo", in scripts/companies.py. Twenty records, ids 10001 through 10020, in page order, with no group. Each record has a quoted definition and five authored calibration rows.
Records share existing facets where the behavior already has a table. Judgment is on are-right-a-lot and ask-who-disagrees. Candor, and the Courage row about admitting you do not know, are on earn-trust. Inclusion is on belonging. Curiosity is on learn-and-be-curious. Decency and Respect is on mutual-respect. Disagree Then Commit is on have-backbone-disagree-and-commit. Great and Always Better is on better-every-day. The Dream Team is also on build-extraordinary-teams and raise-the-bar. Selflessness is also on help-anyway and stay-humble. Creativity is also on listens-with-an-open-mind and for-its-audience. People Over Process and Context Not Control share let-them-decide. People Over Process also shares cut-the-extra-step with Invent and Simplify. Resilience shares after-a-setback with Blue Origin Deliver Results. Farming for Dissent is also on ask-who-disagrees. Artistic Expression is also on for-its-audience. Uncomfortably Exciting shares bold-bet with Courage. Amazon Are Right, A Lot, the generic principle of the same name, and Blue Origin Earn the Trust of Others sit on ask-who-disagrees too. The generated row used to live on are-right-a-lot, and a second copy used to live on listens-with-an-open-mind. Both copies are gone. different-viewpoints on Blue Origin 9009 is a source ref on ask-who-disagrees.
Nineteen new facets: after-a-setback, ask-who-disagrees, artistic-expression, bold-bet, context-not-control, courage, creativity, cut-the-extra-step, dream-team, farming-for-dissent, for-its-audience, informed-captain, keeper-test, let-them-decide, people-over-process, resilience, selflessness, uncomfortably-exciting, and almost-no-rules. Generated rows on those facets: one on after-a-setback, ask-who-disagrees, bold-bet, cut-the-extra-step, for-its-audience, let-them-decide, and selflessness; two on dream-team; three on courage, creativity, and people-over-process; five on artistic-expression, context-not-control, farming-for-dissent, resilience, and uncomfortably-exciting; six on almost-no-rules, informed-captain, and keeper-test. A record row is a source ref only when that facet owns the behavior. short-fix-or-long-fix and whose-judgment stay on the Judgment record and off are-right-a-lot. testing-a-call-you-like and a-quiet-room are source refs on ask-who-disagrees. Audit decisions are map in tests/fixtures/facet-audit.json. SCHEMA.md records the company, the block, and the sort.
Definitions are quotations from the page. A sentence that contains an em dash is left out. Non-contiguous sentences are not stitched together. Nothing in the records is a paraphrase of the memo wearing the definition field.
Where the force fit strains
One record shape for four principles, eight values, and the practices. The page's four principles are The Dream Team, People Over Process, Uncomfortably Exciting, and Great and Always Better. Under The Dream Team, "these are the values we value" lists Selflessness, Judgment, Candor, Creativity, Courage, Inclusion, Curiosity, and Resilience. People Over Process then contains context not control, informed captains, highly aligned and loosely coupled, farming for dissent, disagree then commit, and the (almost) no rules rule. The model has no type, so all twenty are principles. sort is the only order. Netflix publishes no lenses, so there is no group (GROUP_BY_COMPANY in scripts/validate.py). The values lose their section, and the practices lose their parent. Files: data/netflix/*.json.
Almost no set-level narrative. scripts/companies.py stores one preamble, the first sentence only: "At Netflix, we aspire to entertain the world, thrilling audiences everywhere." The second sentence contains an em dash (the clause after the em dash is "lifting ourselves, each other and our audiences higher and higher"). The sentence after it, "This document is about that culture, which is based on four core principles," is not contiguous once that sentence is omitted, so the preamble never says there are four principles. The manifest in data/index.json lists twenty records. There is no data/teaching/netflix/. Dropped, with nowhere to put them: the "Netflix is not for everyone" passage, the perks-versus-people essay, the sports-team-not-a-family essay (Ozark and Wednesday), the Saint-Exupéry quotation, the Reed Hastings footnote on the keeper test name, and the Q1 2024 audience footnote.
The page heading is "The Best Work of Our Lives." The set title in scripts/companies.py is "Culture Memo," which is our label, not the heading. BIQ turns that label into the item name. The generated how-to says "Pick two or three questions per assigned Culture Memo," and the principle kind is lp, because the set name does not end in Value or Factor. That is data/questions.json in kindel/biq. scripts/sync_from_principles.py was not changed.
The em dash rule drops the sentence that defines the practice. SCHEMA.md says a definition is a quotation, and that the em dash check still applies, so the excerpt has to be whole sentences that contain neither an em dash nor ---.
data/netflix/the-dream-team.json quotes "It's the people. Imagine working alongside stunning colleagues who are great at what they do, and even better at working together." The principle's own blurb cannot be stored: "We aim only to have high performers at Netflix," then an em dash, then "people who are great at what they do, and even better at working together."
data/netflix/context-not-control.json quotes the caveat, from "That said, context not control should not be confused with hands-off management" through the step-in sentence. The practice itself is inside an em dash in an earlier sentence: "giving their teams the context and clarity needed to make good decisions instead of trying to control everything themselves." The definition is the warning, not the practice. Row giving-the-context is our paraphrase. Also dropped from that part of the page: "priding ourselves on how few, not how many, decisions senior leaders make," and "It takes an unusually responsible person to thrive on this level of freedom," then an em dash, then "someone who's self-motivated, self-aware and self-disciplined..."
data/netflix/the-keeper-test.json quotes the reassurance paragraph, from "In reality, we encourage everyone to speak to their managers" through "So we stick with employees through short-term bumps." The test is in the previous sentence, after an em dash: "if X wanted to leave, would I fight to keep them?" and "knowing everything I know today, would I hire X again?" "If the answer is no, we believe it's fairer to everyone to part ways quickly" has no em dash, but it is not contiguous with the reassurance paragraph, so it is not in the definition. Row would-you-keep-them paraphrases the test.
data/netflix/candor.json quotes the value tile only. Extraordinary candor, everyday feedback you would say to the person's face, is dropped because its topic sentence contains an em dash.
data/netflix/uncomfortably-exciting.json drops the blurb ("embracing the thrill of what's next," then an em dash, then "even when it's uncomfortable") and the half-a-billion sentence, which contains an em dash. The dash-free paragraph after that sentence is the definition.
data/netflix/artistic-expression.json starts at "While every show, film or game is different..." "Representation matters" and the members sentence have no em dash, but the next sentence does ("what's acceptable" and "what's harmful," with an em dash on either side of the second phrase), so a leading excerpt cannot reach this paragraph without stitching. This record keeps the later paragraph and drops the opening, including "Representation matters."
data/netflix/disagree-then-commit.json stops before the reflection sentence, which contains an em dash: "the informed captain should reflect on their choices," then an em dash, then "what worked and what didn't."
data/netflix/farming-for-dissent.json stops at "We call this farming for dissent." The next sentence contains an em dash ("not all opinions are created equal," then an em dash, then "and with 10,000-plus employees..."). The weighting sentence after it is not contiguous, so it is not in the definition: "So on an important creative decision, for example, the opinion of someone working in TV, film or games will carry more weight than an engineer, and vice versa when it comes to our product or technology." Row whose-opinion-weighs-more paraphrases it.
data/netflix/great-and-always-better.json quotes the two-sentence blurb ("Netflix sucks today" and the self-awareness sentence). "It's also why we constantly seek to improve our culture, not preserve it" is a later dash-free sentence and is not in the definition. The Saint-Exupéry lines are not in the definition. "Every new employee helps shape how we work," then an em dash, then "finding new ways to accomplish more together" contains an em dash.
Top of market pay has no record. The only sentence is "To recruit and retain stunning colleagues, we pay personal top of market for the role and location," then an em dash, then "a judgment about what that person could make in a similar role at another company, and what we would pay to keep or replace them." There is no file under data/netflix/ for it.
data/netflix/informed-captain.json quotes three contiguous sentences, which is faithful. "Highly aligned and loosely coupled" is a facet term on other-captains-implement, aligned-and-independent, and responsibility-for-the-outcome. On the page that phrase names the approach, not a slice of the captain. The model can mark the slice. It still cannot give the approach its own record without splitting the quotation. One file is holding two ideas.
data/netflix/context-not-control.json keeps "not hands-off" and "coach the team" as facet terms, on the rows about staying involved, stepping in, and coaching. The memo says not to confuse the practice with hands-off management. It does not offer "not hands-off" as a name. A facet term is the only legal slot, and the label is still a caveat rather than a name.
data/netflix/people-over-process.json quotes the two-sentence tile and nothing from the essay under that heading. "At Netflix, we aim to inspire and empower more than just manage because people can have a greater impact when they're free to make decisions about their own work" has no em dash and still has nowhere to go, because the definition is already the tile. "Unusually responsible" survives only as the term unusually-responsible. The strict-rules sentences (harassment, marginalizing colleagues, leaking, insider trading) are the lead-in of data/netflix/almost-no-rules.json, which is where the page puts them. The sentences after that definition, about dummy-proofing the company and minimizing rules rather than errors, contain em dashes and are dropped.
Facet membership pulls a neighboring table, or invents one that is still our words. data/facets.json.
Judgment (10003) is on are-right-a-lot and ask-who-disagrees. Ambiguity and "data to inform your intuition" stay on the first. The quiet room is the second, shared with Farming for Dissent, so Judgment does not inherit that practice's other rows. "Long term solutions" is still not a facet. The model would have allowed one.
Candor (10004) is on earn-trust. Giving and receiving feedback maps. The shared table also carries rows about slipping a date and taking credit, which the value tile does not say.
Inclusion (10007) is on belonging. Counteracting bias is extra relative to that table. The page's word is Inclusion.
Decency and Respect (10010) is on mutual-respect. "No place in our Dream Team" is a keeper-test consequence, sharper than that table.
Creativity (10005) is a new facet, not invent-and-simplify. That table is about removing steps. The memo's creativity is new ideas and artistic expression. Mapping it there would show the wrong table.
Disagree Then Commit (10016) is on have-backbone-disagree-and-commit. The memo's sentences are the commit half. The disagree half of that table comes along.
Great and Always Better (10020) is on better-every-day. That table is about raising the work. Improving the culture, rather than preserving it, is not in the definition and not in the table.
Curiosity (10008) is on learn-and-be-curious. Close. "Humble about what you don't yet know" is only partly that table.
The new facets have generated rows marked words: "generated". They are company-agnostic. Netflix published no calibration. Every row in data/netflix/*.json omits words, so it is authored. A quotation and our rows sit in the same file. The lines people quote from the memo do not show up in the porridge table.
Four generated tables repeated a behavior that already had one, so each shared slice is now its own facet in data/facets.json. speaking-up-humbly is gone. humility-as-silence is a source ref on stay-humble, and porridge shows humility-that-will-not-decide. Creativity and Artistic Expression share for-its-audience. The record over on breadth-of-the-slate, adding a title only to provoke, is not a porridge row. People Over Process and Context Not Control share let-them-decide. That generated row uses the vanish-or-hint polarity. Pulling the decision upward, and openness (coaching a new person's first calls), are no longer generated rows. few-senior-decisions still covers a leader who keeps too many calls. The quiet room is ask-who-disagrees, and data/maps/generic-amazon.json lists it beside are-right-a-lot. Blue Origin 9009/different-viewpoints is a source ref there. The generated copy on listens-with-an-open-mind is gone. one-background-in-the-discussion stays on that facet. It is one background in a discussion, so a novel idea can show up. It is not the quiet room before a call is locked. A setback is after-a-setback, shared by Blue Origin 9003 and Resilience 10009. first-approach-fails moved off deliver-results, and after-the-miss is gone. Amazon, Coupang, and generic Deliver Results stay on deliver-results only. Their other rows stay. An extra process step is cut-the-extra-step, shared by Amazon 1003, Dawn 6006, generic 8006, Blue Origin 9012, and People Over Process 10012. extra-steps-on-a-request-form moved off invent-and-simplify, and a-process-past-its-reason is gone. data/maps/generic-amazon.json lists cut-the-extra-step beside invent-and-simplify.
The question bank cannot ask these practices without new questions, and new questions need example packs this pull request does not add. The companion BIQ change points a new facet at an existing Amazon question id only when one matches. let-them-decide uses 0788c8eb. ask-who-disagrees uses c418917e, which Amazon Are Right, A Lot already stores. for-its-audience has no match, so it has no facetQuestions entry. Creativity and Artistic Expression still inherit questions from their other facets. The change does not add facetQuestions on an existing facet, because those ids would then be required for every company already on it. Mapped principles with an empty question list inherit the donor's full list: Amazon's Are Right, A Lot onto Judgment, Farming for Dissent, and Blue Origin Earn the Trust of Others, because Amazon is the first principle on ask-who-disagrees with stored questions (attachFacetQuestions in kindel/biq js/biq.js). People Over Process also inherits Amazon's Invent and Simplify questions through cut-the-extra-step. after-a-setback has no principle with stored questions, so it adds no donor list. Blue Origin Deliver Results and Resilience keep the questions they already had. Earn Trust lands on Candor, Learn and Be Curious on Curiosity, Have Backbone on Disagree Then Commit, and the better-every-day donor on Great and Always Better. GitLab's belonging questions land on Inclusion. The mutual-respect donor lands on Decency and Respect. Search aliases include the shared facet labels, so "ask who disagrees" finds Judgment and Farming for Dissent, and "are right a lot" still finds Judgment. File: data/questions.json in kindel/biq.
The borrowed questions miss the memo in particular for the keeper test, context not control, farming for dissent, artistic expression, almost no rules, the Dream Team standard, the informed captain, and people over process. Proposed questions are below. They are not in the bank.
Questions for Tig to write
Not added. Each one needs a Junior, Senior, and Exec example pack before it can live in the bank. Wording is a tell-me-about-a-time question, with no em dash.
Dream Team, data/netflix/the-dream-team.json:
Tell me about a time you decided someone was not strong enough for a team of high performers. What did you do, and what happened?
Tell me about a colleague you would fight to keep because they are great at the work and at working with other people. What did they actually do?
Keeper test, data/netflix/the-keeper-test.json. The bank currently attaches low-performer and promotion questions (bf907bc5, 0f0c4692, d59e1646, 9d996460). None of them ask the test.
Tell me about a time you asked whether you would fight to keep someone who had not resigned. What was the answer, and what did you do?
Tell me about a time you stuck with someone through a short-term bump because the whole record was strong. How did you tell the bump from the record?
Context not control, data/netflix/context-not-control.json. Borrowed ids cf2dba5d, 0788c8eb, db715723, 6ba06d3b ask about announcing a change, deciding without a manager, influencing a peer, and uncovering a problem.
Tell me about a time you gave people the context to decide instead of deciding for them. What did you share, what did they decide, and where did you still step in?
Tell me about a time you coached a decision you could have taken over. How did you stay involved without taking the pen?
Informed captain, data/netflix/informed-captain.json. Borrowed ids 3de6ea90, 86851599, 4d7cb33a, fc2a4107 ask about work outside your area, a hard decision with many inputs, and committing to a group decision.
Tell me about a time you owned a significant decision that other teams had to carry out. How did you keep them aligned without controlling their work?
Tell me about a time you carried out a decision another person owned. How did you move quickly and still leave the outcome with them?
Farming for dissent, data/netflix/farming-for-dissent.json. Borrowed ids c418917e, f5a5e3e0, 86851599, 0ed453ee ask about gathering perspectives and disagreeing in a meeting.
Tell me about a time you went looking for a disagreement before a decision. Which view changed the call, which view did not, and why?
Tell me about a time you weighed one person's view more than another's because of the craft the decision sat in. How did you say that out loud?
People over process, data/netflix/people-over-process.json. Borrowed ids 0788c8eb, 4bac1a15, 0e07e86c, e89fa18f ask about deciding without a manager, moving versus gathering more information, and a more efficient process.
Tell me about a time you gave people information and freedom instead of adding a process. What got better, and what rule did you refuse to drop?
Tell me about a time a process was protecting the company and you kept it. What was the rule, and what freedom did you still allow?
Almost no rules, data/netflix/almost-no-rules.json. Borrowed ids 0e07e86c, 0788c8eb, efd390d4, 6d1129ab are frugality and bias-for-action questions. None ask about a five-word expenses policy.
Tell me about a time the only guidance was to act in the company's best interests. What did you decide, and how did you know?
Tell me about a time you did not add a rule after a mistake. What did you do instead, and what was the result?
Artistic expression, data/netflix/artistic-expression.json. Borrowed ids 78ffe24a, eb5a224e, 73f36f42, 2b30a0e6 ask about novel approaches and innovation. None ask about supporting a slate.
Tell me about a time you supported a story or a product you personally found objectionable. What was your role, and what did you do?
Tell me about a time the breadth of the work conflicted with your own values. How did you decide whether you could still do it?
These have no record to hang on, which is the same strain. They are here so the dropped memo is not only a file note:
Extraordinary candor: Tell me about a time you gave feedback you were willing to say to the person's face, including to someone more senior or from a different background. What did you say?
Top of market: Tell me about a time you set pay by asking what the person could make elsewhere and what you would pay to replace them. What did you decide?
Improve the culture, do not preserve it: Tell me about a time you changed how a team works instead of defending the current way. What did you change, and what did you refuse to freeze?
A sports team, not a family: Tell me about a time you replaced someone you liked with someone better for the role. How did you decide, and how did you handle it?
The reflection the disagree-then-commit definition drops: Tell me about a time you looked back at a decision you had committed to and said what worked and what did not. What did the group learn?
Leave the quotations alone
A definition stays a quotation of whole sentences. A sentence with an em dash stays out of the file. Two sentences that are not contiguous stay apart. A new field, a type, or a narrative body belongs in the follow-on about the model, not in this pull request. The questions above need Junior, Senior, and Exec packs before they can enter the bank.
Claim block 10000 and add twenty records from the culture memo, with authored calibration and facet membership. No schema change. Definitions are quotations, and a sentence that contains an em dash is left out rather than rewritten.
Highly aligned and loosely coupled names the implementation approach, and not hands-off is the manager-involvement caveat. Neither is another name for the whole principle, so equivalent was the wrong kind.
Incorrectly broad equivalent for Act in Netflix's best interests
data/netflix/almost-no-rules.json:22
Act in Netflix's best interests is the five-word expenses policy and maps to an-expense; it is not a name for vacation, process design, or rules against serious harm. Marking it equivalent makes lookup return the whole principle, contrary to SCHEMA.md:270-285; make it a facet over the expense row.
Incorrectly broad equivalent for support the creators
data/netflix/artistic-expression.json:22
support the creators is one slice of Artistic Expression, while the principle also covers slate breadth, member controls, harmful work, and deciding whether this is the right workplace. equivalent makes that narrower lookup return every row; classify it as a local facet with the applicable support rows under SCHEMA.md:270-285.
Incorrectly broad equivalent for risk failure
data/netflix/courage.json:17
risk failure names the public-bet slice, not vulnerability, challenging established practices, or disagreeing upward. equivalent therefore broadens term results to the entire Courage principle; make this a facet over the applicable row per SCHEMA.md:270-285.
Incorrectly broad equivalent for other people's ideas
data/netflix/curiosity.json:22
other people's ideas identifies the corresponding idea-comparison slice, not all of Curiosity. With equivalent, consumers also return rapid learning, unknown-domain, postmortem, and deadline rows; classify it as a local facet under SCHEMA.md:270-285.
Incorrectly broad equivalent for data and intuition
data/netflix/judgment.json:22
data and intuition is one clause of Judgment, represented by data-and-a-hunch, rather than a name for the whole principle. As equivalent, a lookup also returns the long-term-fix, ambiguity, disconfirming-evidence, and craft rows; use a local facet as required by SCHEMA.md:270-285.
Incorrectly broad equivalent for unusually responsible
data/netflix/people-over-process.json:22
unusually responsible is the trait exercised by responsible-with-freedom, not another name for the whole People Over Process principle. equivalent also returns delegation, information-sharing, process-removal, and senior-decision rows; use a local facet per SCHEMA.md:270-285.
Incorrectly broad equivalent for hard challenge
data/netflix/resilience.json:22
hard challenge maps to the hard-challenge slice, not adapting to change, timed decisions, recovering from a miss, or persisting through a bump. equivalent returns all of those rows, so this should be a local facet under SCHEMA.md:270-285.
Incorrectly broad equivalent for help others succeed
data/netflix/selflessness.json:22
help others succeed names only the helping slice of Selflessness, but equivalent makes a consumer return every row for the principle (SCHEMA.md:270-285). Mark it as a local facet for time-to-help so term lookup does not also return company-over-team, credit, and humility behavior.
The clause-level terms Copilot listed are facets now, on the rows for that clause. Sibling clauses in those records got the same treatment, and so did the same pattern on candor, creativity, inclusion, and experiment.
Names that mean the whole principle stay equivalent: disagree and commit, fight to keep them, sucks today, treat colleagues with respect, freedom to decide, bold and ambitious, high performers, stunning colleagues, and seek different opinions.
Map open-seat hiring behavior to best-person-for-the-role
data/facets.json:4689
the-open-seat is already modeled by best-person-for-the-role, whose source refs include Coupang's open-role-pressure; the audit also treats an open-seat hiring decision as that facet (tests/fixtures/facet-audit.json:39-40, 195-196). Keeping this behavior only in the new dream-team facet prevents Netflix from sharing the established calibration and downstream question surface. Map 10001/right-person-in-the-role to best-person-for-the-role, and reserve dream-team for behavior that is not already represented.
This row duplicates the behavior added just above under people-over-process: the-person-closest and sharing-the-information also give the closest person context and then let them decide (data/facets.json:5147-5160). Separate whole-principle facets therefore generate two independent tables for one behavior, contrary to the granular composition rule in AGENTS.md:47. Extract this slice into one facet shared by principles 10012 and 10013, leaving only their non-overlapping rows in the current facets.
Consolidate duplicate craft judgment behavior
data/facets.json:5390
weight-by-craft is the same behavior as Judgment's whose-judgment row (data/netflix/judgment.json:61-65), but that source row is attached to are-right-a-lot at lines 2183-2184. This writes one behavior into two facet tables, contrary to AGENTS.md:47. Move both source rows into one granular facet and map principles 10003 and 10015 to it.
Extract shared process-minimization behavior
data/facets.json:5467
is-the-process-good overlaps the people-over-process row a-process-past-its-reason and its generated counterpart at lines 5163-5168: both keep only process that still prevents harm or has a useful effect. Modeling them in separate facets gives closely related Netflix records separate tables instead of composing the shared behavior once as required by AGENTS.md:47. Extract the process-minimization slice into one facet shared by principles 10012 and 10017.
The eight clause-level terms are facets now, on the rows for that clause. The same treatment covers the sibling clauses in those records, and the same pattern on candor, creativity, inclusion, and experiment.
Names that mean the whole principle stay equivalents: disagree and commit, fight to keep them, sucks today, treat colleagues with respect, freedom to decide, bold and ambitious, high performers, stunning colleagues, and seek different opinions.
This recreates the stay-humble behavior already inherited by principle 10002. humility-that-will-not-decide at lines 3531-3535 also balances stating a view against false humility and updating when evidence changes, so Porridge will show this behavior in two facet tables. AGENTS.md:45-49 requires shared behavior to live once as a granular facet; move the humility-as-silence source row to stay-humble and remove this duplicate from selflessness.
This issue also appears in the following locations of the same file:
This is the same behavior as artistic-expression's breadth row at lines 5529-5533: both reject blocking work based on personal taste and judge it by its audience. Keeping both generated tables violates the one-behavior-one-facet rule in AGENTS.md:45-49. Extract this slice into one granular facet shared by principles 10005 and 10019 instead of generating it independently in both facets.
Duplicate decision-freedom behavior across facets
data/facets.json:5067
This duplicates context-not-control's context-before-the-call row at lines 5140-5144: both give the closest person the needed context and leave the decision with them. The related openness row repeats the same slice as well. Since principles compose shared behavior through facets (AGENTS.md:45-49), model this decision-freedom slice once and share it between 10012 and 10013 rather than emitting two Porridge tables.
This issue also appears in the following locations of the same file:
line 5079
line 5452
Duplicate dissent-seeking behavior
data/facets.json:5314
This is the same observable behavior as are-right-a-lot's a-room-that-already-agrees row at lines 2192-2197: both actively seek a contrary view before locking a decision and stop before dissent becomes delay. A different motive does not make it a different behavior under AGENTS.md:45-49. Extract one dissent-seeking facet shared by the relevant principles instead of generating this behavior twice.
The last pass called out four duplicate tables. Each shared slice now has one facet.
Humility. speaking-up-humbly is gone from selflessness. humility-as-silence is a source ref on stay-humble, which Selflessness already lists. Porridge shows humility-that-will-not-decide. disagreeing-up and dissent-you-do-not-take stay. One is disagreeing with someone senior. The other is not adopting a dissent.
Audience. Creativity and Artistic Expression share for-its-audience. taste and breadth are off the parent facets. One generated row judges the work by the audience it is for. Adding a title only to provoke stays on the record row breadth-of-the-slate. It is not a porridge row.
The decision. People Over Process and Context Not Control share let-them-decide. The generated row keeps the old context-before-the-call polarity: you vanish, or you hint until your answer is the only safe one. the-person-closest and openness are gone. a-process-past-its-reason and the experiment rows stay. They are different behaviors.
The quiet room. ask-who-disagrees lists Amazon 1004, generic 8004, Judgment 10003, and Farming for Dissent 10015. The generated row moved off are-right-a-lot. Farming does not sit on that broader facet. The listens-with-an-open-mind row with the same situation name stays. It asks for a viewpoint the room does not have.
BIQ companion is kindel/biq#72 at d08d9b0. let-them-decide uses 0788c8eb. ask-who-disagrees uses c418917e. for-its-audience has no existing question about judging work by its audience, so it has no facetQuestions entry. Sharing ask-who-disagrees with Amazon means Farming for Dissent also inherits Amazon's Are Right, A Lot questions. That is attachFacetQuestions: the first principle on the facet with stored questions is the donor.
Duplicate setback-recovery behavior instead of sharing a granular facet
data/facets.json:4893
This duplicates the existing setback-recovery behavior on deliver-results: 9003/setbacks balances stopping after a setback, finding a path forward, and performative recovery (data/blue-origin/deliver-results.json:67-78), while that facet already renders first-approach-fails (data/facets.json:1813-1818). AGENTS.md:47-49 requires each shared behavior to live on one granular facet. Extract the setback slice into a facet shared by 9003 and 10009 rather than creating a second generated table for it.
Duplicate process-simplification behavior instead of sharing a granular facet
data/facets.json:5027
This recreates the process-simplification behavior already generated by invent-and-simplify: its extra-steps-on-a-request-form row removes fields that no longer affect a decision while retaining checks that prevent a real miss (data/facets.json:1521-1526), which is the same balance as removing an obsolete step while retaining serious-harm safeguards here. AGENTS.md:47-49 requires a shared behavior to be represented once and projected. Split that behavior into a granular facet shared by the existing principles and 10012 instead of maintaining a second table that can drift.
Setback. after-the-miss is gone from resilience. 9003/setbacks and 10009/a-setback are source refs on after-a-setback. The generated row is first-approach-fails, moved off deliver-results. Amazon, Coupang, and generic Deliver Results stay on deliver-results. That row was the setback slice. Their other delivery rows stay. first-barrier stays on deliver-results. It is the first path being blocked, and the over is burning relationships to force that path.
Extra steps. a-process-past-its-reason is gone from people-over-process. 1003/simplifying-a-process and 10012/a-process-that-outlived-its-reason are source refs on cut-the-extra-step, with Dawn 6006, generic 8006, and Blue Origin 9012. The generated row is extra-steps-on-a-request-form, moved off invent-and-simplify. always-simplify stays. It is a design getting heavier, not a request form.
BIQ follows at kindel/biq#72, head 35fc049. People Over Process inherits Amazon's Invent and Simplify questions through cut-the-extra-step, because Amazon is the first principle on that facet with stored questions. after-a-setback has no stored-question principle, so it adds no donor list.
This closer look does not name a finding. The shared facets are the force fit.
after-a-setback is Blue Origin Deliver Results and Resilience. cut-the-extra-step is Invent and Simplify and People Over Process. Other companies lose the one moved row and keep the rest of the parent table. People Over Process inherits Invent and Simplify questions through that facet. That is written under Where the force fit strains. Nothing to change on this head.
after-a-setback holds Blue Origin 9003 and Netflix 10009. The setback row moved off deliver-results. Amazon, Coupang, and generic Deliver Results stay on deliver-results. cut-the-extra-step holds Invent and Simplify (1003, 6006, 8006, 9012) and People Over Process (10012). The extra-step row moved off invent-and-simplify. Parent facets keep their other rows. The generic to Amazon map matches 8006 to 1003.
Shared facets change the porridge rows other companies see, and People Over Process inherits Invent and Simplify questions. That strain is in the pull request body. I do not see a schema break or a second copy of those tables on this head.
Approving the force fit as the comparison it is. The model follow-on is #91.
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a force fit, on purpose, so we can see the strain. It maps the Netflix culture memo onto the current principle records. It does not change the schema or the architecture, and it does not claim the memo fits.
Source: https://www.jobs.netflix.com/culture, heading "The Best Work of Our Lives." Opened from #89. This pull request does not close that issue. The memo still needs a model that can hold a narrative.
The BIQ picker reads its own question bank, so the companion change is kindel/biq#72. Porridge's picker reads this index once the index is on main. This pull request does not change porridge. A Netflix single on the porridge site will 404 until someone syncs stubs there.
What landed on the current model
Company
netflix, block 10000, set title "Culture Memo", inscripts/companies.py. Twenty records, ids 10001 through 10020, in page order, with nogroup. Each record has a quoted definition and five authored calibration rows.Records share existing facets where the behavior already has a table. Judgment is on
are-right-a-lotandask-who-disagrees. Candor, and the Courage row about admitting you do not know, are onearn-trust. Inclusion is onbelonging. Curiosity is onlearn-and-be-curious. Decency and Respect is onmutual-respect. Disagree Then Commit is onhave-backbone-disagree-and-commit. Great and Always Better is onbetter-every-day. The Dream Team is also onbuild-extraordinary-teamsandraise-the-bar. Selflessness is also onhelp-anywayandstay-humble. Creativity is also onlistens-with-an-open-mindandfor-its-audience. People Over Process and Context Not Control sharelet-them-decide. People Over Process also sharescut-the-extra-stepwith Invent and Simplify. Resilience sharesafter-a-setbackwith Blue Origin Deliver Results. Farming for Dissent is also onask-who-disagrees. Artistic Expression is also onfor-its-audience. Uncomfortably Exciting sharesbold-betwith Courage. Amazon Are Right, A Lot, the generic principle of the same name, and Blue Origin Earn the Trust of Others sit onask-who-disagreestoo. The generated row used to live onare-right-a-lot, and a second copy used to live onlistens-with-an-open-mind. Both copies are gone.different-viewpointson Blue Origin 9009 is a source ref onask-who-disagrees.Nineteen new facets:
after-a-setback,ask-who-disagrees,artistic-expression,bold-bet,context-not-control,courage,creativity,cut-the-extra-step,dream-team,farming-for-dissent,for-its-audience,informed-captain,keeper-test,let-them-decide,people-over-process,resilience,selflessness,uncomfortably-exciting, andalmost-no-rules. Generated rows on those facets: one onafter-a-setback,ask-who-disagrees,bold-bet,cut-the-extra-step,for-its-audience,let-them-decide, andselflessness; two ondream-team; three oncourage,creativity, andpeople-over-process; five onartistic-expression,context-not-control,farming-for-dissent,resilience, anduncomfortably-exciting; six onalmost-no-rules,informed-captain, andkeeper-test. A record row is a source ref only when that facet owns the behavior.short-fix-or-long-fixandwhose-judgmentstay on the Judgment record and offare-right-a-lot.testing-a-call-you-likeanda-quiet-roomare source refs onask-who-disagrees. Audit decisions aremapintests/fixtures/facet-audit.json.SCHEMA.mdrecords the company, the block, and the sort.Definitions are quotations from the page. A sentence that contains an em dash is left out. Non-contiguous sentences are not stitched together. Nothing in the records is a paraphrase of the memo wearing the definition field.
Where the force fit strains
One record shape for four principles, eight values, and the practices. The page's four principles are The Dream Team, People Over Process, Uncomfortably Exciting, and Great and Always Better. Under The Dream Team, "these are the values we value" lists Selflessness, Judgment, Candor, Creativity, Courage, Inclusion, Curiosity, and Resilience. People Over Process then contains context not control, informed captains, highly aligned and loosely coupled, farming for dissent, disagree then commit, and the (almost) no rules rule. The model has no type, so all twenty are principles.
sortis the only order. Netflix publishes no lenses, so there is nogroup(GROUP_BY_COMPANYinscripts/validate.py). The values lose their section, and the practices lose their parent. Files:data/netflix/*.json.Almost no set-level narrative.
scripts/companies.pystores one preamble, the first sentence only: "At Netflix, we aspire to entertain the world, thrilling audiences everywhere." The second sentence contains an em dash (the clause after the em dash is "lifting ourselves, each other and our audiences higher and higher"). The sentence after it, "This document is about that culture, which is based on four core principles," is not contiguous once that sentence is omitted, so the preamble never says there are four principles. The manifest indata/index.jsonlists twenty records. There is nodata/teaching/netflix/. Dropped, with nowhere to put them: the "Netflix is not for everyone" passage, the perks-versus-people essay, the sports-team-not-a-family essay (Ozark and Wednesday), the Saint-Exupéry quotation, the Reed Hastings footnote on the keeper test name, and the Q1 2024 audience footnote.The page heading is "The Best Work of Our Lives." The set title in
scripts/companies.pyis "Culture Memo," which is our label, not the heading. BIQ turns that label into the item name. The generated how-to says "Pick two or three questions per assigned Culture Memo," and the principlekindislp, because the set name does not end in Value or Factor. That isdata/questions.jsonin kindel/biq.scripts/sync_from_principles.pywas not changed.The em dash rule drops the sentence that defines the practice.
SCHEMA.mdsays a definition is a quotation, and that the em dash check still applies, so the excerpt has to be whole sentences that contain neither an em dash nor---.data/netflix/the-dream-team.jsonquotes "It's the people. Imagine working alongside stunning colleagues who are great at what they do, and even better at working together." The principle's own blurb cannot be stored: "We aim only to have high performers at Netflix," then an em dash, then "people who are great at what they do, and even better at working together."data/netflix/context-not-control.jsonquotes the caveat, from "That said, context not control should not be confused with hands-off management" through the step-in sentence. The practice itself is inside an em dash in an earlier sentence: "giving their teams the context and clarity needed to make good decisions instead of trying to control everything themselves." The definition is the warning, not the practice. Rowgiving-the-contextis our paraphrase. Also dropped from that part of the page: "priding ourselves on how few, not how many, decisions senior leaders make," and "It takes an unusually responsible person to thrive on this level of freedom," then an em dash, then "someone who's self-motivated, self-aware and self-disciplined..."data/netflix/the-keeper-test.jsonquotes the reassurance paragraph, from "In reality, we encourage everyone to speak to their managers" through "So we stick with employees through short-term bumps." The test is in the previous sentence, after an em dash: "if X wanted to leave, would I fight to keep them?" and "knowing everything I know today, would I hire X again?" "If the answer is no, we believe it's fairer to everyone to part ways quickly" has no em dash, but it is not contiguous with the reassurance paragraph, so it is not in the definition. Rowwould-you-keep-themparaphrases the test.data/netflix/candor.jsonquotes the value tile only. Extraordinary candor, everyday feedback you would say to the person's face, is dropped because its topic sentence contains an em dash.data/netflix/uncomfortably-exciting.jsondrops the blurb ("embracing the thrill of what's next," then an em dash, then "even when it's uncomfortable") and the half-a-billion sentence, which contains an em dash. The dash-free paragraph after that sentence is the definition.data/netflix/artistic-expression.jsonstarts at "While every show, film or game is different..." "Representation matters" and the members sentence have no em dash, but the next sentence does ("what's acceptable" and "what's harmful," with an em dash on either side of the second phrase), so a leading excerpt cannot reach this paragraph without stitching. This record keeps the later paragraph and drops the opening, including "Representation matters."data/netflix/disagree-then-commit.jsonstops before the reflection sentence, which contains an em dash: "the informed captain should reflect on their choices," then an em dash, then "what worked and what didn't."data/netflix/farming-for-dissent.jsonstops at "We call this farming for dissent." The next sentence contains an em dash ("not all opinions are created equal," then an em dash, then "and with 10,000-plus employees..."). The weighting sentence after it is not contiguous, so it is not in the definition: "So on an important creative decision, for example, the opinion of someone working in TV, film or games will carry more weight than an engineer, and vice versa when it comes to our product or technology." Rowwhose-opinion-weighs-moreparaphrases it.data/netflix/great-and-always-better.jsonquotes the two-sentence blurb ("Netflix sucks today" and the self-awareness sentence). "It's also why we constantly seek to improve our culture, not preserve it" is a later dash-free sentence and is not in the definition. The Saint-Exupéry lines are not in the definition. "Every new employee helps shape how we work," then an em dash, then "finding new ways to accomplish more together" contains an em dash.data/netflix/for it.data/netflix/informed-captain.jsonquotes three contiguous sentences, which is faithful. "Highly aligned and loosely coupled" is afacetterm onother-captains-implement,aligned-and-independent, andresponsibility-for-the-outcome. On the page that phrase names the approach, not a slice of the captain. The model can mark the slice. It still cannot give the approach its own record without splitting the quotation. One file is holding two ideas.data/netflix/context-not-control.jsonkeeps "not hands-off" and "coach the team" asfacetterms, on the rows about staying involved, stepping in, and coaching. The memo says not to confuse the practice with hands-off management. It does not offer "not hands-off" as a name. A facet term is the only legal slot, and the label is still a caveat rather than a name.data/netflix/people-over-process.jsonquotes the two-sentence tile and nothing from the essay under that heading. "At Netflix, we aim to inspire and empower more than just manage because people can have a greater impact when they're free to make decisions about their own work" has no em dash and still has nowhere to go, because the definition is already the tile. "Unusually responsible" survives only as the termunusually-responsible. The strict-rules sentences (harassment, marginalizing colleagues, leaking, insider trading) are the lead-in ofdata/netflix/almost-no-rules.json, which is where the page puts them. The sentences after that definition, about dummy-proofing the company and minimizing rules rather than errors, contain em dashes and are dropped.Facet membership pulls a neighboring table, or invents one that is still our words.
data/facets.json.10003) is onare-right-a-lotandask-who-disagrees. Ambiguity and "data to inform your intuition" stay on the first. The quiet room is the second, shared with Farming for Dissent, so Judgment does not inherit that practice's other rows. "Long term solutions" is still not a facet. The model would have allowed one.10004) is onearn-trust. Giving and receiving feedback maps. The shared table also carries rows about slipping a date and taking credit, which the value tile does not say.10007) is onbelonging. Counteracting bias is extra relative to that table. The page's word is Inclusion.10010) is onmutual-respect. "No place in our Dream Team" is a keeper-test consequence, sharper than that table.10005) is a new facet, notinvent-and-simplify. That table is about removing steps. The memo's creativity is new ideas and artistic expression. Mapping it there would show the wrong table.10016) is onhave-backbone-disagree-and-commit. The memo's sentences are the commit half. The disagree half of that table comes along.10020) is onbetter-every-day. That table is about raising the work. Improving the culture, rather than preserving it, is not in the definition and not in the table.10008) is onlearn-and-be-curious. Close. "Humble about what you don't yet know" is only partly that table.words: "generated". They are company-agnostic. Netflix published no calibration. Every row indata/netflix/*.jsonomitswords, so it is authored. A quotation and our rows sit in the same file. The lines people quote from the memo do not show up in the porridge table.data/facets.json.speaking-up-humblyis gone.humility-as-silenceis a source ref onstay-humble, and porridge showshumility-that-will-not-decide. Creativity and Artistic Expression sharefor-its-audience. The record over onbreadth-of-the-slate, adding a title only to provoke, is not a porridge row. People Over Process and Context Not Control sharelet-them-decide. That generated row uses the vanish-or-hint polarity. Pulling the decision upward, andopenness(coaching a new person's first calls), are no longer generated rows.few-senior-decisionsstill covers a leader who keeps too many calls. The quiet room isask-who-disagrees, anddata/maps/generic-amazon.jsonlists it besideare-right-a-lot. Blue Origin9009/different-viewpointsis a source ref there. The generated copy onlistens-with-an-open-mindis gone.one-background-in-the-discussionstays on that facet. It is one background in a discussion, so a novel idea can show up. It is not the quiet room before a call is locked. A setback isafter-a-setback, shared by Blue Origin 9003 and Resilience 10009.first-approach-failsmoved offdeliver-results, andafter-the-missis gone. Amazon, Coupang, and generic Deliver Results stay ondeliver-resultsonly. Their other rows stay. An extra process step iscut-the-extra-step, shared by Amazon 1003, Dawn 6006, generic 8006, Blue Origin 9012, and People Over Process 10012.extra-steps-on-a-request-formmoved offinvent-and-simplify, anda-process-past-its-reasonis gone.data/maps/generic-amazon.jsonlistscut-the-extra-stepbesideinvent-and-simplify.The question bank cannot ask these practices without new questions, and new questions need example packs this pull request does not add. The companion BIQ change points a new facet at an existing Amazon question id only when one matches.
let-them-decideuses0788c8eb.ask-who-disagreesusesc418917e, which Amazon Are Right, A Lot already stores.for-its-audiencehas no match, so it has nofacetQuestionsentry. Creativity and Artistic Expression still inherit questions from their other facets. The change does not addfacetQuestionson an existing facet, because those ids would then be required for every company already on it. Mapped principles with an empty question list inherit the donor's full list: Amazon's Are Right, A Lot onto Judgment, Farming for Dissent, and Blue Origin Earn the Trust of Others, because Amazon is the first principle onask-who-disagreeswith stored questions (attachFacetQuestionsin kindel/biqjs/biq.js). People Over Process also inherits Amazon's Invent and Simplify questions throughcut-the-extra-step.after-a-setbackhas no principle with stored questions, so it adds no donor list. Blue Origin Deliver Results and Resilience keep the questions they already had. Earn Trust lands on Candor, Learn and Be Curious on Curiosity, Have Backbone on Disagree Then Commit, and the better-every-day donor on Great and Always Better. GitLab's belonging questions land on Inclusion. The mutual-respect donor lands on Decency and Respect. Search aliases include the shared facet labels, so "ask who disagrees" finds Judgment and Farming for Dissent, and "are right a lot" still finds Judgment. File:data/questions.jsonin kindel/biq.The borrowed questions miss the memo in particular for the keeper test, context not control, farming for dissent, artistic expression, almost no rules, the Dream Team standard, the informed captain, and people over process. Proposed questions are below. They are not in the bank.
Questions for Tig to write
Not added. Each one needs a Junior, Senior, and Exec example pack before it can live in the bank. Wording is a tell-me-about-a-time question, with no em dash.
Dream Team,
data/netflix/the-dream-team.json:Keeper test,
data/netflix/the-keeper-test.json. The bank currently attaches low-performer and promotion questions (bf907bc5,0f0c4692,d59e1646,9d996460). None of them ask the test.Context not control,
data/netflix/context-not-control.json. Borrowed idscf2dba5d,0788c8eb,db715723,6ba06d3bask about announcing a change, deciding without a manager, influencing a peer, and uncovering a problem.Informed captain,
data/netflix/informed-captain.json. Borrowed ids3de6ea90,86851599,4d7cb33a,fc2a4107ask about work outside your area, a hard decision with many inputs, and committing to a group decision.Farming for dissent,
data/netflix/farming-for-dissent.json. Borrowed idsc418917e,f5a5e3e0,86851599,0ed453eeask about gathering perspectives and disagreeing in a meeting.People over process,
data/netflix/people-over-process.json. Borrowed ids0788c8eb,4bac1a15,0e07e86c,e89fa18fask about deciding without a manager, moving versus gathering more information, and a more efficient process.Almost no rules,
data/netflix/almost-no-rules.json. Borrowed ids0e07e86c,0788c8eb,efd390d4,6d1129abare frugality and bias-for-action questions. None ask about a five-word expenses policy.Artistic expression,
data/netflix/artistic-expression.json. Borrowed ids78ffe24a,eb5a224e,73f36f42,2b30a0e6ask about novel approaches and innovation. None ask about supporting a slate.These have no record to hang on, which is the same strain. They are here so the dropped memo is not only a file note:
Leave the quotations alone
A definition stays a quotation of whole sentences. A sentence with an em dash stays out of the file. Two sentences that are not contiguous stay apart. A new field, a type, or a narrative body belongs in the follow-on about the model, not in this pull request. The questions above need Junior, Senior, and Exec packs before they can enter the bank.