of a page * * Attributes (all on the contents element except where noted): * wa-toc-element="contents" | "link" | "table" | "ix-trigger" * -- structural markers. Multiple * "table" elements are allowed * and each receives a TOC copy. * wa-toc-offsettop="" -- click-scroll offset only * (e.g. clear a fixed navbar) * wa-toc-offsetbottom="" -- shifts active line down * wa-toc-activeline="" -- where headings activate * during scroll. Default 33vh. * wa-toc-headings="" -- restrict which heading levels * are collected. Default h2..h6. * wa-toc-hideurlhash="true" -- suppress #hash on click * wa-toc-ancestoractive="true" -- mark ancestors active too * wa-toc-instance="" -- (on a shared parent) scopes * multiple TOCs on one page * * In-text directives (inside heading plain text, stripped at render): * [wa-toc-omit] -- exclude this heading * [wa-toc-h2] .. [wa-toc-h6] -- override heading level in * the TOC only * * Active state uses Webflow's native `.w--current` class so styling can be * configured directly in the Webflow Designer. */ (function () { 'use strict'; var ACTIVE_CLASS = 'w--current'; var ATTR = 'wa-toc-element'; var DIRECTIVE_RE = /\[wa-toc-(omit|h([2-6]))\]/i; var DEFAULT_HEADING_SELECTOR = 'h2, h3, h4, h5, h6'; // ---------- utilities -------------------------------------------------- /** * Slugify heading text into an id. Mirrors Webflow's native id generation * closely enough for hash navigation: lowercase, spaces β†’ hyphens, drop * non-alphanumeric except hyphens, collapse runs of hyphens. */ function slugify(text) { return String(text) .toLowerCase() .trim() .replace(/[\s_]+/g, '-') .replace(/[^a-z0-9\-]/g, '') .replace(/-+/g, '-') .replace(/^-|-$/g, ''); } /** Ensure a slug is unique within a Set, suffixing -2, -3, ... if needed. */ function uniqueSlug(base, used) { if (!base) base = 'section'; var slug = base; var i = 2; while (used.has(slug)) { slug = base + '-' + i++; } used.add(slug); return slug; } /** * Convert a CSS length string (e.g. "8rem", "120px", "10vh") to pixels, * resolved against the document root. Returns 0 on failure. */ function cssLengthToPx(value) { if (!value) return 0; var probe = document.createElement('div'); probe.style.position = 'absolute'; probe.style.visibility = 'hidden'; probe.style.height = value; probe.style.width = '0'; document.body.appendChild(probe); var px = probe.getBoundingClientRect().height; document.body.removeChild(probe); return isFinite(px) ? px : 0; } /** * Parse the wa-toc-headings attribute into a CSS selector. Accepts: * "h2,h3" β†’ "h2, h3" * "h2 h3 h4" β†’ "h2, h3, h4" * "2,3" β†’ "h2, h3" * "H2, h3" β†’ "h2, h3" (case-insensitive) * Tokens outside h2..h6 are dropped. Returns the default selector when * the input is empty or yields no valid levels β€” keeps behavior safe. */ function parseHeadingLevels(raw) { if (!raw) return DEFAULT_HEADING_SELECTOR; var tokens = String(raw) .toLowerCase() .split(/[\s,]+/); var levels = []; var seen = {}; for (var i = 0; i < tokens.length; i++) { var tok = tokens[i].trim(); if (!tok) continue; // Accept "h2" or "2". var m = /^h?([2-6])$/.exec(tok); if (!m) continue; var tag = 'h' + m[1]; if (seen[tag]) continue; seen[tag] = true; levels.push(tag); } if (!levels.length) return DEFAULT_HEADING_SELECTOR; return levels.join(', '); } /** Find the closest ancestor (or self) carrying wa-toc-instance. */ function instanceOf(el) { var node = el; while (node && node.nodeType === 1) { if (node.hasAttribute('wa-toc-instance')) { return node.getAttribute('wa-toc-instance'); } node = node.parentElement; } return ''; // default unnamed instance } /** Find the link template within a given root, matching wa-toc-element="link". */ function findLinkTemplate(root) { return root.querySelector('[' + ATTR + '="link"]'); } /** * The link template may be applied directly to an , or to a text * element nested inside an . Resolve to the actual we should clone. */ function resolveAnchorTemplate(linkEl) { if (linkEl.tagName === 'A') return linkEl; var anchor = linkEl.closest('a'); return anchor || linkEl; // fall back to the marked element itself } /** * Within a cloned link, find the text-bearing element that originally had * wa-toc-element="link". If the marker was on the anchor itself, the * anchor is the text holder. */ function findTextHolder(clonedAnchor, originalMarker) { if (originalMarker.tagName === 'A') return clonedAnchor; // The marker was a descendant; find the same descendant in the clone by // walking the same path. var path = []; var node = originalMarker; var rootAnchor = originalMarker.closest('a'); while (node && node !== rootAnchor) { var parent = node.parentElement; if (!parent) break; path.unshift(Array.prototype.indexOf.call(parent.children, node)); node = parent; } var current = clonedAnchor; for (var i = 0; i < path.length; i++) { current = current.children[path[i]]; if (!current) return clonedAnchor; } return current; } // ---------- per-instance pipeline ------------------------------------- function buildInstance(contentsEl) { var instanceId = instanceOf(contentsEl); // Locate the link template in the same instance. var linkMarker = null; var allLinks = document.querySelectorAll('[' + ATTR + '="link"]'); for (var i = 0; i < allLinks.length; i++) { if (instanceOf(allLinks[i]) === instanceId) { linkMarker = allLinks[i]; break; } } if (!linkMarker) return null; // nothing to do var anchorTemplate = resolveAnchorTemplate(linkMarker); // Locate every wa-toc-element="table" in the same instance. The TOC will // be rendered into each one β€” same headings, same active-state tracking, // independent styling contexts. If none are present, fall back to a // single mount at the link template's parent (Finsweet-compatible). var mountEls = []; var allTables = document.querySelectorAll('[' + ATTR + '="table"]'); for (var j = 0; j < allTables.length; j++) { if (instanceOf(allTables[j]) === instanceId) { mountEls.push(allTables[j]); } } if (!mountEls.length) { var fallback = anchorTemplate.parentElement; if (!fallback) return null; mountEls.push(fallback); } // Read config off the contents element. var offsetTopVal = cssLengthToPx(contentsEl.getAttribute('wa-toc-offsettop')); var offsetBotVal = cssLengthToPx(contentsEl.getAttribute('wa-toc-offsetbottom')); var hideHash = contentsEl.getAttribute('wa-toc-hideurlhash') === 'true'; var ancestorMode = contentsEl.getAttribute('wa-toc-ancestoractive') === 'true'; var activeLineAttr = contentsEl.getAttribute('wa-toc-activeline'); var activeLineRaw = activeLineAttr; // keep raw for vh re-resolution on resize var headingSelector = parseHeadingLevels(contentsEl.getAttribute('wa-toc-headings')); // Collect heading elements in document order, applying directives. var rawHeadings = contentsEl.querySelectorAll(headingSelector); var headings = []; var usedIds = new Set(); for (var k = 0; k < rawHeadings.length; k++) { var h = rawHeadings[k]; var text = h.textContent || ''; var levelOverride = null; var omit = false; // Strip *all* directive occurrences from the rendered heading text and // capture the first relevant one. We also clear them from the live DOM // so readers don't see "[wa-toc-h4]My heading". var cleaned = text; var match; while ((match = DIRECTIVE_RE.exec(cleaned))) { if (match[1].toLowerCase() === 'omit') { omit = true; } else if (match[2]) { levelOverride = parseInt(match[2], 10); } cleaned = cleaned.slice(0, match.index) + cleaned.slice(match.index + match[0].length); } cleaned = cleaned.trim(); if (cleaned !== text) { // Replace directive markers in text nodes only, preserving inline // markup like / children. stripDirectivesInPlace(h); } if (omit || !cleaned) continue; // Assign / preserve id for hash linking. var id = h.id; if (!id) { id = uniqueSlug(slugify(cleaned), usedIds); h.id = id; } else { usedIds.add(id); } var actualLevel = parseInt(h.tagName.charAt(1), 10); var displayLevel = levelOverride || actualLevel; headings.push({ el: h, id: id, text: cleaned, level: displayLevel, }); } if (!headings.length) return null; // The TOC must start at H2. If somebody overrode levels, normalize so the // shallowest level encountered renders at the outermost nesting depth. var minLevel = headings.reduce(function (m, h) { return Math.min(m, h.level); }, 6); // Build the nested DOM. We need *wrappers* so children of an H# can be // appended next to (not inside) the link itself. Per Finsweet's docs: // "Each Heading link template must be enclosed in a div wrapper, and // this div wrapper should be a child of the div associated with the // preceding Heading level." // // We model this with a per-level "wrapper" element. The first child of // the wrapper is the link; subsequent children are nested wrappers. var rootContainer = document.createElement('div'); rootContainer.setAttribute('wa-toc-element', 'list'); var entries = []; // parallel array: { link, wrapper, heading } var stack = [{ level: minLevel - 1, wrapper: rootContainer }]; for (var n = 0; n < headings.length; n++) { var heading = headings[n]; // Pop until the top of stack is the parent level (one shallower). while (stack.length > 1 && stack[stack.length - 1].level >= heading.level) { stack.pop(); } var parentWrapper = stack[stack.length - 1].wrapper; // Build wrapper for this heading. var wrapper = document.createElement('div'); wrapper.setAttribute('wa-toc-element', 'h' + heading.level + '-wrapper'); // Clone the link template. var link = anchorTemplate.cloneNode(true); // Remove the marker attribute on the clone to avoid re-detection. var markersInClone = link.querySelectorAll('[' + ATTR + '="link"]'); for (var mi = 0; mi < markersInClone.length; mi++) { markersInClone[mi].removeAttribute(ATTR); } if (link.getAttribute(ATTR) === 'link') link.removeAttribute(ATTR); // Set the text on the resolved text holder. var holder = findTextHolder(link, linkMarker); holder.textContent = heading.text; // Set href and tag with entry index so we can find this same link // inside each cloned mount and wire it up. link.setAttribute('href', '#' + heading.id); link.setAttribute('data-wa-toc-idx', String(entries.length)); wrapper.appendChild(link); parentWrapper.appendChild(wrapper); entries.push({ heading: heading, // Filled in below: one cloned link per mount target. links: [], ixTriggers: [], }); stack.push({ level: heading.level, wrapper: wrapper }); } // Mount the built tree into every target. We clone for *every* mount // (including the first) so `rootContainer` stays intact across the loop // and serves as a clean source for each subsequent mount. Querying // inside each mount by data-wa-toc-idx lets us collect the per-mount // link nodes back into the corresponding entry. function mountInto(target, treeChildren) { while (target.firstChild) target.removeChild(target.firstChild); for (var c = 0; c < treeChildren.length; c++) target.appendChild(treeChildren[c]); // Pull this mount's links into entries. var mountedLinks = target.querySelectorAll('[data-wa-toc-idx]'); for (var ml = 0; ml < mountedLinks.length; ml++) { var idx = parseInt(mountedLinks[ml].getAttribute('data-wa-toc-idx'), 10); if (entries[idx]) entries[idx].links.push(mountedLinks[ml]); // Per Finsweet ix-trigger semantics: triggers live inside the link // template, fire on this entry's active transitions. var triggers = mountedLinks[ml].querySelectorAll('[' + ATTR + '="ix-trigger"]'); for (var tg = 0; tg < triggers.length; tg++) { entries[idx].ixTriggers.push(triggers[tg]); } } } for (var t = 0; t < mountEls.length; t++) { var cloned = rootContainer.cloneNode(true); var children = Array.prototype.slice.call(cloned.children); mountInto(mountEls[t], children); } // Strip the temporary index marker now that all mounts have been wired. for (var en = 0; en < entries.length; en++) { for (var lk = 0; lk < entries[en].links.length; lk++) { entries[en].links[lk].removeAttribute('data-wa-toc-idx'); } } // Click handling: smooth scroll, hash control. Listener runs in capture // phase and stops propagation so any external listener (e.g. Webflow's // own anchor handling, or a parent click handler on the link wrapper) // can't run a competing scroll. We also reread offsetTopVal on each // click in case the page has resized β€” vh-based offsets need this. function onLinkClick(entry, ev) { ev.preventDefault(); ev.stopPropagation(); var liveOffsetTop = cssLengthToPx(contentsEl.getAttribute('wa-toc-offsettop')); var targetTop = entry.heading.el.getBoundingClientRect().top + window.pageYOffset - liveOffsetTop; window.scrollTo({ top: targetTop, behavior: 'smooth' }); if (!hideHash) { if (history.replaceState) { history.replaceState(null, '', '#' + entry.heading.id); } else { location.hash = '#' + entry.heading.id; } } } entries.forEach(function (entry) { entry.links.forEach(function (link) { link.addEventListener( 'click', function (ev) { onLinkClick(entry, ev); }, true, ); }); }); return { contentsEl: contentsEl, entries: entries, offsetTop: offsetTopVal, offsetBottom: offsetBotVal, activeLineRaw: activeLineRaw, ancestorMode: ancestorMode, activeIndex: -1, previousIxState: new WeakMap(), }; } /** * Walk text nodes inside `el` and remove [wa-toc-omit] / [wa-toc-h#] markers * so they don't appear in the rendered page. */ function stripDirectivesInPlace(el) { var walker = document.createTreeWalker(el, NodeFilter.SHOW_TEXT, null); var node; var toFix = []; while ((node = walker.nextNode())) { if (DIRECTIVE_RE.test(node.nodeValue)) toFix.push(node); } toFix.forEach(function (n) { n.nodeValue = n.nodeValue.replace(/\[wa-toc-(omit|h[2-6])\]/gi, '').trim(); }); } // ---------- active-link tracking -------------------------------------- /** * Default active-line position when wa-toc-activeline isn't set. * 1/3 of viewport height β€” a heading activates as soon as it scrolls up * into the upper third of the viewport, while still comfortably visible. */ var DEFAULT_ACTIVE_LINE_FRACTION = 1 / 3; /** * Resolve the active-line position (in px from viewport top) for an * instance. wa-toc-activeline accepts any CSS length; if absent, falls * back to a fraction of viewport height. Recomputed on every call so * vh-based values track resizes naturally. */ function resolveActiveLine(instance) { if (instance.activeLineRaw) { var px = cssLengthToPx(instance.activeLineRaw); if (px > 0) return px; } var viewportH = window.innerHeight || document.documentElement.clientHeight; return viewportH * DEFAULT_ACTIVE_LINE_FRACTION; } /** * Determine which heading owns the viewport. * * Rule: the active heading is the *last* one whose top has crossed the * "active line" β€” a horizontal line in the viewport configured by * wa-toc-activeline (default: 1/3 of viewport height). * * `wa-toc-offsetbottom` extends the line further down β€” i.e. the previous * heading stays active until the next heading reaches `offsetBottom` past * the active line. * * Note: this is independent of `wa-toc-offsettop`, which only affects * smooth-scroll-on-click (so a fixed navbar can be cleared without * shifting where headings activate). * * Entries are scanned in document order and we take the maximum match * rather than break early, so the result is correct even if CSS reorders * elements relative to DOM order. * * Returns -1 when no heading has yet reached the active line. */ function computeActiveIndex(instance) { var entries = instance.entries; if (!entries.length) return -1; var threshold = resolveActiveLine(instance) + instance.offsetBottom; var active = -1; for (var i = 0; i < entries.length; i++) { // viewport-relative top of this heading var top = entries[i].heading.el.getBoundingClientRect().top; if (top <= threshold) { active = i; // keep the latest match β€” do NOT break } } return active; } /** * Apply active state. Always clears every link first so external sources * of `.w--current` (e.g. Webflow's URL-hash matching) can't leave stale * classes around. We don't early-out on `newIndex === activeIndex` for * that same reason β€” it's cheap to re-set and guarantees correctness. * * Each entry may have multiple link clones (one per mount target). The * active class is applied uniformly to all clones so every rendered TOC * stays in sync. */ function applyActive(instance, newIndex) { var entries = instance.entries; function setClass(entry, on) { for (var li = 0; li < entry.links.length; li++) { if (on) entry.links[li].classList.add(ACTIVE_CLASS); else entry.links[li].classList.remove(ACTIVE_CLASS); } } // Clear all. for (var i = 0; i < entries.length; i++) setClass(entries[i], false); if (newIndex >= 0 && newIndex < entries.length) { // Mark the directly-active entry. var activeEntry = entries[newIndex]; setClass(activeEntry, true); // Optionally mark ancestors. An ancestor of entry N is the most recent // earlier entry whose level is strictly shallower, walking up until we // run out of shallower levels. if (instance.ancestorMode) { var currentLevel = activeEntry.heading.level; for (var k = newIndex - 1; k >= 0 && currentLevel > 1; k--) { if (entries[k].heading.level < currentLevel) { setClass(entries[k], true); currentLevel = entries[k].heading.level; } } } } // Fire ix-trigger transitions only when the index actually changed. We // dispatch on every cloned trigger across all mounts so Webflow IX2 // animations run uniformly in each rendered TOC. if (newIndex !== instance.activeIndex) { for (var j = 0; j < entries.length; j++) { var entry = entries[j]; if (!entry.ixTriggers || !entry.ixTriggers.length) continue; // Read state from the first clone β€” they're kept in sync. var isActive = entry.links.length > 0 && entry.links[0].classList.contains(ACTIVE_CLASS); var was = instance.previousIxState.get(entry) === true; if (isActive !== was) { entry.ixTriggers.forEach(function (t) { t.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true })); }); instance.previousIxState.set(entry, isActive); } } instance.activeIndex = newIndex; } } // ---------- bootstrap -------------------------------------------------- function init() { var contentsEls = document.querySelectorAll('[' + ATTR + '="contents"]'); var instances = []; contentsEls.forEach(function (el) { var inst = buildInstance(el); if (inst) instances.push(inst); }); if (!instances.length) return; function update() { for (var i = 0; i < instances.length; i++) { applyActive(instances[i], computeActiveIndex(instances[i])); } } // Throttle to one update per frame. var ticking = false; function onScroll() { if (ticking) return; ticking = true; requestAnimationFrame(function () { update(); ticking = false; }); } window.addEventListener('scroll', onScroll, { passive: true }); window.addEventListener('resize', onScroll); update(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();

