My Third Year as a Solo Developer

Michael Lynch

1인 개발자로 보낸 세 번째 해

오늘은 구글을 퇴사하고 혼자 소프트웨어 비즈니스를 시작하기로 한 지 딱 3년이 되는 날입니다. 첫 번째 해두 번째 해가 끝났을 때 근황을 공유했으니, 이제 3년 차 진행 상황을 공유할 때가 됐습니다.

모든 것이 맞아떨어진 해

혼자 일한 첫 2년 동안 저는 총 1만 달러도 벌지 못했습니다. 3년 차 목표는 매출 2만 달러를 달성하는 것이었습니다.

상반기가 지났을 때만 해도 목표 달성은 어려워 보였습니다. 모든 사업을 합쳐도 한 달에 300달러 정도밖에 벌지 못했고, 새로 시도한 아이디어는 하나도 제대로 되지 않았습니다.

기적처럼 5월에 출시한 하나의 신제품이 모든 상황을 뒤집었습니다. 연말까지 매출은 6만 3천 달러를 기록하며 목표를 훨씬 뛰어넘었습니다.

물론 순이익은 여전히 적자입니다. 하지만 이번에는 변명거리가 확실합니다!

이제 실물 제품을 판매하다 보니 수익이 비용보다 2~3개월 늦게 들어옵니다. 건당 마진율이 30~50%이니, 시간이 지나면 숫자는 따라올 것입니다.

잠깐, 계속 적자인데 어떻게 버틸 수 있었나요?

이 부분에 대해서는 작년 회고에서 더 자세히 다뤘지만, 간단히 요약하면 생활비가 낮고, 구글 재직 시절 모아둔 저축이 충분하며, 투자로 얻는 불로소득이 있기 때문입니다.

프로젝트별 결산

TinyPilot

TinyPilot은 서버를 원격으로 관리하기 위해 제가 만든 저렴한 장치입니다.

지난 몇 년간 저는 모든 소프트웨어 개발을 홈 서버에서 해왔습니다. 네트워크 설정을 망치거나 새 운영체제를 설치하려고 할 때만 빼면 아주 잘 작동합니다. 서버에는 모니터나 키보드가 연결되어 있지 않아서, 그럴 때마다 서버를 책상까지 끌고 와 워크스테이션 케이블을 모두 바꿔 끼웠다가 작업이 끝나면 다시 원상복구해야 했습니다.

라즈베리 파이가 USB 키보드인 척할 수 있다는 글을 읽은 적이 있고, 영상을 캡처할 수 있다는 것도 알고 있었습니다. 웹 앱으로 이 두 기능을 결합해 파이를 초소형 원격 관리 장치로 만들면 어떨까 하는 생각이 들었습니다.

몇 달 동안 이것저것 만져본 끝에 작동하는 프로토타입이 나왔습니다.

두 대의 컴퓨터를 연결한 TinyPilot 사진

오픈소스 KVM over IP 장치인 TinyPilot 프로토타입

이 제품에 시장이 있을지 의문이 들었습니다. 누가 굳이 저에게서 이 장치를 사려고 할까요? 그저 시중에서 쉽게 구할 수 있는 하드웨어 부품을 모아 놓은 것뿐이었으니까요. 일주일에 한두 명 정도 사주면, 키트당 80달러를 남길 수 있으니 포장하고 배송하는 수고를 할 만하다고 생각했습니다.

그리고 나서 이에 대해 블로그 글 하나를 올렸습니다.

글이 올라가자마자 이 사업이 지금까지 해온 그 어떤 것과도 다르다는 것이 분명해졌습니다. 글을 게시한 지 4시간도 채 되지 않아 준비해 둔 9개 키트가 모두 팔렸고, 품절된 뒤에도 주문은 계속 들어왔습니다.

일주일 만에 그 글 하나로 8,800달러의 매출이 발생했습니다. 해커 뉴스(Hacker News) 메인에 올랐고, 역대 최고의 “Show HN” 게시물 중 하나가 되었습니다.

해커 뉴스와 레딧에서의 TinyPilot 반응

