Showing Posts From

품질전략

QA 자동화 투자, 언제까지 기다려야 하나

QA 자동화 투자, 언제까지 기다려야 하나

QA 자동화 투자, 언제까지 기다려야 하나 또 반려됐다 예산 요청서를 냈다. 세 번째다. 결과는 동일. "내년에 검토하겠습니다." 작년에도 들었던 말이다. 재작년에도 들었다. QA 자동화 도구 투자 건이다. 현재 수동 테스트 비중이 70%다. 회귀 테스트만 해도 팀원 3명이 2주를 쓴다. 계산해봤다. 한 달에 수동 테스트 공수가 팀 전체 리소스의 40%다. 이걸 자동화하면 20%로 줄어든다. 남는 시간에 탐색적 테스트를 더 할 수 있다.CFO한테 설명했다. "ROI가 명확하지 않네요." 명확하지 않다니. 수치로 다 보여줬는데. 인건비 절감액까지 계산했다. 도구 도입 비용 대비 2년 안에 회수된다. 장애 감소율까지 예측했다. 그래도 안 된다고 한다. "가시적 효과가 불분명"하단다. 가시적 효과. 지금 팀원들이 수동으로 클릭하는 게 가시적이란 건가. 악순환의 시작 자동화가 없으니 수동 테스트만 한다. 수동 테스트만 하니 시간이 부족하다. 시간이 부족하니 품질이 떨어진다. 품질이 떨어지니 장애가 난다. 장애가 나니 QA 팀이 욕먹는다. 욕먹으니 "QA 인력 충원이 필요하다"고 말한다. 그럼 답이 온다. "인력보다 자동화로 해결하세요." 자동화 예산 달라고 하면? "ROI를 보여주세요." 이게 뭐 하는 짓인가.지난주에 장애가 났다. 결제 프로세스 테스트를 놓쳤다. 수동으로 300개 케이스를 확인하다 빠뜨렸다. 회의가 소집됐다. "왜 놓쳤습니까?" 설명했다. "회귀 테스트 케이스가 너무 많습니다. 자동화가 필요합니다." 대답이 왔다. "그건 변명이고, 프로세스 개선으로 해결하세요." 프로세스로 해결할 수 있으면 진작 했다. 사람이 300개를 2주 안에 다 보는 게 물리적으로 불가능하다. 집에 와서 남편한테 말했다. "자동화하면 해결될 걸 왜 안 해주는 건지 모르겠어." 남편이 말했다. "너네 회사 개발팀도 CI/CD 투자 2년 걸렸어. 다 그래." 그게 위로가 되나. ROI의 함정 경영진은 ROI를 원한다. 명확한 숫자를 원한다. 그래서 계산했다. 자동화 도구 라이선스 비용: 연 3000만원 구축 비용: 초기 5000만원 유지보수 인력: 연 2000만원 총 투자액: 1년차 1억원, 2년차부터 연 5000만원 효과는? 수동 테스트 시간 50% 감소. 팀원 1인당 월 40시간 절감. 8명이니까 월 320시간. 연봉 평균 6000만원으로 계산하면 시간당 인건비 약 3만원. 월 960만원 절감, 연 1억 1500만원. 2년이면 본전이다. 3년차부터는 순이익이다.이 계산을 보여줬다. CFO가 물었다. "장애 감소는 어떻게 측정하죠?" 말했다. "자동화하면 회귀 테스트 커버리지가 올라갑니다. 현재 60%에서 90%로." "그게 장애 감소로 직결되나요?" 직결된다. 당연히 직결된다. 하지만 증명할 데이터가 없다. 아직 자동화를 안 해봤으니까. CFO가 말했다. "다른 회사 사례를 가져오세요." 가져왔다. 카카오, 네이버, 쿠팡 사례. 전부 자동화 투자 후 품질 지표 개선됐다. "우리 회사랑은 다르죠." 뭐가 다른데. 결국 ROI는 함정이다. 증명할 수 없는 걸 증명하라고 한다. 자동화를 해봐야 ROI를 알 수 있는데 ROI를 보여줘야 자동화를 할 수 있다. 닭이 먼저냐 달걀이 먼저냐. 팀원들은 지쳐간다 팀원들은 안다. 자동화하면 일이 편해진다는 걸. 신입 팀원이 물었다. "팀장님, 셀레니움 공부하고 있는데요. 회사에서 쓸 수 있나요?" 말했다. "개인 프로젝트로는 가능해. 회사 공식 도구는 아직이야." "언제 도입되나요?" "모르겠어. 예산이 안 나와." 신입의 눈빛이 꺼졌다. 이게 몇 번째인지 모르겠다. 의욕 있는 팀원들이 자동화를 배워온다. 그런데 회사에선 못 쓴다. 수동으로 클릭하고 엑셀에 결과 적는다. 이게 2024년에 QA 팀이 하는 일이다. 중견 팀원은 이직 준비 중이다. "팀장님, 죄송한데요. 다른 회사에서 제안이 왔어요." "자동화 환경이 잘 되어 있대요." 말렸다. 그런데 말릴 명분이 없었다. 우리 팀에서 배울 게 없다. 수동 테스트 고수가 되는 것 말고는. 이직률이 올라간다. 팀원이 나가면 또 뽑아야 한다. 교육 기간 3개월. 그동안 남은 팀원들이 업무를 커버한다. 자동화 투자 안 해서 생기는 비용이다. 보이지 않는 비용. CFO는 이걸 ROI에 안 넣는다. 우리끼리 시작했다 기다릴 수 없었다. 팀원들이랑 회의했다. "우리끼리 해보자." "오픈소스 도구로." 셀레니움으로 시작했다. 팀원 2명이 주도했다. 업무 시간 20%를 자동화 스크립트 작성에 썼다. 3개월 만에 주요 시나리오 50개를 자동화했다. 회귀 테스트 시간이 2주에서 3일로 줄었다. 수치를 정리해서 다시 보고했다. "실제로 이렇게 효과가 있습니다." 반응이 왔다. "좋네요. 그럼 계속 오픈소스로 하시죠." 허탈했다. 오픈소스로는 한계가 있다. UI 테스트만 가능하다. API, 성능, 보안 테스트는 전문 도구가 필요하다. 리포팅 기능도 없다. 스크립트 유지보수도 손이 많이 간다. 팀원 2명이 자동화 스크립트 관리하느라 다른 일을 못 한다. 자동화를 해도 결국 인력이 부족하다. 제대로 된 도구가 없으니까. 다시 보고했다. "전문 도구가 필요합니다." "성과 더 보여주시고요." 성과를 더 보여주려면 더 많은 스크립트가 필요하다. 더 많은 스크립트를 만들려면 도구가 필요하다. 또 함정이다. 다른 팀은 된다 개발팀은 CI/CD 구축했다. 예산이 나왔다. 깃랩 프리미엄, 쿠버네티스 클러스터, 모니터링 도구. 물었다. "개발팀은 어떻게 예산 받았어요?" 개발팀 리드가 말했다. "배포 자동화 안 하면 서비스 못 돌린다고 했죠." 그렇게 말할 수 있구나. 우리는? 테스트 자동화 안 해도 서비스는 돌아간다. 품질이 떨어질 뿐이다. 품질은 눈에 안 보인다. 장애 나기 전까지는. 인프라팀도 예산 받았다. 모니터링 도구 APM 솔루션. 연 5000만원짜리. "장애 감지 시간 단축"이 명분이었다. 우리는 "장애 예방"인데 안 된다. 감지는 되고 예방은 안 되는 게 이상하다. 마케팅팀도 예산 받았다. 광고 자동화 플랫폼. 연 8000만원. "매출 증대 효과"가 명분이었다. 우리는 매출을 늘리는 게 아니라 지키는 팀이다. 지키는 건 티가 안 난다. QA는 항상 그렇다. 잘하면 당연하고 못하면 욕먹는다. 예산도 마찬가지다. 개발, 인프라, 마케팅은 투자다. QA는 비용이다. 언제까지 기다려야 하나 다음 분기 예산 회의가 다가온다. 또 요청할 것이다. 네 번째다. 이번에는 뭐라고 하려나. "조금만 더 성과 보여주세요"일까. "내년에 본격 검토하겠습니다"일까. 팀원들한테 뭐라고 말해야 하나. "조금만 더 기다려"? 벌써 3년을 기다렸다. 업계 동향을 본다. 다른 회사들은 AI 기반 테스트 자동화를 한다. 우리는 아직 셀레니움도 제대로 못 쓴다. 격차가 벌어진다. 우리 팀원들의 경쟁력도 떨어진다. 이직한 팀원한테 연락이 왔다. "팀장님, 여기 진짜 좋아요. 자동화 환경 완벽해요." "팀장님도 이직 고려해보세요." 고민된다. QA 리드로 13년 일했다. 이 회사에서 팀을 키웠다. 하지만 투자받지 못하는 팀을 이끄는 게 의미가 있나. 집에 와서 남편한테 말했다. "나도 이직할까봐." 남편이 말했다. "투자 안 하는 회사는 다 그래. 떠나는 게 맞을 수도." 근데 어디를 가도 비슷하지 않을까. QA는 어디서나 우선순위가 낮다. 아니다. 지금보다 나은 곳은 있다. 최소한 자동화 환경은 있는 곳. 이력서를 꺼냈다. 수정할 게 많다.예산은 언제 나올까. 팀원들은 몇 명이나 더 나갈까.

Jira 스프린트, 매일 갱신되는 현황판의 주인공들

Jira 스프린트, 매일 갱신되는 현황판의 주인공들