³ΙΘΛVRΚΣΖ΅

Skip to main content

The 2030 legal department: 5 ways AI will transform how in-house teams work

Elizabeth Duffy
July 23, 2026
By
Elizabeth Duffy
May 28, 2026
May 28, 2026
3 mins read

Every general counsel is being asked, β€œWhat does AI mean for your team?” The obvious answer about efficiency β€” faster contracts, cheaper research, fewer repetitive tasks β€” only describes what AI can do for the work a legal department already does, not what a legal department could become.

Key takeaways

  • AI is changing legal’s role, not just its workload β€” Going forward, AI will do more than automate routine tasks, it also will help in-house legal teams become more strategic business partners.

  • The 5 archetypes make the transformation concrete β€” There are five practical ways in which AI could reshape legal work, including automation, stronger advising, better collaboration, and global scale.

  • Every organization’s AI transformation will be different β€” ³ΙΘΛVRΚΣơ’ own legal transformation journey shows the common and unique aspects of this process.

Every general counsel is being asked, β€œWhat does AI mean for your team?” The obvious answer about efficiency β€” faster contracts, cheaper research, fewer repetitive tasks β€” only describes what AI can do for the work a legal department already does, not what a legal department could become.

This is where GCO 2030 comes in. The ³ΙΘΛVRΚΣΖ΅ general counsel’s office (GCO) and the ³ΙΘΛVRΚΣΖ΅ Institute are working together to envision what a corporate legal function could look like by 2030, and how to map the path to get there.