초기 급등 이후 매출이 잠시 주춤했지만, 그 뒤로 TinyPilot은 꾸준히 성장해 왔습니다. 실물 제품을 팔아본 경험이 전혀 없었기에, 저는 재고를 관리하고 주문 처리 과정을 체계화하며, 업체와 협력해 회로 기판3D 프린팅 케이스를 만드는 법을 빠르게 배워야 했습니다.

TinyPilot은 거의 5만 4천 달러의 매출로 한 해를 마무리했습니다. 순이익은 여전히 적자지만, 비용이 선집행됐기 때문입니다. 2020년 TinyPilot 비용에는 2021년 2월까지 쓸 재고 비용이 포함되어 있습니다.

수입/지출2020
판매$53,362
기부$380
자재-$46,143
전기 엔지니어링 컨설팅-$7,130
주문 처리-$2,570
소프트웨어 개발*-$1,321
오픈소스 기여-$1,270
광고-$675
그래픽 디자인-$250
호스팅 / 도메인-$64
순이익-$5,681

* 코드 대부분은 제가 직접 작성하지만, 판매 페이지 제작을 위해 개발자 한 분을 고용했습니다.

Hit the Front Page of Hacker News

Hit the Front Page of Hacker News는 제 블로그 운영 노하우를 담은 강의입니다.

5월에는 동료 멘토링 그룹에서 “어느 정도 성공하는 소프트웨어 블로거가 되는 법”이라는 주제로 비공식 발표를 했습니다. 해커 뉴스나 레딧 같은 곳에서 제 글이 통하는 이유를 기법으로 분해해 보려 했습니다. 과정을 공유하는 건 즐거웠지만, 그 자료를 가지고 무엇을 더 해야 할지는 모르겠었습니다.

한 해 동안 개발자들이 자신이 아는 것을 유료 강의로 가르치는 모습을 점점 더 많이 보게 되었습니다. TinyPilot을 통해 블로그와 비즈니스를 연결하는 것이 얼마나 강력한지 알게 되었습니다. 사람들이 제 블로그를 좋아한다면, 제 글쓰기에 대한 강의를 구매하는 데도 관심이 있을지 모른다는 생각이 들었습니다.

강의를 녹화하는 일은 생각보다 훨씬 어려웠습니다. 30~40시간 정도면 될 줄 알았는데, 거의 200시간이 들었습니다.

강의는 2021년 1월에 출시되어 아래 수치는 출시 후 주문을 포함하지 않습니다. 지금까지 판매량은 많지 않지만, 장기적인 수익을 가늠하기에는 아직 이릅니다. 어쨌든 저는 강의 내용에 자부심을 느끼고, 여러 수강생분들이 제 수업이 글쓰기에 큰 도움이 되었다고 말씀해 주셨습니다.

지표2020
사전 주문29
사전 주문 매출$1,431
표지 디자인-$293
녹음 장비-$584
순이익$554

mtlynch.io (이 블로그)

올해 블로그 운영에서 가장 크게 달라진 점은 글 주제를 더 전략적으로 고민하게 된 것입니다. 2020년 이전에는 “지금 머릿속에 떠오른 이 주제로 글을 써보고 어떻게 되는지 지켜보자”는 태도로 글을 썼습니다. 가끔은 독자를 찾기도 했지만, 대부분은 그렇지 못했습니다.

올해는 새 글을 시작하기 전에 스스로에게 두 가지 질문을 던졌습니다.

  1. 이 주제에 관심 있는 독자는 얼마나 될까?
  2. 그들에게 도달할 방법이 있을까?

이 작은 계획이 독자 수에 큰 차이를 만들었습니다. 2019년에는 게시 후 첫 주 평균 독자 수가 5,000명이었지만, 2020년에는 25,000명으로 뛰었습니다. 새로 발행한 아홉 개 글 중 하나를 제외한 모든 글이 해커 뉴스 메인을 장식했고, 그중 네 개는 1위를 차지했습니다.

지표20192020변화
페이지뷰273,817719,899+446,082 (+163%)
제휴 수익*$374$1,599+$1,225 (+328%)
개발-$460$0-$460 (-100%)
일러스트-$769-$964+$195 (+25%)
호스팅 / 도메인-$150-$534+$384 (+256%)
에디팅 + Grammarly-$200-$222+$22 (+11%)
순이익-$3,835-$121+$3,714

