Building and Scaling Internal Data Agents and AI-Powered Frontend Development Tools

vercel · Tech · 2026 · source Agentic: yes · promotional bias: med · source-backed · extracted with prompt 0.5.5 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Internal data analytics agents and AI-generated application development

Vercel needed production AI systems that could democratize internal analytics through natural language and generate deployable applications as model capabilities changed, while maintaining reliable infrastructure operations and organizational velocity.

Constraints:

Architecture

Vercel rebuilt its internal D0 data agent from a traditional multi-tool loop into a coding-style text-to-SQL agent. The team documented every Snowflake column in prose, exported those semantics to YAML files, and gave the agent only two tools: bash and SQL execution. The agent uses file-system/coding priors to inspect YAML documentation and generate SQL against Snowflake under user access rules. In parallel, V0 evolved from a frontend generator into a full-stack app generator as models improved, with Tailwind prompts and later Sonnet 3.5 enabling better UI/full-stack output. Generated code ultimately flows into Vercel's deployment platform, where regional autonomy, staged config rollout, and differentiated control-plane/serving deployments keep production reliable.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  slack-data-interface["Slack data interface"] --> d0-coding-style-data-agent["D0 coding-style data agent"]
  d0-coding-style-data-agent --> snowflake-yaml-docs["Snowflake YAML docs"]
  d0-coding-style-data-agent --> bash-tool["Bash tool"]
  d0-coding-style-data-agent --> sql-execution-tool["SQL execution tool"]
  d0-coding-style-data-agent --> snowflake-warehouse["Snowflake warehouse"]
  bash-tool --> snowflake-yaml-docs
  sql-execution-tool --> snowflake-warehouse
  v0-app-generator["V0 app generator"] --> tailwind-prompting-pattern["Tailwind prompting pattern"]
  v0-app-generator --> full-stack-generation-capability["Full-stack generation capability"]
  v0-app-generator --> vercel-deployment-platform["Vercel deployment platform"]
  vercel-deployment-platform --> control-plane["Control plane"]
  vercel-deployment-platform --> regional-serving-stack["Regional serving stack"]
  control-plane --> regional-serving-stack
  internal-automation-agents["Internal automation agents"] --> vercel-deployment-platform
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Slack data interface Entry point where employees ask natural-language data questions. D0 coding-style data agent
D0 coding-style data agent Internal text-to-SQL agent that treats data analysis as a coding task. Slack data interface, Snowflake YAML docs, Bash tool, SQL execution tool, Snowflake warehouse
Snowflake YAML docs Prose documentation of every Snowflake column and its business meaning, exported as model-readable files. D0 coding-style data agent, Bash tool
Bash tool Lets the agent inspect files and use coding-oriented shell workflows. D0 coding-style data agent, Snowflake YAML docs
SQL execution tool Runs generated SQL against Snowflake under access controls. D0 coding-style data agent, Snowflake warehouse
Snowflake warehouse Company data warehouse accessed by the agent subject to user access rules. D0 coding-style data agent, SQL execution tool
V0 app generator Public AI product that generates frontend and later full-stack applications from natural language. Tailwind prompting pattern, Full-stack generation capability, Vercel deployment platform
Tailwind prompting pattern Prompt-level representation that improved web-page generation by keeping style inline with markup. V0 app generator
Full-stack generation capability Model-capability shift that let V0 move from frontend generation to end-to-end applications. V0 app generator
Vercel deployment platform Git-connected platform that turns pushes into production deployments for generated or hand-written software. V0 app generator, Control plane, Regional serving stack
Control plane Lower-risk coordination layer that deploys on each push to main. Vercel deployment platform, Regional serving stack
Regional serving stack Twenty autonomous core regions where serving changes are staged and regions can be removed from rotation. Vercel deployment platform, Control plane
Internal automation agents Sales lead qualification and support-intake agents used to automate business operations. Vercel deployment platform

