WorkingFirst

주니어 개발자들을 위한 패턴 언어 - 우아함보다 먼저 작동하는 실체를 만들어 진실을 드러내는 법

The Story 1: The Perfectionist vs. The Snowballer (Programming)

두 명의 개발자, 민수와 하나가 '새로운 알림 엔진'을 만들고 있다.

민수의 방식 (The Perfectionist): 민수는 처음부터 확장 가능하고 우아한 설계를 꿈꾼다. 그는 인터페이스를 설계하고, 추상 클래스를 만들고, 디자인 패턴을 적용하느라 사흘을 보냈다. 하지만 사흘째 되는 날에도 알림은 단 한 건도 발송되지 않았다. 설계도만 거창할 뿐, 실제로 무엇이 문제일지는 여전히 미지수였다.

하나의 방식 (The Snowballer): 하나는 다르게 시작했다. 일단 print("알림 발송!")이라는 한 줄의 코드로 시작했다. 그 다음, 하드코딩된 이메일 주소로 진짜 메일이 가는지 확인했다. "일단 돌아가네. 이제 여기서부터 하나씩 붙여보자." 하나는 한 시간 만에 '작동하는 실체'를 만들었다. 그 실체는 하나에게 어디가 병목인지, 어떤 예외 처리가 진짜 필요한지 알려주었다. 작은 눈덩이(Snowball)는 구를수록 커져서 저녁 무렵엔 견고한 엔진이 되었다.

The Story 2: The Signature Dish (Ordinary Life)

민수와 하나는 친구들을 초대해 저녁 식사를 대접하기로 했다. 메뉴는 한 번도 안 해본 복잡한 '프랑스 요리'다.

민수의 요리 (The Ideal Recipe): 민수는 요리책을 수십 번 읽으며 완벽한 타이밍과 도구를 준비했다. 하지만 정작 요리를 시작하자 생각지 못한 변수가 발생했다. 화력이 책과 달랐고, 재료의 수분기도 달랐다. 민수는 당황했고 저녁 식사는 엉망이 되었다.

하나의 요리 (The Prototype Meal): 하나는 전날 밤, 아주 적은 양의 재료로 핵심 소스만 미리 만들어보았다. "아, 이 소스는 생각보다 빨리 타는구나. 설탕을 좀 줄여야겠어." 하나는 아주 간단한 버전으로 '맛'을 먼저 확인했다. 이 작은 실험 덕분에 하나는 실제 요리에서 불 조절을 어떻게 해야 할지 정확히 알게 되었고, 친구들에게 완벽한 식사를 대접할 수 있었다. 기예는 이론이 아니라 '작동하는 경험'에서 시작됨을 하나는 알고 있었다.

Context

새로운 기능을 구현하거나 복잡한 문제를 해결해야 한다. 머릿속에는 거창한 설계가 떠오르지만, 어디서부터 손을 대야 할지 막막한 상황이다.

일상적인 상황:

Problem

실행 없는 완벽한 설계는 가설일 뿐이며, 실제 구현 단계에서 나타나는 수많은 변수를 예측하지 못한다.

Solution

우아하거나 효율적으로 만들기 전에, 가장 단순한 형태로 "먼저 작동하게" 만들어라.

작동하는 해결책은 문제의 진정한 본질을 드러내고, 당신이 가야 할 다음 길을 안내한다.

Principle 1: Make it Work, Then Make it Right

Kent Beck의 조언을 기억하라.

  1. 작동하게 만들어라 (Make it Work).
  2. 올바르게 만들어라 (Make it Right - 리팩토링).
  3. 빠르게 만들어라 (Make it Fast - 최적화).

대부분의 주니어는 1단계를 건너뛰고 2단계나 3단계부터 하려다 길을 잃는다.

Principle 2: Use Familiar Tools First (익숙한 도구로 뚫기)

새로운 기술 스택이나 과제 조건에 얽매여 전진을 멈추지 마라.

Principle 3: Snowballing from a Small Core

작고 초라한 시작을 부끄러워하지 마라.

Real Examples

Example 1: Sketching first

화가들은 눈동자의 디테일을 그리기 전에 전체 구도를 연필로 슥쓱 그린다. 엉성한 선들이 모여 전체적인 균형을 잡은 뒤에야 세밀한 묘사에 들어간다.

Example 2: Tracer Bullets

어두운 밤, 목표를 맞추기 위해 계산기만 두드리는 대신 '예광탄'을 쏜다. 탄환이 날아가는 궤적을 눈으로 확인하면, 조준경을 어떻게 수정해야 할지 즉시 알 수 있다.

Common Pitfalls

"Dirty Code Guilt" (더러운 코드에 대한 죄책감)

일단 작동하게 만들 때 나오는 지저분한 코드에 괴로워하는 것.

Stopping at "Working" (작동만 한다고 멈추는 것)

작동하게 만든 뒤 '올바르게' 만드는 과정을 생략하는 것.

Connection to Other Patterns

Signs of Success

The Ultimate Insight

이론은 당신을 생각하게 만들지만, 실행은 당신을 눈뜨게 만든다.

완벽한 설계도는 책상 위에만 존재합니다. 진짜 진실은 실행되는 런타임 속에 숨어 있습니다. 거창한 건축을 꿈꾸기 전에 먼저 작은 말뚝 하나를 박으십시오. 그 말뚝이 당신의 설계를 현실로 이끌어줄 것입니다.


CategoryPatternLanguage CategoryProgramming CategoryAgile CategoryMindset

WorkingFirst (last edited 2025-12-30 10:00:30 by 정수)