ParticipatoryDesign
주니어 개발자들을 위한 패턴 언어 - 사용자와 함께 짓고 피드백하며 살아있는 공간을 만드는 법
Contents
The Story 1: The Ivory Tower vs. The Shared Blueprint (Programming)
두 명의 개발자, 민수와 하나가 '병원 예약 시스템'을 설계하고 있다.
민수의 설계 (The Ivory Tower): 민수는 전문가다. 그는 혼자 방에 앉아 최신 아키텍처와 세련된 UI 컴포넌트를 사용하여 설계도를 그렸다. "의사들은 바쁘니까 제가 완벽하게 만들어 가면 좋아하겠죠?" 하지만 한 달 뒤 결과물을 본 의사들은 당황했다. "우리는 환자 차트를 보면서 동시에 예약을 잡아야 하는데, 화면을 계속 넘나들어야 하네요. 이건 쓸 수가 없어요." 민수는 다시 방으로 돌아가 설계를 갈아엎어야 했다.
하나의 설계 (The Shared Blueprint): 하나는 병원으로 갔다. 그녀는 의사, 간호사들과 나란히 앉아 그들이 사용하는 패턴 언어를 경청했다. "하나님, 우리는 '진료 중 예약'이라는 패턴이 중요해요." 하나는 그 자리에서 종이에 엉성한 그림을 그려가며 물었다. "그럼 차트 옆에 작은 '예약 퀵 메뉴'를 두면 어떨까요?" 하나는 설계를 미리 완성하지 않았다. 사용자들과 함께 말뚝을 박고 실을 묶으며 현장의 감각을 설계에 녹여냈다. 한 달 뒤, 의사들은 자신들이 함께 지은 시스템을 보며 설레어했다.
The Story 2: The Family Dinner (Ordinary Life)
민수와 하나는 오늘 저녁 가족 모임을 위한 식사를 준비하기로 했다.
민수의 요리 (The Surprise Chef): 민수는 가족들을 깜짝 놀라게 해주고 싶어 혼자 메뉴를 정하고 장을 봐왔다. 그는 주방 문을 걸어 잠그고 3시간 동안 고군분투하여 화려한 '해산물 요리'를 완성했다. "짜잔! 맛있겠죠?" 하지만 식탁에 앉은 가족들은 난감한 표정을 지었다. 알고 보니 조카는 해산물 알레르기가 있었고, 어머니는 며칠째 치과 치료 중이라 딱딱한 음식을 드실 수 없었다. 민수의 정성은 '누구도 거주할 수 없는 화려한 성'이 되어버렸다.
하나의 요리 (The Participatory Meal): 하나는 식재료를 사기 전 가족들을 거실로 모았다. "오늘 저녁에 뭐가 먹고 싶으세요? 못 드시는 건 없나요?" 하나는 가족들의 이야기에 귀를 기울이며 즉석에서 메뉴를 조정했다. "어머니가 이가 편치 않으시니 부드러운 단호박 죽을 곁들일게요." 하나는 요리하는 중간에도 가족들에게 간을 보게 하며 취향을 맞추었다. 함께 만든 저녁 식사는 모두에게 가장 따뜻하고 맛있는 '살아있는 만찬'이 되었다. 진정한 설계는 그곳에 거주할 사람들과의 대화에서 시작됨을 하나는 다시 한번 깨달았다.
Context
TwoWorlds를 통해 문제 공간을 이해하려 노력하고 있고, LanguageBuilding으로 도메인 언어를 구축하고 있다. 이제 구체적인 설계 결정을 내려야 하는 상황이다.
일상적인 상황:
- 요구사항 문서만 보고 구현을 시작한다.
- "사용자는 아마 이렇게 쓸 거야"라고 추측하며 코딩한다.
- 개발자끼리는 완벽하다고 생각했는데, 실제 사용자는 어렵다고 한다.
- 기술적인 결정이 사용자 경험(UX)에 어떤 영향을 주는지 고민하지 않는다.
당신은 지금 살 사람의 의견을 묻지 않고 집을 짓고 있다.
Problem
사용자가 배제된 전문적인 설계는 기술적으로는 훌륭할지 모르나, 정작 그곳에 거주할 사람의 삶을 파괴한다.
죽은 공간: 사용자의 실제 사건(Events)과 맞지 않는 시스템은 스트레스를 유발하고 결국 외면받습니다.
재작업의 늪: 실제 요구를 나중에야 발견하게 되어 전체 구조를 다시 짜야 하는 상황이 반복됩니다.
공감의 부재: 개발자가 도구의 노예가 되어, 기술적 만족감에만 매몰되고 사용자의 고통을 외면하게 됩니다.
Solution
설계와 시공의 모든 과정에 실제 거주자(사용자/동료)를 참여시키고, 현장에서 그들의 감각과 공명하며 결정하라.
Christopher Alexander는 "사람들이 자신이 살 집을 직접 지어야 한다"고 주장했습니다. 소프트웨어에서도 개발자는 도구와 언어를 제공하는 조력자일 뿐, 진짜 설계자는 사용자여야 합니다.
Principle 1: Design with, not for (위해서가 아닌 함께 설계하기)
사용자를 '조사 대상'으로 보지 말고 '공동 설계자'로 대우하십시오.
설계를 완성해서 가져가지 마십시오. 엉성한 그림(RoughWholeFirst)을 보여주며 그들의 손으로 직접 고치게 하십시오.
- 그들이 사용하는 언어가 바로 시스템의 패턴 언어가 되게 하십시오.
Principle 2: On-site Imagination (현장에서 상상하기)
모니터 앞에서만 생각하지 말고, 실제 소프트웨어가 사용되는 대지(현장)로 나가십시오.
- 사용자가 일하는 모습을 관찰하며 그들의 리듬을 느끼십시오.
- 현장에서 즉석으로 "이런 버튼이 여기 있으면 어떨까요?"라고 물어보는 것이 백 번의 회의보다 낫습니다.
Principle 3: Shared Language (공유된 언어)
기술적 전문 용어로 사용자를 압도하지 마십시오.
LanguageBuilding을 통해 만든 도메인 언어를 사용자도 함께 쓰게 하십시오.
- 공통의 언어가 구축될 때 비로소 깊이 있는 논의가 가능해집니다.
Principle 4: Construction as Dialogue (대화로서의 시공)
구현 과정도 점진적인 대화여야 합니다.
매일 조금씩 성장하는 모습을 보여주고(OrganicGrowth), 그들이 직접 만져보며 "살아있는지 죽어있는지" 느끼게 하십시오.
Scope Negotiation (범위 협상): 작업 종료 30~40분 전, 예상대로 완성하기 힘들 것 같다면 즉시 사용자(혹은 면접관/동료)에게 상황을 알리고 "어디에 집중하고 무엇을 버릴지" 논의하십시오. 자신의 역량과 시간을 정확히 추정하고 대안을 제시하는 것이 진정한 전문가의 태도입니다.
Real Examples
Example 1: Pair Design with Users
기획 단계에서 디자이너, 개발자, 도메인 전문가가 한 화면을 보며 즉석에서 아키텍처를 결정한다. "이 데이터가 여기서 보이면 어떨까요?"라는 질문에 개발자는 즉시 기술적 타당성을, 전문가는 업무적 유용성을 답한다.
Example 2: The Living Prototype
작동하는 프로토타입을 들고 현장에 나간다. 사용자가 실제로 버튼을 누르는 표정을 관찰한다. 머뭇거리는 찰나를 포착하여 그 자리에서 로직이나 UI를 수정한다. 이것이 진정한 PresentMoment의 실천이다.
Common Pitfalls
"Users don't know what they want" (사용자는 자기가 뭘 원하는지 몰라요)
그들은 기술적으로 '어떻게' 구현할지는 모르지만, 그들의 삶이 '어떻게' 편해져야 하는지는 누구보다 잘 압니다. 그들의 본능적 감각을 신뢰하십시오.
Fear of Interruption (방해받는 것에 대한 두려움)
사용자가 자꾸 말을 바꾸면 코드가 지저분해질까 봐 걱정하는 것. BabySteps와 CleanIsolation이 있다면 변화는 두렵지 않습니다. 오히려 잘못된 것을 만드는 것이 가장 큰 낭비입니다.
Connection to Other Patterns
TwoWorlds - 문제 공간의 주인인 사용자를 해결 공간의 문턱까지 초대하는 것입니다. 가교
LanguageBuilding - 공동체 전체가 공유하는 살아있는 언어를 만드는 과정입니다. 도구
OrganicGrowth - 사용자의 피드백을 영양분 삼아 시스템이 자라납니다. 동력
RoughWholeFirst - 사용자가 개입할 여백(엉성함)을 남겨두는 것이 참여의 핵심입니다. 태도
Signs of Success
- 사용자가 시스템을 보고 "내가 원했던 게 바로 이거예요!"라고 설레어한다.
- 개발자가 기술적 결정의 비즈니스적 가치를 명확히 이해하고 있다.
- 배포 후 "이게 아니었는데"라는 피드백이 획기적으로 줄어든다.
- 시스템이 도메인의 실제 사건들과 조화롭게 맞물려 돌아간다.
The Ultimate Insight
가장 아름다운 집은 그곳에 살 사람들이 직접 말뚝을 박고 함께 벽돌을 쌓아 올린 집이다.
개발자는 지식을 뽐내는 권력자가 아니라, 사람들의 소망을 현실로 구현해주는 조각가여야 합니다. 사용자의 목소리에 귀를 기울이고 그들을 설계의 중심에 세우십시오. 그들이 사랑하는 시스템이야말로 진정으로 살아있는 시스템입니다.
CategoryPatternLanguage CategoryCollaboration CategoryDesign CategoryAgile