This article presents our vision, introducing five transformational archetypes that are distinct models for how AI can fundamentally change the way legal departments operate. It is also a first step in sharing something of the journey that our own legal team is on.

Every legal department is different, and the right transformation path will depend on the nature of the work, the structure of the organization, and the ambitions of the team. The goal is not to offer a roadmap but a framework to help move from the pressure to "do something with AI" to a clear, considered answer to the harder question.

Chapter One

The pressure is real and it’s not letting up

The most consistent pressure facing GCs today is the expectation to do more with less. That finding emerged across interviews ³ΙΘΛVRΚΣΖ΅ Institute conducted with senior in-house leaders in early 2026, along with a growing concern that executive leadership is using AI as justification for headcount reduction before its practical value has been demonstrated.

As technology evolves faster than teams can absorb, many are caught between the risk of falling behind and the fear of moving too fast.

Add to this the ever-broadening advisory remit of the GC to act as a strategic advisor to businesses facing geopolitical uncertainty, regulatory flux, and the increasing complexity of doing business globally.

These pressures are not new, but AI has accelerated them and, at the same time, provides tools to address them. Organizations that treat AI only as a cost-reduction mechanism rather than a capability multiplier will miss out. The departments that move forward with a clear sense of what they want to become and why will have the chance to redesign how they work for the better.

