I'm Probably Procrastinating

Michael Lynch

아마 나는 미루고 있는 것 같다

한 줄 요약

고객과 대화하는 데 더 많은 시간을 써야 한다.

하이라이트

  • Zestful 웹사이트를 수정한 뒤 며칠 만에 구글 검색 첫 페이지에 올랐다.
  • 수십 년 된 기계 가공 공장 관리 애플리케이션을 더 나은 버전으로 만들어 보려고 한다.
  • 고객과의 대화를 피하려고 코딩만 열심히 하고 있다.

목표 평가

매달 초에 이루고 싶은 목표를 공개한다. 이번 달 목표 달성 결과는 다음과 같다.

이메일과 소셜 미디어의 방해 요소 제거에 관한 새 블로그 글 발행하기

예정대로 글을 발행했지만 반응이 생각보다 훨씬 적어 놀랐다. 그전에도 주제가 너무 좁아 널리 주목받지 못할 글들을 연달아 써 왔는데, 이번에는 소셜 미디어 시대의 집중력에 관한 글이라 더 많은 관심을 끌 줄 알았다.

RedditTwitter에서 약간의 반응은 있었지만, 전체적으로 많은 독자를 끌지는 못했다(현재까지 총 800명 정도).

긍정적인 점은 글을 읽은 사람들로부터 좋은 피드백을 들었다는 것이다. 몇 분은 글에서 얻은 팁 덕분에 생산성이 향상됐다고 말해 주었고, 그런 이야기를 듣는 것만으로도 보람이 있었다.

잠재적 신규 사업을 위해 고객 5명 인터뷰하기

  • 결과: 고객 3명 인터뷰
  • 성적: C

어떻게 보면 고객 인터뷰를 세 번 하긴 했지만, ‘고객 인터뷰’를 아주 관대하게 정의했을 때 그렇다는 것이다. 진짜 고객 인터뷰는 한 번뿐이었다. 다른 하나는 고객이 될 가능성이 낮은 사람과의 일반적인 미팅이었고, 마지막 하나는 짧은 대면 대화와 12월에 다시 연락하자는 초대였다.

이번 달의 유일한 진짜 목표가 고객 인터뷰였던 것을 감안하면 세 번은 매우 적은 수치다. 영업에 대한 거부감과 문제를 코드로 해결하려는 성향 때문이기도 하다. 또 이 일은 네트워킹을 필요로 하는데, 아무런 인맥 없이 처음부터 네트워킹을 시작하는 것은 어렵다는 문제도 있다.

통계

Is It Keto

지표2019년 10월2019년 11월변화
순 방문자 수26,31527,981+1,666 (+6%)
총 페이지뷰66,57869,090+2,512 (+4%)
도메인 권위 (Moz)1314+1 (+8%)
랭킹 키워드 수 (Moz)1,5741,654+80 (+5%)
AdSense 수익$75.65$151.07+$75.42 (+100%)
Amazon 제휴 수익$159.02$118.00-$41.02 (-26%)
식단 플랜 판매액$23.87$0.00-$23.87 (-100%)
총 수익$258.54$269.07+$10.53 (+4%)

상황이 조금씩 나아지고는 있지만, 10~12월은 다이어트 관련 웹사이트에겐 1년 중 가장 비수기라고 생각한다. 새해 결심으로 키토 다이어트를 알아보려는 사람들이 늘면서 1월에는 큰 폭의 급증이 있을 것으로 기대한다.

Amazon 제휴 수익은 5월 이후 최저 수준으로 떨어졌다. 당시 트래픽은 지금의 절반 수준이었다. AdSense 수익은 AdSense 연동 버그를 수정하면서 조금 올랐다. 수정 사항은 11월 중순에 반영됐기 때문에, 한 달 내내 수정이 적용될 다음 달에는 AdSense 수익이 더 크게 오를 것으로 기대한다. 식단 플랜은 여전히 판매 중이지만, 사실상 판매 노력은 거의 중단했다(자세한 내용은 아래에서 다룬다).

