실리콘밸리에서 살아남기 #6
예전부터 알고리즘 문제 준비를 하며 항상 들던 생각이 있다.
"정말 이걸 실전에서 쓰긴 할까? 이런 문제들로 개발 역량 평가가 되긴 하는건가? 릿코드 문제들을 보고있자니 내가 그동안 회사에서 접한 문제들과는 많이 다르게 느껴지는데... 하지만 대부분의 회사들이 이런 문제들을 낸다니 공부는 해야겠지..."
문제의 복잡함 보다는 실제로 이 사람의 코드가 잘 읽히는지, 잘 작동하는 코드를 빠르게 적을수 있는지, 같이 일할때 대화 방식이 어떤지를 인터뷰 프로세스에 더 반영해야 하는거 아닐까 하는 생각을 항상 했다. 물론 회사들은 인터뷰이가 코딩 문제를 풀어나가는 과정을 본다곤 하지만, 개인 경험상 문제는 잘 풀어도 팀에서 잘 어울려 일하지 못하는 사람들을 여럿 봤다. 물론, 모든 것을 다 테스트 해보기엔 한계가 있다는걸 알곤 있다.
그런데 왠걸. 이번에 구직 생활을 꽤 오래하며 인터뷰를 봤었는데 이미 회사들은 다양한 장르의 인터뷰를 내고 있었다. 내가 생각했던것 보다 훨씬 다양해서 인터뷰를 보다보니 오히려 어디까지 준비가 되어있어야 하는지 가늠이 안갈 정도로 회사마다 각자의 프로세스가 존재했다. 다들 정형화된 인터뷰를 벗어나 짧은 시간 내에 효과적으로 알아볼수 있는 각자만의 방법을 찾아나가고 있는듯 해 보였다.
걔중 인상적이었던 인터뷰들에 대해 얘기해보려 한다.
<특징: 인터뷰어에 따라 너무 다름>
실리콘 밸리를 대표하는 소프트웨어 대기업. 인터뷰가 어렵기로 유명하다. 감사하게도 지인을 통해 referral을 받아 인터뷰를 진행했다. 시니어 레벨이 아니면 알고리즘만 본다고 얘기를 들어서 릿코드를 통해 준비를 철저히 하였는데, Hard 문제들이 자주 나온데서 회사 필터로 나오는 hard 문제들을 대부분 풀어보았다.
내가 인터뷰 볼 당시, 회사 분위기가 안좋다거나 hiring freeze 라는 얘기가 자주 오갔다. 더군다나 당시 layoff 를 크게 했었는데, 그 과정이 평소와 다르게 냉혹해 회사에 실망을 한 그 회사 사람들이 나에게 지금은 올곳이 아니라고 얘기했지만, 당시 난 더운밥 찬밥 가릴 처지가 아니었기에 당연히 진행했다.
다른 회사 인터뷰에서는 주로 내가 지원한 팀의 팀원들이 인터뷰 진행할 때가 많았는데, 여기선 완전 랜덤한 팀의 개발자들과 인터뷰를 봤다. 리크루터와는 이메일로만 얘기를 주고받았고, 두번에 걸친 개발자 인터뷰를 봤다.
예상외로, 두 번의 인터뷰 다 어려운 알고리즘 문제라기보단 얼마나 버그 없이 잘 돌아가는지, 꽤 많은 edge case를 얼마나 잘 처리 할수 있는지에 중점을 둔 문제들이었다. 다 무난히 잘 풀었고 뒤에 조금 남은 시간도 이런 저런 질문으로 알차게 잘 보냈다. 리크루터도 분명 positive feedback 을 들었다고 했다.
하지만 결과적으로 reject. 이유는 headcount 가 변해서 포지션이 없어졌다고 했다. 이번의 좋은 퍼포먼스는 나중에 인터뷰 볼때 적용이 될수도 있다고 리크루터가 얘기를 해줬지만 딱히 기대는 없었다. 많은 준비와 기대를 해서 그런지 마음이 좀 힘들었지만 인터뷰를 본것에 감사하며 넘기기로 했다. 또 다른 한편으로는 내가 인터뷰에서 아무리 잘했다고 생각 해도 결과는 알수 없다는 걸 느끼며 씁쓸하게 넘어갔다.
<특징: 알고리즘 설명서를 보며 implement 하기>
LinkedIn 을 통해 리크루터가 연락와서 인터뷰를 보게된 스타트업이었다. 리크루터와 줌 미팅하고 몇일 이후 그 쪽 개발자와 technical interview 를 봤는데, 그 동안 본 인터뷰들과는 달라서 신선했고, 인터뷰 문제가 재밌었다.
인터뷰 문제는 K-mean 알고리즘을 구현해보라는 것이었다. 알고리즘을 모를수 있으니 description 도 같이 줬는데, 보통의 릿코드 문제와 달라 잠시 당황하긴 했지만 이내 침착하게 설명을 읽고 코드를 적어나갔다. 당시 나는 처음 보는 알고리즘이어서 설명문을 읽으며 알아나갔다.
나중에 찾아보니 다양한 방법으로 문제를 풀수 있었는데, 난 기본에 충실한 iteration 으로 푸는 방법으로 구현했었다. 주로 리트코드 같은 알고리즘 문제는 그 핵심 알고리즘만 알면 쉽게 풀수 있기 때문에 머리로 풀고 나면 코드를 적는 데는 시간이 많이 걸리지 않았는데, 이번 문제는 완전 새로운 알고리즘의 logic 을 배워가며, 또 unclear 한 건 물어봐 가면서 풀어나가서 새로웠다.
대화도 잘 되었고, 문제도 잘 풀었다고 생각했지만 결과는 reject 였는데 이유는, again, "shift of focus, changing the headcount" 였다 (야 너두?). 그래도 함께 일하는 업무 환경을 잘 구현한 인터뷰중 하나였지 않았나 생각이 들고, 구현후 작동이 잘 되어 재밌었던 기억이 난다.
<특징: 피말리는 n차 인터뷰...>
개발자혹은 컴퓨터 관련 학과 학생이라면 다들 알만한 운영체제를 개발한 회사가 있다. 리눅스기반 공짜 운영체제인데 나는 예전 대학생 시절 라즈베리 파이 혹은 mini PC 위에 자주 돌리곤 했었다. 이번 구직중 LinkedIn 으로 열심히 포지션들을 찾다보니 이 회사도 개발자들을 뽑고있었다. 개발자라면 "FAANG 이 최고의 회사지~" 라고 생각할수 있겠지만, 또 다른 avenue 에는 유명한 오픈소스 프로젝트에 기여하며 어디서든 자유롭게 (주로 이런 회사 사람들은 full remote 에 일하는 곳도 나라를 따지지 않고 자유로움) 일하는 것도 낭만적(?)인 일이라 생각을 했다 (굉장히 개인적인 견해입니다 ㅎㅎ...). 찾아보니 회사는 for-profit 회사였고, 내가 잘 모르는 다른 프로덕트들도 많이 진행하고 있었다. 그 중, 내가 지원한 포지션은 클라우드관련 팀이었다.
OS 개발회사라니... 하는 생각을 하며 인터뷰 프로세스 초반에는 뽕에 차올라있었다. 그런데 인터뷰를 진행하며 그 마음은 짜게 팍 식었다.
일단, technical interview 를 보기 전까지의 screening 이 일반적인 tech 회사랑은 너무 달랐다. 시작은 resume 제출 이후, recruiter 와의 연결이었다. 여기까지는 다른 회사와 비슷했다.
이후, 첫번째 과제는 written assignment. 30개가 넘는 질문들이 있었는데, 질문 하나 하나 진지하게 고민하고 생각해가며 3일 정도 걸려 디테일하게 답했다. 다른 회사들의 전형적인 인터뷰와 다르게 나를 인간적으로 알고 싶어 하는게 좋아보였고, 또 회사 자체에 대한 적지않은 기대감? 이 있어서 그런지 공을 많이 들여 답변지를 적어 나갔다. 질문들이 지금 봐도 재밌긴 한데, 어떻게 하다가 개발자가 되었는지, 학교에서 Computer Science 를 왜 선택했는지등, 지금까지의 나를 되돌아보게 하는 질문들이 많았다. 라운지 체어에서, 커피를 마시며, 보사노바를 들으며, 여유롭게 하지만 생각을 많이 하며 답을 했고, 답을 하면서 보니 그래도 꽤 열심히 살아 온것 같은 나를 토닥이며 어떻게 보면 힐링의 시간을 가진것 같기도 하다 (미래의 나: 쾅쾅! 여기서 그만둬라고!).
그러고 나서 온라인 IQ 테스트를 보내줬다. 개발자 스크리닝에 IQ 테스트는 또 첨인데, 예전 FinTech 회사 지원할때도 본적은 있어서 되면 되겠지 하는 생각으로 마음 편하게 봤다.
IQ 테스트를 통과하고 나서 축하한다면서 다음 스텝에 대한 설명이 왔다. 일단 통과한것에 뭔가 기분은 좋아졌는데, 다음 과제는 Take home mini project 였다.
처음으로 아차싶었던 순간이었다. 이 회사는 뭐지? Written Test, IQ Test, 이젠 Mini project 까지? 물론 짧은 시간안에 여러 지원자들을 훑어야 하니 filtering 에 공을 드릴수는 있지만, 이렇게까지 리소스를 많이 소비한다고? 이 때부터는 지원자인 나의 시간도, 회사의 시간과 돈도 아까워 보였다. 너무 일반적이지가 않아서 처음으로 Glassdoor 에서 인터뷰관련 리뷰를 읽어보기 시작했는데, 다들 몇달씩 걸렸다, 시간만 허비했다는 둥 욕이 많았다. 좋은 리뷰는 주로 accept 한 친구들 ㅎㅎ... 하지만 하나라도 아쉬운 건 나였고, 당시 구직 시기 초반때라 몇달이 걸리더라도 다른 인터뷰들과 병행하면 된다는 생각에 계속 진행해보기로 했다.
Take home 은 시작과 동시에 주어진 시간 내에 끝내고 제출 해야 했는데, 36 시간 정도였던거 같고, solution 과 그 외 unit tests 들을 적어서 냈던걸로 기억한다. 하면서는 꽤 재밌어 하면서 열심히 했다. 전과 같은 맥락으로, 당시 릿코드만 주구장창 파던 때라 새로운걸 하니 환기도 되고 기분전환도 되었던것 같다.
Take home 제출 이후, 드디어 Technical Phone Interview 를 보게되었다..! 이 쯤됬으면 한 1-2 스텝 정도 남았으려나 했는데, 이 첫 phone interview 가 early stage 라고 interview process 페이지에 적혀있었다 (아참 무려 인터뷰용 웹페이지가 따로 있었다). 이후로 Phone Interview 를 2 번 더 보았지만 결국 떨어졌다. 나중에 Glassdoor 리뷰를 좀 더 찾아보니 8차? 9차? 까지 인터뷰했었다는 (도시괴담같은...) 얘기들이 있었는데 오히려 이정도에 떨어진걸 감사했어야 하는지. 환기되고 다 좋았는데, 인풋 대비 아웃풋을 생각해 본다면, 정말 시간 낭비 많이한 회사라고밖에 얘기 못하겠다. 물론 마지막까지 남은 최종 지원자들은 정말 대단한걸 해낸 기분이 들거 같긴 하다 ㅋㅋ
<특징: 잘 모르는 분야를 지원하면 결국 나보다 더 맞는 지원자가 있음>
구직 초반에는 차분한 마음으로 여유롭게 공부하며 지원도 했지만, 그 기간이 4개월을 넘어 갈때부터 마음이 조급해지기 시작했고, 그 때부터는 전문 분야인 Backend 말고도 Full Stack 지원도 많이 하기 시작했다 (현실이여...). 그 때 Fullstack (backend heavy) 로 지원한 회사 중 하나였던 회사이다. 완전 초창기 스타트업이었고, 아직 직원도 많지 않아 보였다. Phone interview 2번 하고 On-site 까지 갔지만 reject. 코딩 인터뷰는 무난히 잘 봤는데 system design 을 못본거 같다.
다른 회사들과 다르게 onsite 인터뷰를 보러 샌프란시스코 오피스로 오라고 했었는데 (코비드때문에 주로 파이널도 zoom 으로 봤었다), 와이프가 응원차 샌프란 나들이 겸 따라왔었다. 내가 인터뷰를 보는 동안 자기는 주변 카페에서 시간 보낸다며 갔었다가, 인터뷰 끝나고 건물 앞에서 만났는데, 마침 얘기하는 동안 시스템 디자인 인터뷰 본 회사 엔지니어가 내 뒤로 나오는 것이었다 (왜 하필...). 우리 쪽으로 지나갔고, 서로 눈인사를 해야하나 말아야 하나 하는 그런 어색한 상황이 ㅎㅎ. 인터뷰 끝나면 쉬더라도 멀리 가서 쉬는걸 추천한다.
또 다른 한가지, 인터뷰를 보면서 주어진 문제를 잘 풀긴 했으나 (system design 빼고), last round 까지 가니 결국엔 그 position 에 얼마나 fit 하는지를 많이 보는듯 했다. front-end 를 잘 모르는 나에게 반복해서 관련 질문이 들어올때마다 "잘 하지는 못하지만 준비되어있다" 는 말로 커버하는데는 한계가 있었고, 인터뷰중에도 더 맞는 지원자를 찾아가려하는 강한 느낌이 들었다.
<특징: 개발 knowledge 도 확인>
독일에서 일하는 사람들이 많았던 회사였다. 회사는 YCombinator job board 에서 찾아 지원했고 연락이 와서 인터뷰를 보게되었다. Postgres, Python, AWS 를 많이 쓴다고 했고, 내가 잘 아는 stack 을 써서 꽤나 기대했던 회사였다. 첫 라운드는 technical interview 였는데, 코딩 문제는 아주 단순했고, 그 이후에 나온 Python specific, Postgres specific 질문들에 대답을 제대로 못했던것 같다.
코딩문제들만 주구장창 풀던 나는 또 한번 그 외에 지식도 쌓아야겠다는 생각을 하며 다음 인터뷰를 준비했다.
<특징: non-algo 구현에 몰빵했었던 인터뷰>
잘 모르는 회사였는데, 가끔 동네 다운타운에 놀러가면 보였던 회사였어서 찾아보니 오픈 포지션들이 있어서 지원했다 (실리콘 밸리 특이점 일까요?). 출퇴근하기는 용이하겠다는 생각과 함께 시작했다가 첫 technical interview 라운드에서 탈락.
첫 라운드 문제가 홈 security 카메라 서버 구축하기 였다. One end 에서는 카메라가 실시간으로 데이터를 보낼수 있어야 하고, the other end 에는 유저가 실시간으로 데이터를 읽거나 보낼수 있어야 했다. 인터뷰 중 HTTP Long Polling 을 처음 써봤었는데, 꼭 나중에 프로젝트에서던지 회사에서던지 제대로 써보고 싶었다. 인터뷰어가 찾는 개발 지식이 많이 보이지 않아서 탈락한듯 하여 씁쓸했지만, 또 새로운 걸 배웠다는 것에 의미를 두었다.
<특징: 프레젠테이션..?>
본질은 하드웨어 회사이지만 소프트웨어 회사와 다를바 없이 개발자들을 많이 뽑고, 본인들의 머신에서 나오는 수많은 데이터를 "제대로" 처리하고, 관련 소프트웨어를 자체적으로 "제대로" 만들기로 유명한 회사. 나는 배터리 관련 개발부서팀과 인터뷰를 봤었다. 일반 소프트웨어 회사들 인터뷰와 비교했을때 코딩 문제의 난이도가 높진 않았는데, 배터리에 대한 기본 지식에 대해 꽤나 물어봤었고, 또 특이한 점으로는 마지막 onsite 인터뷰때 모든 팀원 앞에서 프레젠테이션을 했어야 했다. 다행히 그 전 회사에서 개발했던 기록이 조금 남아있어서 기억을 더듬으며 프레젠테이션을 준비했다. 프레젠테이션 할 당시에는 zoom 으로 했는데 생각지 못한 질문들에 머리가 하얘졌었다. 모르는 것에 대한 질문을 했는데, 모른다고 대답하면 될것을, 조용히 답을 찾다보니 커뮤니케이션이 더 잘 안된것 같다.
<특징: 정이 많은 hiring manager>
구직 활동을 하다 보면 정말 미국에는 회사가 많구나 하는 생각이 들었는데, 여기도 난생 처음 듣지만 정말 괜찮아 보였던 회사로 기억에 남아있다. 인터뷰 프로세스 자체에서는 딱히 특이한 점은 없었는데, 재밌었던건 그 포지션의 hiring manager 가 정말 날 좋아했었건것 같다 (at least 그렇게 생각이 들게 얘기를 했다 ㅋㅋ).
중국인 중년의 매니저였는데, 약간은 어눌한 액센트로 너무 너랑 일하고 싶다, 너의 백그라운드가 맘에 든다, 지금 얼른 사람을 뽑아야 하는데 너가 와야한다, option 이 생기면 우리 팀을 최우선으로 삼아달라 (뽑아주고 얘기하지 ㅎㅎ...) 는 등, 플러팅이 장난이 아니었다. 좀 의외였는데, 나의 뭘 보고 이렇게 까지 좋아했었나 하는 생각이 그 때 당시에도 들었다. 그래서 결과를 기대하고 있던 회사기도 했는데, 파이널 이후 reject.
주로 떨어지면 이메일로 알려주는데, 이번엔 또 특이하게 하이어링 매니저가 직접 줌을 하자고 연락왔다. 너무 뽑고싶었고 어쩌고 저쩌고 이러쿵 저러쿵, 그렇지만 좀 더 맞는 다른 지원자를 뽑기로 했다고. 당시 구직한지 꽤 되었었고, 이쯤되다보니 뭘 더 어떻게 준비해야 하나 하는 생각에 조금은 막막하다고 느끼던 찰나, 포지션의 하이어링 매니저가 나의 레주메에서 부족하다고 느꼈던 부분에 대해 (묻지도 않았는데) 지적해 주었고, 그래도 진심으로 대해준 그 분에게 인터뷰를하며 처음으로 상대방에게 고마운 마음이 들었던 것 같다.
많은 인터뷰 이후, 내가 내린 결론은, optimal 한 한가지의 인터뷰 프로세스는 없다 였다. 리트코드와 디자인 시스템 공부는 그 시작단계일 뿐, 지금 일을 하고 있으면 그 곳에서 쓰는 tool 에 대한 전문성도 길러야 하고, 전반적인 개발에 대한 ideology 도 있어야 하고, 앞으로 하고 싶은 일에 대한 사전 지식도 있어야 한다. 그 뿐만아니라, team 이 원하는 개발지식도 있어야 하고, 또 그 모든것이 충족되더라도 짧은 대화를 통해 케미가 좋지 않으면 떨어질수도 있다. 대학 지원보다는 다양한 방면으로 평가를 받지만, 결국 리소스는 정해져 있기 때문에, 정해진 바운더리내에서 결론을 내릴수 밖에 없다. 하루하루 할일이 쌓이다 못해 넘쳐흐르는 회사 멤버들도, 매우 여유롭지만 내 시간을 많이 허비하고 싶지 않은 회사 멤버들도, 비슷한 시간 내에 수많은 지원자들을 훑어야 한다. 그리고 회사를 위한 최고의 결론을 내려야 한다. 그러기에 그 프로세스 조차 유기적으로 변해갈수 밖에 없고, 그 결과, 답을 정해놓고 가기 보단 거의 그 회사 culture 에 가깝게 변해간다. 그렇게 다양성이 자연스럽게 추구되고, 또 그 속에서 세상을 살아가는 방법에는 정해진 답이 없다는 것을 느끼게 되었다.