Chapter Two

Why incremental adoption is not enough for us

Most legal departments have started somewhere with AI. Every organization we spoke to had at least some AI activity underway, ranging from informal pilots to structured deployment programs.

But adoption is not the same as transformation β€” and our own GCO was stuck in the adoption phase.

In our exploratory phase of the GCO 2030 work, we found a team performing above average in individual AI adoption, with widespread personal use of AI tools, genuine enthusiasm for the technology’s potential, and several material proof points. However, what this was delivering was only incremental efficiency gains that wouldn’t be sufficient to meet our ambitions or the needs of the business.

Meeting business needs requires a shift from individual adoption to transformation, and this is the gap that GCO 2030 is designed to close.

Chapter Three

Five ways the legal department transforms

To help legal departments β€” including our own β€” move forward with clarity, we have developed five distinct archetypes for the AI-transformed legal department. These are distinct yet interconnected models for how legal departments can operate in the context of AI-powered technology and new ways of working.

At the center of transformation is a technology-forward mindset. The discipline to embed AI into daily work to build habits, infrastructure, and confidence is what makes each archetype accessible, not aspirational.

The archetypes are not mutually exclusive. For large, full-service legal departments like the ³ΙΘΛVRΚΣΖ΅ GCO β€” with approximately 80 lawyers across multiple practice areas and geographies β€” the right answer is likely a combination, deliberately chosen for each team based on factors such as its work type, the scale of the opportunity, and AI readiness. For smaller departments, one or two archetypes may provide the clearest focus.

