{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Open Req Letter",
  "home_page_url": "https://openreqletter.com",
  "feed_url": "https://openreqletter.com/feed.json",
  "description": "How hiring actually runs: how a talent function is built and staffed, what it costs, and which options actually hold up. From the operating side, not the commentary.",
  "icon": "https://openreqletter.com/logo/apple-touch-icon-180.png",
  "favicon": "https://openreqletter.com/logo/favicon-64.png",
  "language": "en-GB",
  "authors": [
    {
      "name": "Piotr Knapik",
      "url": "https://openreqletter.com/about",
      "avatar": "https://openreqletter.com/logo/avatar-linkedin-400.png"
    }
  ],
  "items": [
    {
      "id": "https://openreqletter.com/letters/what-a-hire-really-costs",
      "url": "https://openreqletter.com/letters/what-a-hire-really-costs",
      "title": "What a hire really costs, line by line",
      "summary": "We rebuilt cost per hire from the general ledger instead of the ATS. Three quarters of the number sits in budgets talent acquisition does not control.",
      "content_html": "<p>The number your ATS reports is agency spend plus job board licences divided by hires. It is a\nprocurement figure wearing a talent acquisition label, and it is the one that reaches the board.</p>\n<p>Last year we pulled every cost that a hire touches out of the general ledger: recruiter time at\nloaded rates, hiring manager and panel hours, tooling amortised per requisition, referral bonuses,\nand the output lost while the seat stayed empty. Four quarters,\n<span>1,240</span> hires.<span aria-hidden=\"true\"></span><span><span>Relocation and immigration are excluded. They are\nlarge, but they apply to too few hires to belong in a per-hire average.</span></span></p>\n<p>The ATS said <span>7,900 €</span>. The ledger said <span>30,800 €</span>.</p>\n<figure id=\"figure-1\"><figcaption><span>Figure 1</span><span data-cite-title>Where the 30,800 € goes</span></figcaption><div><div><span>Vacancy cost</span><span><span></span></span><span>19,182</span><span>62%</span></div><div><span>Agency fees</span><span><span></span></span><span>5,500</span><span>18%</span></div><div><span>Panel time</span><span><span></span></span><span>3,740</span><span>12%</span></div><div><span>Recruiter time</span><span><span></span></span><span>1,440</span><span>5%</span></div><div><span>Tooling, other</span><span><span></span></span><span>900</span><span>3%</span></div></div><p data-cite-source>General ledger, FY25 · engineering roles, Western Europe · n=1,240 · EUR, fully loaded</p><div><a href=\"#figure-1\" aria-label=\"Link to Figure 1\">Figure 1</a><span role=\"status\" aria-live=\"polite\"></span></div></figure>\n<p>Only two of those five lines sit in a talent acquisition budget. The largest one sits in no budget\nat all.</p>\n<h2 id=\"the-line-nobody-owns\">The line nobody owns</h2>\n<p>Vacancy cost is the output a team does not produce while a seat is empty. Most functions either\nignore it or reach for a figure so aggressive that finance refuses to look at it: annual revenue\ndivided by headcount, which quietly assumes a new engineer generates revenue on their first\nmorning.</p>\n<p>We used something duller and defensible. Take the fully loaded cost of the role, convert it to a\ndaily rate over working days, and multiply by the share of a team’s committed work that actually\nstalls when the seat is open. That last number is the whole argument, and it is the one people\nwant to skip.<span aria-hidden=\"true\"></span><span><span>We measured it against sprint carry-over across four quarters. For teams\nalready running at capacity it sat between 0.4 and 0.7.</span></span></p>\n<p>At <span>78</span> days open and a stall share of <span>60%</span>, it\ncomes to <span>19,182 €</span> per hire. Sixty-two per cent of the total, and more\nthan three times the agency line everyone spends their time renegotiating.</p>\n<blockquote><p><p>Taking a month out of the time to fill returned more than renegotiating every agency contract we\nhad.</p></p><cite>Letter 014 · Cost of hiring</cite></blockquote>\n<p>That is not rhetoric, it is subtraction. Thirty days off the median saves\n<span>7,378 €</span> a hire against an agency line of <span>5,500 €</span>.\nAnd unlike the agency line, you do not have to persuade a supplier to agree to it.</p>\n\n<h2 id=\"run-it-on-your-own-numbers\">Run it on your own numbers</h2>\n<p>The model is below rather than in an appendix, because the assumptions are the interesting part.\nChange the stall share to something you would defend in front of your own CFO and watch what\nhappens to the total. Set it to zero and the number falls by nearly two thirds, which is precisely\nwhy it is the assumption that usually goes missing.</p>\n<section><header><p>Model · yours to change</p><h3>Run it on your own numbers</h3><p>Every figure below is derived from the five inputs. Change any of them and the whole model recalculates, including the total the board sees.</p></header><div><div><div><label for=\"m-salary\"><span>Base salary of the role<span>Annual, before employer loading</span></span><output>110,000<span>€</span></output></label></div><div><label for=\"m-rounds\"><span>Interview rounds<span>Excluding the recruiter screen</span></span><output>5</output></label></div><div><label for=\"m-panel\"><span>Interviewers per round<span>Counted per person, not per session</span></span><output>6</output></label></div><div><label for=\"m-days\"><span>Days the seat stays open<span>Requisition approved to offer accepted</span></span><output>78</output></label></div><div><label for=\"m-stall\"><span>Share of the team’s work that stalls<span>The honest number is rarely zero and never 100</span></span><output>60<span>%</span></output></label></div><div><label for=\"m-agency\"><span>Share of these roles filled by agency</span><output>25<span>%</span></output></label></div><p data-yours hidden>Showing your numbers, remembered on this device. The figures in the text above use the letter's own assumptions.</p></div><div><div><p>Fully loaded cost per hire</p><p data-total aria-live=\"polite\"><span data-total-num>30,762</span><span>€</span></p></div><div><div><span>Vacancy cost</span><span>78 days · 60% stalled</span><span><span></span></span><span>19,182</span></div><div><span>Agency fees</span><span>25% of roles · 20% fee</span><span><span></span></span><span>5,500</span></div><div><span>Panel time</span><span>45 hours at €83</span><span><span></span></span><span>3,740</span></div><div><span>Recruiter time</span><span>32 hours at €45</span><span><span></span></span><span>1,440</span></div><div><span>Tooling, other</span><span>amortised per hire</span><span><span></span></span><span>900</span></div></div></div></div><p>Method as published · loading factor 1.36 · 1,800 working hours and 220 working days per FTE year · agency fee taken at 20% of base salary</p></section>\n<h2 id=\"panel-time-is-the-budget-nobody-signs\">Panel time is the budget nobody signs</h2>\n<p>The second unowned line is smaller and much easier to move. Five rounds, six interviewers, an hour\neach plus preparation and debrief, at engineering loaded rates: <span>3,740 €</span>\nper hire, appearing in no hiring budget anywhere in the company.</p>\n<p>It is not that nobody knew interviews cost something. It is that the cost lands in engineering\nsalary lines, spread across dozens of cost centres, in fifteen-minute increments that no one adds\nup. The only person positioned to add them up is the one running the funnel, and that person is\nusually measured on time to fill.</p>\n<p>So we asked a narrow question: after round three, how often did the next round reverse the\nrecommendation?</p>\n<div id=\"table\"><p data-cite-title>Decision reversals by round, engineering</p><div><table><thead><tr><th scope=\"col\">Round</th><th scope=\"col\">Interviews</th><th scope=\"col\">Reversals</th><th scope=\"col\">Reversal rate</th><th scope=\"col\">Cost per reversal</th></tr></thead><tbody><tr><th scope=\"row\">Round 2</th><td>1,240</td><td>372</td><td>30.0%</td><td>2,500 €</td></tr><tr><th scope=\"row\">Round 3</th><td>868</td><td>104</td><td>12.0%</td><td>6,200 €</td></tr><tr><th scope=\"row\">Round 4</th><td>764</td><td>23</td><td>3.0%</td><td>24,800 €</td></tr><tr><th scope=\"row\">Round 5<span>est.</span></th><td>96</td><td>1</td><td>1.0%</td><td>71,800 €</td></tr></tbody></table></div><p data-cite-source>Interview scorecards, FY25 Q1–Q2 · engineering roles, Western Europe · n=1,240 candidates · cost per reversal = panel cost of the round ÷ decisions it changed · Round 5 ran informally in a few teams only</p><div><a href=\"#table\" aria-label=\"Link to Table\">Table</a><span role=\"status\" aria-live=\"polite\"></span></div></div>\n<p>Round four changed the outcome in three per cent of cases, at a panel cost of roughly twenty-five\nthousand euros per changed decision. Round five, where teams ran it, was worse by a factor of\nthree.</p>\n<p>That is not an argument for hiring carelessly. It is an argument that the fourth round was buying\nconfidence rather than information, and that the confidence was being bought at a price nobody had\never been shown.</p>\n<h2 id=\"what-changed-afterwards\">What changed afterwards</h2>\n<p>Three things, none of them procurement.</p>\n<ol>\n<li>Interview loops for engineering dropped from five rounds to four, with the debrief formalised so\nround three carried the weight round four had been carrying informally.</li>\n<li>Scheduling moved to a fixed weekly panel slot. Unglamorous, and worth sixteen days of median\ntime to fill on its own, more than any other single change we made.</li>\n<li>Vacancy cost became a line in the monthly operating review, next to time to fill. Not because it\nis precise, but because it is the number that makes a hiring manager answer a scheduling request\nthe same week.</li>\n</ol>\n<p>Twelve months on, the ledger figure is <span>26,000 €</span>. The agency line has not\nmoved at all.</p>\n<p>That is the whole argument. The lever is process design, not procurement, and it only becomes\nvisible when the cost is measured where it actually falls.</p>\n<hr/>\n<p><strong>If you want to run this yourself:</strong> ask your finance business partner for the cost centre codes\nbehind interviewing time, and ask your ATS for scorecards by round with the final decision\nattached. Neither request is unusual. The first one is the one people forget to make.</p>",
      "image": "https://openreqletter.com/og/what-a-hire-really-costs.png",
      "date_published": "2026-03-12T00:00:00.000Z",
      "tags": [
        "Cost of hiring"
      ],
      "_openreq": {
        "issue": "014",
        "reading_minutes": 4
      }
    },
    {
      "id": "https://openreqletter.com/letters/the-screening-pilot-that-saved-nothing",
      "url": "https://openreqletter.com/letters/the-screening-pilot-that-saved-nothing",
      "title": "The screening pilot that saved nothing",
      "summary": "Twelve weeks, 9,000 applications, and a time saving that vanished once review time was counted properly.",
      "content_html": "<p>The pilot was set up to answer one question: does automated CV screening reduce the time a recruiter\nspends getting from application to shortlist? Twelve weeks, four job families,\n<span>9,000</span> applications, one vendor, and a control group that ran the old way.</p>\n<p>The headline result was a <span>71%</span> reduction in screening time. That number was\ntrue, and it was also the wrong number.</p>\n<h2 id=\"what-the-71-measured\">What the 71% measured</h2>\n<p>It measured the interval between an application arriving and a recruiter marking it reviewed. The\ntool did that in seconds. A recruiter did it in roughly ninety.</p>\n<p>What it did not measure was everything the recruiter then did with the output: opening the borderline\ncases the model had scored between thresholds, checking the rejections in the job families where the\nmodel had least training data, and answering hiring managers who wanted to know why a particular\nprofile had not come through.</p>\n<figure id=\"figure-1\"><figcaption><span>Figure 1</span><span data-cite-title>Recruiter minutes per 100 applications</span></figcaption><div><div><span>Control group</span><span><span></span></span><span>152 min</span><span>52%</span></div><div><span>Pilot: screening</span><span><span></span></span><span>44 min</span><span>15%</span></div><div><span>Pilot: review</span><span><span></span></span><span>61 min</span><span>21%</span></div><div><span>Pilot: disputes</span><span><span></span></span><span>34 min</span><span>12%</span></div></div><p data-cite-source>Time tracking, 12-week pilot FY26 Q1 · four job families, three regions · n=9,000 applications</p><div><a href=\"#figure-1\" aria-label=\"Link to Figure 1\">Figure 1</a><span role=\"status\" aria-live=\"polite\"></span></div></figure>\n<p>Add the pilot’s three bars together and you get <span>139</span> minutes against a\ncontrol of <span>152</span>. A saving of nine per cent, not seventy-one.</p>\n<blockquote><p><p>Every automation moves work rather than removing it. The question is only whether it moves to\nsomeone cheaper, and whether you counted where it landed.</p></p></blockquote>\n\n<h2 id=\"where-it-did-pay\">Where it did pay</h2>\n<p>The nine per cent is an average across four job families, and averages hide the useful part.</p>\n<p>In high-volume roles with well-defined requirements (customer support, warehouse, entry-level\nmanufacturing) the saving was real and large. The model had thousands of examples per role and the\ndispute rate was near zero. In specialist engineering, where each requisition looked different from\nthe last, the review and dispute time exceeded what was saved. The tool cost time.</p>\n<div id=\"table\"><p data-cite-title>Net time change by job family</p><div><table><thead><tr><th scope=\"col\">Job family</th><th scope=\"col\">Applications</th><th scope=\"col\">Control (min)</th><th scope=\"col\">Pilot (min)</th><th scope=\"col\">Net</th></tr></thead><tbody><tr><th scope=\"row\">Customer support</th><td>4,100</td><td>148</td><td>71</td><td>−52%</td></tr><tr><th scope=\"row\">Manufacturing</th><td>2,600</td><td>139</td><td>84</td><td>−40%</td></tr><tr><th scope=\"row\">Finance</th><td>1,400</td><td>161</td><td>152</td><td>−6%</td></tr><tr><th scope=\"row\">Engineering</th><td>900</td><td>174</td><td>219</td><td>+26%</td></tr><tr><th scope=\"row\">All</th><td>9,000</td><td>152</td><td>139</td><td>−9%</td></tr></tbody></table></div><p data-cite-source>Time tracking, 12-week pilot FY26 Q1 · minutes per 100 applications · n=9,000</p><div><a href=\"#table\" aria-label=\"Link to Table\">Table</a><span role=\"status\" aria-live=\"polite\"></span></div></div>\n<h2 id=\"what-we-did-with-it\">What we did with it</h2>\n<p>We kept the tool and narrowed it to two job families. The licence cost went down because the volume\ntier changed, and the recruiters who had been fighting it in engineering got their afternoons back.</p>\n<p>The uncomfortable part of the review was not the vendor. It was that the original business case had\nbeen written against the screening interval, and nobody, including me, had asked at the design\nstage what happened to the work downstream. A pilot that measures one step of a process will always\nfind that step improved.</p>\n<p><strong>If you are about to run one:</strong> define the measurement boundary before the vendor does, and make it\nend at the point where a hiring manager sees a shortlist, not at the point where the model returns a\nscore.</p>",
      "image": "https://openreqletter.com/og/the-screening-pilot-that-saved-nothing.png",
      "date_published": "2026-02-26T00:00:00.000Z",
      "tags": [
        "AI in hiring"
      ],
      "_openreq": {
        "issue": "013",
        "reading_minutes": 2
      }
    },
    {
      "id": "https://openreqletter.com/letters/how-many-reqs-can-one-recruiter-hold",
      "url": "https://openreqletter.com/letters/how-many-reqs-can-one-recruiter-hold",
      "title": "How many reqs can one recruiter actually hold",
      "summary": "A load model built on complexity rather than headcount, and what happened when we applied it across four regions.",
      "content_html": "<p>Every capacity conversation I have been in starts the same way: someone divides open requisitions by\nrecruiters and produces a number. Ours was <span>12.8</span>. The number is easy to\nproduce and it explains almost nothing, because a graduate req in Poland and a principal engineer req\nin Munich are not the same unit of work.</p>\n<p>So we stopped counting requisitions and started counting the things that actually consume a\nrecruiter’s week.</p>\n<h2 id=\"the-four-inputs\">The four inputs</h2>\n<p>Sourcing intensity: the share of the pipeline that has to be built rather than attracted.\nStakeholder load: how many hiring managers a recruiter serves, not how many roles. Process length:\nmedian days from open to offer for that role family. Novelty: whether the role has been filled in\nthe last twelve months in that location.</p>\n<p>Each scored one to three, multiplied out, and normalised so that a mid-level role in a location with\nan established pipeline equals <span>1.0</span>.</p>\n<figure id=\"figure-1\"><figcaption><span>Figure 1</span><span data-cite-title>Load units per open requisition</span></figcaption><div><div><span>Graduate, PL</span><span><span></span></span><span>0.4</span><span>4%</span></div><div><span>Mid engineer, PL</span><span><span></span></span><span>1.0</span><span>10%</span></div><div><span>Mid engineer, DE</span><span><span></span></span><span>1.6</span><span>16%</span></div><div><span>Principal, DE</span><span><span></span></span><span>3.1</span><span>30%</span></div><div><span>Country lead</span><span><span></span></span><span>4.2</span><span>41%</span></div></div><p data-cite-source>Internal load model, FY26 · calibrated against recruiter time tracking, n=38 recruiters over one quarter</p><div><a href=\"#figure-1\" aria-label=\"Link to Figure 1\">Figure 1</a><span role=\"status\" aria-live=\"polite\"></span></div></figure>\n<h2 id=\"what-it-showed\">What it showed</h2>\n<p>Applied across the portfolio, the picture inverted. Central Europe, which looked comfortably staffed\nat 11.9 reqs per recruiter, was carrying the lightest load in the company. Western Europe, at 15.3,\nwas carrying almost double the work per head.</p>\n<div id=\"table\"><p data-cite-title>Recruiter load by region</p><div><table><thead><tr><th scope=\"col\">Region</th><th scope=\"col\">Open roles</th><th scope=\"col\">Recruiters</th><th scope=\"col\">Roles / FTE</th><th scope=\"col\">Load / FTE</th></tr></thead><tbody><tr><th scope=\"row\">Western Europe</th><td>184</td><td>12</td><td>15.3</td><td>24.1</td></tr><tr><th scope=\"row\">Central Europe</th><td>131</td><td>11</td><td>11.9</td><td>9.8</td></tr><tr><th scope=\"row\">North America</th><td>96</td><td>9</td><td>10.7</td><td>14.2</td></tr><tr><th scope=\"row\">APAC<span>est.</span></th><td>74</td><td>6</td><td>12.3</td><td>15.6</td></tr><tr><th scope=\"row\">Total</th><td>485</td><td>38</td><td>12.8</td><td>16.4</td></tr></tbody></table></div><p data-cite-source>Internal capacity model, FY26 Q2 · load units per recruiter FTE · n=485 open roles across 38 recruiters · APAC estimated, pipeline data incomplete</p><div><a href=\"#table\" aria-label=\"Link to Table\">Table</a><span role=\"status\" aria-live=\"polite\"></span></div></div>\n<p>The quality complaints we had been receiving mapped onto the load column almost exactly, and onto the\nrequisition column not at all.</p>\n<blockquote><p><p>Most hiring problems are capacity problems wearing a quality costume.</p></p><cite>Letter 009 · Capacity planning</cite></blockquote>\n\n<h2 id=\"the-line\">The line</h2>\n<p>Across four quarters, the point at which escalations began to rise sat between\n<span>18</span> and <span>20</span> load units per recruiter. Below eighteen,\ncomplaint volume was flat and uncorrelated with load. Above twenty it rose steeply, and the first\nthing to degrade was not time to fill but candidate communication, the part of the job that has no\ndeadline attached to it and therefore absorbs every squeeze.</p>\n<p>That gave us something to plan against. Not a headcount target, a ceiling.</p>\n<h2 id=\"what-it-did-not-solve\">What it did not solve</h2>\n<p>Load models make redistribution arguments winnable and hiring arguments harder. The first\nconversation after this landed was not about adding recruiters; it was about moving two of them from\nCentral to Western Europe, which is a conversation with a country manager, not a spreadsheet.</p>\n<p>The second was about whether the scoring could be gamed. It can. Anyone who assigns their own\nnovelty score will discover their roles are unusually novel. We moved scoring to the operations team\nand published the rubric, which removes the argument without removing the incentive.</p>\n<p><strong>If you want to build one:</strong> start with time tracking on twenty recruiters for one quarter. Without\na calibration set the weights are opinion, and an opinion in a spreadsheet is harder to argue with\nthan an opinion in a sentence, which is the wrong kind of advantage to have.</p>",
      "image": "https://openreqletter.com/og/how-many-reqs-can-one-recruiter-hold.png",
      "date_published": "2026-02-12T00:00:00.000Z",
      "tags": [
        "Capacity"
      ],
      "_openreq": {
        "issue": "012",
        "reading_minutes": 2
      }
    },
    {
      "id": "https://openreqletter.com/letters/setting-up-a-talent-function",
      "url": "https://openreqletter.com/letters/setting-up-a-talent-function",
      "title": "Setting up a talent function, in the order it has to happen",
      "summary": "The sequence matters more than the org chart. Most rebuilds stall because step four gets done first.",
      "content_html": "<p>There is no dataset in this one. It is the sequence I would use if I had to build a talent function\nagain from very little, and the reasoning behind the order, which is the part that usually goes\nmissing when this gets written up.</p>\n<p>The brief always arrives the same way. Hiring is not working, someone senior has been asked to fix\nit, and within a fortnight there is an org chart with boxes for sourcing, coordination and business\npartnering. The chart is not wrong. It is just the fourth thing, and it keeps getting done first.</p>\n<h2 id=\"1-decide-what-the-function-is-accountable-for\">1. Decide what the function is accountable for</h2>\n<p>Before any structure, write down what talent acquisition owns, what it influences, and what it does\nnot touch. Then get a hiring executive to disagree with it in writing.</p>\n<p>The three that matter: does TA own the decision to open a role, or only the process once it is\nopen? Does TA own the offer, or does compensation? Does TA own the hiring manager’s calendar in any\nenforceable sense?</p>\n<p>Most functions are held accountable for time to fill while owning none of the three levers that\nmove it. That is not an organisational design problem, it is an accountability problem, and no box\non a chart will fix it later.</p>\n<h2 id=\"2-find-out-what-you-are-actually-hiring\">2. Find out what you are actually hiring</h2>\n<p>Not the plan. The last eighteen months of what really happened: volumes by role family, by\nlocation, by seniority, and how much of it was replacement rather than growth.<span aria-hidden=\"true\"></span><span><span>Replacement\nhiring behaves differently from growth hiring. It is unplanned, urgent and usually a symptom of\nsomething else. A function built entirely for growth handles it badly.</span></span></p>\n<p>Almost every function I have seen is organised for the hiring it wishes it did rather than the\nhiring it does. Two hundred customer support roles a year and eleven engineering roles is a\ndifferent organisation from the reverse, even at identical headcount.</p>\n\n<h2 id=\"3-fix-intake-before-sourcing\">3. Fix intake before sourcing</h2>\n<p>The intake conversation (what the role is, why it exists, what good looks like, what the process\nwill be, what the manager has to do and by when) is the single highest-leverage thirty minutes in\nthe whole process, and it is the first thing to be skipped when the team is busy.</p>\n<p>Fixing sourcing before intake produces more candidates for a role nobody has agreed on. That is not\nprogress; it is a larger version of the same argument, held later, with more people in it.</p>\n<p>Make intake a required, documented step with a named output. If a manager will not do it, that is\nuseful information about whether the role is real.</p>\n<h2 id=\"4-now-design-the-structure\">4. Now design the structure</h2>\n<p>Only here. And the choice is narrower than it looks: you are picking how much you specialise.</p>\n<p>A generalist model, where one recruiter runs the whole process for a set of managers, is more\nresilient, easier to staff, and better where volumes are low or unpredictable. A specialised\nmodel, splitting sourcing from process management, is more efficient at volume and much more\nfragile: it needs coordination that has to be designed, staffed and maintained, and every handover\nis a place where candidates go quiet.</p>\n<p>The mistake is choosing the specialised model because it looks like what large functions have,\nwithout staffing the coordination it silently depends on. Large functions have that coordination.\nIt is just not on the chart.</p>\n<h2 id=\"5-tooling-last\">5. Tooling last</h2>\n<p>An ATS will faithfully encode whatever process you have. If the process is unresolved, you are\npaying a vendor to make the confusion permanent and much harder to change.</p>\n<p>The exception is anything you need for a legal obligation. That part is not optional and does not\nwait for the rest.</p>\n<h2 id=\"the-test\">The test</h2>\n<p>Six months in, ask a hiring manager who has just closed a role two questions: what did you have to\ndo, and when did you know what was happening? If they can answer both without checking their email,\nthe function is working, whatever the chart looks like.</p>\n<hr/>\n<p><strong>What I would not do again:</strong> publish a target operating model before step two. It commits you in\npublic to a structure you have not yet earned the right to choose, and every subsequent piece of\nevidence gets read as a threat to the plan rather than as information.</p>",
      "image": "https://openreqletter.com/og/setting-up-a-talent-function.png",
      "date_published": "2026-01-29T00:00:00.000Z",
      "tags": [
        "Operating model"
      ],
      "_openreq": {
        "issue": "011",
        "reading_minutes": 3
      }
    }
  ]
}