Data flow

An employee asks D0 a question in Slack. D0 reads YAML documentation of Snowflake schemas using bash/file-system operations, infers business semantics, writes SQL, and executes it with the SQL tool subject to the user's Snowflake access rules. For V0, a user prompts for an app; the model generates UI or full-stack code using model-compatible representations such as Tailwind; the code then gets deployed through Vercel's Git-connected platform. Operational changes move through control-plane and serving infrastructure with different release speeds and regional isolation to avoid global outages.

4 supporting quotes
“ourselves. And so the the agent that we call D0 internally is a is a text-to-SQL engine. So you you give it any question in Slack, and it will reply with the answer. And it has access to our entire Snowflake kind of subject to the to the access rules of the of the user, right? And so um”transcript, stated
“for every single column in prose explaining the business value. Right? And that gets exported to a YAML file and the the agent essentially gets told, you know, you were got post-trained on using grep on tail and and all these things, right? That you need for”transcript, stated
“There's the bash tool and there is the SQL execute SQL tool and and that's the entire agent. So, it has like 50 lines of code um and and it's completely transformational for the business. What led you to understand that you needed to throw everything away?”transcript, stated
“we can connect Versel to your Git repository and every time you push, um we'll make you uh a new version of it and have it in production.”transcript, stated

Why this architecture

Vercel's main design move was to align problems with what current models are already good at. D0 became simpler and better when data analytics was reframed as coding over files, YAML, bash, and SQL. V0 improved when prompts and product scope followed model capability shifts: Tailwind made early UI generation viable, and Sonnet 3.5 made full-stack generation possible. The production platform remains separate because generated software still needs professional deployment, regional isolation, and operational ownership.

5 supporting quotes
“what was the model trained on? Like what what what is it optimized on? And for now there there's lots of coding tasks”transcript, stated
“tasks, right? And it'll change in the future. And so if you can make things look like like they're coding task even though they're not, um then you can uh you have you get this proportional good results. How many CEOs and CTOs in the the Fortune 500 are using Vercel on their personal accounts?”transcript, stated
“was like raising his hand like, "Guys guys guys guys, I've I've I found something." And so, he had just changed the prompt to say use Tailwind. And this was such a like serendipity moment because Tailwind at the time, which is it's like a way to write CSS um at the”transcript, stated
“Anthropic ships Sonnet 3.5, and suddenly essentially the same prompt can be used to build full-stack apps, which previously just wasn't possible. You cannot now keep your product the same, because the world is different, right? Um and so, that that was like”transcript, stated
“And and so I can't like you can't really vibe code that. Like you you so you there has to be there always has to be some form of platformization of how I run something. And um and so that like, you know, essentially we're playing in that in that space relatively successfully. So for that”transcript, stated

Models used: ChatGPT / GPT-3.5 · GPT-4 · Anthropic Claude Sonnet 3.5 · Claude 4.6 Fast · Codex 5.3 · Coding agents such as Claude Code and Cursor

Scale

Alternatives considered (roads not taken)

Buy an off-the-shelf internal data agent.

Rejected because: Vercel's stated thesis is that custom agents are easy enough to build internally.

“building agents is actually extremely easy, and you don't need to buy them, you can just build them yourself. And so we built one ourselves. And so the the agent that we call D0 internally is a is a text-to-SQL engine. So you you give it any question in”transcript, stated
“actually extremely easy, and you don't need to buy them, you can just build them yourself. And so we built one ourselves. And so the the agent that we call D0 internally is a is a text-to-SQL engine. So you you give it any question in Slack,”transcript, stated

Keep the original tools-in-a-loop D0 architecture.

Rejected because: It worked but was not magical, and the team believed a coding-agent architecture could better exploit current model strengths.

