TinyPilot: Month 33

Michael Lynch

TinyPilot: 33개월차

한 줄 요약

서드파티 풀필먼트로의 더딘 전환

하이라이트

  • TinyPilot의 풀필먼트를 외부 업체로 전환하는 작업을 시작했습니다.
  • TinyPilot 고객은 제가 예상했던 것보다 가격에 덜 민감했습니다.
  • TinyPilot 보상 판매에 많은 자원을 투입했는데, 그만한 가치가 있었는지 확신이 서지 않습니다.

목표 달성 평가

매달 초에 달성하고 싶은 목표를 세웁니다. 이번 달 목표 달성 결과는 다음과 같습니다.

저용량 제품의 풀필먼트를 신규 3PL로 전환

  • 결과: 3PL 업체가 3주째 Power Connector 주문을 처리하고 있습니다.
  • 평가: A

다듬어야 할 부분이 몇 가지 있었지만, 첫 제품을 성공적으로 전환했습니다.

NERD Summit 2023에서 발표

  • 결과: 발표를 마쳤고 전달력에 만족했습니다.
  • 평가: A

2019년 이후 처음으로 NERD Summit에 오프라인으로 참석해 즐거웠습니다. 멋진 발표도 많았고 복도에서 나눈 대화도 재미있었습니다.

풀필먼트 팀의 업무 부담을 줄여 대응 업무 비중을 80% 미만으로 축소

  • 결과: 대체로 성공했지만 정확히 측정하기는 어려웠습니다.
  • 평가: B

3PL로 전환하려면 현지 팀의 업무량을 충분히 줄여 일주일치 기기를 추가로 제작할 여유를 만들어야 했습니다. 부담을 줄이기 위해 여러 조치를 취했지만, 평소보다 더 많은 시간을 일하기도 했습니다.

TinyPilot 통계

지표2023년 2월2023년 3월변동
순 방문자 수12,1417,443-4,698 (-39%)
총 페이지뷰23,11717,904-5,213 (-23%)
판매 매출$72,585.15$86,803.78+$14,218.63 (+20%)
엔터프라이즈 구독$290.70$290.700
로열티$3,935.73$4,820.75+$885.02 (+22%)
총 매출$76,811.58$91,915.23+$15,103.65 (+20%)
수익$32,905.55$43,952.10+$11,046.55 (+34%)

TinyPilot 케이스를 플라스틱에서 메탈로 바꾼 뒤 수요가 크게 늘었습니다. 가격을 올리고 마케팅을 거의 중단했는데도 판매량은 계속 증가하고 있습니다.

올해 목표는 수익 10만 달러를 달성하는 것이었는데, 이미 75%를 채웠습니다. 이 추세라면 4월이 끝나기 전에 연간 수익 10만 달러를 달성할 것입니다.

3PL 업체로 전환하며 겪은 시행착오

최우선 과제는 TinyPilot의 풀필먼트를 제3자 물류(3PL) 업체로 전환하는 것입니다. 3PL의 역할은 완제품을 창고에 보관하다가 주문이 들어오면 피킹, 포장, 배송을 수행하는 것입니다.

전환의 첫 단계로 판매량이 가장 적은 제품인 TinyPilot Power Connector를 3PL에 맡겼습니다. 이 제품은 TinyPilot 기기를 직접 조립하는 사용자를 위한 것으로, 웹사이트에 따로 홍보하지도 않습니다. 한 달에 20~30개 정도만 판매됩니다.

Power Connector는 모든 주문을 넘기기 전에 새로운 3PL을 처음부터 끝까지 낮은 리스크로 테스트할 수 있는 좋은 수단이었습니다. 이 과정에서 여러 문제가 드러났기에, 제한적인 테스트부터 시작한 것이 다행이라고 생각했습니다.

“다들 그냥 관리자 비밀번호를 주시는데요”

