본문 바로가기메뉴 바로가기


if(kakao)2021 – 카카오 애자일상담소를 통해 얻은 교훈

안녕하세요, 카카오의 애자일 코치 jazz입니다.

if (kakao) 2021 콘퍼런스에서 ‘카카오 애자일 상담소’를 준비하고 진행하면서 얻은 교훈을 나누려고 합니다.

정밀한 분석을 통한 예측 vs 고객을 참여시켜서 함께 하기

제품을 만들다 보면 요구사항이 명확하지 않을 때가 있습니다. 상담소를 준비할 당시에는 상담소에 참여할 대상을 특정할 수 없었기 때문에 고객(상담소 참가자)의 요구사항을 알 수 없었죠, 대신 대상을 정밀하게 예측하기보다 고객과 소통할 수 있는 창구를 만드는 데 더 집중했습니다.
저희가 선택한 창구는 공개된 공간에 질문을 올리는 플랫폼이었습니다. 공개된 공간에 질문을 올리면서 기대했던 효과가 몇 가지 있었어요.

  • 질문을 통해 다른 사람들의 생각과 고민이 전달되기를
  • 참여자들이 좋은 질문에 공감하기를

다행히 좋은 질문에는 많은 관심이 담겼고, 중복되는 질문은 적었어요. 덕분에 상담소에 시작하기 전부터 고객이 원하는 질문을 알 수 있게 되었고 양질의 답변을 준비할 수 있는 시간이 되었습니다. 답변을 준비하면서 미리 소요시간을 측정할 수 있게 되어 상담소의 시간도 더 알차게 쓸 수 있었죠.

물론 잘 동작하지 않은 부분도 있었습니다. 자세한 전후 사정과 함께 추가 질문이 필요하지 않은 질문이 올라오기를 기대했으나, 질문의 질이 들쭉날쭉했었어요. 다음번에도 사전 질문지를 활용하게 된다면 좋은 질문의 예시나 질문에 들어가야 할 요소를 제시해 줘야겠다고 생각했습니다.

제품의 완성도를 높이기 위해 능동적으로 고객을 참여시키는 방법은 이외에도 많습니다. 고객과 함께할 수 있는 경우 프로젝트 전체 과정에서 참여하거나, 반복 주기마다 고객에게 가치를 전달하고 피드백을 받는 방식도 있습니다. 고객이 참여할 수 없는 경우 특정 사용자 집단을 대표할 수 있는 가상인물(페르소나 Persona)을 만들어 이입하면서 요구사항을 현실성 있게 만들기도 합니다. 제품은 결국 고객이 사용하는 것이기 때문에 고객의 요구사항을 얼마나 잘 반영하는가가 좋은 제품을 만드는 데 큰 부분을 차지하게 됩니다.

분업에서 협업으로

상담소를 준비하는 과정은 분업과 협업이 공존했습니다.

분업과 협업은 일을 하는 사람이 여러 명이라는 점은 같지만 유리한 상황이 다릅니다. 타인의 개입 없이 한 영역을 한 사람이 온전히 전담할 수 있으면 분업이 유리합니다. 컨베이어 벨트 위의 공정처럼 분리되어 있는 일들이 그 예죠.(e.g. 디자이너의 일과 개발자의 일, 빵을 만드는 사람과 빵을 포장하는 사람 등)

협업은 하나의 공정을 여러 명이서 수행합니다. 그렇기 때문에 협업은 서로 도와가며 수행할 수밖에 없습니다. 여러 명이지만 한 명처럼, 공통의 목적을 지향합니다.

답변을 준비하는 과정은 분업과 협업을 유기적으로 활용했습니다. 질문을 분류하고, 어떤 질문인지 질문에 대한 상호 이해를 일치시킬 때는 협업으로 공통의 지식을 공유했습니다. 질문에 대한 해석이 달라지게 되면 답변의 방향도 달라질 수 있으니 서로 의견을 교환하며 질문에 대한 부수 정보를 함께 기입했습니다. 질문에 대한 이해를 나눈 이후에는 답변의 양을 늘리기 위해 각자 흩어져서 답변을 채웁니다. 서로 이야기할 답변이 정리되면 다시 모여 답변을 정리합니다. 여러 명이서 상담소를 진행하지만 하나의 목소리를 낼 수 있도록 서로 의견을 조율하고 답변의 빈 공간을 메워나갔어요.

카카오 애자일 상담소를 준비하면서 참가자만큼이나 애자일 코치들도 성장했습니다. 상담소라는 목표를 성공적으로 수행하기 위해 많은 시간을 들여 의견을 나누고, 부족한 점 더 배우고 싶은 점들을 서로에게 배우게 되는 소중한 시간이었습니다.

반복 점진

