디자인 시스템, 복잡도 다루기

#Design, #Design System · 2024. 5. 27

flex 제품팀의 첫 플랫폼 디자이너로 입사해서 디자인 시스템과 제품을 만들게 된 지 이제 2년 반 조금 넘어간다. 국내에 디자인 시스템을 구성하는 게 필요하다는 이야기가 2018년쯤부터 적극적으로 나왔던 걸로 기억한다. 당시 디자인 스펙트럼에서 에어비앤비, 라인, 토스 디자인 시스템 관련 주제를 들었으니까 말이다. 물론 이전부터 활용했던 조직들도 있었겠지만 적극적으로 활용하는 유행이 시작했던 것은 그 어느쯤이라고 생각된다.

요즘은 디자인 시스템이 유행을 넘어서 제품을 만든다면 반드시 필요한 재료로 자리 잡은 것 같다. 가끔 만나는 디자이너들의 고민도 디자인 시스템이고, 팀에 지원해 주시는 분들의 이력에도 거의 대부분 디자인 시스템 운영 경험이 포함되어 있다.

가장 흔한 디자인 시스템 비유 · 출처 LEGO® Monthly Mini Build Instructions - Race Car

가장 흔한 디자인 시스템 비유 · 출처 LEGO® Monthly Mini Build Instructions - Race Car

내가 디자인 시스템을 설계하기 전에 가장 착각했던 것은 `디자인 시스템 = 여러 개의 UI 컴포넌트 묶음` 정도라는 생각이었다. 정말 그럴까? 내가 경험하고 있는 것은 전혀 다른 것으로 느껴지기도 한다. '미리 디자인된' 레고 블록을 조립할 수 있도록 설계하는 것이 디자인 시스템의 기본은 맞지만 이건 일부분이다.

더 본질적인 이해로 내려간다면 오히려 'User Interface를 정교하게 시스템화한다'에 가까워진다. 따라서 디자인 '시스템'은 복잡한 Interface를 공통화하고 구체적으로 정의하기 위한 개념이며 우리가 디자인 시스템을 설계하면서 고민하는 추상화와 동작 정의, 패턴화 등은 복잡함을 체계화하는 과정이라고 할 수 있다.

또한 디자인 시스템은 일종의 방법론 혹은 수단이다. 디자인 시스템 설계의 목적은 제품을 만드는 데 있어 효율성과 일관성을 유지할 수 있도록 도움에 있다. 제품이 단순하고 작다면 시스템도 작고 단순하다. 제품이 크고 복잡하다면 당연히 시스템도 크고 복잡해진다. 시스템은 복잡할수록 관리가 어려우며 다양한 용례를 담기 위해서 추상과 구체성의 레이어를 넘나들어야 한다. 이 에세이는 복잡한 제품에서 복잡한 디자인 시스템을 다루기 위한 레이어에 대한 이야기다.

해당 내용들은 지극히 개인적인 의견이나 내 배움을 기준으로 작성했다. 글의 내용은 내 소속 집단의 의견을 대표하지 않는다. 디자인 시스템을 어떻게 구성해야 하는가는 피그마 블로그에 친절하게 안내되어있다.

본격적으로 시작하기 전에 오늘의 가장 중요한 개념, 디자인 시스템이란 무엇인지 먼저 정의한다. 디자인 + 시스템의 합성어로 창의적인 사고를 기반으로 하는 '디자인'과 수렴적인 사고를 기반으로 하는 '시스템'의 결합은 어색하게 느껴지기도 한다. 우선 디자인 시스템에 가장 지대한 영향을 끼친 Figma와 UX 개념을 제일 잘 정의하는 Nielsen Norman Group 정의를 살펴보자.

At its core, a design system is a set of building blocks and standards that help keep the look and feel of products and experiences consistent.

Figma - Design systems 101: What is a design system?

At its core, a design system is a set of building blocks and standards that help keep the look and feel of products and experiences consistent.