3 supporting quotes
“the initial version of this agent was kind of this kind of traditional infrastructure architecture where you have you know, the agent as a tools in a loop”transcript, stated
“tools to do all kinds of different things. Um and it wasn't like it was working badly, but it was, you know, maybe not as magical. And then we deleted everything and switched to like an agent that looks very similar to a coding agent. Now, it's it's it's still kind of custom coded. Like it”transcript, stated
“then we deleted everything and switched to like an agent that looks very similar to a coding agent. Now, it's it's it's still kind of custom coded. Like it doesn't use for example Cloud Code Services Harness uh because again building such a harness is”transcript, stated

Keep V0 scoped to frontend generation after models improved.

Rejected because: The same prompt became capable of full-stack app generation, so keeping the product unchanged would ignore the changed capability frontier.

“Anthropic ships Sonnet 3.5, and suddenly essentially the same prompt can be used to build full-stack apps, which previously just wasn't possible. You cannot now keep your product the same, because the world is different, right? Um and so, that that was like”transcript, stated
“full-stack apps, which previously just wasn't possible. You cannot now keep your product the same, because the world is different, right? Um and so, that that was like a major milestone where like we we realized, "Okay, we have to um And I mean, obviously this is amazing, right? Like we can”transcript, stated

Let agents generate infrastructure without a platform layer.

Rejected because: Vercel argues professional operations still require platformization; generated software still has to run somewhere reliably.

3 supporting quotes
“like like every like we love it if you use cloud code, if you use cursor, you know, like if at some point you're going to have to have a place to run it and and um you know, we can connect Versel to your Git repository and every time you push, um we'll make you uh a new version”transcript, stated
“devops is that they have like somewhat an idea of what's going on. And and so I can't like you can't really vibe code that. Like you you so you there has to be there always has to be some form of platformization of how I run something. And um and”transcript, stated
“And and so I can't like you can't really vibe code that. Like you you so you there has to be there always has to be some form of platformization of how I run something. And um and so that like, you know, essentially we're playing in that in that space relatively successfully. So for that”transcript, stated

Use global all-at-once config changes for serving regions.

Rejected because: Bad config changes are a major outage mode; Vercel deliberately keeps regions autonomous and rolls config changes in waves.

3 supporting quotes
“Every single time there's it's one of two things. It's either like a bad config change or it is like something around the like like secrets management service that everything depends on, right? Or it's a config change of the secrets management service. Which”transcript, stated
“we want these regions to be autonomous and we don't have a mechanism to change them all at once. And so we we thankfully cannot do these type of config changes that break everything at once and so we we change them in waves. And so yeah, there's another like”transcript, stated
“thankfully cannot do these type of config changes that break everything at once and so we we change them in waves. And so yeah, there's another like kind of deliberate decision to say okay, we um if I want to move fast, I want to be able”transcript, stated

Patterns

tool-use-orchestration (agent_tools)

D0 reduces the tool surface to bash and SQL execution, letting the model use coding-style file inspection and query generation instead of a large specialized tool loop.

3 supporting quotes
“you were got post-trained on using grep on tail and and all these things, right? That you need for coding”transcript, stated
“There's the bash tool and there is the SQL execute SQL tool and and that's the entire agent.”transcript, stated
“if you can make things look like like they're coding task even though they're not”transcript, stated

structured-output-contract (data_context)

The Snowflake schema and business semantics are documented in YAML files that the agent can read as code-like artifacts before producing SQL.

3 supporting quotes
“So, the the the general architecture is that we did the work of going through our entire Snowflake and for every single column in prose explaining the business value. Right?”transcript, stated
“And that gets exported to a YAML file and the the agent essentially gets told, you know, you were got post-trained on using grep on tail and and all these things, right?”transcript, stated
“go to town on these YAML files to figure out the business semantics of everything and then you make a SQL query.”transcript, stated

cost-aware-routing (operations)

Vercel provides broad/unlimited token access but monitors cost anomalies, identifying prompt-cache misses in a custom coding harness.