* 저는 2020년 말에 이 블로그의 모든 제휴 파트너십을 중단했습니다.

망한 프로젝트들

작년에 배운 가장 중요한 교훈 중 하나는 올바른 아이디어를 추구한다는 것은 잘못된 아이디어를 버리는 것을 의미한다는 것입니다. 6~8주가 지나도 의미 있는 매출이 생기지 않으면, 다른 고객층을 공략하도록 방향을 틀거나 완전히 새로운 프로젝트로 넘어갑니다.

Is It Keto

Is It Keto 웹사이트 스크린샷

Is It Keto는 어떤 음식이 키토 식단에 맞는지 알려주는 사이트입니다.

Is It Keto는 2018년에 시작했습니다. 특정 음식이 키토 식단에 맞는지 아닌지를 알려주는 단순한 사이트입니다.

2019년에는 사이트를 포기했지만, 새로 시도한 사업 아이디어들이 잇따라 실패하자 2020년 4월에 다시 기어들어 왔습니다. Is It Keto는 수익이 났지만 간신히 나는 수준이었습니다. 방문자 한 명당 0.01달러도 벌지 못했으니, 방문자 수나 수익을 획기적으로 늘려야 했습니다.

성장을 확대하기 위해 글 작성을 자동화하려 했습니다. Is It Keto가 운영된 내내 모든 글은 100% 오리지널이었고, 제가 직접 쓰거나 제가 고용한 작가들이 맞춤형으로 작성했습니다. 기존 콘텐츠를 검토하다가 템플릿으로 추상화할 수 있는 일관된 패턴을 발견했습니다. 알맞은 음식 이름과 사진, 영양 정보를 넣으면 새 페이지를 빠르게 생성할 수 있었습니다.

Is It Keto 글과 이를 생성한 소스 코드

템플릿으로 Is It Keto 글을 프로그래밍 방식으로 생성하는 모습

처음에는 콘텐츠를 템플릿화하면 매주 수백 개의 글을 추가할 수 있을 것 같았지만, 품질을 희생하지 않고 그렇게 빠르게 확장하는 것은 어려웠습니다. 두 달 동안 고작 118개의 글만 추가할 수 있었습니다. 템플릿을 많이 만들수록 속도는 빨라졌지만, 추가된 콘텐츠가 끌어오는 사용자가 너무 적어 수지가 맞지 않았습니다.

다른 아이디어는 친구인 Justin Vincent에게서 나왔습니다. 그는 제 사이트가 월 7만~10만 페이지뷰로 그 정도밖에 벌지 못한다는 말을 듣고 깜짝 놀라며, 유료 자매 제품을 만들고 Is It Keto로 잠재 고객을 끌어오라고 조언했습니다.

키토 커뮤니티와 앱을 위한 랜딩 페이지 몇 가지를 테스트해 봤지만, 방문자 중 단 0.1%만이 추가 정보를 신청했습니다. 마침 그 무렵 TinyPilot이 본격적으로 성장하기 시작해서 Is It Keto는 뒷전으로 미뤄두었습니다.

지표20192020변화
페이지뷰521,9131,314,583+792,670 (+152%)
광고 수익$940$2,934+$1,994 (+212%)
제휴 수익$1,315$2,147+$832 (+63%)
식단 판매*$24$18-$6 (-25%)
프리랜서 디자이너 및 콘텐츠 작가-$4,322-$105-$4,217 (-98%)
호스팅 / 도메인-$115-$241+$126 (+110%)
순이익-$2,158$4,753+$6,911

* 저는 2020년 1월에 식단 판매를 포기했습니다

WanderJest

WanderJest 웹사이트 스크린샷

WanderJest는 코미디 팬들이 근처 라이브 코미디 공연을 찾을 수 있도록 돕는 서비스입니다.

WanderJest는 2020년 초에 시작한 단명한 프로젝트였습니다. 저는 이걸 “Bandsintown, 하지만 코미디 버전”이라고 소개했습니다.

저는 코미디를 좋아하지만, 근처에서 열리는 코미디 공연을 셀 수 없이 많이 놓쳤습니다. 알맞은 메일링 리스트에 가입되어 있지 않거나, 올바른 소셜 미디어 계정을 팔로우하지 않거나, Ticketmaster를 적절한 시기에 확인하지 않았기 때문입니다. WanderJest는 가능한 한 많은 출처에서 공연 정보를 모아 이 문제를 해결하려 했습니다.