첫 번째 과제는 TinyPilot의 주문 시스템과 3PL의 시스템을 동기화하는 것이었습니다. TinyPilot은 미국에서 가장 인기 있는 이커머스 플랫폼 중 하나인 Shopify를 사용합니다. 3PL은 주문 관리를 위해 Shipstation을 사용합니다. Shipstation도 꽤 유명하고 평도 좋아서 Shopify와 Shipstation을 연동하는 일은 식은 죽 먹기일 거라고 생각했습니다.

이전에 거래했던 3PL도 비슷한 주문 관리 시스템을 쓰고 있었습니다. 연동할 때는 Shopify에 앱을 설치하고 3PL의 액세스 키를 붙여 넣기만 하면 됐습니다. 아주 간단했습니다.

새로 계약한 3PL이 Shipstation과 제 Shopify 계정을 연동하는 방법을 안내하면서, Shopify의 루트 관리자 계정 정보를 넘기거나 그들을 위한 새 관리자 계정을 만들어 달라고 하더군요.

뭔가 잘못됐습니다.

Shipstation 문서를 찾아봐도 두 계정을 어떻게 연결해야 하는지 알 수 없었습니다. Shipstation은 Shopify 계정과 Shipstation 계정의 소유자가 동일인이라고 가정하고 설계되어 있었는데, 저희 경우는 그렇지 않았습니다.

Shipstation의 설계 때문에 교착 상태에 빠졌습니다. 저는 3PL의 Shipstation 관리자 자격 증명이 없어 그들의 Shipstation 계정에 연결할 수 없었고, 3PL은 제 Shopify 관리자 자격 증명이 없어 TinyPilot의 Shopify 스토어에 연결할 수 없었습니다.

3PL에 TinyPilot Shopify의 전체 관리자 권한을 주고 싶지 않았고, 제 개인 계정의 자격 증명을 넘기는 것은 더더욱 원치 않았습니다.

대신 제 이름으로 Shipstation 계정을 하나 만들고 권한을 제한한 더미 Shopify 사용자 계정을 생성했습니다. 그리고 그 더미 계정을 이용해 TinyPilot Shopify 계정과 제 테스트용 Shipstation 계정을 반복적으로 연결해 보았습니다.

시행착오 끝에 Shipstation 계정을 연결하는 데 필요한 Shopify 사용자 계정의 최소 권한 조합을 알아냈습니다. 파악이 끝난 뒤에는 3PL을 위해 TinyPilot Shopify에 최소 권한만 부여한 계정을 만들어 주었습니다.

혹시 이 글을 발견한 분 중에 Shopify와 Shipstation 연동으로 같은 어려움을 겪고 있다면, Shopify에서 Shipstation을 연결하는 데 필요한 권한은 다음과 같습니다.

  • 주문
    • 주문 편집
  • 상품 보기
  • 고객
  • 설정 관리
  • 앱 및 채널 관리와 설치
Shipstation과 연동하기 위한 사용자의 Shopify 권한 스크린샷

Shipstation 계정에 연결하기 위해 사용자가 가져야 하는 최소 Shopify 권한

Shopify를 3PL의 Shipstation 계정과 연동하는 과정이 이렇게 복잡하다는 사실에 놀랐습니다. 3PL은 Shopify 고객이 수십 곳이나 된다고 하기에, 지금까지 이 문제를 어떻게 해결해 왔는지 물었습니다.

“다들 그냥 관리자 비밀번호를 주시는데요.” 3PL 매니저가 이렇게 답했습니다. 그녀는 대부분의 고객은 기술에 크게 익숙하지 않아 풀필먼트를 맡은 업체에 Shopify 자격 증명을 제공하는 것을 별로 이상하게 생각하지 않는다고 설명했습니다.

50달러짜리 주문을 배송하는 데 150달러를 써야 할까요?

전환 과정의 다음 문제는 호주에서 주문이 들어오면서 발생했습니다. 호주행 배송비는 TinyPilot이 배송하는 국가 중에서도 가장 높은 편에 속합니다. TinyPilot Power Connector를 미국 내에서 배송하면 몇 달러면 되지만, 호주로 보내려면 50달러가 듭니다.