3 supporting quotes
“Are you one of these shops that give unlimited tokens to your devs? Absolutely.”transcript, stated
“Like I had a engineer who was 10x the second one. I was like uh first of all I was impressed. Um second of all we found out that his um custom made coding harness uh had like was changing the prefix of the prompt so that it wasn't hitting the caching um, system.”transcript, stated
“it wasn't hitting the caching um, system. Mhm. And so, which is is drastically more expensive”transcript, stated

canary-rollout (reliability)

Serving configuration changes roll through autonomous regions in waves so one bad configuration can be isolated rather than taking down the whole fleet.

3 supporting quotes
“Um and so I mean in Vercel's architecture we uh so we operate 20 regions, 20 core regions. And so on on the serving stack again, we we have deliberately decided that we want these regions to be autonomous and we don't have a mechanism to change them all at once.”transcript, stated
“we want these regions to be autonomous and we don't have a mechanism to change them all at once.”transcript, stated
“when that region goes down, we can easily just take it out of rotation.”transcript, stated

observability-tracing (operations)

The interview frames observability and agent participation in DevOps/self-driving infrastructure as the next operational frontier for generated applications.

3 supporting quotes
“the lack of observability is a temporary limitation or a fundamental limitation of long-running agents?”transcript, stated
“there's a whole revolution ahead of us of of agents participating further in in kind of the dev up space and and and and running application.”transcript, stated
“Um we started calling it kind of self-driving um like infrastructure where like where the you know, where you have essentially something that in an agentic way kind of understands what's going on.”transcript, stated

data-quality-loop (data_context)

D0's performance depends on prose documentation of data semantics across Snowflake columns, making data documentation itself a quality loop for the agent.

“we did the work of going through our entire Snowflake and for every single column in prose explaining the business value.”transcript, stated
“That you need for coding and go to go to town on these YAML files to figure out the business semantics of everything and then you make a SQL query. Um for that it has a completely different custom tool.”transcript, stated

Tradeoffs

Rebuild D0 around a coding-agent shape.

Chose YAML docs, bash, and SQL execution over A larger specialized tools-in-a-loop architecture.

Rationale: The simpler design matched model training priors and made the system more transformative while reducing code and tool complexity.

3 supporting quotes
“then we deleted everything and switched to like an agent that looks very similar to a coding agent.”transcript, stated
“There's the bash tool and there is the SQL execute SQL tool and and that's the entire agent.”transcript, stated
“So, it has like 50 lines of code um and and it's completely transformational for the business.”transcript, stated

Use Tailwind in early V0 prompting.

Chose Inline utility-first styling in one context over Separate CSS and HTML files that early models had to coordinate.

Rationale: Tailwind existed in model training data and let the model reason inline instead of across disconnected files.

3 supporting quotes
“at some point he was like raising his hand like, "Guys guys guys guys, I've I've I found something." And so, he had just changed the prompt to say use Tailwind. And this was such a like serendipity moment because Tailwind at the time, which is it's like a way to write CSS um at the time it”transcript, stated
“it was old enough that it was in the ChatGPT 3.5 um training kickoff.”transcript, stated
“the model is so much better at doing inline reasoning rather than saying have to write a CSS file and then later write the HTML.”transcript, stated

Let V0 evolve with model capability.

Chose Expand to full-stack generation and tech-adjacent users over Freeze the product at its original frontend-engineer scope.

Rationale: Once models could build full-stack apps with similar prompts, product scope had to follow the new capability frontier.

3 supporting quotes
“Yeah, I think initially we we thought we were building a tool for front-end engineers. Uh cuz that's what we doing in general, right?”transcript, stated
“And we then realized we actually built a tool for back-end engineers. Because it was empowering them, but it also sucked um in the sense that it doesn't work all the time.”transcript, stated
“we can now have uh adopt our product to be able to build like end-to-end applications”transcript, stated

Separate serving and control-plane release velocity.