Jira 스프린트, 매일 갱신되는 현황판의 주인공들 아침 9시 10분 출근하자마자 Jira를 켠다. 스프린트 대시보드. 어제 저녁 6시 상태랑 다른 게 뭔지 체크한다. 민수 티켓 3개. 어제랑 똑같다. In Progress 상태 그대로. 2일째다. 지원이는 티켓 2개를 Done으로 옮겼다. 새벽 1시에. 야근했네. 현주는 Blocked 상태 하나. 개발팀 답변 기다린다는 코멘트. 어제 오후 3시부터. 커피 마신다. 첫 잔. 스프린트 번다운 차트를 본다. 이상적인 선 위에 있다. 겉보기엔. 실제론 3명이 몰아서 끝낸 거다.팀원별 진행률 민수가 제일 걱정이다. 시니어인데 속도가 안 나온다. 작년부터 이렇다. 지난주 1on1 때 물었다. "요즘 힘든 거 있어?" 별일 없다고 했다. 티켓 난이도가 높아서 그렇다고. 난이도. 핑계일 수도 있고 진짜일 수도 있다. 확인이 어렵다. 현주는 매번 Blocked다. 개발팀 답변 기다리거나. 기획 확인 필요하거나. 스스로 막힌 건지 의존성 때문인지. 구분이 안 간다. 지원이는 속도가 빠르다. 너무 빠르다. 걱정된다. 테스트 커버리지가 충분한지. 새벽까지 하는 것도 문제다. 번아웃 온다. 성훈이는 늘 80%. 티켓 5개 잡으면 4개 끝낸다. 1개는 다음 스프린트로. 나쁘지 않다. 근데 왜 항상 1개가 남지? Jira는 정직하다. 숫자는 거짓말 안 한다. 근데 숫자 뒤 맥락은 안 보인다. 슬랙 DM 시작 민수한테 DM 보낸다. "민수님, API 테스트 진행 상황 어때요? 막힌 부분 있으면 얘기해주세요." 10분 뒤 답장. "지금 환경 세팅 중입니다. 오늘 안에 진행 예정입니다." 환경 세팅. 이틀째 하는 건가. 아니면 이제 시작하는 건가. 더 물어보고 싶다. 근데 자존심 상할 수 있다. 시니어니까. 현주한테도 DM. "현주님, 개발팀 답변 안 왔으면 제가 푸시할게요. 어느 분한테 물어본 거예요?" 답장 바로 온다. "재현님한테요. 어제 저녁에 한 번 더 멘션 드렸는데 아직이에요." 재현. OOO 기능 담당 개발자. 바쁜 거 안다. 근데 QA 막아두면 스프린트 전체가 막힌다. 재현한테 DM 보낸다. 정중하게. 하지만 압박하듯. "재현님, 현주님 질문 확인 가능하신가요? 스프린트 일정상 오늘까지 필요해서요." 답장은 1시간 뒤에 온다.오후 2시, 일일 스탠드업 데일리 스크럼. 15분 예정. 늘 30분 간다. 민수 차례. "어제는 환경 세팅했고요, 오늘 테스트 시작합니다." 이틀째 같은 말. 내가 끼어든다. "민수님, 혹시 환경 세팅에서 특별히 막힌 부분 있었어요?" "아뇨, 거의 끝났어요." 거의. 이 단어가 제일 위험하다. 현주 차례. "개발팀 답변 기다리고 있어요. 답변 오면 바로 진행할 수 있습니다." 지원이 차례. "어제 티켓 2개 완료했어요. 오늘 3개 더 할 예정입니다." 회의 끝나고 지원이한테 따로. "지원님, 어제 새벽에 작업한 거 맞죠? 야근 안 하셔도 돼요." "괜찮아요. 집중이 잘 돼서요." 집중. 그래. 근데 3개월 뒤에도 그럴 수 있을까. 오후 4시, 현황판 다시 보기 Jira 새로고침. 민수 티켓은 여전히 In Progress다. 현주 티켓은 Blocked에서 In Progress로 옮겨졌다. 재현이 답변했나 보다. 지원이 티켓 하나가 Done으로. 2시간 만에. 성훈이 티켓 하나가 Code Review 상태로. 정상 진행. 번다운 차트는 여전히 괜찮아 보인다. 근데 속은 다르다. 민수가 2일째 제자리면. 내일부터 리스크다. 스프린트 5일 남았다. 티켓 3개. 하루 1개씩 해야 한다. 가능할까. 현주는 이제 풀렸으니 괜찮다. 근데 또 막힐 수 있다. 의존성이 많은 티켓이다. 지원이는 속도 조절이 필요하다. 근데 어떻게 말하지. "좀 천천히 해요"? 이상하다. 팀장의 일. 진행률 보고 걱정하기. 개입할 타이밍 찾기. 팀원 자존심 안 건드리면서. 저녁 6시, 민수와 1on1 "민수님, 잠깐 통화 가능하세요?" 구글 밋 방 파서 보낸다. 민수 들어온다. 표정이 무겁다. 알고 있구나. "환경 세팅 관련해서요. 혹시 제가 도와드릴 부분 있을까요?" "아뇨, 거의 끝났어요." 또 거의. "민수님, 솔직히 얘기해주세요. 티켓 난이도가 예상보다 높은 건가요? 아니면 다른 이유가 있나요?" 잠시 침묵. "사실... 이번 티켓은 제가 처음 다뤄보는 영역이에요. API 인증 부분이랑 토큰 관련해서. 좀 헤매고 있습니다." 그렇구나. "그럼 성훈님이나 지원님한테 물어보는 건 어때요? 지원님이 지난 스프린트 때 비슷한 거 했었거든요." "...그러면 제가 못하는 것처럼 보일까봐요." 13년차 시니어의 고민. 5년차한테 물어보기 부끄러운. "민수님, 모르는 거 물어보는 게 더 프로예요. 혼자 이틀 헤매는 것보다. 내일 지원님이랑 페어 테스팅 어때요? 제가 티켓에 코멘트 달아둘게요." "...네, 그럴게요." 통화 끝. Jira 티켓에 코멘트 단다. "@지원 @민수 내일 오전 페어 테스팅 제안합니다. API 인증 테스트 노하우 공유 부탁드립니다." 공식화시킨다. 민수 자존심도 지켜주고. 지원이한테는 시니어 도와준다는 명분.저녁 8시, 스프린트 리포트 작성 퇴근 전 일일 리포트 쓴다. 팀장 의무. "금일 진행 상황:완료: 3개 진행 중: 8개 블로킹: 0개 (해결 완료) 리스크: 민수 티켓 지연, 내일 페어 테스팅으로 해결 예정"리스크 항목 쓸 때마다 무겁다. 민수 이름 적는 게. 근데 안 쓸 수 없다. 경영진이 본다. 번다운 차트 캡처해서 첨부. 숫자는 괜찮다. 숫자만 보면. CTO한테 슬랙으로 보낸다. 답장 바로 온다. "수고하세요. 스프린트 완료율 목표 90% 유지 부탁드립니다." 90%. 지난 3개 스프린트 평균이 87%다. 이번엔 민수 리스크까지. 90% 가능할까. 밤 11시, 침대에서 폰으로 Jira 앱 연다. 습관이다. 지원이 티켓 하나가 Done으로 옮겨졌다. 10시 30분에. 또 야근했다. 슬랙 DM 보낸다. "지원님, 야근 감사하지만 무리하지 마세요. 스프린트는 마라톤이에요." 기업용 멘트 같다. 근데 진심이다. 민수 티켓은 여전히 In Progress다. 오늘도 안 옮겼다. 내일 페어 테스팅. 잘 될까. 민수 자존심 상하지 않으면서. 지원이 부담스러워하지 않으면서. 스프린트 5일 남았다. 티켓 8개 남았다. 90% 완료하려면 7.2개 끝내야 한다. 숫자는 명확하다. 사람은 변수다. 현주는 내일 또 막힐 수 있다. 성훈이는 또 1개 남길 수 있다. 지원이는 번아웃 올 수 있다. 팀장의 일. 현황판 보면서 변수 관리하기. 숫자 뒤 사람 챙기기. Jira 앱 끈다. 결국 사람 스프린트 대시보드. 티켓들. 진행률. 번다운 차트. 다 숫자다. 근데 숫자 뒤엔 사람이 있다. 막힌 사람. 너무 빠른 사람. 의존성에 갇힌 사람. 자존심 때문에 말 못하는 사람. 내 일은 숫자 맞추기가 아니다. 사람들이 숫자 채울 수 있게 돕기다. 언제 개입하고. 언제 기다리고. 언제 압박하고. 언제 풀어주고. 정답은 없다. 매일 다르다. 사람마다 다르다. 13년 했는데도 어렵다. 내일 아침 9시 10분. 또 Jira를 켤 것이다. 현황판을 볼 것이다. 그리고 또 고민할 것이다.현황판은 정직하다. 사람은 복잡하다. 둘 다 내 책임이다.

주말 공부, QA 트렌드를 따라가야 하는 이유

주말 공부, QA 트렌드를 따라가야 하는 이유

토요일 오후 2시 노트북을 켰다. 주말이다. 남편이랑 딸은 근처 공원 갔다. 나는 집에서 Playwright 튜토리얼 돌린다. 커피 한 잔. 두 번째다. 작년엔 Cypress 공부했다. 올해는 Playwright가 대세래. 내년엔 또 뭐가 나올까.13년차다. 여전히 공부한다. 아니, 13년차니까 더 공부한다. 뒤처지면 끝이다. 그게 현실이다. 팀원들의 눈빛 지난주 회의 때였다. 막내가 물었다. "팀장님, 이번 프로젝트 AI 테스팅 도구 써보면 어때요?" 나는 잠깐 멈췄다. AI 테스팅 도구. 들어는 봤다. 근데 써본 적은 없다. "좋은 의견인데, 검토해볼게." 이렇게 대답했다. 그 순간 느꼈다. 팀원들이 날 보는 눈빛. '팀장도 모르네' 같은 거. 집에 와서 바로 검색했다. Testim, Mabl, Functionize. 3시간 동안 데모 영상 봤다. 월요일 회의 때 얘기할 자료 정리했다.팀장이라고 다 아는 게 아니다. 근데 모르는 걸 모른다고 하면. 신뢰가 깎인다. 빠르게. 작년 컨퍼런스 작년 11월이었다. 'QA Korea 2023' 갔다. 연차 내고 하루 종일. 30대 초반 발표자가 말했다. "요즘은 코드리스 테스팅이 대세입니다." 청중 50명 정도. 다들 고개 끄덕였다. 나도 끄덕였다. 근데 우리 팀은 아직 Selenium이다. 5년 전 구축한 프레임워크. 레거시다. 다들 알지만 말 안 한다. 휴식시간에 커피 마셨다. 옆에 있던 다른 회사 QA 리드가 말했다. "우리는 작년에 다 바꿨어요. Cypress로." 부럽다. 솔직히. 우리는 예산 없다. 시간도 없다. "리소스 부족합니다" 매번 같은 답.그날 저녁 집에 왔다. 남편한테 말했다. "나 뒤처지는 거 같아." 남편은 개발자다. 걔도 매일 공부한다. "다들 그래. 어쩔 수 없지." 위로가 안 됐다. 토요일 오후의 공부 지금 4시다. Playwright 기본 문법 끝냈다. 다음은 CI/CD 통합이다. 우리 팀 자동화율은 62%다. 업계 평균은 75%래. 경영진은 80% 목표 세웠다. 인력은 안 늘린다. 예산은 안 준다. "효율화하세요" 이게 답이다. 그래서 공부한다. 더 나은 도구. 더 빠른 방법. 팀원들한테 알려줘야 한다. 작년엔 성능 테스팅 툴 배웠다. JMeter에서 k6로 바꿨다. 팀원들 교육했다. 3주 걸렸다. 지금은 다들 잘 쓴다. 올해는 Playwright다. 내년엔 또 뭘 배울까. 경력 관리의 무게 13년차 QA다. 처음 5년은 실무였다. 다음 5년은 시니어였다. 지금 3년은 리드다. 매 단계마다 배웠다. 실무 때는 테스트 케이스. 시니어 때는 자동화. 리드는 전략과 관리. 근데 트렌드는 계속 바뀐다. 내가 배운 게 5년 후엔 구식. 그게 IT다. QA도 마찬가지다. 지난달 채용 공고 봤다. "Playwright, Cypress, AI 테스팅 경험자 우대" 3년 전엔 없던 요구사항이다. 만약 내가 이직한다면. 지금 스펙으로 갈 수 있을까. 솔직히 자신 없다. 그래서 공부한다. 주말에도. 팀원들과의 격차 막내는 26살이다. 학교 때 Cypress 배웠다. 코딩도 나보다 빠르다. 나는 38살이다. 학교 때 손으로 테스트했다. 자동화는 회사 와서 배웠다. 격차가 느껴진다. 나이 차이가 아니다. 환경 차이다. 요즘 신입들은 다르다. 깃허브에 포트폴리오 있다. 자동화 프레임워크 직접 만들었다. 나보다 신기술 빠르게 익힌다. 위기감이다. 솔직히. "13년 경력"이 무기가 아닐 수도. "최신 기술"이 더 중요할 수도. 그래서 더 공부한다. 경험은 있다. 기술도 따라잡는다. 둘 다 있어야 살아남는다. 커뮤니티의 압박 QA 슬랙 채널에 있다. 500명 정도 된다. 다들 활발하게 얘기한다. 어제 누가 물었다. "요즘 비주얼 테스팅 툴 뭐 쓰세요?" 댓글 20개 달렸다. Percy, Applitools, BackstopJS. 다들 쓰고 있다. 당연하다는 듯이. 우리 팀은 안 쓴다. 예산 없고 우선순위 밀린다. 댓글 달지 않았다. 그냥 저장했다. 나중에 검토할 자료로. 또 공부할 게 생겼다. 커뮤니티는 좋다. 근데 때로는 압박이다. "다들 이렇게 하는데 너는?" 뒤처지는 느낌. 늘 쫓아가는 느낌. 13년차인데도 그렇다. 공부의 끝 6시다. Playwright 튜토리얼 끝냈다. CI/CD 통합도 봤다. 다음 주 월요일. 팀 회의 때 공유한다. "이번 분기에 도입 검토해보자." 팀원들 반응 예상된다. "좋아요" "해보죠" "기대돼요" 다들 배우고 싶어 한다. 그럼 또 시작이다. POC 만들고 검증하고. 팀원들 교육하고. 경영진한테 보고하고. 이게 QA 리드의 일이다. 새로운 걸 먼저 배우고. 팀한테 전달한다. 주말 공부는 선택이 아니다. 필수다. 생존이다. 남편의 말 저녁 먹으면서 남편한테 말했다. "오늘 Playwright 공부했어." 남편이 물었다. "Cypress 작년에 배우지 않았어?" "응. 근데 이번엔 Playwright래." 남편이 웃었다. "개발도 똑같아. 작년엔 React. 올해는 Next.js." 우리 둘 다 안다. IT는 이렇다. 멈추면 뒤처진다. 근데 언제까지 할까. 40대, 50대에도 주말에 공부할까. 대답은 안 했다. 솔직히 모른다. 근데 지금은 해야 한다. 그게 답이다. 일요일 계획 내일은 쉴까 했다. 근데 자료 하나 더 봐야 한다. "AI 기반 테스트 케이스 생성" 작년 말에 나온 논문이다. GPT로 테스트 케이스 자동 생성. 실제로 가능한지 검증해야 한다. 팀원이 다음 주에 물어볼 거다. "팀장님, AI 테스팅 어떻게 생각하세요?" 그때 대답 못 하면 안 된다. "잘 모르겠어" 할 수 없다. 팀장이니까. 13년차니까. 그래서 일요일에도 공부한다. 2시간만. 많지 않다. 근데 이게 쌓인다. 공부하는 이유 뒤처질까 봐 두렵다. 솔직한 이유다. 13년 했다. QA 커리어 절반 이상 왔다. 근데 안심은 없다. 기술은 빠르다. 트렌드는 빠르다. 나는 따라간다. 주말 공부는 투자다. 시간 투자. 에너지 투자. 미래를 위한 투자. 안 하면 뒤처진다. 뒤처지면 대체된다. 그게 IT 생태계다.토요일 저녁 8시. 노트북 덮었다. 내일은 AI 테스팅 논문이다. 공부는 끝이 없다. 그냥 계속하는 거다.