Zestful

지표2019년 10월2019년 11월변화
총 수익$3.89$65.33+$61.44 (+1,580%)

Zestful은 지난 몇 달 동안 천천히 성장하고 있다. 과거에도 수익이 크게 뛴 달이 몇 번 있었지만, 대부분 한 번에 대량으로 사용하는 사용자 때문이었다. 최근 몇 달 동안은 여러 명의 서로 다른 사용자로부터 꾸준하고 점진적인 사용량 증가를 확인하고 있다.

식단 플랜 판매 포기하기

지난 몇 달 동안 Is It Keto에서 식단 플랜을 판매할 가능성을 모색해 왔지만, 생각보다 훨씬 어려웠다. 10월에는 식단 플랜 두 개를 파는 데 그쳤다. 수수료를 제외한 총액은 23.87달러였다. 판매 페이지를 여러모로 손보고, 가격을 조정하고, 사이트 다른 부분을 바꿔 방문자를 판매 페이지로 유도해 봤지만 아무런 효과가 없었다.

11월에는 판매 페이지에 몇 가지 추가 수정을 시도했다.

  • 식단 플랜 중 하나에 사진을 추가했다
  • 고객 후기를 추가했다
  • “Download” 버튼에서 가격을 제거했다

그러나 어떤 변화도 효과가 없었다.

특히 구매 버튼 문구를 “Download PDF”로 바꾼 뒤에도 클릭 수가 낮게 유지됐을 때는 더욱 낙담했다. 그 문구라면 사용자가 무료 다운로드로 착각할 수도 있는데도 여전히 클릭하지 않았다.

가격 제거 전후 스크린샷

다운로드 버튼에서 가격 제거 전후

분명 성공적으로 판매하는 방법이 있을 것이다. 하지만 이미 6주 이상을 투자했고, 너무 오래 끌었다는 느낌이 들었다. AdSense 광고 일부를 식단 플랜 자체 광고로 교체했었는데, 그대로 AdSense를 유지했더라면 훨씬 더 많은 수익을 올렸을 것이다. 그래서 자체 광고를 제거했다. 또 사이트 메인 내비게이션 바에서 “Meal Plans” 항목을 빼고, 홈페이지에서도 블로그 언급을 제외하고는 모두 제거했다.

앙심에서 시작된 Zestful 웹사이트 재작성

Zestful 웹사이트는 작년에 만들었는데, 2주 내내 고통이었다. 대부분 두 주간의 고통이었던 이유는 당시 내가 아는 유일한 프론트엔드 프레임워크였던 Angular로 만들었기 때문이다(…‘알고’ 있었다고 해야 할 수준)(“알고”). 그 이후 Vue.js를 배웠고, 지금은 Vue를 훨씬 선호한다. 웹 디자인 경험도 훨씬 더 쌓였다.

그럼에도 Zestful 웹사이트는 계속 Angular 사이트로 남아 있었다. Vue로 다시 쓰고 싶어 안달이었지만, 거의 손대지 않는 웹사이트를 처음부터 다시 만드는 것을 정당화할 수 없었다.

그러다 구글 검색 결과를 확인했다. parse ingredients를 검색했을 때 Zestful은 3페이지에 나왔다. 사실상 보이지 않는 것이나 마찬가지다. 더 답답한 것은 1페이지에 Zestful 경쟁사가 나온다는 점이었다. 재료 파싱을 전문 서비스로 제공하는 유일한 다른 회사였다.

Zestful 경쟁사 스크린샷

검색 결과에서 Zestful을 앞지르고 있던 경쟁사

경쟁 서비스를 테스트해 보니 Zestful을 만든 방식과 똑같이 만들었다는 것을 알 수 있었다. 오래된 오픈소스 라이브러리를 웹 UI로 감싼 형태였다. 다만 내가 했던 것처럼 추가 개발을 하거나 버그를 고치거나 기능을 덧붙이지는 않았다.