공연장과의 제휴를 통해 수익을 낼 계획이었지만, 제 할인 코드를 사용하는 사람은 한 명도 없었습니다. 코로나19가 확산되자 저는 사이트를 닫았습니다.

Portfolio Rebalancer

Is It Keto 웹사이트 스크린샷

Portfolio Rebalancer는 패시브 투자자가 투자를 관리할 수 있도록 돕는 도구입니다.

제 투자 포트폴리오는 여러 범주의 주식과 채권이 섞여 있으며 자산 유형별로 목표 비중이 정해져 있습니다. 가격이 변동하면 투자 비중도 달라지므로, 목표 비율로 되돌리기 위해 자금을 옮겨야 합니다. 저는 1년에 몇 번씩 스프레드시트에 지루하게 숫자를 입력해 모든 게 맞아 보일 때까지 조정하곤 했습니다.

웹 앱이 이 작업을 자동화하면 어떨까 하는 생각이 들었습니다. 빠르게 프로토타입을 만들어 레딧과 제 블로그, 구글 광고를 통해 공유했습니다. 첫 달에 1,000명의 방문자를 끌어모았지만, 안타깝게도 무료 체험을 신청한 사람은 한 명뿐이었고 그마저도 유료 플랜으로 전환하지 않았습니다. 처음부터 아이디어에 자신이 없었기에 한 달 만에 다른 일로 넘어갔습니다.

배운 점

프로덕트 마켓 핏은 마법과 같다

“프로덕트 마켓 핏”을 찾는다는 것은 제품을 만들고 비즈니스를 지속 가능하게 만들 만큼 충분한 고객과 연결된다는 의미입니다. 창업자들이 프로덕트 마켓 핏을 달성했다고 말할 때면 진정한 사랑을 찾은 것처럼 숨 가쁜 어조로 이야기하곤 합니다. 이제 그 이유를 알 것 같습니다.

혼자 일한 첫 2년 반 동안 저는 아이디어를 실행하는 데 수백 시간을 쏟아붓고도 몇 달러의 추가 수익만 보곤 했습니다. TinyPilot은 첫눈에 알아본 프로덕트 마켓 핏이었습니다. 블로그 글을 게시하자마자 직감할 수 있었습니다.

TinyPilot에서는 제품이 비즈니스를 이끌고 저는 그저 함께 가는 느낌입니다. 사업을 운영하며 치명적인 실수를 저지른 달도 여러 번 있었지만, 사업은 여전히 성장했습니다.

제품을 개선하면 결과는 즉각적이고 상당하게 나타납니다. 11월에는 TinyPilot의 새로운 고급형 모델을 출시했습니다. 첫 달에 55대가 팔리며 1만 4천 달러의 추가 매출을 올렸습니다. 이는 Is It Keto와 Portfolio Rebalancer에서 기록한 0.1%의 가입률보다 훨씬 만족스러운 성과였습니다.

24시간 대기하지 않고도 성공적인 비즈니스를 만들 수 있다

2017년 말 UCB 코미디 극장에서 본 공연은 지금도 생생하게 기억나지만, 정작 공연에서 들은 농담은 하나도 기억나지 않습니다. 주머니 속 호출기가 언제 울려 집으로 달려가야 할지 모른다는 걱정으로 내내 마음이 불안했기 때문입니다.

구글에 있을 때 저희 팀은 “당직 로테이션”을 운영했습니다. 두 달에 한 번씩 2주 동안 어디를 가든 호출기를 들고 다녀야 했고, 호출기가 울리면 30분 안에 “키보드 앞에 앉아” 있어야 했습니다.

구글을 떠날 때 저는 앞으로의 계획이 불확실했지만, 한 가지만은 확실했습니다. 다시는 호출기를 들고 다니지 않겠다는 것이었습니다. 그리고 실제로 그러지 않았습니다. 장애가 “큰일”이 되는 비즈니스 아이디어는 아예 고려하지 않았습니다.

2년 차쯤 되자, 바로 이 생각 때문에 제가 앞으로 나아가지 못하는 건 아닐까 하는 생각이 스멀스멀 들기 시작했습니다. 다른 창업자들은 상시 가용성을 약속하는 서비스를 만들고 있는데, 그보다 낮은 수준으로 어떻게 성공할 수 있을까 하는 의문이 들었습니다.

다행히 자수성가 창업의 대가인 Jason Cohen이 지금 하던 대로 계속하라고 말해주었습니다. 엄밀히 말하면 저에게 직접 한 말은 아니었지만, 마치 저를 향해 하는 말처럼 들렸습니다. 그의 훌륭한 강연 “이상적인 부트스트랩 비즈니스 설계하기”32분 지점에서 Cohen은 창업자들이 “실시간” 비즈니스를 만들지 말라고 단호히 조언합니다. 자금 자력으로 일구는 작은 기업이라면 한밤중에 고객 때문에 잠에서 깨는 것은 가치가 없다는 설명이었습니다.

두려움에 굴복하지 않길 정말 잘했다고 생각합니다. TinyPilot은 “실시간”과는 거리가 가장 먼 비즈니스입니다. 고객이 제 소프트웨어를 자신의 하드웨어에서 직접 실행하기 때문에, 제가 모든 서버와 코드 저장소를 닫더라도 누구의 작업도 방해받지 않습니다.

성공은 실패보다 더 스트레스가 된다

TinyPilot이 상시 대응을 요구하지 않는다는 걸 알면서도, 제 머릿속은 종종 그 사실을 잊어버립니다.

대규모 출시 이후 이틀 동안 잠을 이루지 못했습니다. 아홉 개 키트를 모두 고객에게 발송한 뒤에는 앞으로 무슨 일이 벌어질지 전전긍긍했습니다. 모두가 기기를 받았는데 하나도 작동하지 않으면 어쩌나. 고객이 TinyPilot에게 전혀 다른 기능을 기대하고 있으면 어쩌나. 모든 서버를 망가뜨리는 끔찍한 버그가 있으면 어쩌나 하는 생각이 꼬리를 물었습니다.

제가 포장한 첫 아홉 개의 TinyPilot 주문

다행히 초기 고객들은 TinyPilot을 마음에 들어 했고, 그제야 안도의 한숨을 쉴 수 있었습니다. 하지만 몇 주마다 새로운 문제가 생겨 며칠씩 마음을 졸이게 했습니다. 우체국에서 핵심 부품 배송을 분실하기도 했고, 호평 리뷰 때문에 주문이 폭증해 재고가 바닥나기도 했습니다. 세관 서류를 잘못 작성해 수출 관련 문제로 감옥에 갈 각오를 한 적도 있습니다.

현실적으로 제가 느끼는 압박감은 모두 스스로 만든 것입니다. 며칠 동안 품절 상태라고 해서 누가 신경이나 쓸까요? 제 미흡한 계획 때문에 배송이 늦어지면 고객을 실망시킬까 봐 불안해하지만, 아무도 불평한 적은 없습니다. 오히려 배송이 늦어질 것 같다고 사과하면, 고객들은 일일이 알려줘서 감동받았다는 답장을 보내올 뿐입니다.

스스로에 대한 압박을 덜고 일과 사생활을 분리하는 데 점점 나아지고는 있지만, 여전히 진행 중인 과정입니다.

작년 목표 채점하기

작년 초, 저는 세 가지 큰 목표를 세웠습니다.

모든 비즈니스를 합쳐 매출 2만 달러 달성하기

  • 결과: 매출 6만 3천 달러 달성
  • 성적: A+

처음에는 전망이 어두워 보였지만, 목표를 훨씬 초과 달성했습니다. 2019년 매출이 7,200달러에 불과했음을 고려하면, 거의 9배에 달하는 성장은 큰 성취로 느껴집니다.

블로그 글 10개 발행하기

  • 결과: 블로그 글 아홉 개 발행
  • 성적: A-

10개 발행 궤도에 올라 있었지만, 글쓰기 강의를 만들기 위해 열 번째 글을 희생했습니다. 그럼에도 올해 블로그 성과에는 만족합니다. 자부심을 느낄 만한 글 여러 개를 썼고, 그 글들이 알아봐 주는 독자들과 연결되었습니다.

새로운 기술 하나 배우기

  • 결과: JavaScript를 더 깊이 학습함
  • 성적: B-

Rust를 배울 핑계를 찾고 싶었지만, 마땅한 기회를 찾지 못했습니다.

대신 JavaScript에 대한 폭과 깊이를 넓혔습니다. 원래 Vue는 알고 있었지만, 올해는 Vue 기반 정적 사이트 생성기인 Gridsome을 배웠습니다. 이를 이용해 TinyPilot 판매 사이트를 만들고 Is It Keto를 다시 작성했습니다.

순수 JavaScript를 더 효과적으로 쓰는 법도 배웠습니다. TinyPilot 웹 앱은 순수 JavaScript로만 이루어져 있어 빌드나 컴파일 과정이 없습니다. 최신 JavaScript 프레임워크를 쓰지 않음으로써 얼마나 많은 복잡성을 덜 수 있는지 놀랍습니다.

4년 차 목표

TinyPilot 연 매출 60만 달러로 성장시키기

연 2만 달러 목표에서 연 60만 달러 목표로 가는 것이 미친 소리처럼 들리겠지만, 충분히 달성 가능하다고 생각합니다.

TinyPilot은 2021년 1월에만 4만 3천 달러를 벌었으니, 매달 평균 3%씩만 성장해도 연간 60만 달러에 도달할 수 있습니다.

블로그 글 여섯 개와 책 한 권 출간하기

혼자 일하기 시작한 이후로 언젠가 책을 자비 출판하고 싶다는 막연한 꿈을 꿔왔습니다. 올해 마침내 그 꿈을 실행에 옮기려 합니다.

이 책은 소프트웨어 엔지니어가 글쓰기를 개선할 수 있는 실용적인 방법을 가르칠 예정입니다. 가제는 Refactoring English: Effective Writing for Software Developers입니다.

TinyPilot 운영 자동화하기

제 여자친구가 TinyPilot 일을 파트타임으로 함께하며 재고 관리와 주문 포장을 맡고 있습니다. 함께 일하는 것은 즐겁지만, 확장이 어렵고 취약한 시스템입니다. 둘 중 한 명이라도 며칠 자리를 비우면 금세 엄청난 양의 일이 밀립니다.

우리가 2주 휴가를 떠나도 모든 일이 멈추지 않도록, 프로세스를 충분히 체계화하고 외주화하고 싶습니다.

마무리하며

퇴사 전에는 스타트업에 관한 책을 끊임없이 읽고 팟캐스트를 들었습니다. 그중에서도 가장 흥미로웠던 부분은 무한한 가능성에 대한 이야기였습니다.

자신의 비즈니스를 운영하면 무엇이든 할 수 있습니다. 한 달의 시간과 1만 달러의 자본만 있으면 비즈니스를 성장시킬 수 있는 방법은 수백만 가지입니다. 새로운 기능을 추가할 수도, 새로운 마케팅 전략을 시도할 수도, 새로운 영업 담당자를 고용할 수도 있습니다. 업계에서 아무도 본 적 없는 완전히 새로운 방법을 직접 만들어낼 수도 있습니다.

커리어 내내 저는 늘 정해진 사다리를 올라가야 했습니다. 승진하려면 일상 업무와는 거의 관련 없는 자의적인 기준을 충족했음을 증명해야 했습니다. 상사가 새 기능을 추가하라고 하면 “아니요, 더 나은 마케팅 전략이 필요하다고 생각하니 그걸 하겠습니다”라고 말할 수 없었습니다. 하지만 지금은 제 비즈니스에서 그런 말을 시도때도 없이 합니다! (물론 이제 상사도 직원도 모두 저 자신이지만요.)

마침내 하나의 비즈니스로 금전적 성공을 맛보니 수익이 늘었고, 이는 곧 더 많은 가능성을 의미합니다. 기대했던 만큼 재미있습니다. 스트레스는 받지만, 재미있습니다.

다시 한 번, 스스로를 위해 일할 수 있다는 것이 믿을 수 없을 만큼 행운이라고 느끼며, 이 일을 영원히 계속할 수 있기를 바랍니다.

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

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