3PL은 이 주문을 배송하는 데 150달러가 든다고 알려왔지만, 고객이 지불한 배송비는 50달러였습니다. 알고 보니 TinyPilot은 Shopify가 대신 협상해 준 덕분에 DHL 국제 배송 할인 요금을 적용받고 있었습니다. 3PL은 DHL과 할인 요금 계약이 없어 호주행 우편 요금으로 150달러를 그대로 내야 했습니다.

3PL이 정가로 우편 요금을 결제하면 100달러 차액을 제가 부담해야 합니다. 이 주문 하나 때문에 주문이 아예 없었을 때보다 50달러를 더 손해 보는 셈입니다.

주문 한 건에서 손해를 보는 것 자체는 큰 문제가 아니지만, 더 근본적인 문제를 드러냈습니다. TinyPilot 고객이 결제 단계에서 보는 배송비는 Shopify 요금 기준으로 책정된 것이었습니다. 고객에게는 3PL의 배송비가 보여야 했습니다.

다시 물었습니다. “다른 고객들은 어떻게 하나요?”

3PL 매니저는 다른 고객들은 무료 배송을 제공하거나, 배송물의 크기나 무게와 관계없이 국가별로 고정 요금을 책정한다고 답했습니다.

그렇게 대략 추정하는 방식이 아주 불가능한 건 아니지만 어딘가 허술하게 느껴졌습니다. 항상 추측에 의존해야 하고, 고객에게 배송비를 턱없이 적게 혹은 많이 청구하는 상황이 분명 생길 것 같았습니다. 현재 TinyPilot은 고객이 정확한 배송비를 보고 택배사를 선택할 수 있게 되어 있는데, 이 방식을 유지하고 싶었습니다.

Shipstation 문서를 보니 Shopify와 배송비를 공유할 수 있는 기능이 있어 가능해 보였습니다. 3PL은 전에 해본 적은 없지만 알아보겠다고 했습니다. 몇 시간 뒤 3PL 매니저에게 전화가 왔는데, Shipstation 쪽에서는 가능하지만 제 Shopify 요금제에서는 지원하지 않는다는 것이었습니다.

Shopify 기능 페이지를 확인해 보니 “서드파티 산정 배송비”는 Shopify Advanced 플랜에서만 제공했습니다.

서드파티 배송비는 Shopify Advanced 플랜에서만 제공됨을 보여주는 Shopify 요금제 스크린샷

Shopify는 월 399달러짜리 Advanced 플랜에서만 서드파티 배송비를 불러옵니다.

그렇게 되면 TinyPilot의 Shopify 요금제가 월 105달러에서 무려 월 399달러로 올라, Shopify가 TinyPilot에서 가장 비싼 클라우드 서비스가 됩니다.

이 모든 걸 확인하는 동안에도 3PL 매니저와 통화 중이었습니다. 다소 충동적으로 그 자리에서 바로 업그레이드했습니다.

배송비 문제로 호들갑을 떤 터라 이제 와서 발을 빼기가 민망했습니다. 다만 혹시 마음을 바꿀 수 있도록 일부러 월간 결제로 신청했습니다.

돌이켜보면 Shopify Advanced 플랜은 여전히 가치가 있다고 생각합니다. 국가별로 배송비를 일일이 추정하고 시장 변동에 따라 조정하는 일은 정말 하고 싶지 않았습니다. 그리고 상위 요금제는 신용카드 수수료를 0.2% 낮춰 주니 일부 금액은 만회할 수 있습니다. 작년 TinyPilot 매출을 기준으로 하면 수수료 할인으로 약 2,000달러를 절약할 수 있으니, 이 어처구니없이 비싼 플랜에 연간 4,800달러를 쓰면서도 어느 정도는 돌려받는 셈입니다.

TinyPilot 수요는 얼마나 탄력적일까?

TinyPilot이 현재 직면한 병목은 제조 역량입니다. 아직 기기를 사내에서 조립하고 있는데, 주문이 들어오는 속도가 직원이 기기를 만드는 속도와 거의 같습니다.