팀원 평가 시즌, 성과를 어떻게 설득할 것인가

팀원 평가 시즌, 성과를 어떻게 설득할 것인가

11월이 오면 11월이다. 평가 시즌이다. 다른 팀 리드들은 성과 자료 정리하느라 바쁘다. 나도 바쁘다. 우리 팀원 8명 성과 어필해야 한다. 개발팀은 쉽다. "신규 기능 20개 개발했습니다." 디자인팀도 괜찮다. "UI 개선으로 전환율 15% 상승했습니다." 그런데 QA는? "버그 500개 찾았습니다"? 그게 잘한 건지 못한 건지 경영진은 모른다.작년에 배웠다. "저희 팀 열심히 했습니다" 이렇게 말하면 안 된다. 숫자가 없으면 설득이 안 된다. 근데 QA 성과를 숫자로 어떻게 만드냐고. 숫자 만들기는 전쟁이다 월요일 아침 9시. 팀원들 불렀다. "이번 주 안에 각자 성과 정리해. 정량 지표 위주로." 민수가 물었다. "버그 개수 쓰면 되나요?" "안 돼. 버그 많이 찾은 게 우리가 잘한 건지, 개발팀이 못한 건지 애매해." 지현이가 또 물었다. "그럼 뭘 쓰라는 거예요?" "장애 건수. 작년 대비 올해 줄어든 거. 그게 너희가 사전에 찾아낸 거야." 회의실 조용해졌다. 다들 그런 데이터 따로 모아둔 적 없다.수요일. 데이터 수집 시작했다. Jira에서 장애 건수 뽑았다. 작년 43건, 올해 28건. 35% 감소. 괜찮다. 근데 인사팀이 물어본다. "그게 QA 팀 덕분이라는 근거가 뭔가요?" 할 말이 없다. 그냥 "우리가 잘해서요"라고 하면 안 믿는다.결국 추가 자료 만들었다. "크리티컬 버그 사전 발견율 87%" - 배포 전에 우리가 찾은 거. "프로덕션 핫픽스 건수 작년 대비 52% 감소" - 이것도 우리 덕분. "고객 CS 불만 중 품질 관련 이슈 61% 감소" - CS팀한테 데이터 받았다. 이제 좀 보인다. 우리가 뭘 했는지. 성장은 숫자로 말한다 목요일 오후. 팀원별 성과 정리 시작. 수진이가 제일 어렵다. 시니어인데 올해 특별한 프로젝트가 없었다. 그냥 묵묵히 테스트했다. 꼼꼼하게. 정확하게. 근데 이걸 어떻게 어필하냐. 1on1 했다. "수진아, 올해 뭐 한 거 같아?" "그냥... 일했죠." "구체적으로." 한참 생각하더니 말했다. "저번 달에 결제 로직 버그 찾았어요. 심각한 거." "얼마나 심각한데?" "고객 카드 이중결제될 뻔했어요. 금액 계산해보니까 월 2000만원 손실 날 수도 있었고요." 바로 그거다. "월 2000만원 손실 방지" 이게 성과다. "꼼꼼한 테스트로 심각한 버그 발견" 이런 거 안 쓴다. "연 2억 4천만원 잠재 손실 방지" 이렇게 쓴다.주니어 혜진이는 다른 방식이다. 올해 입사 2년차. 성장이 중요하다. "자동화 테스트 작성 60건" - 구체적 산출물. "회귀 테스트 시간 20시간에서 4시간으로 단축" - 효율성. "신규 테스트 프레임워크 학습 완료, 팀 내 세미나 진행" - 성장과 기여. 이 정도면 괜찮다. 주니어는 성장 곡선 보여주면 된다.인사팀과의 전쟁 금요일 오후 3시. 인사팀 미팅. 우리 팀 8명 평가 결과 공유. S등급 1명 신청했다. 수진이. "연 2억 4천만원 손실 방지, 크리티컬 이슈 사전 발견율 92%" 인사팀 차장이 물었다. "다른 팀도 S등급 신청 많은데요. QA는 어차피 해야 하는 일 아닌가요?" 참았다. 화내면 안 된다. "QA가 하는 일 맞습니다. 근데 수진씨는 남들이 못 찾는 걸 찾아요. 결제 로직 버그는 개발팀 3명이 놓쳤고, 1차 QA에서도 안 나왔어요. 2차 심화 테스트에서 수진씨가 찾았습니다. 이게 시니어 역량입니다." "근데 2억이라는 숫자가 추정 아닌가요?" "맞습니다. 추정입니다. 근데 개발팀이 '신규 기능으로 매출 10% 증가 예상'이라고 쓸 때는 안 물어보시잖아요?" 차장이 웃었다. "알겠습니다. 검토하겠습니다." 검토한다는 건 50% 확률이다.A등급은 4명 신청했다. 자동화 기여한 혜진, 성능 테스트 전문성 키운 민수, 보안 테스트 강화한 지현, API 테스트 체계 만든 동욱. "A등급 4명은 많지 않나요? 다른 팀은 보통 2명인데." "우리 팀이 8명이고 다른 팀은 15명입니다. 비율로 치면 비슷합니다." 이것도 준비했다. 팀별 A등급 비율 표. 우리가 특별히 많지 않다. 인사팀이 고개 끄덕였다. "그럼 이렇게 진행하겠습니다." 회의 끝났다. 복도 나오면서 한숨 쉬었다. 팀원들에게 말 못 하는 것 월요일 아침. 팀원들이 물었다. "팀장님, 평가 어떻게 됐어요?" "아직 최종 결과 안 나왔어." 거짓말은 아니다. 인사위원회 승인 남았다. 근데 내가 신청한 대로 안 될 수도 있다. 수진이가 S 못 받으면 내 책임이다. 내가 어필을 못한 거다. 수진이 잘못이 아니다. A등급 4명 중에 누가 빠지면? 그것도 내 책임이다. "팀장님이 날 못 지켜줬구나" 이렇게 생각한다.작년에 경험했다. 내가 A로 신청한 팀원이 B로 강등됐다. 이유는 "타 팀과 형평성". 팀원한테 말해줬다. "미안해. 내가 더 잘 어필할 걸." 그 팀원이 말했다. "괜찮아요. 팀장님 잘못 아니에요." 근데 3개월 뒤에 이직했다. 그게 관리자 책임이다. 성과를 만드는 것도 중요하지만, 성과를 보이게 만드는 것도 중요하다. 싸움은 계속된다 수요일 오후. 인사팀에서 메일 왔다. "S등급 1명, A등급 3명 확정. A등급 1명은 B로 조정." 예상했다. 동욱이가 B가 됐다. 동욱이 잘못이 아니다. API 테스트 체계 진짜 잘 만들었다. 근데 다른 팀 시니어들이 더 강력한 성과를 냈다고 한다. 동욱이 불렀다. "동욱아, 평가 결과 나왔어." "B죠?" "어떻게 알았어?" "느낌이요. 괜찮아요." 괜찮을 리 없다. 동욱이 표정 봤다. "미안해. 내가 더 잘 싸울걸." "아니에요. 팀장님 덕분에 B라도 받았어요." "내년엔 꼭 A 받자. 지금부터 준비하자." 동욱이가 고개 끄덕였다. 근데 눈빛은 실망이었다.저녁에 혼자 생각했다. QA 성과 어필이 왜 이렇게 어려울까. 개발은 "만들었다"로 끝난다. QA는 "안 터졌다"를 증명해야 한다. 안 일어난 일을 어떻게 증명하냐고. 그래서 매번 이렇게 싸운다. "우리가 없었으면 이런 일이 났을 겁니다" 가정법으로. "우리가 있어서 이 정도로 줄었습니다" 비교법으로. 피곤하다. 근데 안 싸우면 팀원들이 손해본다. 내년 준비는 지금부터 목요일 아침. 팀 회의 소집했다. "올해 평가 끝났다. 내년 준비 시작한다." 팀원들 당황했다. "벌써요?" "응. 벌써." 화이트보드에 썼다. "성과 어필을 위한 3가지 원칙"정량화 - 모든 업무에 숫자 붙이기 영향도 - 비즈니스 임팩트 연결하기 기록 - 매월 성과 로그 남기기"앞으로 매월 말에 각자 성과 정리한다. 간단하게." "그걸 1년 모으면 평가 자료 된다." "내년 11월에 허겁지겁 만들지 말자."구체적으로 정했다.장애 건수: 매월 집계, 전월 대비 비교 크리티컬 버그 발견: 비즈니스 영향도 금액으로 환산 테스트 효율: 공수 단축, 자동화 커버리지 협업 기여: 타팀 도움 준 것도 기록 개인 성장: 학습, 세미나, 멘토링 모두 기록혜진이가 물었다. "이거 매달 하면 귀찮은데요." "귀찮아. 근데 11월에 더 귀찮아." "그리고 이거 안 하면 너희 성과가 안 보여. 손해는 너희가 본다." 팀원들 고개 끄덕였다. 다들 올해 고생한 거 안다. 관리자로 산다는 것 금요일 저녁 7시. 퇴근 준비하는데 수진이가 왔다. "팀장님, 커피 한 잔 해요." 카페 갔다. "S등급 감사해요." "네가 잘했어." "아니에요. 팀장님이 잘 써주셨어요. 저는 그냥 일했을 뿐인데." 뭐라고 말해야 할까. "수진아, 너 정말 잘해. 근데 회사는 그걸 모를 수도 있어. 내가 말해줘야 알아." "저도 이제 시니어인데, 이런 거 배워야 할 것 같아요. 제 성과 스스로 어필하는 것." "맞아. 그것도 역량이야." 수진이가 웃었다. "내년엔 제가 직접 해볼게요." "좋아. 근데 내가 검토는 해줄게."집에 왔다. 남편이 물었다. "평가 끝났어?" "응. 끝났어." "어땠어?" "싸웠어. 이겼어. 좀." 남편이 웃었다. "수고했어." 딸이 안방에서 나왔다. "엄마, 나도 오늘 시험 봤어. 100점!" "진짜? 잘했다!" "선생님이 칭찬해줬어." 부럽다. 초등학생은 100점 받으면 바로 칭찬받는다. QA는 100점 받아도 "원래 그래야 하는 거 아냐?" 이런다. 근데 뭐 어쩌겠나. 이게 내 일이다. 13년차의 깨달음 밤 11시. 혼자 앉아서 생각했다. 13년 전 주니어 QA 시절엔 몰랐다. 테스트만 잘하면 된다고 생각했다. 버그만 열심히 찾으면 인정받는다고 생각했다. 틀렸다. 버그 찾는 건 기본이다. 그 버그가 왜 중요한지 설명하는 게 진짜 일이다.팀장 되고 나서 더 배웠다. 내 성과 어필하는 것도 어렵다. 근데 팀원 성과 어필하는 건 더 어렵다. 왜냐면 내 일은 내가 다 알지만, 팀원 일은 내가 다 모른다. 그래서 물어봐야 하고, 파악해야 하고, 정리해야 한다. 안 하면? 팀원들이 묻힌다. 열심히 일했는데 평가 못 받는다. 그러면 떠난다.작년에 떠난 팀원 생각났다. 진짜 잘하는 애였다. 근데 내가 성과 어필 못 해줬다. B 받고 실망했다. 3개월 뒤 이직했다. 그게 제일 후회된다. 내가 조금만 더 싸웠으면. 숫자를 더 구체적으로 만들었으면. 인사팀을 더 설득했으면. 관리자는 팀원 지켜주는 사람이다. 성과로 지켜주는 거다. 내년을 위한 준비 주말에 노트 꺼냈다. 내년 계획 썼다. 월별 성과 리뷰 체크리스트장애 건수 및 심각도 크리티컬 버그 발견 및 영향도 테스트 효율 지표 팀원별 주요 기여 타팀 협업 사례분기별 팀원 1on1 필수 질문이번 분기 제일 뿌듯했던 일? 그게 비즈니스에 어떤 영향 줬어? 성장한 부분은? 다음 분기 목표는?10월에 할 일 (평가 한 달 전)팀원별 성과 초안 작성 정량 지표 최종 검증 타팀 리드들과 크로스체크 인사팀 사전 커뮤니케이션이번엔 준비됐다. 내년 11월엔 허겁지겁 안 한다. 팀원들 성과 제대로 보여준다.남편이 물었다. "그렇게까지 해야 해?" "응. 해야 해." "왜?" 생각했다. "내가 안 하면 아무도 안 해. 개발팀은 개발팀 리드가 챙기고, 디자인팀은 디자인 리드가 챙겨. QA는? 나 밖에 없어." "그래도 팀원들이 알아서 하면 안 돼?" "주니어들은 방법 모르고, 시니어들은 어필 안 익숙해. 결국 내가 해줘야 해." "힘들겠다." "힘들어. 근데 이게 내 일이야." 팀장의 성과는 팀원의 성과다 일요일 저녁. 슬랙에 메시지 왔다. 동욱이었다. "팀장님, 내년엔 꼭 A 받고 싶어요. 뭘 준비하면 될까요?" 답장 썼다. "일단 지금 하는 일 계속 잘해. API 테스트 체계 더 고도화하고. 그리고 매달 성과 정리해서 나한테 공유해. 내가 검토해줄게. 같이 준비하자." "감사합니다!" 채팅창 닫았다. 동욱이 내년엔 A 받는다. 내가 만든다.수진이도 메시지 보냈다. "팀장님, 저 내년에 후배들 멘토링 하고 싶어요. 그것도 성과가 될까요?" "당연하지. 팀 전체 역량 올리는 거잖아. 멘토링 계획 세우고, 과정 기록하고, 결과 측정하면 좋은 성과야." "알겠습니다! 계획 세워볼게요." 좋다. 이렇게 미리미리 준비하는 거다. 보이지 않는 일을 보이게 만드는 법 결국 이거다. QA는 보이지 않는다. 버그 안 터지는 게 우리 성과인데, 안 터진 걸 어떻게 보여주냐. 그래서 만든다. 숫자로 만들고, 이야기로 만들고, 데이터로 만든다. "저희가 올해 장애 35% 줄였습니다" - 숫자 "결제 이중과금 버그 발견해서 연 2억 손실 방지했습니다" - 이야기 "크리티컬 버그 사전 발견율 87%, 업계 평균 65% 대비 높습니다" - 데이터 이 세 가지 있으면 설득된다. 없으면 안 된다.그리고 중요한 거. 팀원들이 스스로 어필하게 만들어야 한다. 내가 매번 다 해줄 순 없다. 시니어들은 성과 정리 방법 가르친다. 주니어들은 성장 스토리 만들게 돕는다. 중간급들은 독립적으로 할 수 있게 피드백 준다. 3년 뒤엔 내가 안 챙겨도 팀원들이 알아서 한다. 그게 목표다. 또 다른 시즌이 온다 11월 끝나간다. 평가 시즌 끝났다. 수진이 S, 세 명 A, 네 명 B. 작년보단 나았다. 근데 끝이 아니다. 12월 되면 내년 목표 세운다. 1월 되면 새 프로젝트 시작한다. 그리고 다시 11월 온다. 매년 반복이다. 팀원 성과 만들고, 정리하고, 싸우고. 이게 팀장 일이다.피곤하냐고? 피곤하다. 그만두고 싶냐고? 가끔. 근데 왜 하냐고? 누가 해야 하니까. 내가 안 하면 우리 팀원들 손해보니까. 그리고 솔직히. 팀원들 좋은 평가 받을 때. "팀장님 덕분이에요" 이 말 들을 때. 조금 뿌듯하다. 이것 때문에 한다. 내년에도 할 거다.QA 성과는 만들어지는 게 아니라 보이게 만드는 거다. 싸워야 보인다.

