https://abs.twimg.com/emoji/v2/... draggable="false" alt="2⃣" title="Keycap digit two" aria-label="Emoji: Keycap digit two"> — Reduce the number of user actions that are required before your plugin can do its work.

The most efficient plugin possible is a plugin that gets to work immediately when it is run.
If a UI is required, choose form controls that permit the efficient configuration of your plugin.

Here, changing the “Format” setting requires only one click because a Segmented Control is used.
The first form control should be in focus when the UI is initially displayed, so that the user can make changes immediately.
Options that tend to be selected should be selected by default, or selectable with a bare minimum of user actions — ideally, a single click.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="3⃣" title="Keycap digit three" aria-label="Emoji: Keycap digit three"> — Solve a single, specific problem.

Your plugin should do just one thing (or, a few closely-related things) well.
Consider if functionality can be “decomposed” and built as sub-commands that can be run independently.

Here, the functionality of the “Clean Layers” command is also available as separate sub-commands.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="4⃣" title="Keycap digit four" aria-label="Emoji: Keycap digit four"> — Allow the user to control your plugin UI with the keyboard.

All form controls should have an obvious focus state, and be reachable by pressing the “Tab” key.

Refrain from modifying the natural tab order of the form controls.
Pressing “Esc” should close the plugin UI.

Pressing “Enter” should execute the plugin with the currently configured settings in the plugin UI.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="7⃣" title="Keycap digit seven" aria-label="Emoji: Keycap digit seven"> — Provide system feedback in response to user actions.

Show success and error messages as toast notifications.
Include a loading state if there could be more than a few seconds of wait time — for example, when awaiting an API response.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="9⃣" title="Keycap digit nine" aria-label="Emoji: Keycap digit nine"> — Prefer labels over icons.

Certain concepts could be challenging to represent unambiguously with an icon. For clarity, use a label, written in plain language.
A reasonable rule: Only use icons that are already in use in the Figma UI.

Here, an icon from Figma’s “Properties” panel is used.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔟" title="Keycap ten" aria-label="Emoji: Keycap ten"> — Pick a short, unique, and self-explanatory name for your plugin.

Use four words or less, in Title Case.

Be specific, use familiar words, and avoid made-up words.
Consider using an action phrase where the first word is a verb.
The best thing that you can say is that your plugin does exactly what it says on the tin.
https://abs.twimg.com/emoji/v2/... draggable="false" alt="💡" title="Electric light bulb" aria-label="Emoji: Electric light bulb"> More about these 10 heuristics here: https://bit.ly/figma-plugins-ux">https://bit.ly/figma-plu...
https://abs.twimg.com/emoji/v2/... draggable="false" alt="🔥" title="Fire" aria-label="Emoji: Fire"> All the plugins referenced in this thread can be installed here: https://figma.com/@yuanqing ">https://figma.com/@yuanqing...
You can follow @yuanqinglim.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled: