Careem에 합류한 지 5년이 되었을 때, 사람들이 이동하는 방식을 바꾸는 지역 최초의 유니콘 기업의 일원이 된 것에 흥분했습니다. 여행은 두바이의 본사 캠프에서 따뜻한 환영과 교육을 받으며 시작되었고, 제 역할을 이해하는 데 도움이 되었습니다. 처음부터 일하는 동안 활기찬 창의적인 분위기에 감명을 받았습니다.
저는 Senior Software Engineer I로 시작했습니다. 수년 동안 제 업무가 변화하고 성장함에 따라 새로 창조된 분야에서 전문가가 되었습니다. 저는 우리 회사의 가입 페이지에 접속한 사람들의 심리를 이해하는 것을 중심으로 하는 captain 획득 분야에서 다양한 도전에 직면했습니다.
최근 Uber에 인수되었을 때, Careem의 글로벌 규모가 평범한 소프트웨어 엔지니어가 매일 마주치는 문제를 넘어서 확장하는 증거라는 것을 이해했습니다. 그러나 제 첫 기능을 출시한 때에야 그 규모를 깨달았습니다.
내 첫 릴리스 직전에 다음 질문들을 받았어:
- 릴리스를 세분화하기 위해 구현한 것이 있는가?
- 메트릭이 전형적인 패턴과 일치하지 않으면 빠르게 롤백할 수 있는가?
- 새로운 기능이 일일 글로벌 트래픽을 처리할 수 있는가?
- 사용자 행동과 수용도를 시각화하는 메트릭이 준비되어 있는가?
누가 이렇게 말해? 나의 경력에서는 수용 조건이 주로 기능 제공에 초점을 맞추었다. 앞으로의 도전에 미리 접근하는 사람은 없었다.
하지만 요청에 따라 배포할 수 있는 자유를 가지면서 익숙하지 않은 새로운 체크리스트가 도입되었다. 피드백을 통합함으로써 내 작업이 비즈니스에 직접적인 영향을 미친 것을 보았다. 제품 요구 사항을 작업과 일치시키는 것이 더 명확해지며, 기능 요구 사항에 대한 의문을 제기할 수 있었다.
그것은 시작에 불과했습니다. 이후에는 피크 시간에 90k RPM을 처리하는 서비스에 기능을 배포했고, 단 몇 시간 만에 20개 이상의 서비스를 대상으로 생태계 점진적 적용을 위해 3개의 배포를 스테이징했습니다.
데이터 기반 의사 결정
사용자에게 기능을 몇 분 안에 직접 제공할 때, 중요한 점은 다음과 같습니다:
- 당신이 만들어내는 영향은 무엇인가
- 빠르게 기능을 출시하는 대신 완전한 솔루션을 개발하는 것 사이의 편익을 이해하는 것
- 당신의 기능이 창출하는 비즈니스 가치 💸
우리 팀이 사용자 문서의 유효 기간이 만료될 때 문서를 최신 상태로 유지하는 과제를 직면했을 때, 우리는 엑셀 시트에서의 수동 데이터 수집 대신에 이 긴급한 문제에 대응하기 위해 신속한 배치 전략을 채택했습니다. 처음에는 문서 수집을 실험하고 사용자 수용을 평가하기 위해 간단한 앱 내 웹 뷰를 전개했습니다. 이 방법을 통해 우리는 솔루션의 영향을 신속하게 평가하고 배포 속도와 완전한 포괄적 시스템을 제공하는 사이의 초기 trade-offs를 이해할 수 있었습니다.
우리는 문서를 시기적으로 수집하고 규정 준수를 유지했지만, 이는 제출된 문서가 조작되지 않았는지 확인하고 전사에 적합한 품질인지 확인하는 데 많은 번거로움을 야기했습니다. 설정한 모든 지표들이 사용자 상호작용 및 고통 포인트를 식별하는 데 도움이 되었습니다.
우리는 이 데이터를 기반으로 사용자가 문서를 제출하는 데 상호 작용할 수 있는, OCR, 라이브니스 체크 및 품질 체크를 포함하여 문서의 정당성을 보장하고 자동화된 것을 갖춘 이상적인 솔루션을 만들 수 있었습니다!
우리는 비순응 문서가 순응 문서로 변하는 데 걸리는 시간을 현저히 줄이게 되었고, 놀랄 만한 90%의 감소율을 달성하여 비순응 문서가 순종으로 변하는 데 걸리는 시간이 1시간 미만으로 줄어들었습니다. 그리고 순응은 수동 데이터 수집을 위한 운영 비용을 절약하는 것을 의미했습니다.
다부서 협업
카림(Careem)에서의 다부서 협업은 서로 다른 팀과 플랫폼 간 다양한 시장 요구를 충족하는 백엔드 기능을 성공적으로 출시하는 데 중요한 역할을 했습니다. 이 프로젝트는 iOS, Android 및 웹 팀과의 긴밀한 협력을 포함했는데, 각 팀은 특정 시장 요구에 맞게 사용자 인터페이스를 개발하는 작업을 맡았습니다.
저희 협업은 구현 세부 사항을 기술한 자세한 RFC로 시작했습니다. 이로써 기능 및 사용자 경험에 대한 팀 간 명확성과 일치를 보장했습니다. 전용 기능 채널을 통한 정기적인 업데이트를 통해 제품 및 운영팀을 포함한 모든 사람들이 개발 주기 동안 진행 상황과 중요한 사항에 대해 알게 되었습니다.
진행되면서 우리는 단계별 출시 전략을 채택했습니다. 초기 배포를 특정 시장에서 시작하여 기능을 확인하고 점진적으로 피드백을 수집함으로써, 각 반복이 현실적인 사용과 사용자 의견에 근거하여 개선되는 것을 보장했습니다. 각 성공적인 배포로 확신이 높아져, 지역 시장 요구에 맞게 조정된 추가 시장에서의 기능 이용이 가능해졌습니다.
이 협력 노력은 효율적인 기능 개발뿐만 아니라 부서 간 투명성과 협업 문화 조성에도 도움이 되었습니다. 다양한 사용자 요구를 효과적으로 충족하는 중요성을 강조하며 의사소통, 계획 및 반복적인 개선의 중요성을 강조했습니다.
모두 함께
한밤중 1시에 우리 팀이 하나의 사건으로 모이게 된 사건이 발생하여 '모두 함께'라는 진정한 의미를 Careem에서 보여주게 되었습니다. 핵심 서비스의 갑작스러운 다운타임으로 시작되어 플랫폼 전체에 영향을 미치는 연쇄 작용이 발생했습니다. 화면을 가득 채우는 경고음이 울리며 인프라, 데브옵스, 심지어 상댓글로된 이사들까지 팀원들을 전원 소집하여 문제점을 진단하고 해결하기 위해 신속하게 행동에 옮겼습니다.
분위기는 긴장되었지만 집중력은 필요했습니다. 우리는 근본 원인을 식별하기 위해 협력하며 엔지니어들은 로그 및 메트릭스에 심취하고 데브옵스 전문가는 구성 및 종속성을 확인했습니다. 이사급의 존재는 리더십과 전략적 방향을 제공하며, 서비스 안정성을 복구하는 것이 우리의 목표와 일치하는지 확인하면서 결정을 내리도록 지시했습니다.
강도 높은 문제 해결과 철저한 협력 덕분에 영향을 받은 서비스를 1시간 내에 다시 온라인으로 복구할 수 있었습니다. 신속한 대응에도 불구하고 해당 사건으로 인해 임시로 사용자 경험이 저하되었습니다. 그러나 빠른 조치와 팀워크로 인해 영향을 최소화시켰고, 운영 우수성에 대한 우리의 태도와 탄력성을 입증했습니다.
각 수준에서의 책임감과 팀이 밤 늦은 시간에 희생을 하며 다시 모여서 정상으로 돌아온 노력에 감동받았습니다. 장애에 대한 책임을 져야했고, 전체 사건을 반성해야 했지만, 이를 통해 사건과 관련된 우려 사항을 공유하고 우선순위를 정하는 플랫폼을 얻을 수 있었습니다.
결론
결론적으로, 주요 포인트는 다음과 같습니다:
- 글로벌 규모의 운영 및 세분화, 롤백 가능성, 처리량 용량 및 사용자 행동 지표와 같은 기능 배포 시 고려해야 할 중요 사항을 이해하는 것
- 데이터 기반 의사 결정을 통해 프로세스를 최적화하고 비용을 줄이는 것
- 다양한 부서 간 협력을 활용하여 여러 플랫폼에 기능을 성공적으로 출시하는 것, 자세한 계획, 점진적인 롤아웃 및 반복적 개선의 중요성을 강조
- “모두 함께 뛰자” 방식으로 중요 사건에 대응하며, 팀워크의 탄탄성과 효과를 강조하여 문제를 신속히 해결하고 사용자 영향을 최소화하는 것
케림에서의 시간이 끝나고 새로운 모험을 떠납니다. 제가 직접 목도하는 운영 트래픽 규모에 비례하는 비즈니스 성장을 위해 지식을 적용할 것입니다. 상기한 즐거운 순간들은 제게 특별한 추억 중의 일부일 뿐입니다.
케림의 목적은 저가 처음 배운 것이었습니다: "사람들의 삶을 간단하고 향상시키며 영감을 주는 멋진 조직을 만들기". 이 미션은 제가 끝날 때까지 계속되었습니다. 😊
정말 중요한 것은 구축하는 문화입니다. 엔지니어링 팀이 완전히 투명하게 기능하는 경우, 동료가 개선하고 동일한 행동을 취하도록 장려하면서 기적을 이룰 수 있습니다.
새로운 길을 모색하며, 오랫동안 소홀했던 글쓰기 습관을 다시 시작하게 되었습니다. 제 콘텐츠를 업데이트하려면 제 논문 'Back in a Gist'를 확인해 주세요 😊