그래서 그들이 검색 결과에서 계속 나를 앞서는 것이 짜증이 났다. 이유를 도무지 알 수 없었다! Zestful을 링크한 사이트가 더 많았고, 콘텐츠도 더 많았으며, 업데이트도 더 자주 했다. 내가 생각할 수 있는 유일한 설명은 Zestful은 클라이언트 사이드 렌더링이고 경쟁사 사이트는 서버 사이드 렌더링이라는 점이었다. 즉, 그들은 서버 사이드에서 채워야 하는 SEO 관련 HTML 태그를 채울 수 있다는 뜻이었다.

Zestful 사이트에서 서버 사이드 렌더링을 구현할 방법을 고민했다. Angular는 Angular Universal을 통해 이를 지원하지만, 예전에 KetoHub를 Angular Universal로 옮기려다 일주일 넘게 허비하고 아무 성과도 얻지 못한 적이 있다. 게다가 Angular라는 구덩이에 더 깊이 빠지고 싶지도 않았다.

Vue에는 Nuxt라는 서버 사이드 렌더링 솔루션이 있지만, 몇 페이지를 서버에서 렌더링하려고 Node 서버 전체를 운영하는 것은 별로 내키지 않았다. 자세히 살펴보니 Nuxt가 정적 생성 페이지를 지원한다는 것을 알게 됐다. 즉, HTML 파일 몇 개를 미리 생성해 단순 정적 호스팅으로 서비스할 수 있다는 뜻이었다(이 블로그를 호스팅하는 방식처럼). 그러면서도 Vue의 툴링과 정적 사이트의 편리함을 모두 누릴 수 있다.

Nuxt로 간단하게 정적 페이지를 생성하는 좋은 예제를 찾지 못했지만, 시행착오 끝에 직접 hello world를 동작시키는 데 성공했다. 그리고 하루 반 동안 미친 듯이 코딩에 몰두해 Zestful 웹사이트Angular에서 Vue + Nuxt로 포팅했다. 이제 Zestful에는 <link rel="canonical" ...>나 페이지별 <title> 태그 같은 적절한 서버 사이드 태그가 모두 들어간다.

UI를 재디자인하는 것이 목표는 아니었지만, CSS 프레임워크도 Material Design에서 Bootstrap으로 바꾸면서 CSS를 상당 부분 처음부터 다시 구현해야 했다. Zestful을 디자인한 이후 CSS 경험이 훨씬 쌓였기 때문에, 이전 디자인에서 거슬렸던 사소한 부분들을 이번 기회에 고쳤다.

Zestful 경쟁사 스크린샷

검색 결과에서 Zestful을 앞지르던 경쟁사

며칠 뒤 구글에서 “parse ingredients”를 검색하자 이런 결과가 나왔다.

구글 검색 결과 첫 페이지에 오른 Zestful

구글 검색 첫 페이지로 올라온 Zestful

와, 첫 페이지다! 그것도 재작성을 결심하게 만든 경쟁사보다 한 단계 위에 있다.

솔직히 조금 의심스럽다. 이렇게 갑작스럽고 극적으로 구글 순위에 영향을 미치는 변화를 본 적이 없기 때문이다. 낙관적인 마음으로 Google Search Console을 지켜보며 이번 재작성 이후 장기적으로 통계가 어떻게 변하는지 모니터링하고 있다.

하지만 이 모든 건 미루기다

Zestful과 Is It Keto를 만지작거리는 건 생산적으로 보이지만, 새로운 큰 한 방 아이디어를 찾는다는 상위 목표에는 도움이 되지 않는다. 이번 달을 돌아보면 코딩 작업에 너무 많은 시간을 쓰고 고객 발굴에는 너무 적은 시간을 썼다.

다만 결과물만 보면 조금 왜곡돼 보일 수도 있다. 행사에 참석하고 기업을 조사하는 데도 시간을 쓰긴 했지만, 결국 대부분의 후보를 제외하면서 그런 활동에서 나온 가시적인 성과는 적었다.

소프트웨어 사업 아이디어 찾기에서의 단절 문제