화요일 오전 크로스펑셔널 미팅, 시간만 흘렀다

화요일 오전 크로스펑셔널 미팅, 시간만 흘렀다

9시 30분 회의실 회의실에 먼저 도착했다. 노트북 켜고 지난주 품질 메트릭스 정리했다. 테스트 커버리지 82%, 크리티컬 버그 3건 오픈, 예상 테스트 기간 2주. 개발 리드가 들어왔다. 기획 리드는 커피 들고. PM은 노트북 두 개 펴놨다. "오늘 다음 스프린트 일정 정리하죠." PM이 화면 공유했다. 간트차트가 떴다.일정부터 정해져 있다 "출시일은 3월 15일로 확정입니다. 경영진 보고 끝났어요." 시작부터 그렇다. 개발 리드가 손들었다. "개발 완료는 3월 1일 목표로 하겠습니다." 2주다. QA 기간이 2주다. 내가 말했다. "그럼 QA는 3월 1일부터 15일까지?" "네, 2주면 충분하죠?" 충분하지 않다. 이번 기능은 결제 로직 변경이다. 크로스 브라우저 테스트, 모바일 디바이스 테스트, 결제 시나리오만 100개가 넘는다. "최소 3주는 필요합니다. 결제 관련이라 리스크가 높아요." PM이 고개를 저었다. "일정이 이미 확정됐어요. 마케팅 캠페인도 다 짰고요." 기획 리드가 거들었다. "자동화 있잖아요. 그거로 커버 안 되나요?" 자동화 커버리지는 60%다. 나머지 40%는 수동이다. 결제는 특히 수동 테스트 비중이 크다. "자동화로 안 되는 케이스가 많습니다. 실제 카드 결제, PG사 연동, 환불 프로세스..." "그래도 2주 안에 해야죠. 일정은 못 미뤄요." 협의가 아니다. 통보다.품질은 협상 대상 내가 노트북을 돌렸다. 지난 분기 장애 현황을 보여줬다. "지난번 결제 기능 배포 때 장애 3건 났습니다. 테스트 기간이 10일이었어요. 고객 환불 요청 247건, CS 비용만 800만원." 개발 리드가 화면을 봤다. "그건... 예외 케이스였죠." 예외가 아니다. 테스트 기간이 부족했다. "이번에도 같은 상황 올 수 있습니다. 최소 3주, 안 되면 기능 축소를 고려해야 합니다." 기획 리드가 말했다. "기능 축소는 안 됩니다. 이미 대외 발표했어요." PM이 중재하듯 말했다. "QA 리소스 더 투입하면 어떨까요?" 팀원이 8명이다. 다 다른 프로젝트 잡혀있다. 갑자기 리소스를 어디서 뽑나. "지금 팀원들 다 풀로 돌고 있습니다. 외주 쓰려면 최소 2주 전에 말씀하셔야 했고요." "그럼 야근으로..." 야근으로 품질이 올라가지 않는다. 피곤하면 버그를 놓친다. "야근은 단기 솔루션이 아닙니다. 지속 가능하지 않아요." 회의실이 조용해졌다. 다들 노트북만 본다. PM이 말했다. "일단 2주로 진행하고, 중간에 리스크 보면서 조정하죠." 조정이 안 된다는 걸 다 안다. 일정은 한 번 정해지면 안 바뀐다. 협업이라는 이름 기획 리드가 물었다. "테스트 우선순위는 어떻게 되나요?" "크리티컬 패스부터 합니다. 결제 플로우, 환불, PG 연동 순서로." "UI 변경 사항도 체크해야 하지 않나요? 디자인 많이 바뀌었어요." 그것도 해야 한다. 하지만 시간이 없다. "UI는 세컨더리로 잡겠습니다. 기능 먼저, UI는 병렬로 돌리고요." 개발 리드가 끼어들었다. "API 변경도 있어요. 백엔드 테스트 케이스 새로 작성해야 하지 않나요?" 해야 한다. 다 해야 한다. 2주 안에. "API 테스트는 자동화로 커버하겠습니다. 새 케이스는 이번 주 안에 작성하고요." PM이 정리했다. "좋습니다. 그럼 QA는 3월 1일부터 15일, 2주 진행. 중간 체크포인트는 3월 8일로 하죠." 중간 체크포인트에서 뭘 체크하나. 이미 늦었다고 말할 때쯤이면 손 쓸 방법이 없다.회의록에 남는 것 회의가 끝났다. 1시간 30분. PM이 회의록 작성했다. 컨플루언스에 올라왔다.출시일: 3월 15일 개발 완료: 3월 1일 QA 기간: 3월 1일~15일 (2주) 중간 체크: 3월 8일 담당: QA 팀내가 제기한 리스크는 안 적혔다. 3주 필요하다는 의견도 없다. 장애 이력도 없다. 회의록에는 합의만 남는다. 이견은 사라진다. 슬랙에 메시지 남겼다. "QA 기간 2주는 리스크 높습니다. 최소 3주 필요. 회의록에 추가 부탁드립니다." PM이 답했다. "일정 확정이라 어렵습니다. 리스크는 트래킹하겠습니다." 트래킹만 한다. 해결은 안 한다. 팀원들한테 뭐라고 하나 팀 채널에 공지했다. "다음 스프린트 일정 나왔습니다. 결제 기능 리뉴얼, QA 기간 3월 1일~15일." 팀원들 반응이 올라왔다. "2주요? 결제인데?" "다른 프로젝트는요?" "야근 각인가요..." 영민이가 물었다. "3주 달라고 안 하셨어요?" 했다. 근데 안 됐다. "일정이 확정이래. 최대한 효율적으로 돌려보자." 효율적으로. 이 말이 얼마나 공허한지. 지원이가 말했다. "자동화 커버리지 올릴까요?" 올려야 한다. 근데 자동화 작성 시간도 필요하다. "크리티컬한 케이스 위주로 추가해. 다음 주까지." 다음 주면 개발 끝난다. 그때 자동화 돌려봐야 버그 나온다. 수정하고 재테스트하면... 시간이 없다. 점심시간 팀원들이랑 식당 갔다. 다들 조용했다. 수진이가 말했다. "팀장님, 스트레스 많으시죠?" 많다. 근데 표현 안 한다. "괜찮아. 우리가 잘하면 돼." 우리가 아무리 잘해도 시간은 안 늘어난다. 영민이가 물었다. "이번에도 일정 못 지키면 QA 탓 하려나요?" 할 것이다. 항상 그랬다. "그래서 우리가 더 꼼꼼히 해야지. 리스크 문서화하고, 테스트 커버리지 투명하게 공유하고." 방어적이다. 이게 QA 리드의 일이다. 팀 지키는 것. 오후, 테스트 전략 회의 팀원들 모았다. 2주 안에 뭘 할 수 있을까. 화이트보드에 썼다. Week 1:테스트 케이스 작성 (2일) 스모크 테스트 (1일) 주요 시나리오 테스트 (2일)Week 2:크로스 브라우저 (2일) 모바일 디바이스 (2일) 리그레션 (1일)버퍼는 없다. 버그가 안 나온다는 가정이다. 지원이가 손들었다. "버그 나오면요?" "개발팀이랑 핫픽스 프로세스 돌린다. 최대한 빨리 수정받고." 수진이가 물었다. "크리티컬 버그 나오면요?" "일정 조율 다시 요청한다. 근데... 안 될 거야." 다들 안다. 그래도 물어본다. 리스크 문서 컨플루언스에 리스크 문서 작성했다. 제목: [결제 리뉴얼] QA 리스크 및 완화 계획 Risk #1: 테스트 기간 부족 (2주 → 3주 필요)Impact: High Probability: High Mitigation: 우선순위 기반 테스트, 자동화 확대Risk #2: 리소스 부족 (8명 → 10명 필요)Impact: Medium Probability: High Mitigation: 외주 검토, 타팀 지원 요청Risk #3: 결제 장애 발생 가능성Impact: Critical Probability: Medium Mitigation: 프로덕션 모니터링 강화, 롤백 계획문서 링크를 PM한테 보냈다. "리스크 공유드립니다. 검토 부탁드립니다." 읽씹이다. 한 시간 지나도 답이 없다. 두 시간 후에 답왔다. "확인했습니다. 일정 내 최선을 다해주세요." 최선을 다해달라. 이 말만 돌아온다. 개발 리드한테 DM 슬랙 DM 보냈다. "형준님, 이번 일정 너무 타이트한 거 아시죠?" 답이 빨리 왔다. "알아요. 저도 개발 일정 빡빡해요." "크리티컬 버그 나오면 어떡하시려고요?" "최대한 안 나오게 개발하죠. 유닛 테스트 커버리지 올리고 있어요." 유닛 테스트로는 부족하다. 통합 테스트, E2E 테스트가 필요하다. "그래도 리스크는 있잖아요. 일정 조정 같이 얘기해볼까요?" "저도 말했어요. 근데 안 되더라고요. 이미 대외 발표했대요." 대외 발표가 뭐가 중요한가. 품질이 중요하지. "그럼 기능 축소는요?" "그것도 안 된대요. 다 중요한 기능이래요." 다 중요하면 시간을 줘야 한다. 시간도 안 주고 다 중요하다는 건 모순이다. 6시, 퇴근 시간 팀원들이 하나씩 퇴근한다. "내일 봐요, 팀장님." "먼저 들어갑니다." "수고하셨어요." 나는 남았다. 테스트 계획서 마저 써야 한다. 노트북 화면에 간트차트가 떠있다. 빨간 줄이 많다. 리스크 표시다. 2주. 14일. 112시간. 테스트 케이스는 348개. 자동화는 210개. 수동은 138개. 수동 테스트 하나에 평균 30분. 138개면 69시간. 크로스 브라우저는 5개 브라우저. 주요 시나리오 50개. 250회 테스트. 계산이 안 맞는다. 집에 가는 길 지하철에서 남편한테 카톡 보냈다. "오늘 회의 최악이었어." 답이 왔다. "또 일정 싸움?" "응. 2주 달래. 결제 기능인데." "에휴. 거기도 그렇구나." 남편 회사도 비슷하다. 개발자도 일정에 치인다. "저녁은?" "너 오면 같이 먹자. 뭐 먹을래?" "아무거나. 피곤해." "치킨 시킬까?" "좋아." 치킨 먹으면 살찐다. 근데 오늘은 상관없다. 집에서 딸이 학교 숙제 하고 있었다. "엄마 왔어요?" "응, 우리 공주. 숙제 다 했어?" "거의요. 이거 하나만 더." 남편이 부엌에서 나왔다. "힘들었어?" "응. 회의가 2시간." "결론은?" "일정 확정. QA 2주." "에휴." 치킨이 왔다. 셋이서 먹었다. 딸이 물었다. "엄마 회사 재밌어요?" 재밌냐고. "응, 재밌어. 엄마 일 중요해." 거짓말은 아니다. 중요하다. 근데 인정은 안 받는다. 밤 11시 딸 재우고 남편이랑 소파에 앉았다. "오늘 회의에서 내 말 하나도 안 들어줬어." "그랬구나." "3주 필요하다고 했는데 2주래. 리스크 얘기했는데 일정 확정이래." "그럼 어떡하려고?" "어떡하긴. 해야지. 팀원들이랑 최대한 효율적으로." "그러다 장애 나면?" "그럼 QA 탓이지." 남편이 내 손을 잡았다. "너무 스트레스 받지 마. 네가 할 수 있는 거 다 하는 거잖아." 다 해도 부족하다. 시간이 없으니까. "13년 했는데 여전히 이래." "QA가 원래 그렇잖아. 우리도 개발자들 무시당해." "그래도 개발은 성과가 보이잖아. 기능 만들면 눈에 보이고." "QA도 보이지. 버그 안 나는 게 네 성과야." 버그 안 나는 건 당연한 거래. 버그 나오면 QA 잘못이고. 침대에서 불 끄고 누웠다. 내일 할 일 생각했다.테스트 계획서 완성 팀원들 태스크 분배 자동화 케이스 리뷰 개발팀 일정 재확인 리스크 업데이트2주 후면 배포다. 장애 안 나면 좋겠다. 나면... 포스트모템 쓰고, 재발 방지책 세우고, 경영진한테 보고하고. 또 "QA가 뭐했냐"는 소리 들을 것이다. 눈을 감았다. 내일 또 회의다.협업이라는 이름으로 모였지만, 결국 정해진 각본대로 흘렀다. QA의 목소리는 회의록에 남지 않는다. 그래도 내일 또 싸워야 한다. 팀을 위해.