Scaled Enablement

Scaled Enablement means transforming high-volume, repetitive work through AI-powered automation. The goal is to handle the tasks that occupy significant time but require relatively little legal judgment, including contract review, routine compliance checks, standard-form processing, and intake triage.

This archetype is the most likely entry point for many departments because it addresses the most universal constraint β€” work volume. It also forms the foundation on which the other four archetypes rest. A legal team that is still handling high-volume, routine tasks manually does not have the capacity to become a strategic advisor, a better partner to the business, or a genuinely global function.

The key to success here is to avoid simply automating existing processes, as this leads to the efficiency trap. Investing time in simplifying and redesigning processes first pays off by freeing up the legal team’s capacity and expertise to focus on more strategic, higher-value matters and by removing the bottlenecks in current systems.

Advisory Plus

Advisory Plus means having AI do the heavy lifting on data analysis, precedent research, and document drafting β€” not to replace legal judgment, but to make it better informed, faster, and more efficiently deployed. To one GC, it means turning their aspiration into an operational reality: a legal function that places itself, structurally and habitually, in the position of strategic advisor.

This archetype describes a legal department that both prioritizes automating administrative and operational burdens and derives value from AI to surface better insights and improve the velocity of valuable advice. It is not the last stop in a process, but a proactive partner to the business, one that engages early and contributes genuine strategic counsel.