내 사업을 운영하면서 크게 깨달음을 얻은 순간 중 하나는 Rob Walling의 책 Start Small, Stay Small(내 노트)을 읽었을 때였다. 그는 1인 개발자의 장점이 틈새 고객을 위한 솔루션을 만들어도 충분히 수익을 낼 수 있다는 점이라고 지적했다.

Walling은 프리랜서 웹 개발자를 위한 회계 소프트웨어를 만드는 회사를 예로 들었다. QuickBooks나 Xero 같은 거대 경쟁사가 있음에도, 웹 개발자들이 자신의 특수한 요구에 집중한 제품에 기꺼이 비용을 지불하기 때문에 그 틈새 회계 소프트웨어는 성공한다. 따라서 Walling의 조언은 작은 틈새 비즈니스를 위한 소프트웨어를 만들라는 것이다.

내가 배워 가고 있는 과제는 그런 틈새와 어떻게 연결되느냐다.

예를 들어 당신이 커스텀 자동차 정비소를 운영한다고 해 보자. 전국 각지의 다양한 소규모 부품 공급업체로부터 자동차 부품을 구매해야 하는데, 업체마다 결제 시스템과 주문 과정이 모두 다르다. 회계를 제대로 하려면 이메일을 일일이 뒤져 영수증 하나하나를 회계 소프트웨어에 정리해야 한다.

구글 검색 결과 첫 페이지에 오른 Zestful

이 자동차 정비소에 더 나은 소프트웨어가 있었다면 저 철제 캐비닛이 저렇게 더럽지는 않았을 것이다.

개발자 관점에서 보면 소프트웨어로 해결할 수 있는 문제가 몇 가지 보인다. 예를 들어 공장 사장이 영수증을 당신에게 전달하면 자동으로 파싱해 고객의 QuickBooks 계정으로 데이터를 가져오는 서비스를 만들 수도 있다. 혹은 좀 더 야심 차게, 사장이 여러 웹사이트를 뒤져 부품을 찾지 않아도 되도록 커스텀 자동차 부품 마켓플레이스를 개발할 수도 있다.

하지만 여기에 단절 문제가 있다! 커스텀 자동차 정비소 사장 입장에서는 누군가 이런 문제를 소프트웨어로 해결해 줄 수 있다는 생각조차 하지 않을 가능성이 크다. 자신의 업무 방식에 너무 익숙해진 나머지 애초에 문제를 문제로 인식하지 못할 수도 있다.

개발자인 나는 그들의 업무 흐름과 고충을 모르기 때문에 사업주가 이런 문제를 겪고 있다는 사실을 알아낼 방법이 없다. 물론 물어볼 수는 있지만, 제안 자체가 다소 이상하게 들린다.

: 사업 운영에서 비용이 많이 들거나 번거로운 부분을 자동화해 주는 소프트웨어 제품을 판매하고 싶습니다.

사업주: 좋네요! 그 소프트웨어는 뭘 하는 건가요?

: 모르겠습니다.

사업주: …?

: 어떤 소프트웨어가 필요한지 모르니, 알아내려면 낯선 사람인 저에게 사업에 대해 몇 시간 동안 설명해 주셔야 합니다.

사업주: …

: 그리고 제가 수익성 있는 기회가 없다고 판단할 가능성도 커서, 결국 당신의 문제를 해결해 주는 어떤 것도 만들지 않게 될 수도 있습니다.

사업주: [경비원 부름]

지금 내가 겪고 있는 것이 바로 이런 상황이다. 내 주변에는 내가 소프트웨어 제품을 만들어 주면 기꺼이 비용을 지불할 비즈니스가 분명 많이 있을 텐데, 나는 그 존재를 알지 못한다. 그리고 새로운 소프트웨어 솔루션의 혜택을 받을 것 같다고 의심되는 비즈니스를 찾더라도, 그들이 내게 몇 시간 동안 업무를 설명해 주기 전까지는 내 가치를 증명할 방법이 없다.

여담: 내가 예시로 든 저 자동차 정비소 이야기가 사실 꽤 괜찮은 아이디어일지도 모른다!