Confluence에 적힌 지난달 리포트, 누가 봤을까

Confluence에 적힌 지난달 리포트, 누가 봤을까

새벽 1시의 완성 지난달 품질 리포트 작성했다. 새벽 1시까지. Confluence 페이지 30개. 차트 15개. 테이블 20개 넘게. 품질 지표, 버그 트렌드, 리스크 분석, 자동화 커버리지, 팀 리소스 현황까지. 하나하나 숫자 검증하고, 그래프 색깔 맞추고, 인사이트 정리했다. "이번엔 제대로 읽힐 거야." 매달 하는 생각이다. 매달 틀렸다.작년 배포 장애 이후로 시작했다. 경영진이 "품질 가시성이 없다"고 했다. CTO가 "데이터 기반 의사결정" 운운했다. 그래서 만들었다. 월간 품질 리포트. 처음엔 열심히 했다. 당연히. 13년 차 QA 팀장이다. 숫자로 말하는 게 익숙하다. 첫 달 리포트는 40페이지였다. 너무 길다고 했다. 두 번째 달은 25페이지로 줄였다. 핵심만 남겼다. 그래도 안 읽었다. "바쁘셔서 그래. 다음 달엔 읽으실 거야." 지금 10개월째다. 여전히 안 읽는다. 5분의 경영진 보고 월례 경영진 보고 있었다. 오늘 오후 2시. 내 차례는 14시 47분. 발표 순서 7번째. 앞에 개발팀, 인프라팀, 보안팀 다 끝나고. 준비한 건 20분 분량. 핵심 슬라이드 12장. 발표 시작했다. "지난달 품질 지표 보고드리겠습니다." 첫 슬라이드 넘어가는데 누군가 물었다. "장애 몇 건이었죠?" "크리티컬 2건, 메이저 5건입니다." "작년 대비로요?" "30% 감소했습니다." "오케이. 다음."3분 지났다. 12장 중에 2장 넘어갔다. "자동화 커버리지는 어떻게..." 말 끊겼다. CFO가 물었다. "그래서 다음 분기 품질 이슈 리스크는?" "중위험 3개, 고위험 1개입니다. 상세 내용은..." "고위험 뭔데요?" "레거시 결제 모듈 리팩토링 관련입니다. 테스트 환경이..." "개발팀이랑 조율했죠?" "네, 했는데 일정이 촉박해서..." "일정 내 해결 가능한가요?" "리소스 추가 투입되면 가능합니다." "알겠습니다. 다음 안건." 5분 지났다. 발표 끝났다. 12장 중에 4장 봤다. 나머지 8장은 "시간 관계상 패스"였다. 회의실 나왔다. 손 떨렸다. 화장실 갔다. 거울 봤다. 웃었다. 웃긴 거다. Confluence 조회수 0 사무실 돌아와서 Confluence 열었다. 지난달 리포트 페이지. 페이지 하단에 조회수 나온다. 작은 숫자. Views: 12 12명. 우리 팀 8명. 나 1명. 개발팀 리드 2명. 기획팀 1명. 끝. 경영진은 0명.페이지 상단에 @멘션 걸어뒀었다. CTO, CPO, CFO, 각 본부장 5명. 총 8명. 알림 갔을 거다. 슬랙에도 공유했다. "#leadership" 채널에. 반응은 이모지 하나. 👍 누가 눌렀는지 확인했다. 개발 본부장이었다. 착한 사람이다. 읽지도 않고 눌러줬을 거다. 작년 9월 리포트 열어봤다. Views: 8. 10월: 11. 11월: 9. 12월: 15. (연말이라 그래도 많았다.) 올해 1월: 7. 2월: 10. 3월: 12. 평균 10명. 우리 회사 직원 1000명이다. 경영진 15명이다. "데이터 기반 의사결정." 웃긴다. 30시간의 가치 계산해봤다. 한 달 리포트 작성 시간. 데이터 수집: 4시간. Jira, TestRail, Jenkins, Sentry 다 뒤진다. 분석: 6시간. 트렌드 찾고, 이상치 확인하고, 원인 추론한다. 차트 작성: 3시간. 엑셀로 만들고, 스크린샷 떠서 붙인다. 인사이트 정리: 5시간. 왜 이런 결과가 나왔는지, 다음 달은 어떨지 쓴다. 검토 및 수정: 4시간. 팀원들 피드백 받고, 숫자 재검증한다. 슬라이드 작성: 6시간. 경영진 보고용. 알아듣기 쉽게. 피드백 반영: 2시간. "이 부분 더 상세하게" "여기 간략히" 총 30시간. 한 달 근무시간 160시간의 18.75%. 내 연봉 8500만원의 18.75%는 1593만원. 월 132만원 상당의 일이다. 5분 보고로 끝난다. 분당 26만원. 1초에 4400원. "다음 안건" 한마디에 132만원 날렸다. 누구를 위한 리포트인가 팀원한테 물어봤다. 민지, 5년 차. "민지야, 내가 쓰는 월간 리포트. 도움 돼?" "아, 네. 도움 되죠." "어떤 부분이?" "음... 전체 품질 트렌드 파악할 때요?" "그거 우리 팀 주간 회의에서 다 얘기하잖아." "아... 그렇긴 하네요." "솔직히 말해. 읽어?" 민지가 웃었다. "가끔요. 필요할 때." "언제가 필요할 때야?" "팀장님이 '리포트 봐' 하실 때요." 정직한 대답이다. 개발팀 리드한테도 물었다. 석진, 10년 차. "석진아, 우리 품질 리포트 보고 있어?" "어, 대충 훑어보지." "뭐가 도움 돼?" "버그 트렌드? 우리 팀 품질 어떤지 확인하려고." "그거 주간 QA 미팅에서 다 공유하는데." "아... 맞네. 그럼 뭐 보지..." 석진도 웃었다. "사실 잘 안 봐. 미안." 아니다. 미안할 거 없다. 당연하다. 30시간 들여 만든 리포트가 필요 없는 거다. 품질은 숫자가 아니라서 문득 깨달았다. 품질은 숫자로 증명되지 않는다. 이 회사에서는. 버그 30% 줄였다고? "원래 그래야 정상 아냐?" 테스트 커버리지 80% 달성? "100%는 왜 안 돼?" 장애 제로 달성? "당연한 거 아냐?" 자동화로 리소스 40% 절감? "그럼 팀원 줄여도 되겠네?" 품질은 공기다. 있을 땐 모르고, 없을 때만 난리다. 작년 대형 장애 때 생각난다. 밤 11시에 전화 왔다. CTO였다. "지금 결제 안 돼요. 왜 이래요?" "확인하겠습니다." 새벽 3시까지 원인 찾았다. 개발팀 긴급 배포. 5시에 복구 완료. 다음 날 오전 회의. CTO가 물었다. "왜 사전에 못 잡았어요?" "테스트 환경이 프로덕션이랑 달라서..." "그럼 환경 맞춰야죠." "예산 요청 드렸는데 보류되셨습니다." "..." 침묵. 5초. 그리고. "다음부터 미리 체크해주세요." 그날 Confluence에 포스트모템 10페이지 작성했다. 조회수: 6명. 리포트를 쓰는 이유 그럼에도 쓴다. 매달. 왜? 첫째, 내 책임이다. 팀장이니까. 품질 상태 기록 남겨야 한다. 둘째, 언젠가 필요하다. 장애 나면 "그때 경고했었다" 증거 된다. 셋째, 팀원들 성과다. 숫자로 안 남기면 인정 안 받는다. 넷째, 내가 정리 필요하다. 한 달 돌아보는 시간. 다섯째, 혹시 모른다. 누군가 읽을지. 여섯째, 습관이다. 13년 했다. 이게 프로다. 그래도 허무하다. 30시간이 5분으로 압축되는 순간. "잘 하고 있어요." 누가 그렇게 말해주면 좋겠다. 경영진이. 한 번이라도. "리포트 잘 봤어요. 수고했어요." 그 한마디면 된다. 다음 달도 쓸 힘 생긴다. 근데 안 온다. 안 올 거다. 알고 있다. QA의 목소리 동료 QA 팀장이랑 술 마셨다. 다른 회사. "너네도 품질 리포트 써?" "어, 매달." "읽어줘?" "ㅋㅋㅋ 아니." "우리도." "QA가 원래 그래." 잔 부딪혔다. 쓴웃음 나왔다. "근데 신기한 거 있어. 장애 나면 우리 목소리 엄청 커져." "ㅇㅇ. 맞아. 그때만." "평소엔 투명인간이다가 장애 터지면 슈퍼맨 돼야 해." "예방은 몰라주고 대응만 평가하지." "백신 맞으면 아프고, 안 맞으면 병 걸리고. QA가 백신이야." "인정." 또 마셨다. 소주 3병째. "그래도 써야지. 안 쓰면 더 투명인간 돼." "맞아. 쓰는 게 최소한의 존재감이야." "슬프네." "그래도 우리 일이니까." 헤어질 때 그가 말했다. "나중에 우리 세대가 임원 되면 달라질까?" "글쎄. 그땐 우리도 바빠서 안 읽을 거야." "ㅋㅋㅋ 현실적이네." "13년 하면 알게 돼." 택시 탔다. 집 가는 길. 창밖 봤다. 서울 야경 예쁘다. 불 켜진 빌딩들. 다들 야근 중이다. 저 안에 몇 명이나 Confluence 보고 있을까. 다음 달 리포트 오늘도 쓴다. 이번 달 리포트. 데이터 모으고 있다. Jira 쿼리 돌렸다. TestRail 리포트 뽑았다. 차트 만들 거다. 트렌드 분석할 거다. 인사이트 정리할 거다. 30시간 들일 거다. 5분 발표될 거다. 10명 읽을 거다. 그래도 쓴다. 누군가는 봐줄 거라고. 언젠가는 읽힐 거라고. 믿고 싶다.새벽 1시, 저장 버튼 눌렀다. 다음 달에 또 쓴다.

