Semrush’s UI team left Sketch, Zeplin, and Google Drive for Figma. The write-up is on the company careers blog, dated 1 February 2023. The move itself was spring 2020.
Five people did the library transfer. They started on 19 March 2020. On 24 April the basic components and styles were ready. They kept their normal product work and used the leftover time for the library. The post says the transfer took a little over a month.
This is Semrush’s own account. The Sketch → Figma playbook is the file-import path. Semrush mostly rebuilt.
What they had before
The team started in Photoshop, with a small library of buttons and inputs, Zeplin for handoff, and files on Google Drive. Sketch arrived when symbols could be shared across files. Figma’s components were not there yet, so Sketch was the bet.
One designer built a large symbol library. Components had many variants, so the nesting got deep. The team learned Sketch in a month or two of short internal meetings, plus a Slack channel for plugins.
By the retro that triggered the switch, the team was 11 people and Semrush had 44 products. The toolkit was still Sketch, Zeplin, and Drive.
Why Drive and Zeplin hurt
Drive sync made duplicate files. Two people could not edit one file together without losing someone’s work. Libraries duplicated too. Links from a layout to the current component broke. Sketch Cloud was not available while they relied on that library. The post says Bohemian Coding added it on 28 February 2018.
Folders also drifted because people are people. More products meant more folders, so every sync bug had more places to hide.
Sketch had its own list. Almost every release had a breaking change. For a while you could not recolor a shape from layer properties. You did it with nested symbols and masks. In 2019, color overrides arrived, and deleting the old masks reset colors in live files.
The library maintainer’s specific bug was symbol duplication. Each file grew a Symbols page that copied the main library. People had to re-link instances by hand.
You also could not hand a developer a link to one artboard. The path was an export to Zeplin. Zeplin sometimes drew symbols wrong, sync was slow enough that they joked about making tea, and it could not keep several layout tabs open. It was a second source of truth. Clickable prototypes showed up in Zeplin as Semrush was already leaving.
Sketch crashed more often and dropped unsaved work. Plugins they liked stopped getting updates. Vectors were fine, and worse than Illustrator for SVG export. There was no way to open the file on another machine in a browser.
A few people wanted to stay for the plugins, the simpler interface, and masks. The post says the tool had gone stale on the features the growing team needed.
The month of rebuilding
Figma was more expensive than Sketch if you counted every UI and UX designer. It was cheaper than Sketch plus Zeplin. The UI lead called Figma sales seven times, read the FAQ, and talked to a couple of development teams that were already in Figma. They wanted one organization, and they did not want to break those teams.
A working group of five planned the move. Three of them had been pushing for Figma. They listed the tool questions, the task flow, and every icon, pattern, and component that had to move, with an owner.
The main Sketch library had over forty components and their variants, plus separate libraries for icons, illustrations, and patterns. About a year earlier, one designer had already moved some components for himself. That file was the start. Three people split the rest, marked what could be finished in Figma, and built the rest again.
They wrote naming rules while they built. The main library holds only what you place in a design. Atomic pieces that cannot stand alone go on a page they called Atoms. Nesting stops at two or three levels. Text layer names stay unique inside a component, and swappable text layers share a name so a swap keeps the words. A leading underscore makes a component private to library editors. If you add a layer to a component people already use, hide it, or it turns on in every instance.
Small components can keep states inside one component, using variants. Large ones get separate masters, so the file stays lighter. If a change is drastic, they delete the master and make a new one, so existing files do not change under someone else. The old master can be restored from an instance if they need it.
After the library was usable, the group ran short classes for the UX and UI team. The UI lead demoed the organization setup for product and marketing designers.
What they saw a month later
Designers and developers looked at the same file, at the same time. Sharing a file across teams was ordinary. The Drive duplicate problem was gone.
Nesting and the layer count inside components dropped by about one and a half to two times. Their figure. Libraries were easier to maintain. Component pages carried links to current docs. People left bug notes in the library file, so the maintainers were interrupted less.
Variants let them set component properties in a way that looked more like code. The Figma Community plugins replaced some of the Sketch plugin habit. The main libraries could be opened by outside developers.
The post’s next step was still a plan. They wanted a non-destructive link from the Figma components to React components, and they wanted to keep publishing libraries. The article stops at that intention.
What I would copy
Price Sketch plus the handoff tool, not Sketch alone. Semrush’s bill went down only after Zeplin was in the comparison.
Rebuild nested symbols on purpose. Their library was too nested to drag across and call done. They used one person’s early port as a seed, then split the rest across three people with a deadline that still left room for product work.
Hide new layers on a component that is already in use. Delete and replace a master when the change would touch everyone’s files.
Give the team a demo after the library exists, not before. Semrush’s classes came once the basic components were actually there.
The Sketch → Figma playbook covers file import, styles, and reconnecting libraries. Semrush’s post is the case where the library was rebuilt, and Drive plus Zeplin were the real source of pain.