Aligning Patterns Across Design and Development

Rate this content
Bookmark

Design workflows can sometimes be at odds with development—but establishing common patterns between disciplines can set the foundation for automation and enable teams to design and ship faster. Figma allows you to get what you need from design and get back to writing code—whether that’s building front-end for the first time, or building with a reusable design system in your code base.

This talk has been presented at React Summit US 2024, check out the latest edition of this React Conference.

FAQ

Jake is a developer advocate at Figma with 12 years of experience as a software engineer.

Jake's talk focuses on aligning patterns between design and development.

Pierre Dufourmat was a 17th-century polymath who proposed the principle of least time, which describes how light travels the optimal path between two points.

The 'gap' refers to the perceived space between design and development, which is the goal to close through collaboration.

The Simple Design System is a React component library created by Jake and a designer advocate that demonstrates how Figma's design system features can integrate with a React code base.

Code Connect currently supports HTML, Web Components, Angular, Vue, React, SwiftUI, and Jetpack Compose.

Users can provide feedback via GitHub at figma.sds or through LinkedIn and jake.fun.

Figma offers Code Connect, a tool that allows teams to publish code-based informed component code snippets to Figma to bridge design and development gaps.

It highlights the importance of understanding forces and factors in collaboration to find the optimal path for teamwork.

Figma is a platform for teams to design and build products together, built on the web.

Jake Albaugh
Jake Albaugh
8 min
19 Nov, 2024

Comments

Sign in or register to post your comment.
Video Summary and Transcription
I'm Jake, a developer advocate at Figma, and today I'll be discussing aligning patterns between design and development. Collaboration between designers and developers requires recognizing our different perspectives. The goal is to close the gap between design and development, but this is often aspirational. The optimal path between design and development is somewhere in between, depending on factors like friction or waves. By recognizing each other's areas of resistance, we can find ways to make collaboration more effective. Figma's Code Connect fills the gap between Figma component logic and code logic by allowing teams to publish code-based informed component code snippets. CodeConnect currently supports HTML, Web Components, Angular, Vue, React, SwiftUI, and Jetpack Compose, and seeks to support more languages.

1. Introduction to Aligning Patterns

Short description:

I'm Jake, a developer advocate at Figma, and today I'll be discussing aligning patterns between design and development. Design focuses on the desired effect of a pattern, while engineers consider both the surface and the underlying construction. Collaboration between designers and developers requires recognizing our different perspectives. The goal is to close the gap between design and development, but this is often aspirational. I'll introduce Pierre Dufourmat's principle of least time to shed light on this topic.

♪♪ ♪♪ I'm Jake. I'm a developer advocate at Figma. For those that don't know, Figma is a platform for teams to design and build products together, built on the web. Pretty dope product if I say so myself. Before this, I was a software engineer for 12 years. I most recently was working on a React and TypeScript component library for a restaurant reservation platform. But enough of that. We only have so much time. So I'm going to talk about aligning patterns between design and development.

So this cube here represents a pattern. This might be a token, a component, a page. It's a concept that is shared across both design and development as we think about how we're going to build this thing together and make it a reality. Design is often looking at the desired effect of this pattern. How can this be presented in a way that's effective and compelling? And of course, as we know, as engineers, right, we're thinking about that surface, but we're also thinking about the implied kind of inferred construction, the stuff underneath the hood, behind the scenes. And so as collaborators look to build this pattern together, we're coming from different points of origin. And it's important to recognize that when we think about how we collaborate together.

As we travel towards this shared destination, right, it's often thought that the goal is to work side by side. But as most of you know, there's always this perceived space between us. A little Flexbox reference. We often call that space the gap, right? And this is the gap between design and development, and we see the goal as closing that gap. But this is often very hard and feels aspirational more than it does realistic. So bear with me for a second. We're going to talk about Pierre Dufourmat's principle of least time. So for those that don't know, Pierre Dufourmat, a product of the 17th century, a bit of a polymath, genius, thought about a lot of things. One of the things he did was observe the behavior of light. And if you aren't familiar with this concept, it's fairly kind of, it's a thing in math, but in physics, but building on prior observation, he realized that light passes between two points in the least possible time as it travels through different mediums, and it has to do with refraction, right? And that path is the optimal path. The way that I needed to hear this, we're going to actually do right now. So this is us. We're in the ocean, right? And there's been a bit of emergency, and we need a lifeguard to come and save us. Well, the shortest distance between us and the lifeguard is equidistant running and swimming, but as we know, running is often a lot faster than swimming.

2. Optimal Path and Consistency

Short description:

The optimal path between design and development is somewhere in between, depending on factors like friction or waves. Understanding these factors helps determine the necessary adjustments for collaboration. By recognizing each other's areas of resistance, we can find ways to make collaboration more effective. For example, in UI design, elements like icons or state variants have different implementations in design tools and code, but by naming things consistently and optimizing the paths, we can bridge the gap between design and development.