무대에 오르기 전에 연습을 하지 않고 오르는 사람이 있을까요? 상담소를 준비했던 과정도 비슷했습니다. 다만 처음부터 완벽할 수 없다는 것을 인정하고 점점 더 완벽해지기를 기대했습니다. 마지막 방송이 마무리될 때까지 수많은 리허설을 준비했습니다. 처음에는 여러 명이 쓴 교환일기 같은 느낌이었으나, 점차 중복을 제거하고, 질문 내에서의 화자들의 흐름, 전체 맥락 속에서의 화자들의 흐름을 신경 써가며 반복했습니다. 모든 목표를 한 번에 완수하기보다 각 반복에서 현재 상태를 파악할 수 있는 최소한의 수준을 설정하고 점차 발전해나가는 형태를 취했습니다. 반복을 거듭할수록 더 실제 방송과 가까워지도록 환경을 구성하고, 리허설이 끝나면 이번 리허설에서 부족했던 점과 다음 리허설에서 더 챙겨야 할 것들을 파악합니다. 반복을 하되 기존에 만든 가치를 지키거나 발전시키고, 새로운 가치를 추가해 나가는 게 핵심이었습니다.

변화에 대응하기를 with 회고

리허설을 거쳐 마지막 방송을 마쳤을 때까지 빼먹지 않은 것이 하나 있습니다. 바로 회고입니다. 경험했던 것들을 돌아보며 좋았던 점, 아쉬웠던 점, 개선이 필요했던 점들을 나눕니다. 리허설을 마치고 바로 회고하게 되면 보다 생생한 기억을 가지고 회고에 임할 수 있다. 긍정적인 것들은 다음 리허설(혹은 방송)을 더욱 에너지 넘치게 해 주고, 아쉬웠던 점과 개선이 필요한 점들마저도 그다음 리허설에는 해결이 되거나, 더 나은 방향으로 발전해갑니다. 비슷하지만 같았던 리허설은 없었고 방송 또한 마찬가지였어요. 첫날의 방송 이후 여러 루트로 피드백을 받고 회고 때 함께 이야기하며 더 좋은 방향을 찾았습니다. 둘째 날의 방송도 그렇게 셋째 날 방송의 밑거름이 되었습니다. 마지막 날 나눴던 회고와 이야기들은 약간의 시간이 지난 뒤에 글로 함께 나누고 있습니다.

회고에 익숙하지 않으시다면 ‘Open Work를 향한 작은 노력들 : 조직의 작은 변화 만들기’를 보시면 도움이 될 것 같습니다.

마무리

사실 애자일이라는 단어와 함께 등장하는 가치, 원칙, 실천법들에는 괴상한 것은 없어요. 애자일이라는 단어를 단 한 번도 들어보지 못한 사람이 더 좋은 제품을 만들기 위해, 더 나은 결과를 전달하기 위해 하고 있는 것들도 많이 들어있습니다.

로버트 C. 마틴의 ‘클린 애자일’에 애자일의 정의가 여러 번 나오는데 그중 하나를 소개하려고 합니다.

애자일은 작은 소프트웨어를 만드는 작은 팀을 돕는 원칙과 실천 방법, 규율을 모은 것이다.

이미 여러분이 잘하고 있는 것들 중에서는 애자일의 원칙이나 실천방법이 있을 수 있습니다. 애자일은 결국 제품의 가치가 고객에게 더 잘 전달될 수 있도록 도울 뿐이거든요. (덧, 책 후반부에 다시 나오지만, ‘작은’과 대비되는 ‘큰’규모가 다루는 문제는 사회와 문명의 문제라고 예시를 들어줍니다)

이 글이 힌트가 되어 잘 지키고 있던 가치나 원칙 실천들은 다시 한번 목적을 환기하고, 고민을 가지고 있던 부분은 자세히 들여다볼 수 있는 계기가 되면 좋겠네요.

애자일을 이야기하면서 애자일 소프트웨어 개발 선언선언 이면의 원칙은 곁에 두고 수시로 봅니다. 애자일이 익숙하지 않은 분들은 4가지 가치와 12가지 원칙에 대해 읽어보시기를 권합니다.(꼭)


함께 하면 좋은 글 🔍