팀원이 자동화 테스트를 짜지 않고 수동으로 진행했다

팀원이 자동화 테스트를 짜지 않고 수동으로 진행했다

또 수동으로 했다 월요일 아침이다. 스탠드업 미팅에서 민준이가 말했다. "금요일 배포된 기능, 수동 테스트 완료했습니다." 순간 머리가 아팠다. 저번 주에 말했다. 저번 달에도 말했다. "이거 반복되는 거니까 자동화 스크립트 짜두자." 민준이 대답은 똑같다. "네, 다음엔 꼭 하겠습니다." 다음은 안 온다. 항상 지금이다.회의 끝나고 민준이 붙잡았다. "왜 또 수동으로 했어?" 민준이가 말한다. "자동화 짜는 게 2시간 걸리는데, 수동으로 하면 30분이면 돼요." 맞는 말이다. 지금 당장은. 그런데 이 테스트, 매주 한다. 한 달이면 4번. 1년이면 48번. 30분 × 48번 = 24시간. 자동화 2시간 투자하면 22시간 세이브다. 이 계산을 설명했다. 민준이가 고개를 끄덕인다. "아, 그렇네요." 그런데 다음 주에 또 수동으로 한다. 설득이 일이 됐다 점심 먹으면서 팀원들한테 또 말했다. "자동화 가능한 건 자동화하자. 우리가 수동 테스트만 하려고 QA 한 거 아니잖아." 다들 고개를 끄덕인다. 이해는 한다. 실천을 안 할 뿐이다. 지현이가 말한다. "팀장님, 자동화 스크립트 짜면 나중에 유지보수도 해야 되잖아요." 맞다. 유지보수는 필요하다. 그런데 수동 테스트는 유지보수가 없나? 매번 똑같은 걸 클릭하는 게 유지보수 아닌가? "UI 바뀌면 스크립트 다 고쳐야 돼요." "그럼 테스트케이스 엑셀도 다 고쳐야 되잖아." "근데 엑셀은 빨리 고치잖아요." "스크립트도 잘 짜두면 빨라." 이런 대화를 3년째 하고 있다.팀장 된 지 3년. 처음엔 직접 자동화 스크립트 짰다. 팀원들한테 보여주면서 "이렇게 하는 거야" 했다. 효과는 있었다. 한 달 정도. 그 다음엔 다시 수동 테스트로 돌아간다. 왜일까. 고민했다. 결론은 간단했다. 당장 급한 일이 자동화보다 많다. 버그 터지면 수정 확인해야 되고. 기획 바뀌면 테스트 다시 짜야 되고. 개발팀에서 "이거 테스트 좀 급하게" 하면 달려가야 되고. 자동화는 중요한데 급하지 않다. 그래서 영원히 미뤄진다. 기술 부채가 쌓인다 우리 팀 자동화 커버리지 37%. 작년에 35%였다. 2% 올랐다고 자랑할 순 없다. 기능은 매달 늘어나는데 자동화는 제자리걸음이다. 계산해봤다. 지금 수동으로 돌리는 테스트 케이스 650개. 한 케이스당 평균 3분. 650 × 3분 = 1950분 = 32.5시간. 배포 전에 풀 테스트 돌리면 팀원 8명이 하루 종일 달라붙는다. 그래서 요즘엔 풀 테스트 안 한다. 리스크 높은 것만 골라서 한다. 리스크 낮다고 판단한 곳에서 버그가 나온다. 그럼 또 내 책임이다. 경영진한테 보고할 때마다 물어본다. "자동화율이 왜 이렇게 낮죠?" 설명한다. "인력 대비 기능 증가 속도가 빨라서, 자동화 짤 시간이 없습니다." "그럼 자동화 전담 인력 뽑으시죠." "예산 승인 부탁드립니다." "지금은 어렵고요." 이 대화도 2년째다.개발팀은 기술 부채 쌓이면 리팩토링 스프린트 만든다. QA팀은 그런 거 없다. 테스트 자동화 부채는 눈에 안 보인다. 배포는 된다. 품질이 낮아질 뿐이다. 품질이 낮아지면 장애가 난다. 장애 나면 포스트모템 쓴다. "재발 방지 대책: 해당 케이스 테스트 자동화" 그 자동화, 누가 언제 하나. 또 급한 일 밀려온다. 악순환이다. 다른 회사는 어떨까 QA 리드 모임에서 만난 선배가 말했다. "우리 회사는 자동화 안 하면 코드 리뷰에서 반려해." 부럽다. 그 회사는 자동화가 문화다. 우리 회사는? 자동화는 "하면 좋은 것". 필수가 아니라 옵션이다. 옵션은 항상 스킵된다. 다른 선배는 말했다. "자동화 전담팀 만들었어. 3명." 더 부럽다. 우리 팀은 8명 전부 기능 테스트에 매달린다. "그 전담팀이 자동화 프레임워크 다 구축해놨어. 다른 팀원들은 거기다 케이스만 추가하면 돼." 완벽한 구조다. 우리 팀은 프레임워크도 제각각이다. Selenium 쓰는 사람, Playwright 쓰는 사람, Cypress 쓰는 사람. 통일하자고 했는데 각자 익숙한 게 다르다. "그냥 편한 거 쓰세요." 이렇게 말한 내가 문제다. 내가 할 수 있는 건 고민했다. 팀원들 탓할 수는 없다. 바쁜 건 사실이니까. 그럼 뭘 바꿔야 하나.자동화 시간을 업무 시간에 명시적으로 넣기.매주 금요일 오후는 자동화 작업 시간. 다른 일 시키지 않기.자동화 성과를 평가에 반영.수동 테스트만 하면 보통. 자동화 구축하면 좋음.작은 것부터 시작.30분짜리 테스트부터 자동화. 성공 경험 쌓기.템플릿 만들기.자동화 스크립트 시작 템플릿. 복붙해서 시작할 수 있게.이걸 이번 주 1on1 때 팀원들한테 말할 것이다. 그래도 답답하다 솔직히 말하면. 이런 걸 내가 챙겨야 한다는 게 피곤하다. 자동화는 기본이어야 한다. "자동화 하세요"가 아니라 "자동화 안 한 이유가 뭐죠?"가 되어야 한다. 그런데 현실은 반대다. 개발자들은 테스트 코드 안 짜면 리뷰 통과 안 된다. QA는 자동화 안 해도 아무도 안 물어본다. 이게 QA의 현실이다. 13년 했는데 이건 안 바뀐다. 개선은 되는데 본질은 그대로다. 자동화는 여전히 옵션이고. 품질은 여전히 QA만의 책임이고. 기술 부채는 여전히 눈에 안 보인다. 퇴근길에 생각했다. 내년에도 똑같은 고민 할 것 같다. 그래도 해야 한다. 안 하면 더 심해지니까.수동 테스트는 빠르지만, 반복되면 가장 느리다.