So what you can do, option B here, is reduce the amount of swimming as much as you can, but in order to do that, you have to add distance, overall distance. And so what Fermat observed is that the optimal path is somewhere in between, and it depends on factors like friction or waves or sand or the fitness of the lifeguard. And these factors, understanding what these factors are, tell you how much distance you need to add in order to hit the optimal path.

So let's come back to this. Here we are. What forces are at work in this scenario? Well, I think the best way to think about it is almost like gravitational pull back to our points of origin, right? Developers coming down, design going up. The key to collaboration is understanding when the people you are collaborating with are going into their areas of most resistance, when you are adding the most distance for your teammates, and the reality is that oftentimes a little bit of give can go a long way. An addition for you might be a reduction for your team. So we need to understand those forces in order to make Pierre a happy guy.

All right, let's talk about this in practice. So here's everyone's favorite UI element, the button. Boring but does a great job of kind of explaining this stuff simply. So classically, if we want to have an icon in this button, in Figma the way we think about it is a Boolean visibility toggle because that node needs to exist, and so we need to toggle that visibility off with a Boolean toggle. But in code we're thinking of this as an optional property. As soon as that becomes true, we get a second property in Figma. It's an instance swap is the property type. And this is like designer ergonomics wise is an awesome kind of reality for designers. It helps them adopt the design system, understand what's going on. It's core to kind of the structure of how this design file is created. But in code we're just adding the icon, right? And so the way that we think about this thing is similar but a little bit different. Another example of this is the state variant. Designers need to give the hover, the focus, right? The default state that needs to be designed and exist in the component. But that's like CSS for us on the engineering side until we get to disabled. And in this case, it's a Boolean property in code, but it's a variant, an enumerated value inside of the design. And so while we're talking about the same thing, the reality is that there are these differences, right? And so in a sense when we come back to this, we're thinking similarly. We name things the right way. We're calling it an icon and not something else. We're thinking of it as disabled, not something else. We've optimized those paths. We've given a little, received a little.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

The Whimsical Potential of JavaScript Frameworks
React Summit US 2023React Summit US 2023
28 min
The Whimsical Potential of JavaScript Frameworks
Top Content
Watch video: The Whimsical Potential of JavaScript Frameworks
The speaker discusses the whimsical and detailed work of Stripe, particularly their interactive and dynamic pages. They explain the use of React for building whimsical details and tracking mouse position. The speaker introduces React Spring for smooth animation and React3 Fiber for creating a 3D egg model. They also mention the use of Framer Motion and React server components for animating CSS properties.
AI + UX: Product Design for Intelligent Experiences
C3 Dev Festival 2024C3 Dev Festival 2024
28 min
AI + UX: Product Design for Intelligent Experiences
AI design challenges include bias, safety, and security. Trust and transparency are important in AI. Design principles for AI include user control, fighting bias, and promoting good decision-making. AI can enable the design process and investors expect to see it included in products. AI empowers individuals to create and share ideas, but managing expectations is crucial.
Domain Driven Design with Vue Applications
Vue.js London 2023Vue.js London 2023
14 min
Domain Driven Design with Vue Applications
Top Content
Welcome to this talk on domain-driven design in Vue.js application. Today we are going to look into domain-driven design, its benefits and how it works with Vue.js domain-driven design versus the MVVM model. Vue.js thrives in domain-driven design, a design approach that models software to match a domain. DDD emphasizes understanding business logic and creating a domain that reflects the language and concepts. Integrating DDD in Vue.js offers benefits such as effective modeling of complex business domains, structured code reflecting domain logic, and easier onboarding and ownership.
Proven Pinia Patterns
Vue.js London 2023Vue.js London 2023
20 min
Proven Pinia Patterns
Top Content
Pinnia is a lighter, more modular state management solution for Vue apps, offering consistent patterns, TypeScript support, and an intuitive developer experience. PINIA encourages splitting state into manageable domains, improving code splitting, type inferences, team collaboration, and debugging clarity. Pinia provides flexibility in accessing and mutating state, with different approaches for option and setup stores. It also offers features like patch, reset, and onAction methods. Vue Mastery offers comprehensive Pinnia courses and resources for fast learning.
Component Design Patterns
Vue.js London 2023Vue.js London 2023
18 min
Component Design Patterns
The Talk covers clean components and when to create new components, as well as patterns for writing cleaner components and the benefits of VIP patterns. Refactoring and separating code into separate components can make it shorter and easier to read, reducing complexity. The importance of not repeating oneself and the benefits of using smaller components for performance and developer experience are discussed. Composables can help extract logic in large and complex components, and patterns can be incorporated into component libraries and design systems.
Building Figma’s Widget Code Generator
React Advanced 2022React Advanced 2022
19 min
Building Figma’s Widget Code Generator
This Talk introduces Figma's Widget Code Generator and demonstrates how to build a FigJam widget using it. The speaker discusses the implementation of voting functionality, avatar functionality, and remove vote functionality. They also explain how the Widget Code Generator plugin works and how to access properties and modify names using the Figma plugin API.