Figma - Design systems 101: What is a design system?

A design system is a set of standards to manage design at scale by reducing redundancy while creating a shared language and visual consistency across different pages and channels.

Nielsen Norman Group - Design Systems 101

A design system is a set of standards to manage design at scale by reducing redundancy while creating a shared language and visual consistency across different pages and channels.

Nielsen Norman Group - Design Systems 101

세부적인 내용은 다르지만 맥락으로는 거의 동일하다. 기본적인 개념은 '디자인 시스템은 복잡해진 디지털 제품에서 많은 디자이너, 엔지니어가 빠르게 일관된 동작과 형태를 설계할 수 있도록 도움으로서 사용자가 어떤 상태에서도 동일한 경험을 할 수 있도록 한다.'로 정의할 수 있다.

세부적인 내용은 다르지만 맥락으로는 거의 동일하다. 기본적인 개념은 '디자인 시스템은 복잡해진 디지털 제품에서 많은 디자이너, 엔지니어가 빠르게 일관된 동작과 형태를 설계할 수 있도록 도움으로서 사용자가 어떤 상태에서도 동일한 경험을 할 수 있도록 한다.'로 정의할 수 있다.

Foundation: User Interface를 구성하는데 있어서 가장 기초가 되는 요소를 정의한다. Typography, Color, Size, Icon,Shadow 같은 스타일 요소들이 해당된다.

Foundation: User Interface를 구성하는데 있어서 가장 기초가 되는 요소를 정의한다. Typography, Color, Size, Icon,Shadow 같은 스타일 요소들이 해당된다.

Component: 디자인 시스템의 사실상 핵심 영역이다. Foundation을 기반으로 실제 User Interface에 구성되는 Button, TextField, Tabs, List.. 같은 요소들이 해당된다.

Component: 디자인 시스템의 사실상 핵심 영역이다. Foundation을 기반으로 실제 User Interface에 구성되는 Button, TextField, Tabs, List.. 같은 요소들이 해당된다.

Pattern: Component를 보통 블럭이라고 칭하는데, 블럭들을 갖고 미리 어느 정도 조립된 구성들이 해당된다. 예시로는 Form Pattern, Data Property 같은 훨씬 더 구체적이고 광범위한 내용이 담긴다.

Pattern: Component를 보통 블럭이라고 칭하는데, 블럭들을 갖고 미리 어느 정도 조립된 구성들이 해당된다. 예시로는 Form Pattern, Data Property 같은 훨씬 더 구체적이고 광범위한 내용이 담긴다.

위에서 설명한 구성은 가장 일반적인 형태다. 화면을 구성하기 위해서 필수적인 UI 요소들이 우선 포함되는 게 일반적이지만 간과하지 말아야 할 것은 디자인 시스템은 제품, 조직을 위해서 존재한다는 점이다. 따라서 디자인 시스템은 제품에 종속되는 관계이기 때문에 만들고 있는 제품의 성격, 도메인 영역, 비즈니스의 안정성, 조직의 성향과 규모, 사용처의 역량 등 온갖 요소에 영향을 받으며 반드시 제품의 모습에 따라서 전혀 다른 형태로 발전하게 된다.

이야기를 하다 보면 의외로 간과되는 경우가 꽤 빈번하다. 단순하게 제품의 파편화를 막기 위해서 실제 효용성이 제대로 고려되지 않은 UI Kit 수준으로 제공한다거나, 어떤 논리도 없이 디자인 시스템 유행하니 필요할 것 같아서 제작하는, 수단이 목적으로 둔갑하는 경우도 있다.

디자인 시스템은 추상화된 형태로 제공되는 것을 전제로 하며, 대부분은 Primitive 한 요소(Button, TextField, Swtich...)를 갖고 조합해서 구성하는 방식을 취한다. 가장 흔한 예시로 '카카오톡 친구 목록 아이템'을 예시로 본다면 Avatar, Meta, Tag의 조합으로 만들어진다.