스스로에게 메모: 커스텀 자동차 정비소를 조사해 보자.

기계 가공 공장 인터뷰하기

지역 비즈니스를 발굴하던 중 내 주변의 작은 회사들 웹사이트가 모두 같은 웹 디자이너인 Montague WebWorks의 작품이라는 것을 알게 됐다. 소유자인 Mik에게 이메일을 보내 작은 지역 비즈니스를 위한 소프트웨어를 만들고 싶어 하는 사람에게 줄 조언이 있는지 물었다. 그는 친절하게 사무실로 초대해 주었고, 대화 중에 지역 스타트업을 위한 자금과 멘토링을 제공하는 조직인 Valley Venture Mentors를 알아보라고 추천해 주었다.

Valley Venture Mentors 행사에 참석해 한 기계 가공 공장 사장을 만났다. 기계 가공 공장을 위한 소프트웨어 옵션에 대해 이야기를 나눴는데, 수준이 꽤 형편없어 보였다. 가장 인기 있는 제품 중 하나는 JobBOSS라는 애플리케이션인데, 1994년에서 타임머신을 타고 온 것처럼 보인다. 제품 데모 영상을 보면 애플리케이션 전체가 SQL 데이터베이스 위에 얇은 UI를 씌운 것에 불과해 보인다.

JobBOSS 스크린샷

기계 가공 공장 직원들은 정말 데이터베이스 관리를 좋아할까?

상당히 비대하고 복잡해 보여서, 더 좁은 사용 사례에 맞춘 더 단순한 JobBOSS 버전에 비용을 지불할 의향이 있는 기계 가공 공장을 찾을 수 있기를 기대하고 있다.

12월 목표는 이런 소프트웨어를 사용하는 기계 가공 공장에 접근해 기존 프로세스와 소프트웨어에서 무엇이 좋고 무엇이 불편한지 인터뷰하는 것이다.

추천

마무리하며 이번 달에 발견한 멋진 것 두 가지를 소개한다.

Firefox에서 전체 페이지 스크린샷 찍기

웹사이트 스크린샷을 자주 찍는데, 관련 정보를 한 화면에 모두 담기가 어렵다. 뷰포트가 좁은 모바일 웹사이트를 찍을 때는 특히 더 어렵다. 그러다 Firefox의 컨텍스트 메뉴에 “Take a Screenshot” 항목이 있다는 것을 알게 됐다.

Firefox의 스크린샷 기능

Firefox의 놀라운 내장 스크린샷 기능

두 번의 클릭으로 전체 페이지를 저장할 수 있다.

Firefox의 스크린샷 기능

Firefox에서는 보이는 부분뿐 아니라 전체 페이지를 스크린샷으로 찍을 수 있다

모바일에서 Is It Keto 홈페이지 전체를 여러 개의 스크린샷을 이어 붙이지 않고도 찍을 수 있다. 정말 편리한 기능이다!

Bruno Simon의 3D 이력서

웹 개발자 Bruno Simon은 자신의 포트폴리오 페이지를 멋진 3D 드라이빙 게임으로 만들었다. 플러그인 없이 브라우저에서 완전히 동작하는 게임치고는 놀랍도록 성능이 좋고, 몇 분 동안 탐험하는 것만으로도 무척 재미있다.

수개월 동안 힘들지만 즐겁게 작업한 끝에, 마침내 새로운 포트폴리오를 공개하게 되어 기쁩니다 🚗https://t.co/rVPv9oVMud

#threeJS#canonJS로 제작했습니다 pic.twitter.com/zrq8rpILq1

— Bruno (@bruno_simon) 2019년 10월 24일

마무리

무엇을 해냈나?

배운 점

  • 미루지 말고 더 많은 고객과 대화하라.
  • 서버 사이드 렌더링이 검색 엔진 순위에 큰 차이를 만드는 것 같다.

다음 달 목표


자동차 정비소 사진: NeONBRAND, Unsplash 제공.

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

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