2020년 4월 11일 토요일

아마존 근무 1년

1년 전쯤 아마존 인터뷰 후기를 남겼었는데, 근무를 좀 하게 되면 글을 남겨봐야 겠다고 생각만 하다가, 오늘 근무 1주년 후기를 써볼까 한다.

근무 환경

우선 출퇴근 등 일반적인 근무 환경을 생각해보자면, 출퇴근이 자유롭고 재택근무(WFH, Working From Home)를 언제든 할 수 있다.

출퇴근 시간은 자신이 마음대로 정할 수 있다 (적어도 우리팀은 그렇다. 하지만 팀에 따라 달라질 듯)  우리 팀의 경우, 젊은 사람들이 많아서, 10시쯤 출근해서 6-7시 쯤 들어가는 사람이 많다. 나는 아이들도 있고, 퇴근하면 저녁 준비도 해야 하니까 8시-8시반쯤 회사에 도착해서 4시-4시반쯤 사무실서 나온다. 이렇게 일찍 퇴근하려니까 점심시간을 좀 아껴서 쓰는 편이다. 샌드위치를 가져가서 먹으면서 일을 한다든지 건물 내의 카페테리아에서 해결하든가.. 사무실이 있는 건물 1층에 아마존 고(Amazon GO)가 있는데 거기서 샌드위치나 스시를 가져다가 사무실서 먹으면서 일한다. 이 방법을 많이 쓰는데 먹을 건 별로 없지만, 30초면 음식을 가져 나올 수 있다는 장점이 있다. 그리고 내가 좋아하는 코카콜라 1캔이 1불 (0.99?) 밖에 안한다.

동료들하고 먹을 때가 있는데, 주로 Food truck을 이용한다. 시애틀에는 정말 수많은 Food truck이 있어서, 여러가지 음식을 비교적 저렴한 가격에 먹을 수 있다.  식당에 가서 먹게 될 경우는 take away로 먹는데, 주로 가는 곳은 버거 집 (Great State Burger - 싸고 맛있고 가깝다 / Shake Shack burger - 가깝고 맛은 있으나 대기 시간이 너무 오래 걸려서 잘 안가게 됨, 정말 가고 싶을 때 큰맘먹고 감) 과 Buffalo wild wings.  버팔로 와일드 윙스는 우리 팀 동료들이 가장 좋아하는 외식 장소로, 매주 금요일마다 있는 Nice team lunch (이건 거의 강제로 같이 먹어야 함) 에서 가장 자주 찾는 치킨 가게.  처음에는 기다리는 시간이 1시간이 넘어서 가고 싶기는 하지만 시간이 너무 오래 걸려 안찾다가, 요즘 음식을 주문하고 음식이 나오는 프로세스를 개선해서 대기 시간을 대폭 줄인 결과, 1시간 내에 음식을 다 먹고 사무실로 돌아올 수 있게 되었다. 

재택근무가 매우 자유로운데, 뭔가 집에 일이 있거나 집에서 일을 하고 싶을 때는 팀 메신저로 그냥 알려주고 안나와도 된다.  회의가 있으면 원격으로 할 수 있고, 와이파이만 있으면 집에서 일을 하는데 아무 지장이 없으므로 자주들 이용한다.  특히 지금 같이 COVID-19이 창궐한 이때, 거의 한달을 집에서 일하고 있는데, VPN과 회사 전용 메신저가 있으니 사실상 일하는데 지장이 없기는 하다.  그래도 사무실서 얼굴 보면서 물어보고 일하는게 백배는 나은거 같다.

사용 언어와 개발 환경

처음 회사에서 일할때 정말 적응하기 어려웠던것이 개발 환경이었다. 아마존이니까, AWS를 쓰는 것은 기본. AWS portal (console)을 자주 쓴다. 그리고 아마존 고유의 개발 환경이 있는데 이런 것들을 배우고 문제가 생겼을때 해결하는 것이 어려웠다.  고유 환경이라서 CodeProject나 이런데서 찾아 볼 수 있는 것이 아니므로..  내부에도 그런 문제/응답 보드들이 있어서 문제에 대한 해결을 그런데서 찾을 수 있기는 하다.  동료들 중에 해당 경험이 있는 사람을 물색해서 물어보는 것이 가장 좋다.