더 자세한 추상화 레이어를 해부하면 List라는 Component가 존재하고 RightChild, LeftChild가 존재하며 ChildSlot에 Avatar 같은 Component를 조합하는 형태로 제공될 것이다. 추상화는 복잡한 것을 쉽게 만들기 위해서 제공하지만 역설적으로 복잡한 제품에서 이런 조합을 활용하는 방식은 어떤 시점까지만 유효하다.

카카오톡 친구 목록 아이템. 예시에 가까우며 틀릴 수 있다.

카카오톡 친구 목록 아이템. 예시에 가까우며 틀릴 수 있다.

소수 인원으로 제품 팀이 결성된 지 얼마 안 되었고 제품도 아직 PMF(Product Market Fit)을 찾고 있는 단계다. 팀은 더 빠르게 검증하면서도 제품의 품질을 포기하고 싶지 않아서 디자인 시스템을 제작했다.

이 시점의 디자인 시스템은 기초적인 Button, Form, Control, List, Dialog, Tabs 같은 Component들로 구성되어 있을 가능성이 매우 높다. 그렇다면 다행이다. 디자인 시스템은 아주 특수한 경우가 아니라면 제품의 거의 대부분의 요구사항과 사용례를 현재 제작된 Component의 조합을 통해서 충분히 감당할 수 있다. 또한 제품의 크기에 비례하는 복잡도를 갖고 있기 때문에 예측 가능한 요구사항 반영과 소규모 기여를 통해서도 충분히 유지 보수가 가능하다.

제품의 규모가 작다면 이 단계에서는 오히려 디자인 시스템 주도로 제품이 설계된다. 거의 대부분의 사용례를 감당할 수 있기 때문에 디자인 시스템 입장에서는 오히려 미래를 준비할 시간을 벌 수 있다. 아직 구체적인 필요성이 없지만 근 시일 내 필요할 것 같은 Component, Pattern을 미리 준비할 수 있고, 사용처와 커뮤니케이션 과정이 덜 복잡하기 때문에 필요한 요소들 바로 제작할 수 있다.

제품은 작고 큰 성공과 실패를 하면서 점차 영역을 확장하는 시점에 접어들었다. 제품 팀은 이제 여러 조직으로 구성되었고, 제품 안에 여러 도메인과 공통 기능들이 생겼다. 각 도메인과 기능은 서로 연결되거나 완전히 독립된 형태로 설계되었다. 또한 도메인마다 PMF를 찾은 곳도 있고 아닌 곳도 있다.

제품은 품고 있는 도메인과 조직이 커진 만큼 복잡해졌다. 디자인 시스템도 비례해서 커졌고 여전히 많은 디자이너들과 FE 엔지니어들은 디자인 시스템을 갖고서 제품을 설계하려고 노력한다. 하지만 현재 Component, Pattern으로는 더 많이, 더 복합적으로 요구되는 사용처의 요구사항을 감당하기 벅차다.

이 시점에 제품 팀은 시스템을 유지 보수할 수 있는 전담 조직을 구성한다. 하지만 일시적인 방편에 가까울 수 있다. 시스템을 유지 보수하는 리소스는 한정적이지만 제품 팀과 제품의 규모는 더 커져버렸기 때문이다. 여전히 많아진 도메인과 기능만큼 요구되는 Spec, Component, Pattern, Template들을 적절한 시점에 제공할 수 없게 되고 제품 팀들은 필요한 것들을 자체적으로 해결하거나 디자인 시스템을 아주 많이 변형해서 사용하는 양상이 나타나기 시작한다.

동시로 발생하는 파편화와 요구사항, 사용방식에 대한 문의, 우선순위 설정 등 다양한 맥락의 일을 동시에 처리해야 하는 디자인 시스템 플랫폼 팀 입장에서는 아주 고통스럽다. 이제 선제적인 대응은 거의 대부분 상황에서 불가능하며 도메인과 제품 팀의 사용례를 보면서 사후 대응으로 설계 패러다임이 전환된다. 따라서 제품안에서 디자인 시스템이 존속되고 목적을 유지하기 위해서는 새로운 방법을 찾아야 한다.