Chose Daily serving deploys and main-branch control-plane deploys over One uniform deployment cadence for all systems.

Rationale: Serving infrastructure has higher customer-impact risk, while the control plane can iterate faster.

3 supporting quotes
“Like for example, we only ship our um like serving systems once a day. Right? Um whereas we ship our control plane every time someone pushes to to main.”transcript, stated
“Um whereas we ship our control plane every time someone pushes to to main. And so would I love to be able to, you know, make a new feature in our um consumer serving stack on a like 15 times a day?”transcript, stated
“Yes, but you know, we did make some trade-offs there. So obviously there's you make some decisions, but it doesn't mean that in in like that you cannot move fast and uh you know, not break things, right?”transcript, stated

Use optimistic locking for organizational approvals.

Chose Announce changes and allow stakeholders to veto over Wait for explicit approval before shipping.

Rationale: This preserves oversight while avoiding approval round trips and stakeholder availability bottlenecks.

3 supporting quotes
“And so, the the the pattern that we use at Vercel is what in the nerdiest way you could describe as optimistic locking. So, there are no approvals.”transcript, stated
“there are no approvals. Um anyone can ship anything. But, they have to tell the organization that they're going to do it.”transcript, stated
“if you have a process where legal has to say yes, uh then you have to wait for them”transcript, stated

Start new AI products with a tiny validation group.

Chose One to three people until product-market fit is visible over Starting with a seven-person team.

Rationale: AI tools let individuals build enough demo/product surface to decide whether a larger team is worth investing.

3 supporting quotes
“Um I think the the big difference is that today you actually don't need a team. Like so if you start, why would you have a team?”transcript, stated
“with a single person. And maybe there's two of them, maybe there's three of them, right? But it's not like seven people”transcript, stated
“give me a demo and if the demo is good, I'm going to give you a team.”transcript, stated

Gotchas (what bit them)

Agent best practices age quickly.

Root cause: The agent field is young and model capability shifts make old architecture choices obsolete.

Resolution: Stay humble and be willing to delete working systems when a simpler model-aligned approach emerges.

3 supporting quotes
“in the world of agents, you have to be humble in the sense of like we're just discovering how to build them.”transcript, stated
“just because something was best practice like in the summer of 2025 means quite little today”transcript, stated
“then we deleted everything and switched to like an agent that looks very similar to a coding agent.”transcript, stated

Too much bespoke tooling can fight model strengths.

Root cause: The old D0 tool loop added complexity, while models were already strong at coding-style tasks such as file inspection and command-line reasoning.

Resolution: Make the data problem look like coding: YAML docs, bash, and SQL execution.

3 supporting quotes
“tools in a loop type of thing and all kinds of different tools to do all kinds of different things.”transcript, stated
“what was the model trained on? Like what what what is it optimized on?”transcript, stated
“if you can make things look like like they're coding task even though they're not”transcript, stated

Early V0 output was not reliable enough for non-engineers.

Root cause: GPT-3.5/GPT-4-era models could generate interfaces but failed often enough that only backend engineers could repair the output.

Resolution: Aim initial fit at backend/tech-adjacent users and expand as model reliability improves.

3 supporting quotes
“And we then realized we actually built a tool for back-end engineers. Because it was empowering them, but it also sucked um in the sense that it doesn't work all the time.”transcript, stated
“it didn't work all the time, but the back-end engineers they were good enough to fix it in the cases where it didn't work”transcript, stated
“you couldn't have given it to a non-engineer at the time, right? Cuz it was just not um reliable enough.”transcript, stated

Generated software still creates an operations problem.

Root cause: AI can produce code or Terraform-like infrastructure, but production DevOps still requires platformized understanding and management.

Resolution: Treat deployment and operations as a platform product that generated code must flow through.

