Overview
Nick is based in Ghent and works at GitLab, a company that pioneered remote-first culture at scale. Before GitLab, he was CTO at Dropsolid and a long-time contributor to the Drupal open-source project. He has served as Chairman of Drupal User Group Belgium and Board Member of the Drupal Association.
As Director of Developer Relations at GitLab, Nick focuses on the contributor experience, making it as easy as possible for external contributors to participate in GitLab's development. He bridges the open-source community with GitLab's platform strategy.
Career history
- Director, Developer RelationsApr 2022 - PresentGitLab
- ChairmanJun 2019 - PresentDrupal User Group Belgium
- Board MemberNov 2021 - Nov 2024Drupal Association
- CTOFeb 2017 - Apr 2022Dropsolid NV
- ContributorMar 2007 - Apr 2022Drupal Project
Education
- UPMaster, Information Technology2009 - 2011Universitat Politecnica de Catalunya
- ISMaster, IT2011Instituto Superior TecnicoLisbon
Insights & ideas
The through-line
Across ten months of posts, Nick Veenhof is building the same thing from different angles: an AI "chief of staff" harness, and every entry documents a failure mode that gets turned into a structural rule rather than a hopeful prompt. The arc moves from a single agent doing everything ("Fast, and terrible at all of it" [10]) to an org chart of specialists, then to memory that survives the session, then to skills that load on demand, then to gates that block instead of warn, and finally to a rule against fabrication entirely. The preoccupation underneath all of it is the same: an AI system that sounds confident is not the same as one that is correct, and the only fix that holds is discipline encoded as code, not politeness encoded as a prompt. That same instinct, that contribution and trust need structural pathways rather than goodwill, also runs through his open source work: getting enterprises to actually contribute upstream instead of just consuming, and pushing that same logic into the era of agents submitting patches [13].
On delegation
The founding insight of the whole project is that one agent trying to be researcher, writer, reviewer, and operator at once produces mediocrity everywhere: "nobody can be a researcher, a writer, a reviewer, and an operator at once, and expecting a single agent to pull it off is optimism with a token budget" [8]. The fix was an org chart: "Five specialists, each mapped to a real GitLab job family, each with a scope" [10], later grown to fourteen specialists where "the orchestrator itself burns more than half the tokens and never does the actual research, because its whole job is deciding who does" [8]. He treats this as a straightforward analogy to good team design ("diversity creates better team outcomes" [8]) and the payoff was concrete: "43% of the work ran inside subagents the orchestrator delegated to" [8], and the system stopped feeling like a chatbot once it made "three clean delegations in one session" [10].
On memory
His clearest one-liner on the whole build is that "memory is the product, not a feature" [9]. The problem it solves is blunt: an assistant that "forgot everything overnight, every night, like an expensive goldfish" [9], repeating corrections because "nothing was remembering the corrections I kept telling it" [2]. The solution is not a smarter model but a structural habit: "a corrections log... categorize the correction, store it, inject it before the session starts" [2], because "the loop does not learn from training. It learns from you catching it and writ[ing it down]" [2]. He is candid that early versions of this were fragile too, noting a flat file where "one missing newline rejected every write. Not some writes. All of them" [9].
On enforcement
Once memory and delegation existed, the remaining gap was that the model would still ignore explicit instructions, so he stopped asking nicely: "My AI assistant ignored 'please don't' 461 times. So I stopped asking nicely and built a gate" [3]. The rules became code, "six numbered invariants that every deliverable must clear... Each one is a scar from a specific failure" [3], and critically the enforcer "does not warn, it blocks. A warning is a suggestion your assistant will cheerfully ignore" [3]. He extended this logic to the risk of confident fabrication: after the assistant invented "80 data points and presented them with the confidence of a tenured professor" [1] from unreadable scans, the rule became "Never fabricate. If you cannot read a source, say [UNREADABLE] and tap out to the human" [1]. Any write action also needs "two independent flags, a content review and an explicit human approval, because one reviewer can be fooled and two at once is much harder" [3].
On open source contribution
Outside the chief-of-staff project, his recurring argument is that contribution has a barrier problem, not a willingness problem: "most companies use open source every day but never contribute. Not because they don't want to. Because the barrier of entry is often too high" [13]. He points to GitLab's Co-Create program getting "engineers from our customers to their first merged contribution in a week" [13] as proof that lowering that barrier works at scale. He extends the same worry forward to agents: "Agents are already submitting patches. But most projects aren't ready for that" [13], and frames GitLab Orbit as a context layer meant to make agentic contribution reliable rather than chaotic, reporting "up to 45x fewer hallucinations, up to 11x faster, up to 4.5x fewer tokens" once the context layer caught up to the model [14].
From the stage
On the Open Source Founders Association podcast he describes GitLab's approach as a "dual flywheel strategy," treating open source as a growth motor where external contributors help innovate the product alongside internal engineers, accelerating the roadmap for features the community cares about [16], a framing not spelled out in his written posts. In the SoftwareCaptains interview, titled around hiring people who are better than you, he speaks directly to a hiring philosophy that his LinkedIn posts only gesture at through the multi-specialist agent analogy [17]. And in the DrupalJam 2022 talk, he reflects on what it was like to move from being inside the Drupal community for fifteen years to viewing it from outside as a new GitLab employee, saying that vantage point gave him sharper insight into what the Drupal community had actually accomplished [18].
Takeaways
- Treat AI memory as core product infrastructure, not an afterthought: build a categorized corrections log that injects into every new session automatically [2][9].
- Never let an assistant warn instead of block: encode invariants (no filler, sourced claims, no unreviewed writes) as gates that halt bad output rather than flag it [3].
- Split agent work across scoped specialists the way you would split a human team, and route through an orchestrator that delegates rather than does the research itself [8][10].
- Require an explicit fail-safe for unreadable or unverifiable input: force the system to say "[UNREADABLE]" and escalate to a human instead of guessing [1].
- Lower the barrier to contribution deliberately, whether for enterprise engineers or for agents submitting patches, because willingness is rarely the blocker, access is [13].
- Give any autonomous write action two independent checks, a content review and a human approval, borrowing the two-person rule from higher-stakes domains [3].
Media & appearances
- DrupaljamYouTubeDrupalJam 2022 re:United - Nick VeenhofNick Veenhof discusses his 15-year career in the Drupal world, including his work at companies like Crimson, Acquia, and Dropsol, before joining GitLab as Director of Contributor Success about a month and a half before this talk. He reflects on the transition from working within the Drupal community to viewing it from an outside perspective at a non-Drupal company, and notes that this shift gives him insights into the accomplishments of the Drupal community.
- Open Source Founders AssociationYouTubeOpen Source as a Growth Motor with Nick Veenhof and Vincent PicavetNick Veenhof discusses GitLab's "dual flywheel strategy," which treats open source as a growth motor by allowing external contributors to help innovate the product alongside internal engineers, accelerating the roadmap for features that matter to the community.
- SoftwareCaptainsYouTubeWaarom je mensen moet aannemen die beter zijn dan jou: Nick Veenhof van GitLab
In the news
- Contributing to open source means helping decide how the technology gets built. At Agents After Hour in Amsterdam, I joined a panel about open foundations. Katherine Druckman, Miguel Luna, Alessandro Vozza and I discussed participation, contributions, and agentic AI. The Agentic AI Foundation community hosted the event before #AGNTCon + #MCPCon Europe. That connects to my work at GitLab: help more people contribute and ship. Co-creation should turn customer problems into reusable improvements. Agents should help contributors move
- How's your chief of staff experiment going? Your next experiment should start with shared lessons, not a blank prompt. #AGNTCon + #MCPCon Europe runs September 17-18, 2026, at RAI Amsterdam. The programme brings together agent builders, researchers, enterprise teams, and open source maintainers. It covers agent architectures, Model Context Protocol (MCP), and operating agents in production. I took Paul, my AI chief of staff on the main stage of AGNTCon, to share what broke. Broken memory and unnecessary handoffs shaped the system
- Four months, five decisions that genuinely mattered, and one series about all of it. Building a chief of staff, part 10/10. I did not set out to build a calendar bot. I set out to see how far agentic orchestration goes when you engineer it like software instead of babysitting a prompt. Here is what held up. You do not need hundreds of commits. You need five decisions in the right order. One: delegate, do not autocomplete. Build the org chart before the prompt, give every agent a real scope, and when routing breaks the job
- If your AI's work is not in your issue tracker, it did not happen. Building a chief of staff, part 9/10. This one took longer to get right than anything else in the build, mostly because it is boring and boring is easy to skip. The assistant creates tasks, updates status, closes work, and files follow-ups for anything it could not finish. Nothing unusual there. What matters is where those tasks live: in GitLab, the same boards and labels the human team already uses. The sync runs both ways, so if you edit a label by hand, the
- 7,246 sessions in five months. The most useful numbers were the ones that turned out to be wrong. Building a chief of staff, part 8/10. I mined the whole history to prep this series: the live database plus 56 archives, zero overlap. It was bigger than expected and more broken than I wanted to admit. I wanted real numbers, not vibes, because "vibes" is how you convince yourself an AI system is working right up until it is not. The live window (April 18 to July 3) holds 2,362 sessions and 87.65M tokens, roughly a thousand where I was
- My AI assistant was asked to process a bunch of written notes from a workshop. It plainly invented 80 data points and presented them with the confidence of a tenured professor. Building a chief of staff, part 7/10. The scene: low-res workshop scans, handwriting a doctor would envy, fed to the assistant. Back came a gorgeous summary of 16 names and 80 data points, perfectly formatted, chef's kiss. All of it fiction. The model could not read the scans, so it did what a nervous intern does: it guessed and committed to the bit. A
- My AI harness kept making the same mistakes. Building a chief of staff, part 6/10. Nothing was remembering the corrections I kept telling it. The model has the memory of that goldfish from part 2, and hoping it will "learn" from a stern prompt is how you lose the same afternoon twice. So I kept a corrections log, a memory. Not a wishlist of nice behaviors, a running record of things that broke, sorted into five buckets: Delegation, Fact, Tone, Process, Preference. A wrong weekday on a date. An em dash I had explicitly banned. A
- After a well deserved PTO, let's continue building a chief of staff, part 5/10. My AI assistant ignored "please don't" 461 times. So I stopped asking nicely and built a gate. Or well, a function/rule in a hook in Opencode, but could also be Claude Code or Codex. So the rules became code. Six numbered invariants that every deliverable must clear: no filler, no unverified claims, sources on every fact, structured output passed through untouched, and no writes before a pre-mutation check. Each one is a scar from a specific failure.
This page shows public professional information only, each fact cited. Is this you? send a correction, or ask for removal within 24 hours, no questions asked.