비즈니스가 실패하지 않는다면 제품은 계속해서 커지고 복잡해진다. 단일 디자인 시스템 또는 보편적인 UI Component, Pattern 등만 다루는 디자인 시스템으로 더는 복잡도를 다룰 수 없다. 콘웨이 법칙에 따라서 제품과 디자인 시스템을 본다면 이제 복잡함을 단순하게 다루기 위해서 노력하기보다는 복잡도를 인정하고 잘 다루기 위해서 노력해야 한다.

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
(시스템을 설계하는 조직은 조직의 의사소통 구조를 본딴 설계를 생산하도록 제약된다.)

Melvin E. Conway, 1967, CONWAY'S LAW

Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.
(시스템을 설계하는 조직은 조직의 의사소통 구조를 본딴 설계를 생산하도록 제약된다.)

Melvin E. Conway, 1967, CONWAY'S LAW

꾸준히 이야기하지만 디자인 시스템은 추상화를 담보로 설계된다. 추상화는 복잡한 것을 잘 다루기 위한 개념이고 실제로 디자인을 할 때, 코드를 구성할 때 더 많은 기능을 효과적으로 담는데 충분히 유효하다. 그렇다면 앞선 이야기들과 대치된다. 나는 디자인 시스템은 추상화된 형태로 제공하지만 그걸로는 복잡도를 담을 수 없다고 이야기하고 있다.

여기서 빠져있는 요인은 '조직' 혹은 '도메인'이다. 제품을 설계할 때와 다르게 제품 팀, 도메인 입장에서는 차이가 있을 수 있다. A 조직은 훨씬 더 구체적인 것이 필요할 수 있고, B 조직은 모바일 플랫폼을 위한 것이 필요할 수 있다. 또는 똑같은 List Component를 다루더라도 상충되는 기능을 포함하거나 엄청나게 구체적인 형태를 만들어내고 싶어 할 수 있다.

디자인 시스템은 일관성을 유지하는데 가장 큰 목적이 있기 때문에 기조에 따라서 모든 요구사항을 대응하지 않기도 한다. 따라서 디자인 시스템의 추상화는 제품을 직접 만들 때는 필요한 개념이지만 조직과 조직 또는 도메인과 도메인 사이의 역학 관계에서 그 장점을 발휘하기 어려울 수 있다.

큰 회사, 조직은 복잡하다 · 출처 @Manu Cornet.

큰 회사, 조직은 복잡하다 · 출처 @Manu Cornet.

디자인 시스템은 말 그대로 '시스템'이다. 복잡도가 커졌다면 디자인 시스템은 이제 미시적인 관점에서 User Interface를 체계화하는 것을 넘어서 거시적인 관점으로 제품, 조직과 디자인 시스템의 복잡한 관계를 추상화하고 시스템화하는 방향으로 진화해야 한다.

우리의 곁에 이미 복잡함을 추상화하고 다루는 방식의 예시가 있고, 심지어 우리가 직접 다루기도 한다. 디자인 시스템 처럼 Component를 추상화해서 사용처와 연결하는 것. 또는 추상화된 API를 제공해서 사용처의 요구사항을 충분히 대응할 수 있도록 하는 방식, Headless 라이브러리, Styling 라이브러리들을 이용해서 구체적인 시스템을 만드는 것, 필요하다면 외부 기능 라이브러리와 조합하거나 새로운 것을 만드는 것이 그 예시다.

Sahdcn은 Radix를 포함해서 여러 종류의 라이브러리를 기반으로 제작된 일종의 Third Party다.

Sahdcn은 Radix를 포함해서 여러 종류의 라이브러리를 기반으로 제작된 일종의 Third Party다.