jazz.k
jazz.k 결국 서비스를 만드는 것도 사람이니까. 더 좋은 환경에서 일할수록 더 좋은 서비스가 만들어진다고 믿습니다. 더 좋은 환경을 만들고 싶은 애자일코치 재즈입니다.
Top Tag
2021
2021-new-krew
Ad Platform
Ad tech
adaptive-hash-index
adt
adtech
agile
agilecoach
ai
algorithm
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
Analyzer
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
binary
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
canvasapi
Caver
cch
cd
CDR
ceph
certificate
certification
CF
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codegame
codereview
coding
coding test
Collaborative Filtering
communication
competition
Compliance
component
conference
consul
container
Content-based filtering
contents
contest
contribution
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
culture
Data
data-engineering
DB
deep-learning
Dependency
dependency-graph
desktop
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
Electron
Embedding
employeecard
emscripten
eslint
etcd
event
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
GHC
github
globalpollution
go
Grace Hopper Celebration
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
ICPC Sinchon
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
javascript web-assembly
JCMM
JIRA
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-Career-Boost-Program
kakao-commerce
kakao-games
kakaoarena
kakaobrain
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaopage
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
KnowledgeGraph
kubernetes
l3dsr
l4
License
links
Linux
load-balancing
MAB
Machine Learning
machine-learning
map
marathon
meetup
melon
mesos
message
Message Streaming Platform
Messaging
microservice
Microsoft TypeScript
mm
mobil
mobile
mocking
monad
monorepo
ms-office
MSA
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
Nickface
nomad
ocp
olive
onboarding
One-hot encoding
open
open source
opensource
openstack
OpenWork
OSS
page
pair programming
parallel
PBA
performance
planning poker
Platform
polyfill
preview
programming-contest
project
project-structure
pycon
python
quagga
RabbitMQ
react
reactive-programming
reactor
recap
recommendation
recommendation system
recruitment
redis
redis-keys
redis-scan
related-blind
Renderer
rest
retrospective
Rome
RSM
rubics
ruby
rxjs
s2graph
scala
scalaz
seminar
Serve
server
service
service worker
session
sharding
shopping
Shuffle Partition
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
summer internship
support
System
talk
talkchannel
tcp
tech
Techtalk
test
thread
Thread-Debugging
time-wait
tmux
Topic Modeling
typescript
Untact
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
WASM
web
web-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
Women Technologists
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업
All Tag
2021
2021-new-krew
Ad Platform
Ad tech
adaptive-hash-index
adt
adtech
agile
agilecoach
ai
algorithm
Algorithm/ML
Algorithm/Ranking
almighty-data-transmitter
Analyzer
android
angular
anycast
App2App
applicative
Architecture
arena
ast
async
aurora
babel
babel7
Backend
BApp
bgp
big-data
binary
ble
blind-recruitment
block
Block Chain
blockchain
bluetooth
brian
business
Cache
cahtbot
canvasapi
Caver
cch
cd
CDR
ceph
certificate
certification
CF
cgroup
chrome
ci
cite
client
clojure
close-wait
cloud
cloudera-manager
clustered-block
cmux
cnn
code-festival
code-review
codegame
codereview
coding
coding test
Collaborative Filtering
communication
competition
Compliance
component
conference
consul
container
Content-based filtering
contents
contest
contribution
cookie
core-js@3
Corporate Digital Responsibility
couchbase
COVID-19
cpp
culture
Data
data-engineering
DB
deep-learning
Dependency
dependency-graph
desktop
dev
dev-session
dev-track
developer
developer relations
developers
devops
digitalization
digitaltransformation
dns
docker
dr
Electron
Embedding
employeecard
emscripten
eslint
etcd
event
extract-text
Feature List
Featured
Feedback
friendstime
front-end
frontend
functional-programming
funfunday
fzf
garbage-collection
gawibawibo
GC
GHC
github
globalpollution
go
Grace Hopper Celebration
graphdb
graphql
Ground X
growth
ha
hadoop
hate speech
hbase
hbase-manager
hbase-region-inspector
hbase-snashot
hbase-table-stat
hbase-tools
hri
ICPC Sinchon
id
if kakao
ifkakao
infrastructure
innodb
internship
ios
item
Java
javascript
javascript web-assembly
JCMM
JIRA
jsconf
jsconfkorea
json
k8s
kafka
kakao
kakao-Career-Boost-Program
kakao-commerce
kakao-games
kakaoarena
kakaobrain
kakaocommerce
kakaocon
kakaoenterprise
kakaok
kakaokey
kakaokrew
kakaomap
kakaopage
kakaotalk
KAS
KCDC
khaiii
Klaytn
Klip
KnowledgeGraph
kubernetes
l3dsr
l4
License
links
Linux
load-balancing
MAB
Machine Learning
machine-learning
map
marathon
meetup
melon
mesos
message
Message Streaming Platform
Messaging
microservice
Microsoft TypeScript
mm
mobil
mobile
mocking
monad
monorepo
ms-office
MSA
mtre
mysql
mysql-realtime-traffic-emulator
nand-flash
network
new
new-krew
nfc
Nickface
nomad
ocp
olive
onboarding
One-hot encoding
open
open source
opensource
openstack
OpenWork
OSS
page
pair programming
parallel
PBA
performance
planning poker
Platform
polyfill
preview
programming-contest
project
project-structure
pycon
python
quagga
RabbitMQ
react
reactive-programming
reactor
recap
recommendation
recommendation system
recruitment
redis
redis-keys
redis-scan
related-blind
Renderer
rest
retrospective
Rome
RSM
rubics
ruby
rxjs
s2graph
scala
scalaz
seminar
Serve
server
service
service worker
session
sharding
shopping
Shuffle Partition
socket
spark
spark-streaming
SpringBoot
ssd
Statistics/Analysis
Stomp
storage
storm
style-guide
summer internship
support
System
talk
talkchannel
tcp
tech
Techtalk
test
thread
Thread-Debugging
time-wait
tmux
Topic Modeling
typescript
Untact
update
User Story
vim
vim-github-dashboard
vim-plugin
vue
vue.js
WASM
web
web-cache
web-worker
webapp
webgl
WebSocket
webworkers
weekly
Women Technologists
work
workplatform
개인화 추천
길찾기
라이선스
연관 추천
오픈소스
오픈소스검증
의존성분석
일하는방식
협업

위로