Upgrade to Pro — share decks privately, control downloads, hide ads and more …

230909 NE(O)RDINARY DEMODAY

하조은
September 09, 2023

230909 NE(O)RDINARY DEMODAY

1. 안녕하세요. [내가 지키지 못한 조언들]이라는 제목으로 이야기를 전해드릴, 저는 [하조은]이라고 합니다. 반갑습니다.
2. 오늘 준비한 이야기 ‘내가 지키지 못한 조언들’은 [원작이 있는 이야기]입니다.
3. 제 블로그에 올렸었어요.
4. [22년 7월]에 쓰인 글이네요.
5. 이 글을 이해하시기 위해선 약간의 [배경 설명]이 필요합니다.
6. 저는 [뱅크샐러드에서 3년 6개월] 일했구요. 그 중에 마지막 [4개월은 엔지니어링 매니저]로 일을 했어요.
7. [22년 5월부터는 당근]에서 일을 했어요. 그러니까 원작은 제가 당근에 입사하고 두 달정도 지난 시점에 작성된 글인거죠.
8. [뱅크샐러드]에서는 엔지니어링 [매니저]로 일했는데요.
9. 매니저는 여러 일을 하지만 그 중 하나는 피플 매니징이에요. 주로 개발자분들과 1:1 미팅을 하면서 그분들에게 필요한 조언을 해드리는 일을 해요. [문제 해결에 도움이 되는 조언]을 하는거죠.
10. [당근]에서는 다시 [개발자]로 일을 했어요. 개인의 커리어를 위해 개발자로 조금 더 일하는게 도움이 되겠다고 생각했거든요.
11. 그런데 [제가 매니저일 때 했던 조언을 개발자가 되니까 지키지 못하고 있더라]구요.
12. 그래서 [오늘의 이야기는]
13. 일종의 반성문이에요.
14. [제가 했던 조언을].
15. [지키지 못한 (것에 대한 반성을 담은) 이야기]입니다.
16. 지금부터 [매니저인 제가 했던 조언]을.
17. [개발자인 제가 지키지 못한 이야기]를 전해드리려고 해요.
18. 그 전에 [부탁드리고 싶은 점]이 있어요. 제가 모처럼 발표하는 자리에 서다보니 많이 긴장한 상태에요. 그래서 드리는 부탁입니다.
19. [적절한 리액션은 재미있는 발표를 만듭니다] 제 긴장을 풀어주세요.
20. [말하지 않아도 괜찮아요]
21. [공감된다면 고개를 끄덕여주세요]
22. 아마 각자 생각하는 고개 [끄덕이는 짤]이 있으실거에요. 이 자리에 그걸 상상에 넣어주세요. GIF를 쓰기 어려워서 짤을 못넣었어요.
23. 고개를 끄덕이실 때는 너무 심각하게 하지마시고 [입가에 살짝 미소를 머금]어주세요.
24. 어떤 느낌인지 아시죠?
25. 그리고 발표 끝에 Q&A 세션이 있어요. 총 30분이 배정되어 있는데 제 발표가 20분 언저리에 끝날거거든요. 남은 10분은 여러분과 대화하는 시간을 가지려고 해요. 그러니까 발표 중간에라도 질문하고 싶으신 내용이 생각나시면 해당 QR코드로 이동하셔서 질문 남겨주세요. 마지막에 한번 더 보여드리긴 할거에요. 미리 폰 꺼내셔서 QR 촬영하신 다음 질문 페이지 열어두셔도 됩니다!
26. 그럼 시작해볼까요? (끄덕…?)
27. 제가 했던 [첫번째 조언]은요.
28. [PR은 작은 단위로 나눠서 올리세요]라는 조언이었어요.
29. [PR은] Pull Request라는 단어의 약자로 보통 서비스에 반영되어야할 코드 묶음이에요. 메인 코드에 합치기 위해 리뷰를 받는 단위로 사용해요. [일의 단위]라고 볼 수도 있죠.
30. PR을 작은 단위로 나누라는 의미는 일을 작게 나누라는 의미에요. 그러면 [일정 파악이 쉬워지]거든요. 개발자 본인도 얼마나 걸릴지 예상하기 쉬워지고 함께하는 동료들도 대략적으로나마 이 사람이 이 일에 얼마나 시간을 쏟는지 알기 쉬워져요.
31. 뿐만아니라 [리뷰도 편해]지죠. 동료가 봐야하는 코드의 양이 줄어드니까요. 맥락이 뒤섞이지 않고 단순해지니까 리뷰 속도가 빨라져요. 결국엔 서비스 개발도 빨라지는 경향이 있죠. [장애 대응에도 유리]해요. 만약에 코드가 잘못돼서 이전 작업으로 돌려야한다면 장애가 있는 PR에 의해 합쳐진 코드만 쏙 빼버리면 되거든요. 만약에 여러 일을 하나로 뭉쳐서 코드에 넣었다면 빼지 않아도 되는 코드를 빼게 되거나 이전으로 되돌리는데 시간이 더 소요될 수 있어요.
32. 그래서 늘 가능하면 [PR을 쪼개서 올려달라]고 한거죠.
33. 그런데 말입니다…. 제가 막상 다시 개발자로 일을 해보니 그 [조언을 지키지 못하더라]구요.
34. PR을 막 [뭉텅이로 그냥 올려요]. 바쁘니까요. 쪼개고 있을 시간이 없더라구요.
35. 보통은 이런 상황이에요. 크건 작건 [신규 기능을 하나 만드는 상황]이에요. 정말 단순한 기능이었다고 가정해볼게요. 해당 기능을 구현하기 위해 실제 고쳐야할 코드는 100줄 미만이에요.
36. 그렇게 작업을 하다가 중간에 [기존 코드에 있는 문제를 발견]해요.
37. [함수명이 왜 이럴깡]… 하는거죠. 변수명이 이상할 수도 있고 뭔가 사소한 컨벤션이 맞지 않은걸 발견한거에요.
38. [중복도 눈에 띄구요]. 이해가 가지 않은 코드 중복이 눈에 들어와요. 분명 추상화하면 근사하게 떨어질 코드인데 왜 이렇게 짰나 모르겠죠.
39. [누가 짰나] 싶어서 히스토리를 보면 [제가 짠 경우]가 많죠.
40. 그럼 [내가 싼 똥, 내가 치운다]는 마음을 먹어요. 책임감이 강하죠.
41. 원래 기능 추가하던 브랜치에 방금 발견한 이슈들을 함께 얹어요. 그러고 나면 마음이 편-안해지죠. 무슨 짤이 들어가는지 아시겠죠? 그렇게 해서 PR을 열고 리뷰를 요청하죠. 어떻게 될까요.
42. [PR 바디에 설명이 (구구절절) 장황]해지는거에요. [Diff만 3000줄]이 돼서 3000만큼 미안한 상황이 돼요. 왜 이걸 고쳤냐면요… 하고 메인 기능 외에 설명해야할 말이 산더미가 되는거에요. 그제서야 이런 생각을 하죠.
43. [PR을 쪼걸 걸 그랬나…?] 공감 가시나요? (끄덕) 다행이네요.
44. 제 [두번째 조언]도 공감되실지 모르겠어요.
45. [‘완벽’보다 ‘완성’이 중요한 경우도 있어요.] 라는 조언이었어요.
46. 저랑 같이 일하는 [동료가 완벽주의가 강한 편]이었어요.
47. 그래서 늘 [야근을 하고 주말 근무]마저 당연하다고 생각했어요. 완벽한 코드를 짜기 위해 늘 애를 쓰다보니 그렇게 된거죠. 그러면서 능력이 부족하면 시간으로 메꿔야한다고 종종 이야기하곤 했어요.
48. 저는 그게 [지속 불가능한 일상]이라고 생각했죠. 계속 그렇게 일할 순 없잖아요. 일만 할 순 없으니까요.
49. 그래서 저는 [항상 완벽한 코드를 짤 순 없다]고 조언했어요.
50. 몇번을 말해도 비슷한 상황이 지속되니까 나중에는 [포기해야 하는 순간도 있다]고 말했죠. 포기하라고. 완벽 그만… 멈춰… 완성만 하자… 이렇게 조언한거에요. 제가 얼마나 여기에 매달렸는지 블로그에
51. [포기는 배추 셀 때만 하는 말이 아니다]라는 글까지 썼어요. 부제가 [포기는 집중할 것을 정한 사람만이 할 수 있는 멋진 선택]이라고 썼어요. 멋진 표현이죠? 그런데 제가 다시 개발자가 됐어요. 어땠을까요?
52. [내 코드는 포기 못하지!]
53. [완벽주의자 중에 최고는 나야!] 갑자기 돌변하는거에요. 포기하라고 했던 사람이, 완벽보다 완성이라고 했던 사람이.
54. [요구 사항과 무관한 개발자로서 갖는 제 욕심]을 채우기 위해 일하는거에요.
55. [보기 좋은 코드]를 짜려고 하구요. 사실 제 눈에 보기 좋은 코드가 짜고 싶었던거죠. 자기만족을 찾은거에요.
56. [확장성 있는 코드]를 짜면 새로운 기능 붙이기도 좋을테니까 리팩토링을 계속해요. 세상에 없던 패턴이라도 만들어낼 기세로 이런 저런 시도를 계속해요. 가끔 스스로 감탄하기도 하고요. 와 이런 멋진 코드를…? 하면서요.
57. [클린 코드 포기 못해], 하면서 코드에 많은 시간을 할애하는거죠. 완벽을 추구하는거에요. 자기만족이죠.
58. 그러다보니 매일 야근을하죠. 밤 늦게까지 코드를 짜고 퇴근을 해요.
59. 그런데 막상 다음날 보면 더 좋은 방법이 있을 것 같아요.
60. 그 코드를 다음 주에 보면 누가 이렇게 짰나 싶죠.
61. 매주, 같은 실수를 반복해요.
62. 사실 매일, 같은 실수를 반복하는거죠.
63. 제 세번째 조언은요.
64. [매몰되지 말고 큰 그림을 보라]는거였어요.
65. 일을 할 때 큰 그림을 보면 중요한 게 뭔지 알 수 있어요. 나무를 보지 말고 숲을 보라는 말도 있잖아요. 개발자는 늘 코드가 중요하다고 생각하지만 항상 그런건 아니거든요.
66. [좋은 코드보다 중요한 건 서비스가 살아남는거]에요. 저희가 계속 코드를 짤 수 있어야해요. 계속 유저의 선택을 받아야해요. 좋은 서비스가 먼저라는거죠. 좋은 코드가 아니라. 서비스가 계속 발전하려면 좋은 코드에 매몰돼서 본인을 혹사시키고 있으면 안되는거죠. 한 걸음 물러날 줄도 알아야해요.
67. [서비스가 생존하려면 개발자가 건강해야]해요. 지치지 않고 계속 할 수 있는 상태를 만들어야해요.
68. 막 이런 비유까지 써서 조언을 해요. [우리는 마라톤 선수다.] 단거리 선수처럼 너무 에너지를 쓰지 마라. 지금 이 순간이 전부가 아니니까 매몰되지 말아라. [페이스를 지켜라.] 그런데 제가 막상 개발자가 되니까요.
69. [꿈이 우사인 볼트인 것처럼 질주]해요. 오늘이 전부인 것처럼, 좋은 코드를 짜야만 살 수 있는 사람처럼 제 모든 시간을 거기 쏟아부어요.
70. [좋은 코드가 생각나면 자다가도 일어나는거]죠. 한번쯤 경험 있으시죠?
71. 그래서 이런 짤도 도는거죠. 자려고 누웠는데 뇌가 말을 걸어요. 주무시나요…? 제가 버그를 고치는 법을 찾아낸 것 같아요. 그 순간 눈이 번쩍 떠지면서 다시 노트북 앞에 앉아요.
72. [당장 눈 앞에 닥친 이 문제에 완전 매몰]되는거에요. 지금 풀고 있는 문제를 더 나이스한 방법으로 해결할 수만 있다면…! 자다가도 일어나는거에요.
73. [경주마가 된 것처럼 앞만 보고 달려]요.
74. [큰 그림 볼 시간에 코드 한 줄 더 짠다고 생각]해요. 그래서 회의에 들어가서 남들 회의할 때 코드를 짜죠. 특히 전사 미팅처럼 큰 그림을 이야기하는 자리에서 더 그러기 쉬워요. 당장 나랑 무관해보이니까요. 지금 나한테 중요한건 이 코드고 이 버그니까 이걸 해결하느라 큰 그림을 볼 시간이 없다는거에요.
75. 그러다보면 [코드를 사랑하게 돼요.] 무슨 느낌인지 아시나요? 코드를 사랑하는 사람은 이렇게 생각해요.
76. [내 코드에 문제가 있다면]
77. [그건 내가 문제가 있다는 뜻이야]… 이렇게요. 코드가 나고 내가 코드인 것처럼 코드 리뷰에서 안 좋은 이야기가 나오면 그렇게 마음이 아파요. 내 코드를 누가 수정하면 기분이 묘하게 나쁘고요. 공감되시나요?
78. [저는 왜 이렇게 계속 조언을 지키지 못했을까요.] 가만 생각을 해보게 됐어요.
79. 처음 든 생각은 [살짝 게으른 것 같다]였어요. PR을 나누는건 약간 번거로운 일이니까요. 근데 제가 게으른 사람이면 그렇게 열심히 성실하게 일을 했을까요.
80. [왜 자신을 혹사시키면서까지 일을 했을까요?] 왜 나를 이렇게 힘들게 하면서 일할까. 생각을 해봤어요.
81. 나름대로는 [개발이 중독성]이 있어서 그런게 아닐까 생각을 했어요. 여러분은 그런 생각 해본 적 있으신가요? 개발이 중독성이 있다…는 생각이요. 끄덕… 할만한가요? 아니어도 괜찮아요. 저런 양반도 있구나 하고 생각해주세요.
82. 그렇담 [무엇이 저를 개발에 중독되게 만들었을까]요?
83. 첫째는 [메이커 간의 연대감]을 꼽았어요.
84. 여기서 말하는 메이커는 서비스를 만드는 사람들을 의미해요. 개발자, 디자이너, 기획자들이요. 뭐라 꼬집어 지칭할 수 없는 직무도 있을 수 있죠. 여튼 서비스를 함께 만드는 사람들이요.
85. 저는 [서비스를 만드는 일은 상상을 현실로 만드는 일]이라고 생각해요. 그렇잖아요. 존재하지 않았던 무엇인가를 만들어내잖아요. 비슷한게 있을 순 있지만 만들기 전에는 없던 무엇인가를 만들어내니까요.
86. 이렇게 상상을 현실로 만드는 것 자체가 [순수한 즐거움]을 줘요. 무엇을 만드는 즐거움도 즐거움인데 상상을 현실로 만드는… 뭐랄까 마법사가 된 기분이랄까요.
87. 이 기분을, 이 [즐거움을 공유]하면 배가 돼요.
88. 같이 즐거움을 공유한 [사람들과 연대감]이 쌓여요. ‘우리’가 되는거에요.
89. [연대가 쌓이는 와중에도 경쟁]하기도 해요. 상대방의 코드, 기획을, 디자인을 보면서 내심 더 잘하고 싶고 더 완벽해지고 싶은 욕심이 일기도 하는거죠.
90. 제가 개발에 중독된 두번째 이유는 [코드를 짜는 즐거움]을 꼽았어요.
91. 저는 [글쓰는 과정을 즐기는 편]이에요. 특히 퇴고할 때를 좋아하죠. 제가 쓴 글의 논리를 보고 요리조리 조립하면서 글이 더 매끈해지는게 재밌어요.
92. 저는 늘 [글쓰기와 코드 작성이 유사]하다고 말하고 다니는데요.
93. 글쓰기가 재밌는 저는 코드 작성이 재밌을 수 밖에 없겠죠.
94. 엄청 장황했던 글을 다듬 듯 [복잡했던 코드를 단순화]하고
95. [명시적인 변수명]을 지어서
96. 결과적으로 [정돈된 코드]를 보면
97. [늘 짜릿하]더라고요. (그럴 때 있으시죠?)
98. 마지막 이유는 [서비스에 대한 책임감]을 꼽았어요.
99. 사실 [서비스의 디테일은 개발자가 가장 잘 알아]요. 최초의 기획, 정책, 디자인은 더 잘 아는 사람이 있을 수 있죠. 하지만
100. [사소한 성능의 차이나 결함은 개발자가 가장 잘 알아]요. 어쩔 수 없이 그렇게 구현한 것도 있고 개선하려고 열어둔 방치된 브랜치의 존재도 알고 있으니까요.
101. 그래서 심한 경우에는 [코드가 머리 속에 다 있어요]. 그래서 장애가 나면 ‘아 대충 그쯤에서 이 로직 때문에 문제가 됐겠구나’ 싶어요. 클린 코드 만드느라 정리했던 그 로직이 사실 그렇게 하면 안되는거였구나… 하는거죠. 그러다보니
102. [내 실수로 서비스가 망가지면 어쩌나] 하는 불안감 같은걸 늘 갖고 있어요. 이게 일종의 책임감이죠.
103. 아주 [무거운 책임감]을 느껴요. 큰 힘에는… 아시죠?
104. 이러이러한 상황들 때문에 누가 보기엔 [매몰된 것처럼 보일 수 밖에] 없는거죠.
105. 그런데 말입니다… 개발의 중독성을 운운하는게 [다 변명일지도] 몰라요.
106. 왜냐면 [조언을 한 사람, 지키지 못한 사람]이 모두
107. [나], 저거든요. 한 사람이거든요.
108. [이런 상황에 쓰는 말]로 하나가 딱 생각나더라고요.
109. [Double Standard].
110. 그래서 원작의 슬러그도 [/double-standard]였어요.
111. [이중 잣대]라는 의미죠.
112. 글에선 [내로남불]로 번역했어요. 매니저로 일할 때 했던 말을 개발자가 되어선 지키지 못했느니 내로남불 했다고 본거죠.
113. 그걸 [반성하는 게] 원작과 이번 발표의 내용이구요.
114. 다른 관점으론 [역할의 변화를 경험하며 성장한 성장기]로 볼 수도 있을 거 같아요. 커리어를 지속하며 누구나 한번쯤은 겪는 역할의 변화잖아요. 이 변화를 겪는 과정에서 성장했던 거 같아요.
115. 저는 이 경험을 통해 [한 가지 사실을 깨달]았어요.
116. [내가 알고 있는 것만 잘 지켜도 대단한 사람]이라는 거죠. 언행 일치라고 해야할까요.
117. 이 [깨달음 뒤에 두 가지 변화]가 있었어요.
118. 첫째, 내가 했던 조언을 다시 지키려고 노력하면서 [보다 균형잡힌 업무를 할 수 있게 됐어요]. 상상을 현실로 만드는 이 즐거운 일을 오래할 수 있게 된거죠.
119. 둘째, 개발 외의 일에도 [셀프 매니징 할 수 있게 된 거] 같아요. 요즘도 제가 읽고 보고 들은 조언을 스스로 지키면서 한 발짝 씩 나아가고 있어요.
120. [물론 계속 노력해야겠죠]. 지금 잠시 잘하고 있는 것 같아도 방심하면 다시 내로남불하게 될지도 몰라요. 앞으론 방심하지 않고 제가 지킬 수 있는 조언만 하면서 살아보고 싶어요. 아니, 제가 한 말은 꼭 지키는 사람이 되고 싶달까요. 오늘 들려드린 이야기가 여러분들에게도 비슷한 마음 가짐을 드리는 기회가 됐었길 바랍니다. 혹시나 제 조언이 도움이 되셨다면, 다음 주에 돌아가셔서 PR도 더 쪼개보시고요. 완벽해지려고 하기보다 완성을, 매몰되기 보단 큰 그림을 보려고 해보셔도 좋을 것 같아요. 약속한 시간이 돼서 이야기를 맺어봐야겠네요.
121. [오늘 제가 들려드린 이야기]는
122. [반성문이자 성장기]였어요.
123. 제가 얼마 전에 [8년 차에 접어들었어요. 여전히 계속 성장하는 중]이에요.
124. 앞으로도 [제 이야기를 듣고 싶으시다면], 제가 방심하진 않았나 보고 싶으시다면
125. [여기를 팔로우] 해주시면 됩니다. 제가 명함을 챙겨오지 못해서 이 시간 이후로 저랑 연락해보도 싶으신 분들은 이 링크로 연락주시면 좋을 거 같아요.
126. [감사합니다!]
127. [Q&A]

하조은

September 09, 2023
Tweet

More Decks by 하조은

Other Decks in Programming

Transcript

  1. ա

  2. 2"