모든 제품을 3PL로 전환하려면 주문량을 따라가는 것만으로는 부족합니다. 3PL 창고로 보낼 Voyager 2a 재고를 최소 일주일치는 미리 쌓아 둬야 합니다. 판매 속도를 늦추기 위해 가격을 올려 봤고, 흥미로운 데이터가 나왔습니다.

경제학에서 제품의 ‘탄력성’은 소비자가 가격에 얼마나 민감한지를 나타냅니다. Uber 탑승이 탄력적인 제품의 좋은 예입니다. 요금이 저렴하면 편하려고 이용하지만, 가격이 10배로 오르면 아마 대중교통을 이용할 것입니다.

그렇다면 TinyPilot 고객은 가격에 얼마나 민감할까요?

Voyager 2a USB-C

기간가격판매량
2월 13일 - 3월 6일$379110 (5.0/일)
3월 7일 - 3월 12일$39934 (5.7/일)
3월 13일 - 3월 30일$42965 (3.6/일)
TinyPilot Voyager 2a (USB-C) 가격 탄력성 그래프

Voyager 2a PoE

기간가격판매량
2월 13일 - 3월 6일$47829 (1.3/일)
3월 7일 - 3월 12일$49815 (2.5/일)
3월 13일 - 3월 19일$5289 (1.3/일)
3월 20일 - 3월 30일$55813 (1.2/일)
TinyPilot Voyager 2a (PoE) 가격 탄력성 그래프

느낀 점

표본이 작아 단정 짓기는 어렵지만, 데이터는 TinyPilot 고객이 제가 예상한 것보다 가격에 덜 민감하다는 것을 시사합니다. 특히 PoE 모델의 수요는 매우 비탄력적으로 보였는데, 가격을 80달러(17%) 올려도 구매 속도가 거의 그대로 유지됐습니다.

내 안의 자본가는 수익을 극대화하기 위해 가격을 계속 올리고 싶어 합니다. 반면 애호가로서의 나는 일반 사용자들이 부담 없이 쓸 수 있도록 가격을 낮게 유지하고 싶습니다.

최근 첫 TinyPilot 프로토타입을 만들던 시절에 쓴 블로그 글을 다시 읽다가 이런 문단을 발견했습니다.

다음으로 상용 KVM over IP 솔루션을 알아봤습니다. Dell의 iDRAC과 비슷한 기능을 제공하지만… 더 비쌌습니다. 개당 500달러에서 1000달러에 이르렀죠.

이제는 제가 그 비싼 상용 KVM over IP 솔루션이 되어 버렸네요!

어쩌면 비합리적으로 들릴지 몰라도, 저는 2020년의 제가 — 큰돈 들이지 않고 홈랩을 쉽게 관리할 방법을 찾던 그때의 제가 — 매력적으로 느낄 만한 TinyPilot을 제공하고 싶습니다.

공급과 생산 속도 모두에 제약이 있는 지금은 높은 가격이 합리적이라고 생각합니다. 다만 언젠가는 다시 가격을 낮추고 판매량으로 만회할 수 있기를 바랍니다.

보상 판매는 어리석은 발상이었을까?

TinyPilot이 새로운 하드웨어 버전을 출시할 때마다 고객들은 기존 기기를 반납하고 최신 모델로 교환할 수 있는지 묻습니다. 지금까지는 교환 절차가 없다고 답하면서 대신 신제품을 후하게 할인해 드리겠다고 했습니다.

올해 TinyPilot의 가장 큰 제약은 Raspberry Pi 수급입니다. 그래서 한정된 Pi 재고로 최대한 많은 수익을 내는 방법을 고민하고 있습니다.

신제품을 할인해 주는 대신, 보상 판매를 제안하는 ‘기발한’ 아이디어를 냈습니다. 고객이 기기를 보내면 가능한 한 많은 부품을 재활용해 Voyager 2a로 개조한 뒤 다시 보내 주는 방식입니다. TinyPilot의 모든 제품이 동일한 Raspberry Pi 모델을 사용하므로, 새로운 Pi를 소모하지 않고도 충성 고객에게 보답할 수 있습니다.

그런데 보상 판매 절차는 예상보다 훨씬 복잡하고 노동 집약적이었습니다.