우리 팀은 Java를 가장 많이 쓴다.  웹 서비스 쪽은 Java를 주로 쓰고, 웹 사이트(UI)가 있는데 이쪽은 Node.js랑 javascript를 쓰다가 요즘 React로 마이그레이션 하는 중이다.  코드는 모두 개방되어 있어서 다른 팀 소스 코드도 다 볼 수가 있다.  괜찮은 예제는 내부 소스에서 찾는 경우가 많다.  코드를 작성해 올리면 서로 간에 peer review를 해야 한다. 나의 경우, 하루 중 일부의 시간을 코드 리뷰에 할애한다. 코드 작성에 대한 팀내 best practice를 배울 수 있고, 여러 옵션이 있을 때 왜 이런식으로 했는지 등을 논의하기도 한다. 예전에 다른 미국 회사에 근무할 때 (20년 전이라 비교하기가 어렵긴 하나)  코드 리뷰를 inspection / walk through라는 이름으로 수행했는데, 회의 시간을 따로 잡고 회의를 공지하고 프린트해간 diff file을 보면서 한줄 한줄 읽어가며 리뷰를 했던 경험이 있다.  이 방식은 시간이 많이 걸리고 종이도 낭비되나, 지금 방식은 온라인으로 내가 원하는 시간에 다른 사람의 코드를 리뷰하고 웹 사이트에 직접 코멘트를 남기니 참 편리하고 좋은 방식이다.

우리 팀은 Sprint 방식으로 할일을 정하고 일의 진도를 체크한다. 스프린트 주기는 2주인데, 2주마다 스프린트 회의를 통해 자신이 할 capacity를 정하고 계획을 세운다.  Story는 필요할 때마다, 또는 새로운 프로젝트가 생길때마다 관련 사람들이 작성하여 올린다. 2주마다 우선순위를 정하고, 포인트를 정하는 회의를 한다.

매일의 진도는 Stand-up meeting에서 체크한다.  오전 10시 반에 스탠드업 미팅을 통해서 어제 한일과 오늘 할일, 막히는 부분은 없는지, 어느 부분에 도움이 필요한지 등등을 의논한다. 처음에 이 회사에서 일할때 매일해야 하는 이 미팅이 부담스럽고 걱정스럽고 했었는데 (왠지 내가 못한 부분이 드러나는 거 같아서), 회의를 통해 다른 사람들이 무슨 일을 하는지 알 수 있고, 내가 막히는 부분이 있을때 도움을 청할 수 있어서 나에게는 이제 매우 중요한 시간이 되었다.

전반적인 일 진행 방식

이 팀에서 일하면서 굉장히 특이하다고 여긴 부분이 있는데, 과거에 일하던 회사에서는 팀에 배정되면, 각자 할일이 배정이 된다.  예를 들면 A라는 서비스는 누가 담당, B라는 서비스는 누가 담당.. 뭐 이런식으로 담당을 정하고,  해당 업무와 관련한 부분에 에러가 생기거나 개선할 부분이 생기면 그걸 그 사람이 담당하는 방식이었다.  우리 팀은 모두가 모든 서비스에 owner이다. 누구든 어느 서비스의 일이든 그때 그때 assign받아 수행하는 방식이다.  물론, 처음에 디자인을 했거나 더 많은 시간을 어느 서비스에 할애 했다면 어느 서비스를 더 잘아는 사람은 존재하지만, 그 사람이 그 일만 담당하는 것이 아니다.  1년이 지난 지금까지도, 아직 해보지 않은 부분을 담당하게 되는 경우가 있다.  그러면, 우선 이 부분에 대한 wiki를 찾아보고, 경험이 있는 팀원을 찾아본다. 그리고 그 경험을 듣고 방법을 찾는다. 

이렇게 일을 하니까, 누군가 팀을 떠난다고 해도 당장 빵꾸나는 일은 없다.  누가 휴가를 가도, 다른 사람들이 할 수 있다.   

마무리

1년 지난 지금, 작년에 나와 같은 날 같은 팀에 들어왔던, 호주 사람이 팀을 그만 두었다.  앞서 작성했던 인터뷰 후기에도 있는데, 그 사람과 같은 날 멜번에서 인터뷰를 봤다. 그리고 몇달후 같은 팀에 배정된 것을 알고, 꽤 기뻤다. 그 분은 Senior SDE여서 아는 것도 정말 많고 경험도 많고, 설명도 정말 잘 해주셨었다. 정확히 1년만에 팀을 떠난다고 해서 매우 섭섭했다.  하지만 이해도 가는 것이, 회사 생활이 정말 힘들긴 하다. 팀에 들어온지 딱 1년 되었는데 그동안 4명이 팀을 떠나는 것을 보았다. 1명은 다른 팀으로 갔으니 회사를 나간 것은 아니지만, 팀원이 10명이 안되는데 참 많이도 떠난다는 생각이 든다.

그 사람은 시니어니까 나름대로 현재 코드에 대해 비판도 많이하고 고쳐야 한다고 열심히 얘기 했는데, 자꾸 기존 팀원들의 반대에 부딪혔다. 그래서 그런지 암튼 팀을 떠났다. 너무 열심히 바꿔야 한다고 말하지 말고, 그냥 적당히 지내는게 답인거 같다. 중간만 갈 정도로.


잔디 3주차

 잔디 심기. 3주차에 접어들었음. 사진. 아래가 1일차 사진. 다음이 3주차.