리스크 기반 테스트, 예산 없이 시작하다

리스크 기반 테스트, 예산 없이 시작하다

리스크 기반 테스트, 예산 없이 시작하다 또 반려됐다 자동화 투자 건의서 작성했다. 세 번째다. 이번엔 ROI 계산도 넣었다. 예상 절감 시간, 인건비 환산, 장애 감소율까지. 경영진 답변: "내년에 검토하겠습니다." 작년에도 들었다. 재작년에도. 회의실 나오면서 생각했다. 예산 없으면 못 하나? 아니다. 해야 한다. 품질은 돈으로만 사는 게 아니니까. 팀원들한테 말했다. "우리 방식으로 한다."전부 테스트는 환상 월요일 아침 팀 미팅. "이번 릴리즈 테스트 케이스 850개입니다." 신입 팀원이 말했다. 표정이 밝다. 나는 물었다. "일정은?" "3일입니다." 계산했다. 팀원 8명. 하루 8시간. 총 192시간. 케이스당 13분. 불가능하다. "다 못 한다." 팀원들 표정이 굳었다. "그래서 선택한다. 중요한 것만." 이게 리스크 기반 테스트다. 전부 하는 게 아니라 중요한 것부터. 예산 없으면 더 중요하다. 13년 전엔 나도 전부 하려 했다. 밤새워서라도. 지금은 안다. 그건 착각이다. 리스크 매트릭스 그리기 화이트보드 꺼냈다. 가로축: 발생 확률. 세로축: 영향도. 4사분면으로 나눴다. "우선순위 1: 높은 확률, 큰 영향" "우선순위 2: 낮은 확률, 큰 영향" "우선순위 3: 높은 확률, 작은 영향" "우선순위 4: 낮은 확률, 작은 영향" 팀원들이 포스트잇 붙이기 시작했다. 결제 로직 → 1사분면 로그인 → 1사분면 신규 AI 추천 기능 → 2사분면 관리자 통계 페이지 → 3사분면 이용약관 텍스트 수정 → 4사분면 850개 케이스가 정리됐다. 1사분면이 120개. 이것만 해도 충분하다.영향도 측정하는 법 개발팀 리드한테 물었다. "이번 릴리즈에서 결제 로직 변경 있나?" "네, 할부 옵션 추가했습니다." "작년 결제 장애 때 CS 문의 몇 건이었지?" "2300건이요. 환불 처리만 3일 걸렸습니다." 영향도는 이렇게 잰다. 과거 데이터. Jira에서 검색했다. 지난 6개월 Critical 버그. 결제 관련: 12건 로그인 관련: 8건 추천 관련: 2건 Confluence에서 장애 포스트모템 찾았다. 평균 복구 시간, CS 비용, 매출 손실. 숫자가 있으면 설득이 된다. 경영진한테도, 팀원들한테도. "이번엔 결제부터 집중 테스트합니다." 누구도 반대 안 했다. 발생 확률 판단하기 확률은 어떻게 아나. 코드 변경량 본다. Git diff 줄 수. 새 기능 > 기존 기능 수정 > 버그 픽스. 개발자 경력 본다. 시니어가 짠 코드 < 주니어가 짠 코드. 미안하지만 통계적 사실이다. 기술 스택 본다. 검증된 라이브러리 < 새로 도입한 라이브러리. 이번 릴리즈 분석했다.결제 로직: 500줄 변경, 주니어 개발, 새 PG사 연동 → 높음 로그인: 100줄 변경, 시니어 개발, 기존 OAuth → 중간 추천 AI: 신규 기능, 외부 API 의존 → 높음숫자로 보면 명확하다. 감이 아니라 근거다.850개를 120개로 팀 미팅 2일차. "4사분면 케이스는 스킵합니다." "3사분면은 스모크 테스트만." "2사분면은 핵심 시나리오만." "1사분면은 풀 테스트." 팀원 하나가 물었다. "4사분면 버그 나오면요?" "나온다. 근데 치명적이지 않다." "우리가 못 찾으면 유저가 찾는다. CS가 처리한다." "그게 현실이다." 13년 전 나라면 이 말 못 했다. 완벽주의였으니까. 지금은 안다. 완벽은 없다. 우선순위만 있다. 120개 케이스 배분했다. 시니어 팀원 → 1사분면 복잡한 시나리오 주니어 팀원 → 1사분면 단순 시나리오 각자 하루 15개씩. 3일이면 된다. 야근 없이. 자동화는 나중에 팀원이 또 물었다. "자동화하면 더 빠른데요." 맞다. 근데 자동화에도 비용이 든다. 스크립트 작성 시간: 케이스당 1시간 유지보수 시간: 월 20시간 CI/CD 파이프라인 구축: 80시간 툴 라이선스: 연 500만원 예산 없다. 인력도 부족하다. "지금은 수동으로 간다. 효율적으로." "1사분면 테스트만 반복되면 그때 자동화한다." 실제로 작년에 그랬다. 로그인 테스트 3달 연속 1사분면. 그때 Selenium으로 자동화했다. 개인 시간 써서. 경영진은 몰랐다. 팀 생산성만 올랐다고 봤다. 그걸로 충분했다. 개발팀이랑 협상 리스크 매트릭스 들고 개발 리드 만났다. "1사분면 기능 버그 나오면 배포 연기합니다." "2사분면은 핫픽스 가능하면 배포 진행합니다." "3, 4사분면은 다음 스프린트로 미룹니다." 개발 리드가 고개 끄덕였다. "합리적이네요." 리스크 기반 접근의 장점이다. 협상 카드가 생긴다. "전부 테스트해야 해요" → 개발팀: "일정 늦어지는데?" "1사분면만 보장합니다" → 개발팀: "그럼 배포 가능하겠네요." 예산 없어도 영향력은 키울 수 있다. 테스트 실행 3일 일정 시작했다. 첫날: 1사분면 결제/로그인 테스트 둘째날: 2사분면 신규 기능 핵심 시나리오 셋째날: 리그레션, 통합 테스트 팀원들 야근 안 했다. 120개만 하니까 가능했다. 버그 발견: 18건 Critical: 3건 (전부 1사분면) Major: 8건 (2사분면 5건, 1사분면 3건) Minor: 7건 (3사분면) Critical 3건 개발팀에 전달했다. "배포 블로커입니다. 수정 필요합니다." 개발 리드가 우선순위 올렸다. 이틀 만에 픽스 완료. Minor 7건은 백로그로. "다음 스프린트에서 처리하겠습니다." 경영진 보고: "치명적 버그 사전 차단, 일정 준수" 칭찬받았다. 배포 후 모니터링 배포 당일 저녁. 슬랙 알람 울렸다. CS팀에서. "결제 오류 문의 들어왔습니다." 심장 내려앉았다. 1사분면인데. 확인했다. 특정 카드사 무이자 할부 오류. 우리는 테스트했다. 근데 그 카드사는 안 했다. 테스트 환경에 그 카드 없었다. PG사에서 제공 안 했다. 밤 10시에 개발팀이랑 회의했다. 원인 파악, 핫픽스 배포. 새벽 2시 종료. 다음 날 포스트모템 작성했다. "테스트 환경 카드사 목록 확대 필요" "PG사 연동 시 전체 카드사 검증 프로세스 추가" 완벽은 없다 회고 미팅 했다. "우리가 못 잡은 버그 나왔습니다." "그래도 잘했습니다." 팀원들 표정이 어두웠다. "850개 다 했으면 잡았을까요?" 고개 저었다. "모르겠습니다. 테스트 환경 문제니까." "우리는 제한된 리소스로 최선을 다했습니다." "1사분면 집중해서 Critical 3건 사전에 잡았습니다." "하나 놓쳤지만 빠르게 대응했습니다." 이게 현실이다. 예산 없는 QA의 현실. 완벽은 환상이다. 우선순위가 전부다. 경영진 설득 분기 보고 때 자료 만들었다. 슬라이드 1: 리스크 기반 테스트 도입 전후 비교테스트 커버리지: 100% → 15% (숫자는 솔직하게) 치명적 버그 차단율: 75% → 90% 장애 복구 시간: 평균 8시간 → 4시간 팀 야근 시간: 월 80시간 → 월 20시간슬라이드 2: 비용 절감 효과장애 대응 인건비 절감: 월 300만원 CS 비용 감소: 월 150만원 예산 투입: 0원슬라이드 3: 향후 제안1사분면 자동화 투자 시 추가 절감 예상: 연 5000만원CFO가 물었다. "예산 없이 이렇게 했다고?" "네. 팀원들이 똑똑하게 일했습니다." "내년 자동화 예산 검토하겠습니다." 처음으로 긍정적 답변 들었다. 다른 팀에 전파 타 팀 QA 리드가 찾아왔다. "리스크 매트릭스 어떻게 만드나요?" 화이트보드 다시 꺼냈다. 설명했다. "과거 데이터 찾으세요. Jira, 장애 로그, CS 문의." "영향도는 숫자로. 발생 확률은 코드 변경량으로." "4사분면 나누고 1사분면만 집중하세요." 그 팀도 예산 없었다. 우리 방식 적용했다. 두 달 뒤 만났다. "팀 야근 절반 줄었어요." QA 커뮤니티에도 올렸다. 노하우 공유. 댓글 많이 달렸다. "우리도 예산 없는데 해볼게요." "리스크 매트릭스 템플릿 공유 가능한가요?" Confluence에 정리해서 링크 걸었다. 1년 후 올해 자동화 예산 나왔다. 3000만원. 적다. 근데 시작할 수 있다. 1사분면 케이스부터 자동화했다. 우선순위대로. 6개월 만에 40개 케이스 자동화. 수동 테스트 시간 30% 줄었다. 그 시간에 2사분면 커버리지 올렸다. 리스크 기반 접근은 계속한다. 예산 있어도. 효율의 문제니까. 경영진이 이제 묻는다. "리스크 1사분면 몇 개죠?" 전부 테스트했냐고 안 묻는다. 팀원들도 바뀌었다. 케이스 수로 자랑 안 한다. "Critical 버그 3건 잡았습니다" 이렇게 말한다. 예산은 핑계다 솔직히 말한다. 예산 있으면 좋다. 툴 사고, 교육받고, 인프라 구축하고. 근데 예산 없다고 품질 포기할 순 없다. 우리한테 있는 건 머리다. 리스크 분석, 우선순위, 과거 데이터. 13년 하면서 배웠다. 비싼 툴보다 똑똑한 전략이 낫다. 물론 둘 다 있으면 최고다. 근데 하나만 고르라면 전략. 내년엔 예산 더 받을 것이다. 리스크 기반으로 성과 냈으니까. 그때도 이 방식은 유지한다. 돈으로 품질 사는 게 아니니까.예산 없어도 머리는 있다. 그걸로 이긴다.