많은 고객이 TinyPilot을 일상 업무에 쓰고 있어 대체품 없이 기기를 보내려 하지 않았습니다. 그런 경우에는 재생 부품으로 만든 Voyager 2a를 먼저 판매한 뒤, 보상 판매 기기를 받으면 일부 금액을 환불해 드렸습니다.

여러 대의 TinyPilot을 보유해 모두 가동해야 하는 고객도 있었습니다. 그런 고객에게는 재생 기기를 먼저 보내고, 고객이 기존 기기를 보내면 최신 버전으로 개조해 다시 보내 준 뒤, 다음 기기를 받는 식으로 모든 기기를 교체할 때까지 반복했습니다. 이렇게 네 대를 교체한 고객도 있었습니다.

모든 보상 판매는 순조롭게 진행됐지만, 예상보다 일이 훨씬 많았습니다.

이 결정의 득실을 따지기는 어렵습니다. 장점은 눈에 보이지 않기 때문입니다. 우리와 함께하며 제품을 응원해 준 고객에게 보답한다는 가치죠. 반면 단점은 매우 구체적이었습니다. 보상 판매는 일반 판매보다 처리에 평균 2~3배 더 오래 걸렸고, 사실상 원가로 진행했습니다.

TinyPilot이 일반 판매 한 건당 300~400달러의 수익을 남긴다고 할 때, 보상 판매 한 건이 약 2.5건의 일반 판매 기회를 앗아갔다면 한 건당 750~1,000달러의 비용이 든 셈입니다. 총 22건을 진행했으니 보상 판매 프로그램에 약 19,000달러가 들었습니다.

다시 한다면 여전히 보상 판매를 제공하겠지만, 다음과 같이 방식을 바꿀 것입니다.

  • 보상 판매를 대대적으로 홍보하지 말고, 문의하는 고객에 한해 개별적으로 대응한다.
  • 보상 판매 요청은 별도의 지원 큐에서 처리하고, 진행을 시작하기까지 몇 주 정도 기다릴 수 있음을 미리 안내한다.

사이드 프로젝트

Go로 Zestful 마이크로서비스 다시 만들기

2018년 레시피 재료 파싱 서비스인 Zestful을 출시할 때, 잠재 고객이 부담 없이 서비스를 체험할 방법을 고민했습니다. 다른 서비스들은 계정을 만들거나 신용카드를 등록해야 했지만, 저는 Zestful 웹사이트에서 아무런 마찰 없이 바로 써볼 수 있는 데모를 제공하고 싶었습니다.

Zestful 데모 페이지 스크린샷

Zestful은 잠재 고객이 재료 파싱 기능을 테스트해 볼 수 있도록 마찰 없는 데모를 제공합니다.

데모는 사용자당 하루 30회 파싱으로 제한해야 했습니다. 그 이상은 유료 플랜에 가입해야 하도록요. 그래서 유료 서버와 API 인터페이스는 동일하지만 하루 30개 재료로 제한하는 데모 서버를 만들기로 했습니다.

당시에는 App Engine을 좋아했고 직접 데이터베이스를 운영하는 건 딱 질색이었습니다. 그래서 Python 2.7 App Engine과 Google Cloud Datastore로 데모 앱을 만들었습니다.

요청이 들어오면 데모 서버는 Google Cloud Datastore에서 해당 IP 주소를 조회했습니다. 해당 IP가 할당량을 모두 소진했다면 유료 플랜 가입을 안내하는 오류로 요청을 거부했고, 할당량이 남아 있다면 요청을 유료 Zestful 서버로 전달한 뒤 해당 IP의 할당량을 하나 차감했습니다.

2018년 이후 App Engine과 Google Cloud 전반에 대한 애정이 식었습니다. 몇 달 뒤 Python 2.7용 App Engine 지원을 종료한다는 구글의 공지를 받고, 오늘날 같은 서비스를 얼마나 더 빠르게 구현할 수 있을지 실험해 보면 재미있겠다는 생각이 들었습니다.