3 supporting quotes
“we go. Um so like like like every like we love it if you use cloud code, if you use cursor, you know, like if at some point you're going to have to have a place to run it and and um you know, we can connect Versel to your Git repository and every time you push, um we'll make you uh a new version of”transcript, stated
“Like you could argue, you know, the agents are also great at writing Terraform. Like, you know, they can just make the infrastructure for you.”transcript, stated
“the whole idea of of of any form of professional devops is that they have like somewhat an idea of what's going on.”transcript, stated

Fast global config changes can create catastrophic outages.

Root cause: Bad config or secrets-management changes are common large-scale outage causes.

Resolution: Keep serving regions autonomous, avoid all-region changes, roll out in waves, and remove bad regions from rotation.

3 supporting quotes
“Every single time there's it's one of two things. It's either like a bad config change”transcript, stated
“And so on on the serving stack again, we we have deliberately decided that we want these regions to be autonomous and we don't have a mechanism to change them all at once. And so we we thankfully cannot do these type of config changes that break everything at once and so we we change them in waves.”transcript, stated
“when that region goes down, we can easily just take it out of rotation.”transcript, stated

Unlimited token access needs cost anomaly visibility.

Root cause: Custom harnesses can accidentally defeat prompt caching, making usage drastically more expensive.

Resolution: Keep token access broad but watch for outlier usage and diagnose caching/pathology issues.

3 supporting quotes
“Are you one of these shops that give unlimited tokens to your devs? Absolutely.”transcript, stated
“custom made coding harness uh had like was changing the prefix of the prompt so that it wasn't hitting the caching”transcript, stated
“Um, so obviously happens, but yeah, I think it's worth having an eye on it, but otherwise um, I think the the more the merrier.”transcript, stated

Evaluation

The source does not describe formal eval harnesses for D0 or V0. It evaluates by production usefulness and adoption: D0 is described as transformational for the business, V0 found product-market fit as model capability improved, production deployment is managed through staged rollout and regional isolation, and operational/token anomalies are monitored through cost outliers and prompt-cache behavior.

Metrics: Snowflake questions answered in Slack · D0 code size and tool count · V0 reliability for backend engineers versus non-engineers · Product-market fit with tech-adjacent users · Serving deploy cadence · Control-plane deploy cadence · Region-level rollout and removal from rotation · Support intake automation share · Token usage outliers and prompt-cache hit behavior

5 supporting quotes
“So, it has like 50 lines of code um and and it's completely transformational for the business.”transcript, stated
“So like when for Vercel, the the users we're aiming for, I would call tech adjacent, right? So it's the it's the PM, it's the designer, it's the the product owner, the the business person who's kind of interested.”transcript, stated
“It's like um that found a lot of product market fit. Um and then the final use case, and I'd love to talk a little bit more about that, but like it's essentially um I'm a I'm a business person in the company.”transcript, stated
“when that region goes down, we can easily just take it out of rotation.”transcript, stated
“Um, we automated 87% by now of our support intake. Um, and that, you know, that's actually a good example for Did we let support agents go?”transcript, stated

Outcomes

The source reports D0 access to the entire Snowflake warehouse under access rules, an S&P 500 executive query, a 50-line/two-tool D0 agent, V0 launched in 2023, 20 core regions, daily serving deploys, control-plane deploys on every push to main, about 750 employees with a 1,024 cap joke, one engineer at 10x token usage, and 87% support-intake automation.

5 supporting quotes
“you give it any question in Slack, and it will reply with the answer.”transcript, stated
“So, it has like 50 lines of code um and and it's completely transformational for the business.”transcript, stated
“we can now have uh adopt our product to be able to build like end-to-end applications”transcript, stated
“Um and so I mean in Vercel's architecture we uh so we operate 20 regions, 20 core regions. And so on on the serving stack again, we we have deliberately decided that we want these regions to be autonomous and we don't have a mechanism to change them all at once.”transcript, stated
“Um, we automated 87% by now of our support intake. Um, and that, you know, that's actually a good example for Did we let support agents go?”transcript, stated