디자인 시스템의 ‘레이어’는 이러한 형태로 제품 팀과 도메인 구조를 대응할 수 있도록 제공된다. 전체 제품을 관통하고 가장 추상화된 API를 제공하는 Core 한 시스템 레이어를 두고 필요에 따라서, 도메인 맥락과 기능, 조직의 위계에 따라서 각자의 레이어를 둘 수 있다. 로컬 시스템, 프로덕트 시스템이라고 하는 방향이다. 이런 방식은 Component를 추상화해서 제공하는 것이 아니라 시스템 자체를 추상화해서 제공하려는 것에 가깝다.

시스템의 레이어는 Core 시스템을 기반으로 설계되어도 도메인의 지엽적인 맥락, 기능, 구체적인 형태를 포함할수록 구체적이면서 범용성이 낮아지게 된다. 레이어 계층을 구체적으로 본다면 아래와 같을 수 있다. 가장 최근에 구체적인 사례를 공유했던 Spotify의 예시를 본다면 아래와 같이 구성될 것이다.

Foundation Layer : Color, Typography, Icon, Size, Shadow 같은 스타일을 다루며 제품의 비주얼적인 특색이 담긴다.

Foundation Layer : Color, Typography, Icon, Size, Shadow 같은 스타일을 다루며 제품의 비주얼적인 특색이 담긴다.

Core Layer : 가장 추상화된 형태로 제공된다. 순수한 기능(버튼 → 클릭된다)만을 담고 있으며 도메인의 로직, 맥락을 담아내는 것은 지양한다.

Core Layer : 가장 추상화된 형태로 제공된다. 순수한 기능(버튼 → 클릭된다)만을 담고 있으며 도메인의 로직, 맥락을 담아내는 것은 지양한다.

Local Layer : 추상화를 반드시 보장하지 않는다. 도메인의 구체적인 맥락과 로직을 담으며 Core Design System을 갖고서 구성하거나, 일부 Component는 자체적으로 설계하기도 한다

Local Layer : 추상화를 반드시 보장하지 않는다. 도메인의 구체적인 맥락과 로직을 담으며 Core Design System을 갖고서 구성하거나, 일부 Component는 자체적으로 설계하기도 한다

모든 제품과 팀에 이러한 복잡한 레이어가 필요한 것은 아니다. 상황에 따라서 팀 구성, 비즈니스 구조가 복잡하더라도 필요 없는 경우가 있다. 예를 들면 패션 커머스 제품을 만드는 팀의 구조는 복잡할 수 있지만 제품 자체에서 개별 도메인 레이어가 불필요할 수 있다. 아주 단순하게 여성, 남성, 홈, 액세서리 카테고리를 개별 도메인으로 보면, 서로 완전히 다른 Component나 기능을 필요로 하지 않을 것이다.

이제 복잡함을 다루는 실제 경험을 이야기해보자. flex는 HR 도메인을 다루는 제품이다. 크게 본다면 HR이지만 HR 안에는 근태 관리, 전자결재, 성과관리, 급여 정산 등 온갖 크고 작은 도메인이 포함되어 있다. 또한 개별 제품 팀, 플랫폼 조직을 보유하고 있으며 커뮤니케이션 구조도 복합적이다.

flex도 Core 디자인 시스템 만으로 구성되었던 시점이 있었고 개별 도메인의 복잡도, 전체 제품의 복잡도가 증가하면서 자연스럽게 점차 레이어를 구성할 수 있도록 발전했다. flex는 Core 시스템을 기준으로 Component Package, Extension Layer, Common Feature Layer, Local Layer로 구성된다. 각 도메인이나 공통 기능은 필요에 따라서 구체적인 레이어를 두고 있거나 아닐 수 있다.

Core Design System

Local Design System A

Local UI Kit B

Local Design System ...

Icon System

Modal Package

Table Package

Extension

Common Featueres

flex Core Layer : Foundation Style과 Primitive Component들로 구성된다. 도메인들은 원하는 대로 거의 모든 것을 커스텀 할 수 있다. 이 레이어에서는 HR 제품이 아니어도 사용할 수 있는 정도로 추상화된 상태로 제공된다.

