Handoff is dead: design and code now live in the same space. MCP changes rules
Main chat
A chat for vibe coders: news, guides, live cases, marketplace, and finding executors.
Open any project two years ago and see how it is arranged to transfer design to development. Most likely, this is Figma marked “final-v3”, links to Jira, a separate page “for dev”, manual export icons, correspondence to Slack “and here what’s the indentation?”. Handoff is like a ritual: the designer finished, the developer started, between them is a wall of specs.
This model has lived through the last months. Not because someone decided that at the conference, but because the economy and the speed stopped converging. Any edit of a color token turns into three tickets. Any new component is born twice in Figma and code, and almost always differently. And when an AI agent comes from above, who knows how to write a frontend according to the description, it turns out that the description lives in the layout, to which the agent does not reach.
MCP (Model Context Protocol) is the thing that closes the gap. Not “another plugin to export,” but a way to give models and IDEs direct structured access to the design source: components, tokens, states, connections. Design stops being a picture and becomes data that code can read itself.
Why the handoff doesn’t work anymore
The old pattern was that the designer and the developer were two different people with different tools, and they needed a translator in the form of a specification. Now that assumption is breaking down from three sides at the same time.
- Component systems have become so large that manually maintaining Figma code compliance is physically impossible. Any drift multiplies.
- AI agents in an IDE generate interfaces faster than a designer can draw them. If the agent does not have access to the design system, he comes up with his – and a third set of buttons appears in the product.
- Product cycles are shorter. No one is willing to spend the day "reconciling indents" when the feature is due to leave by Friday.
Symptoms that your handoff is already dead, but you are still burying it
- Developers don’t open Figma – they watch screenshots in Linear.
- In the code live “almost the same” components that are not in the design system.
- Color tokens and typography are manually synchronized once a quarter.
- On the PR review, the designer catches discrepancies that are easier to correct in the code than in the layout.
- The AI assistant in the IDE generates buttons that visually match nothing.
If you learn two points, it is not necessary to tighten the processes. This is a signal that the transmission model is outdated.
What Changes MCP in Practice
MCP is a protocol through which a tool (Figma, Design System, Storybook, Token Repository) gives the structured context to a model or editor. For a designer, this means a simple thing: your layout ceases to be the final point and becomes the living source that the code addresses.
What becomes possible
- The agent in the IDE pulls components from your design system, rather than inventing their own.
- Changing a token in one place sprouts into code without manual export.
- Code review can refer to a specific layout component rather than a screenshot.
- The new developer doesn’t “learn Figma,” but gets the context of the system through the same interface as its AI assistant.
What MCP doesn't do
This is important to say before the team runs to “implement MCP.”.
- It doesn't replace a design system. If you have a mess at Figma, MCP will give the model a mess, only faster.
- Does not cancel the designer. Decisions about structure, hierarchy, behavior are still made by people.
- It does not automatically make the code quality. An agent with access to the tokens can still assemble an uncomfortable interface.
How to Start a Transition: The First Fair Audit
Before connecting anything, answer a few questions about the current state. It takes an hour and saves months.
Readiness for life without handoff
- Is there a single source of tokens (color, typography, indentations) that is synchronized between Figma and code?
- Do the names of the components match in the layout and in the repository? At least 80%?
- Is the design system covered by states (hover, disabled, loading, error) and not just default?
- Do developers know where the component corresponding to a particular frame lies in the code?
- Is there a person who is responsible for the discrepancy between layout and production?
If the answer to half the questions is “no” or “not sure” – to implement MCP early. First, order is established in the system, then the protocol is connected. Otherwise, you automate chaos.
Questions for reviewing the process with the team
- Where does the "truth" about the component live now -- in Figma, in Storybook, in code?
- What happens when they separate? Who makes the decision?
- How much time does it take to reconcile the layout and production on a typical feature?
- If you delete the “for dev” page tomorrow, what will break?
The short end of the segment: handoff dies not because of the fashionable protocol, but because the old model does not withstand the current speed and presence of AI. MCP is a way to rearrange the relationship between design and code so that they read the same source. But it works on top of a disciplined system, not in its place.
What a Designer’s Day Looks Like When Handoff Is No Longer
The most obvious thing about the transition is that it is not the instrument that changes, but the rhythm. Previously, the designer closed the layout, set the Ready for dev status and switched to the next task. Now the layout does not close: it remains connected to the code, and any touch to it is a small release. It requires a different discipline, not a different software.
New cycle: from frame to production
A rough scenario as a feature passes through a command in which code and design are read by a single source:
- The designer assembles the screen from the system components. It does not draw a button, but puts one that is already there. If not, it is a separate task in the system, not inside the feature.
- The agent in the IDE pulls up the frame structure and tokens through the protocol. The developer writes logic, does not build from scratch.
- Controversial places (animation, border states, content adges) are discussed directly in the component comments, not in a two-screen Slack thread.
- On the PR review, the designer sees not “how it happened”, but deviations from the source. If not, the review takes minutes.
The key difference is that the designer ceases to be the final instance of acceptance and becomes the author of the rules by which acceptance occurs automatically.
What breaks down in the first weeks
Commands that connect MCPs without realigning processes step on roughly the same rake.
Anti-patterns
- ** "We'll connect, we'll figure it out." ** Without auditing the system, the agent begins to pull into the code what is in Figma as a draft. In production, frames with names like
Frame 1247pop up. - **The designer continues to work in a separate "think" file. ** If this file is connected to the source, it goes to the code. If not connected, the meaning of the protocol is lost.
- Components without options. The agent sees only default, and the code appears its own hover and disabled, which do not coincide with anything.
- Tokens live in Figma, but not in the repository. Every color change turns into a manual export, and after a month everything goes away again.
- No one is in charge of the system. Everybody is watching. Disagreements are piling up silently.
Diagnosis: where exactly is falling
If you are already working in a new mode and feel that something is going wrong, go through the symptoms.
- In the code appeared components that are not in the library → the agent did not find the right one and generated his own. Fix not the code, but the system cover.
- The designer constantly rules the little things after the merj → the source gives an incomplete context (for example, no states or adaptive).
- Developers ignore the connection and write with their hands faster than to understand the structure of the layout. This is a signal that the system is overloaded with layers and groups.
- The AI agent consistently makes mistakes in the same place – the component has an ambiguous name or opaque structure. Rename, rebuild, do not educate the model with prompts.
How to use this in the design tomorrow
You don’t have to wait for the team to implement MCP. Most of the work can be done alone — and it will pay off, even if the protocol is connected in six months.
Habits that make a layout readable for code and model
- Name the layers as they should be called in the code.
button-primary, notRectangle 12 copy. - Any state is an option, not a separate frame next to it. Hover, disabled, loading, error, empty – inside the component.
- Auto layout wherever possible. It's not an aesthetic, it's a structure a model can read.
- Do not produce “almost the same” components. If a difference in one pixel is a variant of an existing one, not a new one.
- Describe the rules directly in the library: where it is used, what is not combined with, what are the minimum sizes.
Questions for self-review before giving the layout
- If a person has never seen this product, will they understand what's going on in the layers?
- Are all component states covered, or do I silently rely on the developer to guess?
- Is there something in the layout that I can’t explain with a reference to the system? If so, why?
- What happens if tomorrow the token of the primary color changes? Will it grow on its own or will it have to walk in frames?
Segment summary
Life without a handoff is not about speed, but about the discipline of the source. The tool only accelerates what is already there: it turns a clean system into almost lossless production, a dirty one into dirty production in minutes. So the only thing a designer can do right now is to stop treating the layout like a picture and start as code that hasn’t been compiled yet.
Advanced Scenarios: Where the New Process Really Shoots
The basic bundle “component from library → component in code” pays off on the second sprint. But the real value begins where teams used to waste days synchronizing: massive redesigns, multi-brand products, experimentation, localization.
Redesign without a "big release"
Previously, the redesign lived according to the scheme: six months in Figma, then a heroic Merzh and two weeks of bugs. When the source is directly connected, the redesign becomes a migration of tokens and options. You change the value of the surface/primary token, and all the screens that use it come to a new state at the same time. No "forgot to update the modular in the settings.".
What this changes in practice:
- Redesign can be rolled in pieces: first tokens, then typography, then density.
- A rollback is not to “return layouts” but to return values.
- The designer sees what components are still held on the old tokens, because the system shows it itself.
Multi-brand and white label
If a product lives in multiple brands, the old process turns into a copypaste with mutations. The new one has one set of components and several sets of tokens. A brand is a theme, not a separate library. When assembling the screen, the agent takes the structure from a common source, and the design from an active theme.
The anti-pattern here is to have “nearly the same” components for each brand. After a quarter, you get three divergent systems instead of one.
A/B experiments and temporal states
The experiment ceases to be a separate branch of the layout, about which after a month no one remembers. In the library there is a version of the component marked with the experiment, in the code - a flag. When the experiment is closed, the option either becomes the main one or is removed in one place.
Team context: who is responsible for what
The main conflict of the new process is not technical, but role. When the source is one, the line “designer draws, developer writes” blurs, and teams don’t know who is making the decision at first.
Distribution of responsibility that works
- The system designer is responsible for the contract: names, tokens, options, rules. This is the author of the library API.
- *Product designer works strictly within this contract. If a component is missing, it starts a request to the system, rather than drawing “temporarily its own”.
- **The developer is responsible for ensuring that the code matches the source. Not for guessing how it should be.
- Timlid or product holds the rule that the source/code discrepancy is a bug, not a "well, it works.".
If these roles are not obvious, the one who has a louder voice at the review survives. It's not usually design.
How to explain the transition to a team
The main mistake is to sell MCP as an accelerator. The team hears "now we'll do more in the same time" and resists. Another conversation is working.
- To the developers: You stop guessing indentations from the screenshot. The specification is now machine-readable.”.
- The time from layout to production is reduced by the disappearance of handoff loops, not by pressure on people.
- Designers: “You stop being the bottleneck of acceptance and become the author of the rules.”.
- QA: “Visual regressions are now caught by the token diff, not the eyes.”.
Same instrument, four different promises. Every one is true.
How to check the quality of the result
When there is no manual seam between the layout and the code, the old methods of receiving ("looked, it seems to match") do not work. We need others.
What to measure
- **Proportion of components in the production code. ** If it falls, the system does not cover real tasks.
- The number of custom styles outside of tokens. Growing - so someone decides again "by eye".
- **Time from changing a token to appearing in production.**Long – somewhere there is a manual step that pretends to be automatic.
- **The number of post-mortem edits related to the visual. If there are many, the source gives incomplete context.
These metrics are more important than “screen roll-out speed.” Speed is an effect, not a goal.
Questions for a quarterly review of the process
- What components does the team bypass and write with their hands? Why?
- How many times in a quarter have we ruled the token and how many times is a particular style in the code? Is the ratio normal?
- Are there dead components in the library that no one uses?
- Over the past month, who added the option “temporarily, then remove”? Removed?
- If tomorrow the author of the system resigns, will anyone be able to support it?
Segment summary
Advanced scenarios—redesign, multi-brand, experimentation—become cheap only when the team has explicit roles and metrics for the health of the system. The tool does not assign a responsible and does not consider custom styles for you. It only makes visible what was previously silent: the quality of the source, the discipline of the team, and the real cost of “small breaks from the system.”.
Anti-patterns that kill a single source
Most teams don’t deliberately destroy a new process. It is undermined by small compromises, each of which individually seems reasonable.
“Once we can, then we’ll transfer it to the system.”
The most expensive phrase in the project. Once is at least two places where the style lives: in the code and in the author’s head. After six months, the “temporary” indentations become a parallel quasi-system, about which no one remembers. The rule is simple: if a component is not in the library, it does not appear in the code. First request to the system, then implementation.
Designer “draws” in code through AI
When a designer gets access to code generation, it’s tempting to get around the system: “I’ll do it myself, why start a component.” As a result, the production gets a button that is not in the library, but which looks “almost like”. After a month, there are six such buttons, and none of them match the hover-state system.
Developer fixes visual without touching source
Classic: the review notice that the indentation is not such. The developer rules the padding component on a specific page. The layout and tokens remain the same. Congratulations, you have a discrepancy that is no longer visible to any diff, because both places separately "look normal.".
Library as a cemetery of ideas
The team adds components “for the future”, options “suddenly come in handy”, experimental states “let it lie down”. After a year, the system has a hundred components, of which twenty are actually used. A new person spends a day trying to figure out which are alive and which are archaeology.
MCP as a Replacement for Designer
The most dangerous anti-pattern is management. “If code is generated from a layout, let’s reduce the design resource.” After a quarter, you get a product where each screen is technically assembled from the components of the system, but visually - porridge. Because there is no one to keep meaning and hierarchy, only form.
Start-up checklist
If you are only reconfiguring work under a single source, go through the list before announcing the transition.
- The library has a single owner, not a “shared responsibility.”.
- Tokens cover color, typography, indentations, radii, shadows, duration of animations.
- Each component in the system describes the states: hover, focus, disabled, loading, error, empty.
- The names of tokens and components are the same in the design tool and in the codebase. No translations.
- The team has an agreement on what is considered a discrepancy bug and what is a feature.
- There is a way to quickly see which components are alive and which are not being used.
- It is clear who and how starts the new component: from what point it is considered part of the system.
- Experiments and temporal variants are labeled so that they can be seen separately from the stable portion.
- Changing the token gets into production without the manual “transfer value” step.
If at least three points are not fulfilled, the transition is premature. First clean up the source, then connect the automation. Otherwise, you automate the mess.
Questions for a review once in a sprint
These questions should be asked in retro until the process is settled.
- Was there a time in this sprint where we did "outside the system"? Why?
- How many edits to the review concerned tokens, and how many specific values in the code?
- Are there components that we plan to unify later?
- Someone was waiting for the library update and went to write their own, so as not to be blocked?
- What parts of the product do we not touch because we are afraid to break the visual?
The last question is the most honest indicator of health. If there are such places, then the source does not fully control the result, and the team knows that.
Practical outcome
Handoff didn’t die on its own — it was made meaningless by a new work architecture in which layout, tokens and code look at one source. This is not the magic of the tool, nor is it a question of AI fashion. This is a management decision: agree that a design solution has one residence and all other representations are derived from it.
It all comes down to discipline. Who owns the source. Who has the right to change it? As we can see, the code and layout diverged. What do we do with "temporary" deviations? The tool does not answer these questions, the team answers. If there are answers, the transition gives you exactly what you wanted to do: less loss at the joints, more time for meaning, and a product that looks whole not because someone is heroically watching, but because otherwise it just isn’t going to.