Python 대신 Go를 사용했습니다. Go 웹 앱은 만들고 유지하기가 쉽다고 생각하기 때문입니다. 처음에는 SQLite와 Litestream으로 데이터베이스를 어떻게 설계할지 고민하다가, 영구 저장소를 아예 생략할 수도 있다는 걸 깨달았습니다.

모두의 할당량을 메모리에만 보관하면 어떤 단점이 있을까? 새 버전을 배포하거나 서버를 재시작할 때마다 모두의 할당량이 그날 기준으로 초기화되어 데모 서버에 대해 추가 요청을 할 수 있게 됩니다.

재시작할 때마다 사용자당 0.60달러 상당의 추가 할당량을 더 주는 셈인데, 서버를 자주 재시작할 계획이 없으니 큰 문제는 아니었습니다.

서비스를 다시 구현하는 데 개발 시간 약 여섯 시간이 걸렸습니다. 원래는 2주가 걸렸다고 기억해서 스스로 대견하게 느껴졌습니다. 불과 5년 만에 10배나 빨라진 셈이니까요!

그러다 원래 App Engine 버전의 커밋 기록을 다시 확인해 보니, 사실 단 하루 만에 구현했더군요.

Mon Apr 30 00:51:48 2018 -0400  Adding badges to README (#7)
Mon Apr 30 00:51:40 2018 -0400  Adding changes to make prod API work (#6)
Mon Apr 30 00:43:55 2018 -0400  Adding support for parser config model (#5)
Sun Apr 29 23:51:03 2018 -0400  Adding deployment to Travis (#4)
Sun Apr 29 23:41:42 2018 -0400  Adding rate limiter (#3)
Sun Apr 29 18:18:37 2018 -0400  Adding coveralls.yml (#2)
Sun Apr 29 18:14:46 2018 -0400  Merge pull request #1 from mtlynch/parser-proxy
Sun Apr 29 18:11:16 2018 -0400  Fixing response handler
Sun Apr 29 17:52:28 2018 -0400  Fixing HTTP handler
Sun Apr 29 17:40:02 2018 -0400  Adding in ParserProxy and tests
Sun Apr 29 11:20:11 2018 -0400  Initial commit

커밋 기록을 보면 일요일 아침부터 월요일 새벽 1시까지 이어진 마라톤 코딩 세션이었으니, 원래 작업에는 대략 14시간 정도가 걸렸을 겁니다. 그러면 속도 향상은 2.3배 정도인 셈입니다.

그러니 5년 전보다 그렇게까지 빨라진 건 아니지만, 데이터베이스를 생략해 단순화할 새로운 기회를 포착했다는 점이 자랑스럽습니다. 또 계속 새로운 기술을 배우며 과거보다 더 많은 해결책을 갖게 된 것도 기쁩니다.

마무리

완료한 일

  • 3PL 업체로 제품 하나를 전환했습니다.
  • NERD Summit에서 발표했습니다.
  • 새로운 회계사를 찾고 2022년 세무 준비의 대부분을 마쳤습니다.

배운 점

  • 핵심 업무를 새 업체로 이전하기 전에 제한적인 시험 운영을 하라.
    • 만약 풀필먼트를 3PL 업체에 한 번에 넘기려 했다면 매우 혼란스러웠을 것입니다.
    • 제한적인 시험 덕분에 맞지 않는 첫 번째 업체를 걸러내고 두 번째 업체와의 거친 부분을 다듬을 수 있었습니다.

다음 달 목표

  • 모든 제품을 3PL 업체로 전환하기.
  • TinyPilot 기기 조립을 맡을 위탁 제조사를 선정하고 전환 절차를 시작하기.
  • TinyPilot Pro 신규 릴리스 배포하기.

도움 요청

하드웨어 제품으로 위탁 제조업체와 일해 본 경험이 있거나, 그런 분과 연결해 주실 수 있다면 이야기를 나누고 싶습니다. 특히 연간 2,000~5,000대 정도의 소량 전자 제품을 다뤄본 분의 경험이 궁금합니다.

원문은 Michael Lynch님이 에 게재했습니다.

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.