flex Core Layer : Foundation Style과 Primitive Component들로 구성된다. 도메인들은 원하는 대로 거의 모든 것을 커스텀 할 수 있다. 이 레이어에서는 HR 제품이 아니어도 사용할 수 있는 정도로 추상화된 상태로 제공된다.

Component Package : 제품에서 너무 중요한 Component 거나 Component 자체가 갖고 있는 기능이 너무 크다면 Core 시스템과 분리된 형태로 제공한다. flex 안에서는 Modal, Table 같은 Component가 대표적인 예시이며 Core 시스템을 참조하고 동일하게 매우 높은 추상화를 제공한다. Component Package에 해당하는 기준이 살짝 모호할 수 있기 때문에 제품 팀 안에서 많은 논의가 필요하지만 정말 중요한 위상이라면 충분히 분리할 수 있다.

Component Package : 제품에서 너무 중요한 Component 거나 Component 자체가 갖고 있는 기능이 너무 크다면 Core 시스템과 분리된 형태로 제공한다. flex 안에서는 Modal, Table 같은 Component가 대표적인 예시이며 Core 시스템을 참조하고 동일하게 매우 높은 추상화를 제공한다. Component Package에 해당하는 기준이 살짝 모호할 수 있기 때문에 제품 팀 안에서 많은 논의가 필요하지만 정말 중요한 위상이라면 충분히 분리할 수 있다.

Extension Layer : Core 시스템보다 훨씬 구체적인 동작을 제공한다. Core 시스템에서 제공하지 않는 실험적인 Component가 해당되거나 자주 사용되는 Core 시스템 Component들을 미리 조합해서 제공하는 경우도 있다.

Extension Layer : Core 시스템보다 훨씬 구체적인 동작을 제공한다. Core 시스템에서 제공하지 않는 실험적인 Component가 해당되거나 자주 사용되는 Core 시스템 Component들을 미리 조합해서 제공하는 경우도 있다.

Common Feature Layer : 공통 기능에 해당하는 레이어다. Component Package와 흡사하지만 완전히 다르게 구성되어 있다. Common Feature Layer는 보통 flex Data API와 직접 통신이 필요한 Component들로 구성되어 있다. 포함되어 있는 Component들은 서버 스펙과 기능에 영향을 받으며 단독으로 사용할 수 없는 강력한 제약을 갖고 있다. 따라서 해당 레이어는 추상화를 담보하지 않는다.

Common Feature Layer : 공통 기능에 해당하는 레이어다. Component Package와 흡사하지만 완전히 다르게 구성되어 있다. Common Feature Layer는 보통 flex Data API와 직접 통신이 필요한 Component들로 구성되어 있다. 포함되어 있는 Component들은 서버 스펙과 기능에 영향을 받으며 단독으로 사용할 수 없는 강력한 제약을 갖고 있다. 따라서 해당 레이어는 추상화를 담보하지 않는다.

Local Layer : Local Layer는 각 도메인의 맥락과 로직을 담는다. 기본적으로 Core 시스템을 갖고서 설계되지만 추상화해서 제공할 필요는 없으며, 전체 제품 위계로 사용되지 않는다. 상황에 따라서는 구현까지 이어지지 않고 UI Kit 형태로만 정의되기도 한다.

Local Layer : Local Layer는 각 도메인의 맥락과 로직을 담는다. 기본적으로 Core 시스템을 갖고서 설계되지만 추상화해서 제공할 필요는 없으며, 전체 제품 위계로 사용되지 않는다. 상황에 따라서는 구현까지 이어지지 않고 UI Kit 형태로만 정의되기도 한다.