It is the most aspirational of the five models, and also the one that GCs most often describe feeling furthest from because of pressure on capacity. The day-to-day tasks compete directly with the work that creates the most value.

Removing the administrative weight and adding the AI β€œsuperpower” changes what lawyers can do, not just how many of them you need.

Empowering Peer

Every corporate function has work that requires legal input β€” procurement negotiating contracts, HR managing employment matters, finance navigating regulatory obligations, sales closing deals, and managing customer agreements. In most organizations, this intersection creates friction, where legal becomes a bottleneck, other functions learn to work around it, and the quality of legally sensitive decisions suffers.

The Empowering Peer archetype inverts that dynamic. Powered by AI, legal actively improves other functions' work by building tools, playbooks, guardrails, and embedded workflows that allow finance, HR, procurement, sales, and others to handle routine legal-adjacent work themselves, with confidence and at speed. Legal is not removed from the picture; it is present in a different and more powerful way, embedded in how other functions operate rather than sitting at the end of a queue.

The result is that peer functions are genuinely supercharged. Procurement moves faster, HR makes better employment decisions at the point of need, finance navigates compliance without waiting, and sales closes deals faster with guardrails that keep deals on track without a lawyer in every negotiation. Legal's value is delivered earlier, more consistently, and at a greater scale than the traditional advisory model could achieve.