품질은 협업의 결과다 - 개발팀과 싸운 날

품질은 협업의 결과다 - 개발팀과 싸운 날

품질은 협업의 결과다 - 개발팀과 싸운 날 월요일 오전 10시 회의실에 들어갔다. 개발팀 리드 석진이 먼저 말했다. "이번 배포, 일정 당겨야 합니다." 나는 테스트 계획서를 펼쳤다. 283개 케이스. 리그레션 포함하면 최소 5일 필요하다. "5일 드려야 합니다." "3일 안에 가능하지 않나요?" 아니다. 불가능하다."결제 모듈 변경됐어요. 여기 리스크 높습니다." 석진이 한숨 쉬었다. "QA팀이 병목입니다. 솔직히." 그 말을 들은 순간 뭔가 확 올라왔다. 13년 하면서 수백 번 들은 말이다. QA가 느리다. QA가 막는다. QA 때문에 출시가 늦다. "병목이 아니라 안전망입니다." 내 목소리가 차가워졌다. 회의실 공기가 얼었다. 지난 3개월을 돌아보다 커피를 뽑았다. 네 번째다. 지난 분기 우리가 잡은 크리티컬 버그. 17건이다. 배포 전에 잡았다. 만약 그게 프로덕션에 나갔다면? 생각만 해도 끔찍하다. 2월에 결제 모듈 오류 놓쳤다. 내가 승인했다. 개발팀이 "사소하다"고 했다. 배포 후 30분 만에 장애 터졌다. 고객 클레임 47건. 매출 손실 추산 불가. 포스트모템 회의 3시간. 그때 석진이 뭐라고 했나. "QA에서 잡았어야죠." 맞다. 내 책임이다. 그런데 왜 테스트 시간은 안 주나. 오후 2시, 다시 회의 기획팀 리드도 왔다. 경은이다. 그는 내 편이다. 보통은. "일정 조율 필요합니다." 석진이 자료를 띄웠다. 개발 완료 예정일. 배포 목표일. 사이에 QA 기간 3일. "리그레션 빼면 되지 않나요?" 내가 웃었다. 웃긴 소리다. "리그레션 빼면 뭘 보장하죠?" "이번에 변경된 부분만 집중 테스트." "결제 모듈이 회원 모듈이랑 연동돼요. 주문 히스토리도 영향받고요. 전체를 봐야 합니다." 석진이 답답한 표정이다. "현실적으로 생각하세요. 경쟁사가 벌써 출시했어요." "경쟁사는 장애 안 나나요?" 내가 경쟁사 모니터링 자료를 꺼냈다. 지난달 그들의 앱 다운. 3시간. 트위터에 난리 났다. 우리는 그러면 안 된다.팀원 지영이가 말했다 회의 끝나고 지영이가 왔다. QA 5년차다. "팀장님, 3일이면 못 합니다." "알아. 나도 알아." "개발팀은 우리를 뭘로 보는 걸까요." 그 질문에 답을 못 했다. 13년 했는데도 모르겠다. "협력 부서인데 왜 맨날 싸워야 해요." 지영이 목소리가 떨렸다. 피곤한 거다. 나도 피곤하다. "지영아, 우리가 싸우는 게 아니야." "그럼요?" "우리는 품질을 지키는 거야." 진부한 말이다. 그런데 달리 할 말이 없다. 수요일 새벽 2시 결국 배포했다. 3일 테스트했다. 내가 승인했다. 리스크 문서에 사인했다. "결제 모듈 엣지 케이스 미검증" 배포 후 1시간. 슬랙에 빨간불 떴다. "결제 오류 발생" 심장이 멈췄다. 전화가 왔다. 석진이다. "결제가 안 됩니다." "알아요. 확인 중입니다." 팀원 3명 호출했다. 로그 뜯었다. 원인 찾았다. 예상했던 바로 그 케이스다. 엣지 케이스. 특정 결제 수단 + 쿠폰 중복 사용 시 에러. 테스트 계획서 283번 케이스. 리그레션 항목이었다. 새벽 4시, 긴급 회의 전화 회의다. 목소리들이 날카롭다. "왜 못 잡았습니까?" 경영진 질문이다. "테스트 기간이 부족했습니다." 내 대답이다. "그래도 크리티컬은 잡았어야죠." 맞다. 맞는 말이다. 그런데. "5일 요청했습니다. 3일 주셨습니다." 회의실이 조용해졌다. 석진이 말했다. "개발 일정이 촉박했습니다." "그래서 품질을 포기합니까?" 내 목소리가 떨렸다. 화난 거다. 13년 만에 처음으로 회의에서 목소리 높였다. 목요일 오전, 포스트모템 회의실에 모였다. 8명이다. 화이트보드에 타임라인 그렸다. 배포 시간. 장애 발생. 복구 완료. 피해 규모 집계했다. 거래 실패 78건. 고객 문의 124건. 매출 손실 약 3,200만원. "근본 원인이 뭡니까?" 내가 물었다. 석진이 답했다. "엣지 케이스 테스트 누락." "왜 누락됐습니까?" "시간이 부족했습니다." "왜 시간이 부족했습니까?" 질문을 계속했다. Why를 5번 물었다. 결국 나온 답. "일정 압박." 그리고 더 근본적인 원인. "팀 간 신뢰 부족."금요일, 달라진 것 석진이 내 자리에 왔다. "커피 한잔 할까요?" 카페테리아 갔다. 둘이 앉았다. "죄송합니다." 석진이 먼저 말했다. "저도요." 내 대답이다. "제가 일정만 생각했어요. 품질은 당연히 지켜질 거라고." "저도 QA가 다 막아야 한다고 생각했어요." 우리는 둘 다 틀렸다. 품질은 QA만의 책임이 아니다. 개발만의 책임도 아니다. 기획도, 디자인도, 모두의 책임이다. "다음부터는 달라야 합니다." 석진이 말했다. "네. 달라야죠." 새로운 프로세스 월요일 아침. 전체 회의 소집했다. 개발팀, 기획팀, QA팀. 12명 모였다. "품질 협업 프로세스 만들겠습니다." 화이트보드에 썼다. 1단계: 기획 단계부터 QA 참여요구사항 리뷰 리스크 사전 식별2단계: 개발 중 지속적 소통데일리 싱크업 15분 변경사항 즉시 공유3단계: 현실적 일정 수립테스트 기간 = 개발 기간의 30% 리그레션 필수 포함 버퍼 20% 확보4단계: 공동 책임품질 지표 공유 팀별 KPI에 품질 항목 추가석진이 끄덕였다. 기획팀 경은이도 동의했다. "일정은 늘어나겠네요." 경은이 말이다. "네. 대신 장애는 줄어듭니다." 내 대답이다. 한 달 후 새 프로세스로 첫 배포했다. 테스트 기간 7일 받았다. 개발 완료 후 하루 버퍼도 있었다. 283개 케이스 전부 돌렸다. 리그레션 포함. 크리티컬 버그 3건 잡았다. 개발팀이 즉시 수정했다. 배포했다. 새벽 12시다. 슬랙 모니터링했다. 1시간. 2시간. 3시간. 초록불이다. 이슈 없다. 석진한테 메시지 보냈다. "배포 안정적입니다." 답장 왔다. "고생하셨습니다. 팀장님 덕분입니다." 아니다. 우리 모두 덕분이다. 지영이가 물었다 "팀장님, 이제 개발팀이랑 안 싸워요?" 웃었다. 싸움은 아니었다. "우리는 원래 안 싸웠어. 품질을 지키려고 했던 거지." "그럼 이제는요?" "같이 지킨다." 품질은 협업의 결과다. 13년 만에 확실히 깨달았다. QA가 혼자 막는 게 아니다. 개발이 혼자 만드는 것도 아니다. 기획이 혼자 기획하는 것도 아니다. 우리는 팀이다. 지금 퇴근길이다. 8시다. 늦지 않다. 엘리베이터에서 석진 만났다. "내일 스프린트 플래닝에서 QA 일정 먼저 잡죠." "네. 먼저 잡아주세요." 웃으며 헤어졌다. 차에 올랐다. 핸들 잡았다. 한숨 쉬었다. 13년 했다. 이제야 제대로 하는 거 같다. 품질은 QA의 책임이 아니다. 품질은 우리 모두의 약속이다. 배포 후 장애 없이 잠드는 밤. 이것만큼 좋은 게 없다.품질은 혼자 지키는 게 아니다. 같이 만드는 거다.