위에서 설명된 레이어는 칼같이 분리된 계층이 아니다. 도메인이 많아지고 제품 팀이 늘어나면 제품 안에서 새로운 Pattern과 Component가 유행하거나, 엄청 유행하다가 갑자기 팍 식어버리는 재미있는 경우가 있다. flex Design System은 각 레이어를 완전 분리하지 않았기 때문에 이런 상황을 꽤 유연하게 대응 가능한 기조를 갖을 수 있다. 예를 들면 각 레이어는 필요한 경우 서로가 만든 Component를 수출하기도 하고, Local에서 제작된 Component가 기준에 따라서 Core 시스템으로 승격되기도 한다.

근래에 경험을 이야기하면 제품 안에서 Coach Mark를 사용해서 안내하는 패턴이 유행했고, 개별 도메인에서 각자 구성하거나 서로 만든 것을 활용하기도 했다. 플랫폼 팀은 Local 레이어에서 Coach Mark가 유행하는 것을 지속적으로 감지하다가 제품 안에서 충분한 사용례와 요구사항을 파악하고나서 Extension 레이어로 승격시키고 Extension Component로 제작했다.

Coach Mark 사례를 보면서 생각하면, 서로 참조하는 관계라고 칭한 것은 각 디자인 시스템 레이어를 분리했다고 독립적으로 운영하면 훨씬 더 큰 파편화를 만들 수 있기 때문이다. 완전히 분리된 제품이 아닌 이상 디자인 시스템 레이어도 커다란 하나의 제품안에 포함된 개념으로 이해해야 한다. 조직과 제품의 성장, 새로운 UX 패턴의 유행, 사용처의 문제... 등을 유연하게 대응하기 위해서는 참조, 분리, 추상화 개념을 디자인 시스템에 적용해야하며 언제나 각 레이어의 관계를 잘 유지할 수 있도록 노력해야 한다.

Coach Mark는 가장 근래에 만들어진 Extension Component 이다.

Coach Mark는 가장 근래에 만들어진 Extension Component 이다.

근래에 디자인 시스템 설계에 대한 경험을 이야기할 때, 디자인 시스템을 제작하는 방법에 치중되는 것은 아쉬운 지점인 것 같다. 디자인 시스템도 일종의 제품이며 제품 안에 있는 유기체에 가까운 개념이다. 디자인 시스템을 제작하는게 중요한게 아니라, 제품의 품질을 유지하면서 빠르게 만들기 위한 여러 가지 수단 중 하나임을 잊으면 안 된다.

디자인 시스템의 생애 주기를 본다면 필연적으로 제품과 비즈니스 도메인들의 구체적인 요구사항을 반영해야 하는 시점이 찾아오거나 더 이상 복잡도를 다룰 수 없는 상황에 놓일 수 있다. 이런 상황에서 디자인 시스템은 개별 Component의 추상화도 중요하지만 더 크고 복잡한 것을 다룰 수 있도록 충분히 그리고 필요한 만큼의 유연함을 추구해야 한다.

여기서 이야기하는 유연함은 제품 팀의 구조와 복잡한 도메인들의 관계를 충분히 반영할 수 있는 구조를 이야기 하며 이 에세이에서 그 해결책으로 디자인 시스템 레이어를 이야기 했다. 제시된 방법은 정답이 아니다. 나는 여전히 시행착오를 겪고 있으며 아직도 의견을 좁히기 위해서 팀원들과 Core와 Extension 레이어의 차이에 대해 토론하기도 한다. 복잡함, 제품, 조직들 사이의 관계를 디자인 시스템이 다룰 수 있는 훨씬 더 좋은 방법은 충분히 있을 수 있으며, 나도 그 방법을 계속해서 찾고 싶다.

flex 소개

빠르게 성장하는 B2B SaaS HR 스타트업으로, 유연한 통합 HR 플랫폼을 제공하여 기업의 인력 관리를 경험을 혁신합니다. 근태 관리, 급여 정산, 전자 계약, 워크플로우, 인사이트 등 다양한 기능과 사용자 중심의 디자인으로 업무 환경에 유연하게 대응하고 수준 높은 HR 경험을 제공합니다.