Seamless Integrator

The traditional model of the in-house and external counsel relationship is under pressure. Clients don’t know whether efficiency gains from AI are being shared. Law firms are receiving mixed messages about what clients want. In-house counsel is too often doubling up with external counsel on a file to guide the risk-reward decision, to translate advice to internal stakeholders, and to explain how the business processes really work.

The Seamless Integrator archetype addresses this duplicity by building the infrastructure β€” like consistent playbooks, shared quality standards, and AI-powered review and grading β€” that makes outside counsel relationships genuinely strategic rather than transactional, enabling seamless toggling between internal and external teams. Work is commissioned, reviewed, and assessed against a defined standard that applies equally whether it is done internally or by an external team.

The quality is visible, measurable, and consistent regardless of who did the work. Plus, the relationship becomes a true extension of the department, not a separate or uneven service.

This archetype also extends to alternative legal service providers (ALSPs) and managed service providers. As the legal services market continues to evolve, the question of what work is done by whom and at what quality level becomes more complex. The Seamless Integrator model allows a legal department to manage that complexity at scale, rather than treating each external relationship as a separate and uncoordinated one.

Global Leverage

The fifth archetype highlights a challenge that large, multinational legal departments have long faced β€” the structural disadvantage for lawyers who work in languages other than English or who operate in time zones far from the organization's core hub.

One GC at an organization operating across 21 countries was candid about the reality that time differences, language, and the need to fully contribute in an English-language environment pose real barriers. The effect is a quiet but persistent inequality in how legal talent is deployed and heard. In addition, today’s global business demands language flexibility at unprecedented speed. The lawyer managing legal disputes, commercial opportunities, or employment matters in multiple dimensions has a new friend.

Global Leverage is the archetype that uses AI to remove these barriers β€” not just through translation in the literal sense, but with the full range of tools that enable a lawyer in any location, in any language, to contribute at the same level as their colleagues in London or New York. That full range includes auto-translation in collaboration tools, AI-powered drafting and review in multiple languages, and asynchronous workflows that do not privilege a single time zone.

This archetype can elevate a legal team to a truly global function, drawing on the full range of its talent, unconstrained by geography or first language. Technology then acts as a capability multiplier, not just a cost reducer.

Chapter Four

What the journey looks like and lessons so far from the ³ΙΘΛVRΚΣΖ΅ GCO

When we launched GCO 2030 in early 2026, the GCO was not starting from zero. We had strong individual AI adoption, numerous live proof points, and genuine enthusiasm across the leadership team for the technology's potential. What we lacked was a shared vision of where we were going, an honest picture of where each team actually stood, and a structured approach to closing the gap between the two.

We set out to address all three.

