How to Communicate with Frontend Developers
A practical guide to design handoffs, responsive behavior, accessibility, implementation questions, and review with frontend developers.
Communicate with frontend developers by giving them one shared written source of truth: the goal, the current design, expected behavior, responsive rules, accessibility needs, and open questions. Link that information from the issue or project record, involve developers while the design is still taking shape, and record decisions there so the team can refer back to them.
1. Start with the outcome
Before sharing a mockup, explain what the work should accomplish for users and what should happen when it is complete. A design shows appearance, but it may not show behavior, content rules, or what happens after an action.
For each important part of the interface, describe:
- Purpose: What user need does it serve?
- Content: Which text, data, or assets appear, and what happens when content is long, missing, or delayed?
- Behavior: What happens on click, submit, validation failure, loading, or success?
- States: Which empty, error, disabled, focused, selected, or expanded states need implementation?
- Constraints: Are there existing components, technical limits, or delivery requirements to account for?
Be clear about which details are requirements and which are open to implementation judgment. That gives the developer room to identify a simpler approach without losing the user outcome.
2. Put the design and specifications in the work item
Link the current design source from the related issue or project record. GitLab recommends sharing design specifications in the related issue, preferably through a Figma link or GitLab Designs feature. Identify which frame or version is ready for implementation, and keep the link current if the design changes.
- Link the source file and point to the relevant page, frame, or component.
- State whether the design is exploratory, ready for implementation, or awaiting a decision.
- Write down measurements, assets, copy, interaction details, and exceptions that are not obvious from the source.
- Keep questions and decisions near the issue so people joining later can follow the reasoning.
A screenshot can help illustrate a specific state, but it should not be the only specification when developers need to inspect or interact with the design.
3. Describe responsive behavior explicitly
Do not assume a desktop layout explains what should happen on a narrow screen. For each relevant viewport, describe what resizes, collapses, moves, or wraps. Also state which information and actions must remain available.
| Question | Useful specification |
|---|---|
| What changes at smaller widths? | Name elements that stack, collapse, move, or wrap, and where that happens if a breakpoint is defined. |
| What must remain available? | Identify the content, navigation, and actions users still need to reach. |
| What happens with variable content? | Explain expected behavior for long titles, empty lists, many results, or translated text. |
| Which layouts should be reviewed? | List the representative viewport sizes or device contexts that matter to the feature. |
GitLab’s design guidance calls out resizing, collapsing, moving, or wrapping elements across breakpoints while retaining the same information and actions. That is a useful review principle: the layout may change, but users should not lose necessary content or functionality.
4. Include accessibility in the conversation
Discuss accessibility while the design is being shaped, not only after implementation. Note relevant keyboard interactions, focus behavior, labels, heading structure, contrast needs, and how dynamic feedback is conveyed. Point to the project’s component or accessibility guidance when it exists.
GitLab documents its own target as WCAG 2.1 level AA and recommends accessibility checks. Treat that as GitLab’s stated practice, not an automatic requirement for every project. For your team, identify the applicable standard and checks rather than assuming a design is accessible because it looks correct in a static mockup.
5. Bring developers in before handoff
Handoff works best as collaboration. Invite frontend developers to review flows, constraints, and scope while the design is still being shaped. Ask what is unclear, which existing components fit, and what implementation tradeoffs might affect the user experience.
GitLab’s collaboration playbook emphasizes a shared language and reducing a longer-term vision to workable scope. Its frontend role description also calls for clear communication and participation in issues and merge requests. Use that collaboration to agree which behavior is essential and which visual details can be adjusted if implementation constraints require it.
6. Choose the right communication channel
Use asynchronous updates for information that does not need an immediate conversation: requirements, status, design proposals, decisions, and non-urgent questions. Keep messages concise and direct; Google’s Material communication guidance recommends simple, direct language.
| Situation | Good default |
|---|---|
| A requirement or decision needs a durable record | Write it in the issue or project thread and link the design. |
| A small clarification can wait | Ask in the shared thread with enough context to answer asynchronously. |
| The team is stuck on an ambiguous or complex tradeoff | Talk directly, then capture the outcome and any follow-up in the shared record. |
| A change affects other people or the agreed scope | Make the change visible in the work item and identify who needs to review it. |
For live discussion, bring the specific decision to resolve. Afterwards, summarize the decision, owner, and any remaining open question in the shared record. This practical step helps people who were not in the conversation follow the outcome.
7. Review implementation against the agreement
Review the implementation against expected behavior as well as appearance. Check relevant viewport sizes, content variations, interaction states, and accessibility needs. If something differs, report a reproducible example:
- Where it happens, including the page, state, and viewport.
- What you expected to happen.
- What actually happened.
- Any steps needed to reproduce it.
- A design or requirement link, if it clarifies the expected result.
This gives the developer actionable information and keeps review focused on the agreed user outcome instead of subjective impressions.
8. A design handoff checklist
- The user goal and expected result are stated.
- The current design source is linked from the issue, with the implementation-ready version identified.
- Important content, actions, states, and edge cases are described.
- Responsive changes and content that must remain available are specified.
- Accessibility needs and relevant component guidance are linked or stated.
- Open questions, constraints, and scope decisions are visible.
- Developers had a chance to raise implementation questions before work was considered final.
- Review feedback names the viewport or state, expected behavior, and observed behavior.
9. Capture visual references for review
When a difference is easier to show than describe, attach a screenshot to the issue or review. A screenshot can document a particular rendered state at a particular viewport; it does not replace the source design or behavior requirements. For repeatable comparisons, capture the same page, viewport, and state after changes, and record any setup needed to reach that state.
For a manual capture, open the page in a browser, set the target viewport, reproduce the relevant state, and use the browser’s screenshot capture. If you automate this with a browser tool, wait for the page content and state you need before capturing; otherwise the image may show loading content or miss a menu, dialog, or validation state.
Or skip the browser setup
Use ScreenshotNeo to capture a page with one API request. Its clean-shot flow accepts cookie and consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before the shot; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers report the page verdict and billing status. Its MCP server gives AI agents tools to take screenshots, get page information, and capture PDFs.
See the ScreenshotNeo API documentation for request options. Set YOUR_API_KEY to your key:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
ScreenshotNeo includes full-page and element capture, device presets and custom viewports, dark mode, custom CSS and JavaScript, wait conditions, selector hiding, request blocking, custom headers and cookies, PDF output, caching, and async jobs. Plans include 1,000 screenshots a month free with no card; paid plans start at $5 for 3,000. Create a free ScreenshotNeo account to get started.
10. Troubleshooting communication problems
| Problem | Likely cause | Fix |
|---|---|---|
| The developer asks what a mockup is supposed to do | The handoff shows appearance but omits actions, states, or intent. | Add behavior and state details to the issue, then link the exact design frame. |
| Desktop looks right, but mobile behavior is disputed | Responsive changes were assumed rather than specified. | Describe what moves, wraps, collapses, and must stay available at narrow widths. |
| People implement different versions of the design | The source link is missing, stale, or does not identify the approved version. | Update the issue with the current source and mark the ready-for-implementation frame. |
| A decision made in a call is missed later | The outcome remained in a conversation instead of the shared record. | Post a short decision summary, owner, and remaining question in the issue thread. |
| Review feedback turns into a subjective debate | The report does not identify the actual mismatch or expected behavior. | Include viewport, state, reproduction steps, expected result, and observed result. |
| Accessibility is found late in review | Accessibility needs were not part of design and implementation discussion. | Identify the project’s applicable accessibility guidance and include checks in review. |
11. Reliability and effort
A linked source and written decisions make the handoff easier to follow when people are not available at the same time or join the work later. Keep the record current: an outdated design link or unrecorded change creates ambiguity. No workflow eliminates all clarification; use direct conversation for complex questions, then preserve the outcome where the work is tracked.
Keep communication proportional to the task. A small change may need only a goal, design link, and acceptance details. A multi-state responsive flow needs more complete behavior, accessibility, and edge-case notes. Avoid documenting details already obvious in the source unless they affect implementation or review.
Frequently asked questions
Should designers send a screenshot or a design file?
Link the current design source so developers can inspect the relevant specifications. A screenshot is useful as an additional reference for a rendered state or review mismatch.
When should a question be discussed live?
Use a direct conversation when ambiguity or a complex tradeoff is blocking progress. Put the decision back in the issue so the result is visible to the whole team.
Who owns the final implementation details?
Agree on the user outcome and required behavior together. The developer can propose implementation choices, while design and product partners clarify intent and constraints.
What is the most important handoff detail?
Make the expected behavior clear and connect it to the current design source in the shared work item. That gives the team a place to resolve responsive, state, and review questions.