Our first step was to understand the current AI maturity levels across the GCO. We found a gap between where the teams were, which was widespread individual use of AI tools, and where they wanted to be, which was systematic deployment. We understood that closing this gap would require redesigning end-to-end workflows so that the system as a whole is faster, not just the individuals within it.

Next, we mapped teams’ transformation visions across people, process, data, and technology. From that process, three insights emerged: a need to redesign how work flows through our team; recognition that data infrastructure is our single biggest structural constraint; and an understanding that, while individual practice areas need flexibility, we could supercharge our efforts with intentional GCO-level coordination.

Given all of this, we have made deliberate choices about where to focus first. Three actions make sense now, regardless of which archetype a given team is pursuing:

  1. AI training and upskilling grounded in a genuine assessment of current capability rather than assumption

  2. Hiring toward the profile of the future lawyer, with technical literacy and workflow-design capability alongside legal expertise and adaptability quotient (AQ)

  3. Process redesign before tool deployment to build on simplified workflows rather than automating complexity

Transformation of this kind is not without friction; it’s likely that legal departments on this journey will face some. Teams move at different speeds, but that unevenness creates an opportunity to learn from those ahead and risk that the gap becomes too great. The gap between aspiration and operational reality takes real work and long-term commitment to close. While we have a working hypothesis for the future role of the lawyer in a genuinely AI-powered team, the line between work that requires human judgment and skills and the repetitive, rule-based tasks moving to AI is shifting.

The archetypes and the journey we have described are not a prescription. What works for our own GCO may not work exactly the same for other organizations, but some observations from this work apply broadly.

Efficiency is a by-product of transformation, not the whole story. The important question is not how to do current work better, but what kind of legal function your organization needs in 2030 β€” and what it would take to build it.

Start with quick wins, but don’t lose sight of the bigger transformation. Scaled Enablement tends to produce the fastest and most visible results, but the archetypes that tend to generate the most strategic value are Advisory Plus and Empowered Peer. However, they require foundations such as data, workflow redesign, and cross-functional trust that take longer to build.

Lead when you can, keep pace when you must. The most effective legal functions are just as ready to support transformation happening around them as they are to drive it themselves. When peer functions redesign how they work, legal needs to be ready to move with them β€” as an empowering partner, not a lagging one.

The no-regrets actions are real. Whatever combination of archetypes is right for your team, there are actions that compound over time. Assess AI capability honestly rather than optimistically, build legal operations capacity as a prerequisite rather than an afterthought, and hire or develop lawyers who think about their work in terms of workflows rather than tasks.

The journey itself is the reward. The 2030 legal department isn’t a destination you can design in full detail today, because the technology, the market, and the profession are still evolving. What you can do is build an organization with the capacity to adapt β€” curious, technically capable, and clear about the value it is trying to deliver. That is the transformation worth investing in.

Follow us on social

Have questions?

Get in touch with one of our solutions experts....
³ΙΘΛVRΚΣΖ΅ Institute logo

Featured Event

Table of
Contents
H2
H3
H4
H5
H6
May 28, 2026
The 2030 legal department: 5 ways AI will transform how in-house teams work
Every general counsel is being asked, β€œWhat does AI mean for your team?” The obvious answer about efficiency β€” faster contracts, cheaper research, fewer repetitive tasks β€” only describes what AI can do for the work a legal department already does, not what a legal department could become.
3 mins read
May 28, 2026
Corporate Law Departments
The 2030 legal department: 5 ways AI will transform how in-house teams work
Elizabeth Duffy
Senior Director, Client Engagement
³ΙΘΛVRΚΣΖ΅ Institute
Headshot of Elizabeth Duffy
Norie Campbell
Chief Legal Officer and Company Secretary
³ΙΘΛVRΚΣΖ΅
Headshot of Norie Campbell
Agentic AI
AI & Future Technologies
AI in the legal industry
General Counsel
Generative AI
Legal Innovation
Legal Technology
Tech adoption
Legal professionals
Innovation and technology
The human side of AI: The growing risks of ubiquitous use of AI on talent
Premortem: Your 2028 agentic AI pilot program failed