스토리 홈

인터뷰

피드

뉴스

조회수 1049

임팩트 커리어 Y는 꿈을 응원받을 수 있는 기회입니다

임팩트 커리어 Y를 통해소셜섹터 마케팅 커리어를 경험한루트임팩트 전예진 님임팩트 커리어 Y 2기로 루트임팩트에서 인턴기간을 마친 전예진 님. 커뮤니티를 통해 사회에 선한 영향력을 미치고 싶다는 전예진 님의 이야기를 들어보자.대학교 2학년 재학중에 임팩트 커리어 Y 2기의 최연소 참가자가 된 예진 님(오른쪽)예진님을 소개해 주세요. 어떻게 사회혁신 커리어에 관심을 갖게 되었나요?고등학생 때 ‘소셜밸류’라는 교내동아리를 통해 사회적기업에 처음 관심을 가졌어요. 소셜벤처 경연대회에 나가보고, 협동조합 안내책자도 만들면서 소셜섹터의 존재를 알게 되었고요. 이후에는 대학교 창업동아리에서 잠시 활동하며 단순히 금전적 이익만 추구하는 것이 저에게 동기부여를 하지 못한다는 것을 깨달았습니다. 마침 휴학하고 새로운 경험을 하고자 했던 시기에 임팩트 커리어Y를 알게 되어 루트임팩트에서 인턴으로 일해보는 소중한 경험을 할 수 있었습니다.많은 회사들 중에 왜 루트임팩트에 지원하게 되었나요? 저는 아직 2학년이기 때문에 소셜섹터와 생태계 전반에 대한 이해를 하고 싶었어요. 그래서 생태계를 조성하고 있는 지원조직인 루트임팩트가 가장 먼저 눈에 들어왔어요. 대학 생활을 하면서 비슷한 가치관을 가진 친구의 영향을 받아서 관심이 더 깊어졌는데요. 서로 나누던 대화중에 커뮤니티를 통해 선한 영향력을 미치는 방법에 대한 이야기도 있었는데요. 루트임팩트가 그런 일을 하는 조직이라고 생각했습니다.부트캠프 교육기간 동안 가장 좋았던 것은 무엇인가요?본격적으로 일을 시작해서 가장 힘이 된 건 서로 응원하고지지해주는 동기들이었어요.'디지털마케팅 강의', '비즈니스 모델 이해하기'와 같은 강의들도 첫 인턴경험이라 살짝 겁을 먹은 저에게 차분한 마음가짐을 하도록 도와주었어요. 하지만 본격적으로 일을 시작해서 가장 힘이 된 건 서로 응원하고 지지해주는 동기(a.k.a 멋진 언니, 오빠들)들이었어요. 각자 자신의 자리에서 하고 있는 고민들을 서로 나누고 조언해주는 임팩트커리어 동기가 있어서 든든했습니다.인턴기간 동안 무슨 일을 했고, 어떤 성장을 했다고 생각하시나요? 저는 루트임팩트 마케팅팀에서 디지털마케팅 인턴으로 근무했습니다. 제가 했던 업무는 크게 SNS 채널 관리라고 할 수 있는데요, 기획부터 실행까지 업무의 자율성이 많이 보장되었어요. 구체적으로는 홈페이지의 체인지메이커 매트릭스 수정 및 번역, 루트임팩트 브런치 중 "People in 루트임팩트"관리, 디자인툴 배우기 및 적용하기, SNS월간홍보캘린더 관리, 그리고 루트임팩트와 헤이그라운드 인스타그램 기획 및 관리를 했습니다. 저의 배움과 성장을 응원하는 팀 분위기 덕분에 해보지 않았던 인스타그램 마케팅을 공부하고 기획하고 실행해볼 수 있었고, 미팅을 따라다니면서 다양한 소셜섹터 플레이어들을 만나 소셜섹터의 생생한 현장을 경험해볼 수 있었습니다. 커리어적으로는 소셜섹터를 넓게 이해할 수 있게 된 것, 이전보다 더 적극적인 행동을 해볼 용기가 생긴 것이 성장한 부분이 아닐까 생각합니다.헤이그라운드를 누비며 입주사 분들과의 인터뷰를 기획했던 예진 님.임팩트커리어 3기 지원자들에게 해주고 싶은 말과 함께 예진 님의 앞으로의 계획을 나눠주세요!아직 학업을 마치지 않은 재학생 분들도 앞으로 소셜섹터에서 일해보고 싶다면, 그리고 배우고 성장하고자 하는 열정이 있다면 열린 마음으로 도전하셨으면 좋겠어요. 저는 인턴 끝나고도 헤이그라운드를 자주 방문하고 있는데, 지금 사회혁신 컨설팅 대회에 참여해서 소셜벤처 비즈니스 모델을 구상하고 있어서 그래요! 우선 이 프로젝트를 열심히 하다가 복학해서 흥미로워 보이는 수업들을 마음껏 듣겠죠? 언젠가 소셜섹터에서 다시 만날 날을 기대합니다.#루트임팩트 #헤이그라운드 #임팩트커리어 #스타트업인턴 #마케팅인턴 #인턴마케터 #부트캠프 #소셜벤처 #커리어경험
조회수 969

에어비앤비 이메일 스페셜리스트가 말하는 이메일 마케팅 노하우

에어비앤비의 Lucas Chevillard와의 인터뷰이 글은 Really Good Emails*의 Lessons learned from Airbnb’s Email Specialist를 저자의 허락을 받고 번역, 편집한 글입니다. 문맥을 고려하여 용어를 수정하거나 의역한 부분도 있습니다.Lessons learned from Airbnb’s Email SpecialistLessons learned from Airbnb’s Email SpecialistAn interview with Lucas Chevillard of Airbnb.medium.comReally Good Emails는 이메일 디자인 사례를 소개하는 사이트입니다. 스티비 이메일도 소개된 바 있습니다. Really Good Emails의 콘텐츠를 통해 다양한 해외 사례와 정보를 소개할 예정입니다.어떤 경력을 갖고 있나요? 에어비앤비에는 어떻게 들어오게 됐나요?커뮤니케이션과 광고를 공부했고, 주로 모바일 마케팅을 통한 사용자 확보와 관련된 일을 해왔습니다. 사용자로서 에어비앤비에 대해 좋은 경험을 갖고 있었고 베를린에서 머물만한 곳을 찾고 있던 때에 마침 구인 공고를 봤습니다. 그리고 에어비앤비에 들어오게 됐죠.요즘은 어떤 테스트를 하고 있나요? 결과는 어떤가요?에이비앤비의 사용자의 두 측면인 호스트와 게스트 모두를 돕기위해 모든 종류의 테스트를 진행하고 있습니다. 호스트 측면에서는, 2016년에 확대 적용할 새로운 전략을 몇 개 도시에서 테스트해보고 있습니다.좌: 디자인 개선 전, 우: 디자인 개선 후그 중 한 가지 예로, 활동이 많지 않은 호스트에게 보내는 이메일의 디자인에 대한 A/B 테스트를 진행했습니다. 디자인을 개선하면 성과가 좋아질 거라고 생각했지만 실제 테스트 해보니 꼭 그런 건 아니었습니다.게스트 측면에서는, 새로 가입한 사용자가 어려움을 겪지 않도록 서비스 사용법을 소개하는 데 노력을 기울이고 있습니다. 프로필 사진의 중요성, 방 유형에 따른 차이점, ‘즉시 예약’ 기능 등을 설명하기 위해 다양한 테스트를 진행하고 있습니다. 최근에는 이런 내용들을 더 잘 이해할 수 있도록 회원 가입 프로세스를 개선하기도 했습니다.에어비앤비에서 꽤 오랫동안 이메일 업무를 담당한 것 같네요. 처음 일을 시작할 때 스스로 잘 알고 있다고 생각했는데 실제로는 달랐던 게 있나요?공휴일에 이메일을 보내면 당연히 효과가 좋을 거라고 생각했었는데, 실제로는 그렇지 않았습니다. 그래서 요즘은 가능한 공휴일을 피해서 이메일을 보냅니다.당신의 조직에서 이메일과 관련된 가장 중요한 KPI가 뭔가요? 디자인을 해치지 않으면서도 이메일의 성과를 높이려면 어떻게 해야할까요?우리는 처음 세웠던 가설이 테스트를 통한 검증을 거쳐 점진적으로 좋은 성과를 보여주면, 그 캠페인을 성공한 것으로 봅니다. 종합해보면 우리는 항상 2개의 KPI를 사용합니다. 수신거부한 수와 반응한 수인데 이 둘을 나눈 값(=수신거부/반응)을 지표로 관리합니다. 이메일에 대한 수신자 반응의 정성적으로 측정하기 위한 것입니다. 날짜별로 이 지표를 확인하기도 하는데, 이렇게 하면 잠재 고객의 의도를 더 명확하게 파악할 수 있습니다. 이 지표는 이메일에 대한 사용자의 만족도를 수치로 보여주기 때문에 더 나은 이메일을 만드는 데 큰 도움이 됩니다. 우리는 항상 80% 이상을 목표로 합니다.개인적으로는, 소셜미디어를 통해 정성적으로 피드백을 수집합니다. 예를 들면, 작년에 “스페인 속의 당신(You Belong in Spain)”이라는 제목의 이메일을 보냈는데, 반응이 매우 좋았고 트위터에서 많이 공유됐습니다. 콘텐츠는 단순했지만 제목 카피가 정말 좋았기 때문인 것 같습니다.“스페인 속의 당신(You Belong to Spain)”어떤 단계를 거쳐 이메일을 발송하나요? 누가 어떤 일을 하는지, 성과 추적은 어떻게 하는지, 시작부터 끝까지 전체 과정을 설명해주세요.프로젝트에 따라 다르지만, 보통 어떤 이슈를 해결하거나 다른 팀을 돕기 위해 가설을 세우는 것부터 시작합니다. 인사이트를 도출하고 각 지역의 팀들로부터 피드백을 받습니다. 그리고 발송 전까지 콘텐츠 팀, 개발팀과 함께 이메일을 제작하고, 몇 주 뒤에는 성과를 확인합니다. 진행 과정을 확인하기 위해 Asana와 구글 문서를 주로 사용합니다.이메일을 개인화 하고 있나요? 무엇을 어떻게 하고 있나요?이메일 개인화는 2016년에 우리가 집중할 매우 중요한 주제입니다. 이메일 을 효과적으로 개인화하는 방법을 찾기 위해 모든 이메일들을 리뷰하고 있습니다. 이메일에 보다 연관된 정보를 담는 것이 우리의 목표입니다.그 중 한 가지 예로, 사용자가 좋아할 만한 숙소를 추천하는 이메일에 대한 테스트를 진행했는데, 의미있는 결과를 얻을 수 있었습니다.1단계: 지역 선택하기처음 발송하는 이메일의 제목은 “당신의 모험을 선택하세요(Choose your adventure)”입니다. 어떤 걸 클릭하는지에 따라 두 번째 이메일의 제목과 내용이 달라지는데, 예를 들어 “유럽”을 선택했다면, 두 번째 이메일은 유럽에 대한 내용으로 채워지고 제목은 “유럽에서의 모험이 당신을 기다립니다(Your adventure in Europe awaits)”가 됩니다.2단계: 관심 주제 선택하기다시 어떤 걸 클릭하는지에 따라 이어지는 이메일의 내용도 달라집니다. 두 번째 이메일에서 “낭만”을 클릭했다면, 세 번째 이메일의 제목은 “유럽에서의 낭만적인 모험을 즐길 준비가 되셨나요(Ready to embark on your romantic adventure in Europe)?”가 됩니다.3단계: 숙소 선택하기다른 많은 숙박, 여행 관련 서비스들과 경쟁하기 위해 이메일을 어떻게 활용하나요?에어비앤비의 사용 경험을 전달하기 위해 이메일을 활용합니다. 모든 이메일에 대해 매우 전략적으로 접근하기 때문에 양보다는 질에 집중합니다. 에어비앤비의 사용 경험을 있는 그대로 전달하기 위해 가장 좋은 방법 중 하나는 사용자의 콘텐츠를 활용하는 것인데, 사용자들이 올린 인스타그램 사진을 보여주는 이메일을 보내기도 합니다.사용자의 콘텐츠(인스타그램 사진)을 활용한 이메일위 이메일의 제목은 “우리는 이렇게 아침을 맞이합니다”입니다. 매력적인 사진을 통해 활동이 적은 사용자의 반응을 이끌어내는 방법을 찾고 싶었습니다. 3장의 인스타그램 사진이 바로 그 역할을 했습니다. 사용자의 참여를 이끌어내는 또다른 방법은 사용자가 올린 사진과 함께 “여긴 어딜까요?”와 같은 가벼운 질문을 던지는 것입니다.“어떤 사진이 가장 마음에 드나요?”사용자의 참여를 극대화하는 가장 좋은 방법은 무엇인가요?정말 많은 테스트가 필요합니다. 제목부터, 콘텐츠 구조, 행동을 유도하는 친숙한 시각 요소(흔히 사용하는 검색창이나 평가 기능 같은 것들), CTA들까지 다양한 요소를 테스트 해봐야 합니다. 예를 들면, 최근 보낸 호스트 컨테스트에 관한 이메일에서는 가장 인기있는 여행지 몇 곳을 모아서 소개했었는데, 사용자들이 호스트 컨테스트를 잘 모른다는 걸 알고 있었기 때문에 콘텐츠 구조에 신경을 썼습니다. 호스트 컨테스트와 관련된 내용을 관심을 끌만한 콘텐츠들 사이에 배치한 것이죠.클릭에 어떤 영향이 있는지 보기 위해 검색창의 위치를 바꿔가며 테스트해보기도 했습니다. 보통 검색창을 헤더에 배치하곤 했는데, 그 위치를 바꾸면 어떻게 될지 확인해보고 싶었습니다. 개인적으로는, 검색창을 이미지 위에 오버레이 하면 더 많은 사람들이 클릭할 거라고 생각했지만, 테스트 결과는 달랐습니다. CTA 버튼을 이미지 위에 오버레이 했을 때가 더 반응이 좋았습니다. 결과적으로 컨테스트에 별로 관심이 없던 사용자들로부터도 많은 참여를 이끌어낼 수 있었습니다.그리고 몇몇 본문 하단에 “이 이메일이 마음에 드시나요?”라는 질문 문구를 넣기 시작했습니다. 이 질문을 통해 정성적인 피드백을 즉각적으로 수집할 수 있었습니다.최고의 이메일을 보내는 한 곳을 뽑는다면?다양한 업계의 이메일들을 받아보는데, 어느 한 곳만 뽑기는 어려울 것 같습니다. 몇 가지 뽑자면, Asana, ModCloth, Spotify, Fab, Everlane의 이메일들을 좋아합니다.#슬로워크 #스티비 #마케팅 #마케터 #이메일 #이메일마케팅 #꿀팁 #노하우
조회수 1248

열혈강호로 살펴보는스타트업 캐릭터

지금까지 읽었던 만화 중 가장 좋아하는 만화 3개를 꼽으라면 단연코 열혈강호, 슬램덩크, 킹덤을 꼽는다. 마침 와이프가 휴가간 틈을 타 일요일 하루 종일 오랜만에 열혈강호 60권을 꺼내어 다시 읽어보는 나만의 휴가를 가졌다. 그러다가 문득, 여기 캐릭들이 스타트업에서 활동하는 캐릭들이랑 겹치는 부분이 많아서 한번 재미삼아 소개해 보고자 한다. 어디까지나 '재미삼아' 매칭시켜 보는거기 때문에 너무 진지빨면서 읽지는 말자.1. 한비광 - 필요하면 직접 배워서 뭐든지 달성해 버리는 공격적인 스타트업 대표스타트업 하다보면 마케팅, 영업, 재무, 회계 등등 수많은 펑션의 일들을 직접 해결해야 하는 경우가 많은데, 이런 사람들은 별로 고민하지 않고 지가 스스로 배워버려서 실제 그 업무를 하던 사람들 보다 고퀄을 달성해 버리는 캐사기 민망한 스타트업 대표 캐릭터이다. 이런사람들 특징이 '내가 직접 해봐서 아는데'라는 말을 달고 살면서 직원들 스팀돌게 만드는데 일가견이 있다.'내가 직접 해봐서 아는데'를 입에 달고사는 대표2. 담화린 - 전략과 변초에 능한 기획자머리 겁나 좋고 뭔가 전략같은거 멋있게 만드는 기획자이다. 실제 만화에서 한비광이 싸울때 옆에서 '지금 운유과봉을 써,' '지금이야 잠룡등천!' 이러면서 싸움 전략을 기가막히게 잘 짠다. 이런 능력자들은 학교나 교과서에서 배운 내용들일지라도 각 상황에 맞게 능수능란하게 적용할 수 있는 어마어마한 기획력을 지니고 있다. 스타트업의 스케일을 위해 꼭 필요한 캐릭터. 다만 너무 보수적이고 리스크테이킹을 잘 안하려는 성향이 있어서 위의 한비광같은 사람이 이끌어 줄 필요가 있는 캐릭이기도 하다.  뒷태..가 아닌 두뇌가 섹시한 기획자이다.3. 노호 - 우직하고 깡따구도 세고 한결같이 노력하는 사업개발, 또는 영업사원머리가 좋거나 재능이 뛰어나진 않지만 항상 우직하게 노력의 노력을 거듭하고 깡따구도 있어서 어디 큰 영업건 계약따러가면 반드시 성사해버리는 영업사원이다. 특히 이 사람의 끈기는 타의 추종을 불허할 정도라서 고객사들 사이에서도 저사람한테 한번 물리면 절대로 빠져나올 수 없는 영업사원으로 유명하다. 실제로 만화에서도 세외세력중 하나인 동령에 들어가 내부 반란과 각종 분란에도 전혀 굴하지 않고 끈기있게 도전하여 결국 동령을 접수해 버렸다. 술마시면 진지빠는 얘기로 주변사람들 졸게만드는건 옥의 티.술마시면 너무 진지하지만 항상 큰 계약 성사시키는 영업사원4. 매유진 - 자기세계 뚜렷하고 친해지기도 어렵지만 실력 하나는 줄충한 디자이너속을 알수없고 자기 세계가 너무 뚜렷해서 누가 참견하거나 내 영역에 침범하는걸 끔찍하게도 싫어하는 디자이너다. 사람들이랑 쉽게 어울리지 못하고 친해지기도 어렵다. 하지만 실력 하나는 줄충하고 나름 디자인 분야에서 명성도 있어서 이 사람이 우리 회사에 존재하는것 만으로도 투자자의 관심을 끌 정도이다. 일단 친해지고 나면 은근 잘 챙겨주고 마음 따뜻한 면모가 보이는 참 매력적인 디자이너.업계에서 나름 명성있는 디자이너. 다가가기 어렵지만 한번 친해지면 마음 따뜻한 면모를 볼 수 있다.5. 진풍백 (천마신군 셋째 제자) - 자기잘난맛에 살고 남 깔아뭉개기 좋아해서 재수없지만 성과는 잘나와서 욕하기 힘든 스타트업 대표기본적으로 사람들이 싫어한다. 뒤에서 욕도 많이 먹는다. 그 이유는 캐릭 자체가 자기 잘난맛에 살고 누가 뻘짓하면 '저런 멍청한놈' 하면서 바로 깔아뭉개버리는 스타일이다. 하지만 사업수완이 좋고 말빨도 수려하기 때문에 대표로서 투자도 잘받고 언론 인터뷰빨도 잘받는 스타일이라 직원들이 앞에서 비판은 못하고 항상 뒤에서 뒷다마만 열심히 까는 캐릭이다. 본인과 말이 통하는 사람들하고만 대화하는 경향이 있어서 그 바운더리 안에 들지 못하는 직원들은 모멸감만 느끼다가 금방금방 그만둬 버린다. 시간이 흐르고 나면 이 팀에는 본인과 말이 통하는 똑똑한 능력자들만 남아있게 되는건 함정(?)자기 잘난맛에 살지만 직원들이 대놓고 욕은 못하고 뒷다마까는 대표6. 최상희 (천마신군 다섯째 제자) - 성격좋고 겉으로 보기에 뭔가 뛰어나보이지도 않는데 이상하게 성과 잘나오고 투자도 잘받는 스타트업 대표일단 성격이 좋고 마음씨가 따뜻한 스타트업 대표이다. 그런데 겉으로 보기에는 뭔가 전혀 능력자 같지 않아 보인다. 말빨이 수려한것도 아니고 카리스마가 있어보이지도 않는다. 하지만 제법 사업이 잘 굴러가고 피칭은 잘 못해도 투자자들이나 파트너사들이랑 미팅하면 항상 투자유치나 계약도 잘 따낸다. 여린 구석이 있어서 감동적인 순간이나 옛날에 힘들었던 시절 생각하면 펑펑 울기도 해서 직원들이 달래주는 캐릭터.여리고 잘 울기도 하고 능력자도 아닌것 같지만 사업은 이상하게 잘굴러가는 대표7. 유원찬 (송무문 문주) - 한때 실패의 쓰라린 경험을 맛보고 재기를 꿈꾸는 스타트업 대표과거 크게 실패해본 경험이 있어서 재기를 노리는 스타트업 대표이다. 스펙 화려하고 대기업에서 승승장구 하다가 스타트업에 도전했다. 인맥도 좋아서 초기에 투자도 크게 받아서 사업을 공격적으로 확장했다가 크게 말아먹고 빚더미에 올라앉은 경험이 있다. 방황의 시기를 극복하고 다시 오랜 시간의 준비 끝에 새로운 사업으로 재기했다. 옛날에는 성격도 더럽고 남 무시하기 좋아하는 유아독존형 캐릭터였지만 크게 쓴 맛을 본 후에 성격을 고쳐먹어서 지금은 인품도 좋고 매사에 신중한 캐릭터로 변모하였다. 향후 성공가능성이 가장 높은 스타트업 대표 스타일이다.과거에 크게 사업 말아먹고 다시 재기를 꿈꾸는 스타트업 대표8. 천운악 (정파 육대신룡 중 한명이자 벽풍문 소문주) - 자기잘난맛에 살고 남 깔아뭉개기 좋아하고 뭐 성과 내는것도 없이 맨날 말뿐인 마케터스타트업 팀 구성할때 이런사람은 반드시 피해야 한다. 이 캐릭터는 유아독존 자아도취가 하늘을 찌르고 남 깔아뭉개는건 기본인데다가 집안 배경 믿고 까부는 마케터 스타일이다. 워낙 집안 배경이 좋아서 초반에는 자비+집안인맥 동원하다 보니 성과도 잘 내는것 같은 착각이 들게 하는 마케터이지만, 나중에 밑천 다 드러나면 지 손으로 직접 할 줄 아는게 하나도 없는 알맹이 없는 사람이라는게 금방 드러나 버린다. 하지만 절대로 본인의 부족함을 인정하지 않고 말만 번지르르하게 해서 주변 사람들을 멘붕시키는 캐릭터이다. 혹시 본인 팀에 이런 사람이 있다면 팀 구성을 꼭 다시한번 고민해 보길 바란다.집안 배경 믿고 까부는 말만 번지르르한 마케터9. 요열마화 부용 - 일안하고 맨날 커피마시러 나가고 딴짓 장난 아닌데 성과는 잘 내는 마케터일단 자리에 잘 붙어있지 않는다. 출근하자마자 옆에 직원 꼬셔서 커피마시러 나가고 점심시간도 보통 남들보다 30분 일찍 나가서 30분 늦게 들어온다. 놀기도 좋아하고 아웃도어 스포츠나 취미생활 즐기는걸 좋아해서 보통 하나에 꽂히면 지름신 덕질 동원해서 장비 갖추고 주말마다 놀러다닌다. 구속받는걸 싫어해서 결혼에 대한 생각도 없고 자유분방한 삶을 즐기는 마케터이다. 하지만 성과하나는 기가막히게 잘낸다. 워낙 본인이 덕질에 일가견이 있어서 덕후들이 열광하는 컨텐츠도 잘만들어 내고 카피도 잘쓰고 본인 자체적인 인맥도 끝내준다. 스타트업 대표로서 초기에 가장 탐나는 마케터 캐릭이다.일 안하고 맨날 딴짓하고 놀러다니는 것 같은데 성과는 기가막히게 잘나오는 마케터10. 미고 (동령의 신녀) - 푸념 잘들어주고 항상 따뜻해서 모든 직원들에게 사랑받는 HR 담당자보통 초기 스타트업에는 없는 캐릭터이고 어느정도 시드투자 받은 후에 직원 수 키워나갈때 합류하는 스타트업의 HR담당자이다. 성격이 따뜻하고 사람들 푸념도 잘들어주고 중간에 갈등 조율도 잘하는 누나/언니같은 스타일이다. 잘난척 절대로 없고 항상 겸손하기 때문에 보통 잘난척 좋아하는 직원들이 이 누나 앞에서 재롱떠는 경우가 많다. 그럴때마다 이 누나는 항상 '우와 너 진짜 대단하구나~~' 하고 칭찬해주면서 그 사람의 사기와 동기부여를 하늘 끝까지 치솟게 만들어 준다. 그런데 이런 캐릭터는 항상 속으로 엄청난 내공과 경험을 가지고 있다. 야망도 있어서 매정해야 할때는 그 누구보다도 매정한 선택을 하기도 한다. 모든 행동과 말에는 항상 이유가 있는 사람이라 이런 사람을 대할때는 너무 모든걸 드러내지 말고 조심스럽게 대해야 한다. 스타트업 대표라면 조직 키울때 꼭 영입해야하는 HR담당자 1순위 캐릭이다.항상 직원들 푸념 잘들어누는 푸근한 언니/누나 같은 HR담당자11. 소향 - 어디가면 항상 있는 순진 발랄하고 사내 평균연령 확 줄여주는 인턴이자 신입사원사내에서 가장 어린 정도가 아니라 보통 평균연령보다 한 세대가 더 어린 신입사원 혹은 인턴이다. 순진 발랄해서 회사의 모든 직원들이 동생같이 챙겨주려 하고 하나하나 세심하게 가르쳐주려고 노력한다. 회사 분위기가 무겁고 칙칙할때 마다 끼와 재롱을 발산해대며 회사의 분위기를 밝혀주는 소중한 존재이다. 그런데 술만 마시면 대표님한테 '오빠~ 원샷해야지!' 이러면서 꽐라가 되버리고 다음날에 절대로 기억 못하는 척을 하는건지 진짜로 기억을 못하는건지는 아무도 모른다.사내 평균연령보다 한 세대 이상이 어린 신입사원 혹은 인턴12. 신공 (신지 신묘각주) - 까칠하고 지잘난맛에 살고 화도 잘내서 상대하기 껄끄럽지만 실력은 겁나 뛰어난 만랩 개발자열혈강호 60권대까지 읽지 않으면 모를수도 있는 캐릭터인지라 간단히 소개해 주면, 열혈강호 최대의 세외세력인 '신지'의 난공불락 기계진을 설계한 만랩 개발자이다. 성격이 매우 까칠하고 화도 잘내서 상대하기 매우 껄끄러운 캐릭터이다. 같이 일하는 기획자나 다른 직원들이 기술적인 내용들을 잘 모르면 항상 '넌 잘 모르면 그냥 내가 시키는대로 해' 이러면서 무시해 버리는 통에 다른 팀 직원들이 스트레스를 많이 받는다. 하지만 혼자서 서버와 프론트를 넘나들면서 어떤 문제가 발생해도 다 해결해 버리는 통에 스타트업에서는 꼭 필요한 만랩 개발자.까칠하고 화도 잘내서 상대하기 껄끄러운 만랩 개발자13. 벽력자 - 술 좋아하고 사고도 많이 치고 가끔 대표나 다른 직원 골탕먹이기 좋아하지만 역시 실력은 겁나 뛰어난 만랩 개발자술을 너무너무 좋아하는 개발자. 가끔 술먹고 다음날 행방불명 됐다가 하필 그날 서버 다운되는 바람에 회사가 난리나버린 적도 있다. 동료직원들 PC화면에 갑자기 야한 팝업창들이 계속 뜨게 한다던지 뭔가 본인만 아는 비밀기능을 제품에 심어놨다가 대표를 골탕먹이는 등 짓궃은 장난을 잘 치는걸로도 유명하다. 하지만 성격도 쾌활하고 주변 사람들과 잘 어울리고 실력도 뛰어난 만랩 개발자라서 스타트업에서는 역시 꼭 필요한 존재감과 함께 오늘도 열심히 장난을 치거나 어제의 술기운에서 헤어나지 못하고 있다.술먹는거 엄청 좋아하고 짓궃은 장난도 잘치는 만랩개발자14. 유세하 (담화린 사형) - 잘생기고 일도 잘하고 성격도 좋은데 술만마시면 x꽐라되서 사고치는 영업사원이 직원을 뽑을때 모두를 (특히 여직원들의) 가슴을 설레게 할 정도로 꽃미남에 매너좋고 성격좋고 집안좋은 완벽남처럼 보이는 신입사원이었다. 본인의 그런 외적 능력을 십분 활용해서 영업 스킬도 매우 뛰어나다. 하지만 술만 먹으면 완전 x꽐라되서 전혀 다른 인격체가 되버리는 단점이 있다. 그냥 꽐라도 아니고 x꽐라인 이유는 그 변하는 정도가 장난 아닌지라 (실제 만화에서도 평소에는 인자한 꽃미남 미공자가 마령검만 잡으면 악의 화신으로 변해버린다) 회사에서 이사람은 절대로 술 마시지 못하게 금주령을 내릴 정도이다.평소에는 초절정 꽃미남 굳매너 완벽남이 술만 마시면 x꽐라되는 영업사원15. 진패운 - 우직하고 사람 좋고 항상 한결같은 바른사나이지만 이상하게 성과는 없는 영업사원사람이 과묵하고 한결같고 지각무, 결석무, 아침 7시 출근에 술도 잘 안먹고 아무튼 거의 완벽에 가까운 바른사나이이다. 스펙도 좋고 할줄아는 잡다하게 많은 직원이라 뽑을때 주변의 기대가 컸지만 이상하게 메이저급 성과가 없는 영업사원이다. 뭐 언변이 부족한것도 아니고 경험이 없는것도 아닌지라 왜 실적이 저조한지는 그 누구도 이유를 모르는 미스테리. 흔히 주변에서는 '저 사람은 영업사원이 아니라 임원이 되야 능력발휘할수 있는 사람일거야' 라는 말을 자주 듣는다.우직하고 한결같은 바른사나이 영업사원. 하지만 이상하게 실적은 저조한데 그 이유를 아무도 모른다.지금까지 열혈강호에 나오는 주요 캐릭터들과 스타트업에서 흔히 볼 수 있는 캐릭터들을 한번 매칭해 보았다. 앞서 얘기했지만 뭐 객관적인 데이터를 근거로 한 매칭이 전혀 아니고 순전히 개인적인 느낌으로 소설을 써본것이기 때문에 그냥 가볍게 읽어주길 바라며, 혹시 본인이 몸담고 있는 스타트업에 저 15명 캐릭터 중에 매칭되는 사람이 있으면 제보 부탁드린다. 혹은 내가 놓친 캐릭터나 매칭을 잘못한 캐릭터가 있으면 이 역시 의견 부탁드린다. 열혈강호라는 만화를 전혀 모르는 사람들에게는.. 미안합니다..글쓴이는 스팀헌트 (Steemhunt) 라는 스팀 블록체인 기반 제품 큐레이션 플랫폼의 Co-founder 및 디자이너 입니다. 비즈니스를 전공하고 대기업에서 기획자로 일하다가 스타트업을 창업하고 본업을 디자이너로 전향하게 되는 과정에서 경험한 다양한 고군분투기를 연재하고 있습니다.현재 운영중인 스팀헌트 (Steemhunt)는 전 세계 2,500개가 넘는 블록체인 기반 앱들 중에서 Top 10에 들어갈 정도로 전 세계 150개국 이상의 많은 유저들을 보유한 글로벌 디앱 (DApp - Decentralised Application) 입니다 (출처 - https://www.stateofthedapps.com/rankings).스팀헌트 웹사이트 바로가기
조회수 1377

제조사 선택시 고려해야할 4가지

안녕하세요 대한민국 셀러들의 성공적인 아마존 진출을 도와주는 컨설팅 회사이자 대행사인 주식회사 컨택틱의 이이삭 대표입니다.상품을 소싱하다보면 여러 제조사들 중에 하나를 고르게 되는 상황을 당면하게 됩니다. 이때 어떤 기준을 가지고 각 제조사를 비교하는 게 좋을까요? 4가지만 기억하세요.1. Quality아마존 성공 비법에 대해 이야기할 때 제가 입이 닳도록 하는 얘기가 있습니다. “아마존에서 성공하려면 제일 신경 써야 하는 게 2가지가 있다: (1) 수요가 많고 공급은 적으면서, 그 낮은 공급 안에서 소비자들이 불만을 품고 있는 황금 틈새시장을 공략하는 것이고 (2) 그 시장 속에서 불만 가득한 소비자들의 가려운 곳을 시원하게 긁어줄 수 있는 상품을 준비하는 것이다”결론은 무엇인가요? 결국 소비자들이 만족하는 ‘퀄리티 있는 상품’이 있어야 한다는 것입니다. 소비자들이 만족하지 않으면 마르지 않는 자금도, 뛰어난 마케팅 전술도, 온갖 인맥도 소용없습니다. 퀄리티가 떨어지는 상품은 언젠간 진면목이 드러나기 마련이며, 그렇게 됐을 때, 잘 팔리다 가도 누적되는 악성 후기와 입소문 때문에 판매가 급격히 하락하게 될 것입니다. 그만큼이나 상품의 퀄리티가 중요한 것입니다. 따라서 소싱 단계에서 이 제조사 저 제조사 고민하고 있을 때 가장 우선적으로 고려해야 할 사항은 바로 그 제조사가 제조한 상품의 퀄리티입니다.2. PricePhoto by Rajiv Perera on Unsplash그렇다면 이렇게 물어볼 수 있을 겁니다: “퀄리티는 가격과 비례하지 않나요?” 물론 어느 정도 비례한다는 것은 사실입니다. 하지만 얼마나 많은 정성과 공을 들였는지에 따라 비교적 저렴한 재질/소재로도 충분히 소비자들을 만족시킬 수 있는 제품을 제조할 수가 있습니다. 퀄리티가 떨어지는 상품을 저렴하게 매입하고 저렴하게 판매하기보다, 차라리 돈 몇 푼 더 주고, 누구라도 만족할만한 퀄리티의 제품을 적당한 가격에 판매하는 게 백배 낫습니다.소싱 할 때 그러면 가격적인 부분을 고려할 때 어떻게 판단할 수 있을까요? 도대체 얼마가 ‘적당한’ 매입 가격인 걸까요? 두 가지를 고려하면 됩니다: 1) 해당 시장의 평균 가격대가 얼마인지를 조사하고 2) 원가(매입가)를 제외한 나머지 제반 비용을 계산하는 것입니다. 그러면 거기에 내 수익을 더하면 예상 판매가가 나오게 될 텐데, 당연히 그게 시장 평균 가격대와 너무 큰 차이가 발생하면 안 되겠죠?해당 시장의 평균 가격대를 계산하는 것은 조금만 조사해보면 누구든지 쉽게 알아볼 수 있겠지만, 판매 시 발생할 제반 비용을 정확하게 계산하는 건 솔직히 조금 어려울 수 있습니다. 컨택틱은 아마존 전문 기업이기 때문에 금방 계산할 수 있지만, 여러분들도 혼자서 어느 정도 계산할 수 있도록, 고려해야 하는 비용 항목들이 어떤 것들이 있는지 알려드립니다: 1) FBA 창고에 도착하기 위해 드는 개당 물류비 2) 개당 아마존 판매 수수료 3) 개당 월별 창고 보관료 4) 개당 소정의 마케팅 비용 5) 개당 원가 6) 개당 이익. 이 6가지를 고려해서 결국 최종 판매가가 계산됩니다. 그럼 여기서 원가를 제외한 나머지 비용을 임의로 계산한다면 제조사로부터 물건을 매입할 때 감안할 원가 하한선 또는 상한선이 파악되겠죠?다시 한 번 강조하지만, 제일 중요한 건 상품의 퀄리티입니다. 그다음에는, 비용 및 수익 등을 고려했을 때, 시장 평균가를 고려하여 너무 큰 괴리가 없을 정도의 적합한 원가(매입 가격)을 따져야 합니다.3. MOQ그다음으로 고려해야 할 것은 MOQ(Minimum Order Quantity) 즉 최소 주문 수량입니다. 당연히 제조사 측에서는 매출을 늘리기 위해 이 수치를 최대한 높게 잡으려고 할 것입니다. 하지만 이 수치가 높으면 높을수록 구매를 하는 바이어 입장 (여러분의 입장)에서는 부담이 될 수밖에 없습니다. 따라서 최대한 제조사 측과 협상을 해야 하는데, 뻔한 레퍼토리의 말, 예를 들어 ‘이번에는 소량으로 주문하고, 다음 주문에는 대량으로 주문하겠다’ 등은 당연히 해야 되는 말이고, 다른 바이어들과 나를 구분 짓게 만들 정도의 임팩트 있는 말을 하는 게 중요합니다. 이번 글은 MOQ를 어떻게 조정하는지에 대한 팁을 드리고자 하는 게 아니기 때문에 그 내용은 다른 글에서 다루겠습니다. 어쨌거나, 이 제조사 저 제조사 중에 어느 제조사로 계약을 체결할지 고민할 때 3번째로 고려해야 하는 것은 MOQ 협상 가능 여부입니다. 분명히 시장조사를 통해서 이 시장, 이 상품군이 어느 정도 유력하다는 것을 조사했겠지만, 정말 출시해보기 전까지는 아무도 모르는 게 어쩔 수 없는 현실이기 때문에, MOQ를 최대한 협상 가능한 제조사와 거래하는 게 유리합니다.4. CommunicationPhoto by Startaê Team on Unsplash제조사는 기계가 아닙니다. 그들도 엄연히 ‘사람’들이기 때문에 결국 소통을 하는 내내 관계를 형성하게 됩니다. 원활한 소통을 하고 관계를 형성하려면 당연히 말이 통해야 합니다. 소통이 어려울 정도로 회신이 늦는다거나, 영어실력이 현저히 부족하면 계약 단계에서부터 발주 단계 결제 단계 운송 단계, 심지어 재주문 단계에서도 골치가 아플 수 있습니다. 이런 점들을 고려해서 communication이 원활한 제조사인지 아닌지를 따지는 게 마지막으로 체크해야 할 항목이라고 볼 수 있습니다.컨택틱의 모든 교육은 파트너인 글로벌셀러창업연구소와 접수하고 진행합니다. 교육 신청은 아래 링크나 글로벌셀러창업연구소의 홈페이지를 통해 가능합니다.오프라인 아마존 입문 과정오프라인 아마존 기초/심화 과정온라인 아마존 입문 과정그럼 오늘도 즐거운 글로벌 셀링 되세요!감사합니다.컨택틱서울특별시 서초구 서초대로 356, 606호(서초동, 서초지웰타워)대표 전화: 02-538-3939이메일: [email protected]홈페이지: https://www.kontactic.com네이버 블로그: https://blog.naver.com/kontactic카카오 브런치: https://brunch.co.kr/@allaboutamazon유튜브 채널: https://www.youtube.com/c/kontactic
조회수 509

Digital marketing summit 2018

우리 브랜드의 옷을 입는 사람은 어떤 브랜드의 음료를 마실까?  1000여 명의 마케터가 모인 Digital marketing summit 2018! Shared customer를  주제로 오픈서베이의 황희영 대표가 발표했습니다.   마케터가 나의 고객이라 생각하는 소비자는 사실 많은 브랜드를 동시에 소비하고 있습니다. 자사의 데이터만으로 소비자를 이해하려하는 것은 마치 초승달을 보고 달의 모양을 판단하는 것과 같습니다. A브랜드에서 화장품 저관여 구매자로 분류하는 소비자가 실은 B브랜드에서 적지 않은 금액을 소비하고 있을 수도 있으니까요.    이를 돕기 위해 오픈서베이는 그간 수집한 매장 방문 및 구매 데이터를 기반으로 소비자의 교차 구매와 교차 방문을 분석하고 그 결과를 공유했습니다.Shared customer 분석을 통해 새로운 기회를 발견할 수 있습니다. 동일 카테고리 내의 교차 구매 및 방문 분석으로 우리 브랜드로 채워지지 않는 소비자의 Unmet needs를 확인할 수 있습니다. 또한 같은 소비자를 공유하는 다른 카테고리의 브랜드와의  Co-promotion이나 collaboration이 가능합니다. 온오프라인 채널 확장 시 벤치마킹이나 경쟁, 혹은 협업할 파트너 브랜드를 찾을 수도 있습니다.  오픈서베이 부스에서는 ‘마케터의 운명을 바꿔줄 로또킷’과 함께 <마케터 리포트 2018>을 나눠드렸습니다. 다양한 산업군, 회사규모, 연차로 구성된 319명 마케터의 목소리를 담았습니다. 많은 마케터가 마케팅 목표 달성을 위한 중요 업무로 ‘고객의 니즈와 이용행태를 파악’하고 ‘소비자 데이터를 분석하여 인사이트를 도출하는 것’을 꼽았습니다.  ‘Shared customer – 우리 브랜드의 옷을 입는 사람은 어떤 브랜드의 음료를 마실까’는 4월 중 내부 고객 초청 세미나로 다시 한번 진행될 예정입니다.관해 궁금하신 점은 오픈서베이 팀([email protected])으로 문의주시면 됩니다.#오픈서베이 #데이터분석 #시장분석 #마케터 #마케팅 #이벤트참여 #이벤트후기
조회수 3113

창업 후 3년간 저지른 실수에 대하여

'왜 이 녀석은 일기를 블로그에 쓸까?'라고 생각할 수 있다. 내가 가장 존경하는 인물은 소프트뱅크의 창업자인 손정의 회장인데 손정의 회장은 '도저히 불가능할 것 같은 목표를 세우고 사람들 앞에 선언하라'고 하였다. 그러면 그 말을 지키기 위해 무엇이든 할 것이라고. 블로그는 내게 그런 의미다. 내가 이곳에 선언하고 많은 사람들에게 공유한 만큼, 일기보다 훨씬 더 엄격한 책임감을 갖게 된다. 다들 한 번씩 해보길 바란다. 시간은 빠르다. 이제 창업을 한 지 3년이 넘어간다. 모든 것은 2013년 3월, 군대에서 말년휴가를 나온 고교시절 단짝 친구인 경병현에게 죠스 떡볶이에서 떡볶이와 순대를 먹으면서 '창업을 하자'고 제안하면서 시작됐다. 그 제안을 군인 신분으로 받아들인 놈도 어이없지만, 우리가 제일 먼저 했던 일은 PC방에 가서 회사 로고와 이름을 만들고 페이스북 페이지를 만드는 일이었다. 지금 생각해보면 어리숙하고 순수했던 시절이지만, 얼마나 진정성이 넘치는지 말년 휴가를 나온 친구와 클럽이나 나이트클럽을 가는 게 아니라 PC방에서 밤을 새우고 다음날 오후 3시까지 그 작업을 했다. 아직도 명확하게 기억이 나는 걸 보니, 꽤 힘들면서도 즐거운 시작이었던 것 같다.사복-경병현, 군복-나우리는 경기도 안산의 실업계 고등학교에서 처음 만났다. 그 친구는 만화 그리기를 좋아하는 순수한 아이였고 가난이나 외부 환경에 무관하게 매우 행복하게 살던 친구였다. 나는 그 친구와 반대로 독기를 품고 있었는데, 이 자본주의 세상에서 제일로 여겨지는 돈이라는 걸 실컷 벌어보고 내가 단순히 돈이라는 별 것도 아닌 것에 받은 고통을 세상에 돌려받고 복수하고 싶었다. 고등학교 시절부터 매일 하버드, 옥스퍼드 대학교 등 세계 제일의 대학생이 공부하고 배우는 것들에 대해 다룬 다큐멘터리를 봤고 기업가와 관련된 영화, 마피아와 관련된 영화, 정해진 삶을 바꾸고 개척하는 주인공을 다룬 영화는 닥치는 대로 보기 시작했다. 그리고, 그 친구에게 내 사상을 마구 주입했다. 우리는 매일 집에서 같이 영화를 봤고 컵라면을 먹으면서 어떻게 세상을 바꾸는 위대한 일을 할 수 있을 지에 대해 마치 신 들린 사람처럼 설명했다. 공부를 하다가 힘이 들면 인터넷 강의를 봤고, 그래도 힘이 들면 여의도나 삼성역 근처로 가서 야간에 밝게 불이 켜진 높은 건물들을 바라보며 의지를 다지곤 했다.그렇게 3년이란 시간을 보냈기 때문에 지금의 10년이 존재하는 것 같다. 그 친구와 인연을 맺게 된지 10년이 지났고, 사업을 같이 한 지도 3년이 지났다. 집을 나와서 서로의 자취방에서 잔다고 부모님께 거짓말을 하면서 서울대입구의 조그만 방을 구해서 일을 시작했다. 이게 모든 일, 그리고 실수의 시작이다. 나는 사업을 하기 위해 사업을 택했고 어떤 아이템이나 서비스도 존재하지 않았다. 심지어, IT 기업을 하겠다고 했지만 우리 중에 코딩을 할 수 있는 사람도 없었다. 준비되지 않은 창업. 그것은 분명히 실수다. 물론, 지금에서야 인정할 수 있는 실수이긴 하지만, 앞으로 창업하고 싶은 대학생이 있다면 준비되지 않은 창업은 분명한 오류고 많은 문제를 겪을 것이란 것을 말해주고 싶다.코딩하는 나그때, 내가 선택한 길은 코딩을 배우는 일이었다. 나는 개인이 독기를 품으면 뭐든지 해낼 수 있다고 믿는데 그게 내 삶을 가로지르는 가장 중요한 가치다. 결국 독기를 품고 코딩을 한 지 한 5개월쯤 지나니 안드로이드 앱 '닥터 알람'을 출시할 수 있었다. 그리고 닥터 알람은 특유의 독특한 재미와 가치를 고객들에게 주면서 순식간에 다운로드 수 50,000이 넘어갔다. 나는 이제 우리의 역량이 시장에서 입증됐다고 생각했고 닥터 알람을 접었다. 그리고 새로운 서비스를 찾기 시작했는데, 내 친구는 SK상생혁신센터라는 입주공간에서 작업을 했고 나는 카페에서 주로 작업을 했다. 그러다 보니 커뮤니케이션 이슈가 자연스럽게 발생하게 됐는데, 이 때문에 협업 툴을 찾기 시작했다. 그런데, 대부분 협업툴은 우리가 쓰기엔 너무 어렵고 복잡했다. 그냥 포스트잇이나 링크 같은 거 공유할 수 있는 판만 있으면 좋겠다고 생각했는데 그런 게 없었다. 그래서 우리가 만들기로 결심했다. 솔직히, 얼마 안 걸릴 줄 알고 용감하게 시작했다. 그렇게 시작된 것이 비캔버스다. 비캔버스 개발을 시작한 지 어느새 2년이 됐으니 절대 쉽지 않은 일임이 분명한데, 그때는 잘 몰랐다. 그래서 사람들이 서비스가 어떻게 만들어진 건지 물어볼 때, 뭔가 멋있는 말을 해주긴 하지만 미안하게도 사실 잘 기억이 안 나서 지어낸 것이다. 너무 오랜 시간이 지났고 완전히 무식한 상태에서 시작했기 때문이다.내 실수는 나의 운과 함께 시작된다. 당시 사무실도 없고 돈도 심각하게 없던지라 마루 180이나 여러 입주시설에 인큐베이팅을 신청했는데 모두 떨어졌다. 그런데 딱 하나! 정부지원사업 '스마트 벤처창업학교'에 서류 합격한 것이다. 내 인생 처음 서류합격이었다. 너무 기뻤지만 면접 심사 때 보여줄 만한 것이 없었다. 그래서 비캔버스가 마치 돌아가는 서비스인 것처럼 애프터 이펙트로 만들어서 가져갔다. 그 이후에는 잘 기억이 나지 않지만 매우 무식하고, 아무것도 모르는데 용감했다. 처음으로, 스마트 벤처창업학교 때 썼던 사업계획서를 공개한다. 지금 쓰라고 하면 이렇게 쓸 수도 없을 것 같은데, 포스트잇으로 철학을 하겠다는 건지 매우 진지하고 용감하게 나의 무식함을 드러냈다. 스마트벤처창업학교 사업계획서. 이게 전부다. 창업을 위한 사전준비 사항을 이거 한 줄 썼다. 인간, 기계, 이상한 말들이 줄줄이 나온다. 그런데 결과가 놀라웠다. 우리가 스마트 벤처창업학교에 1등으로 입교하게 된 것이다. 그때까지는 500만 원만 있어도 무엇이든 만들고 위대한 기업이 될 수 있을 것 같았다. 그런데 1억이라는 자금이 갑자기 들어오면서 돈에 대한 개념을 다시 생각하게 됐다. 생각보다 돈은 매우 빨리 소진된다는 걸 이때 배운 것 같다.서현역 오피스텔에서 일하던 시절 경병현 이사 - 반바지입니다. (팬티 아님)스마트 벤처창업학교가 끝나서 돈이 없을 때쯤, 또다시 행운이 찾아왔다. 한화 S&C와 엔절로부터 2억 3천만 원의 투자를 유치했다. 모든 것들이 꿈만 같았다. 모든 일이 1년 안에 순식간에 일어났다. 지난 1년간의 고생이 더욱 값지게 느껴졌다. 이때부터 내 실수가 시작된다. 2억 3천만 원의 투자를 유치하고 나서도 내 기억은 작은 단칸방에서 사무실도 없이 꽁치김치찌개 통조림 먹으면서 일했던 그곳에 머물러 있었다. 나는 새로운 인력을 나와 내 친구처럼 헝그리 하게 할 수 있는 사람들로 채워 넣기 시작했다. 그들이 개발을 당장 잘하건, 성격상의 Fit이 안 맞건 상관없었다. 그냥 헝그리 하게 전투적으로 할 수 있는 사람만 모이면 무엇이든 해낼 수 있다고 믿었다. 내가 개인적으로 이제까지 믿어왔던 '독하면 무엇이든 해낸다'가 모든 사람에게 통할 것이라 생각했다. 성격이 문제가 있으면 바뀔 수 있다고 믿었고, 성과가 안나도 그것도 바뀔 수 있다고 믿었다. 1년이 흘렀다. 지금은, 이 사진속 인물 중에는 나와 경병현만이 남아있다.그렇게 우리는 매출 100원도 없는 회사임에도 매 달 천만 원 이상의 돈을 써댔다. 웃겼던 것은 그 당시에 급여를 제대로 받은 사람이 단 한 명도 없었다는 것이다. 원래 잘하던 사람을 잘하는 위치에 앉혀서 사업을 운영한 게 아니기 때문에 자연스럽게 개인 리소스의 한계가 왔고 나는 사람을 하나 둘 늘리기 시작했다. 그렇게 지출은 커져갔다. 나는 우리가 임시적인 팀이라는 것을 망각했다. 성과를 내지 않으면 소멸한다는 자연스러운 현상을 인정하지 않았다. 나는 서비스 성장보다 팀을 만들고 회사를 만드는 데 집중하기 시작했다. 뭔가 투자를 받았기 때문에 우리 회사가 대단하다고 착각한 것일까? 잘 모르겠다. 잘못된 판단을 내렸다는 것만 명확하게 알고있다. 내가 주로 했던 일은 사람들이 문제가 있을 때 설득하고 전투력을 높여주는 일이었다. 하루에 최소 4시간 이상을 사람들의 의지를 북돋고 위대한 사람들의 영상이나 글, 명언을 보여주며 혹독하게 우리를 채찍질하자고 설득하는데 시간을 쏟았다. 우리는 형제이자 가족이라고 믿었고, 그 사람들이 우리 회사에서 언젠가 나간다는 건 생각도 하기 싫었다. 기대는 커졌고, 강요도 많이 했다. 투자받은 돈을 40% 정도 썼을 때쯤 위기감이 다가왔다. 우리가 이제까지 한 게 너무 없고 마일스톤을 전혀 달성하지 못한 것을 발견했다. 그때부터 서비스에 완전히 몰입하고 다시 사람들을 채찍질하기 시작했다. 당연히 일정은 지켜지지 않았고 우리는 매주 성과를 내지 못했다. 어떤 사람들은 정말 전투적으로 열심히 했고, 어떤 사람들은 동아리 활동을 하듯 일을 했다. 전투적으로 하는 사람들은 일정을 지키는 일이 많았고 지키지 못했다고 하더라도 개인적으로 이해했다. 그런데, 그다지 일을 많이 하지도 않으면서 일정을 지키지 못하면 매우 화가 났다. 그 모든 것이 나에게 큰 스트레스를 안겨주었는데, 나와 내 친구 둘이서 할 때는 상상도 못했던 분위기였기 때문이다. '안되면 될 때까지 한다. 절대 포기하지 않고 길을 찾다보면 길은 나온다.' 이런 생각으로 살아온 우리에게는 충격적인 일이었다.나는 지금도 일은 많이 해야 한다고 믿는 사람 중 하나다. 왜냐하면 우리가 특정 분야에 숙달되지 않았기 때문에 많은 시간을 투입하는 것이 배신을 하는 일은 결코 없기 때문이다. 다만, 개인에게 그걸 강요할 수 없다는 것을 깨닫지 못했던 것이 실수라고 본다. 그리고, 사람들을 자꾸 바꾸려고 했던 이유는 내가 그 개인에게 거는 기대가 너무나도 컸기 때문이다. 어차피 우리는 10년, 20년 갈 거고 저들이 나중에 리더십을 갖게 될 텐데, 그때 리더십을 잃지 않으려면 지금 빨리 속도를 내서 능력을 키우고 성과를 내야 한다는 것이 그 이유였다. 어떤 이유로도 내 시나리오에 저 사람이 우리 회사를 나가는 것은 없었다. 내가 팀원들 개개인이 회사가 커졌을 때 가져야되는 리더쉽까지 고민을 했다니, 김칫국을 너무 빠르게 마신 셈이다.나는 단 한 사람도 회사에서 먼저 나가라고 하거나, 그것을 종용할 생각이 없었다. 우리는 가족이니까. 사업을 하면서 일본의 이나모리 가즈오, 마쓰시타 고노스케의 책을 많이 읽었는데 그들의 사업철학이 나에게 너무 심각한 영향을 줬다. 이게 많은 젊은 창업자들이 앞으로도 계속할 실수라고 본다. 여기에 내 경험으로 말미암아 실수를 공유하니, 나와 같은 실수를 덜했으면 좋겠다.1. 조금 가치가 안 맞을 것을 예상했지만 같이 가기로 했다- 사람은 결코 변하지 않는다. 처음 우려했던 이슈 그대로 마지막 모습으로 남고 떠난다.2. 어차피, 우리는 학생이 대부분이었기 때문에 일을 제대로 못했다. 그저 많이 일하는 것이 답이었다.- 제대로 하는 사람을 정확한 위치에 앉혀야 한다. 회사에서 트레이닝하려는 생각을 버렸어야 했다.3. 인원을 마구 늘렸다.- 인원은 월급이나 복지와도 같다. 늘리기는 쉽지만 한 번 늘리면 줄이기 힘들다.   사람들이 다 나가고 돌아보니, 애초에 그만큼 인원이 필요가 없었다.4. 팀은 영원할 것이고 팀원은 형제기 때문에 치고 박으면서 끝까지 가는 것이라 오판했다.- 팀은 다 같이 성과를 내지 못하면 사라지는 것이고, 팀원은 형제가 아니다. 어느 날 회사에 제시간에 아무도 나오지 않을 때, Rule을 만들어도 아무도 지키지 않을 때쯤 되서야 뭔가 잘못 돌아가고 있다는 것을 깨달을 수 있었다. 그런데, 그때는 이미 늦었다.5. 제일 중요한것. 사람들 말을 많이 무시했다. 내 인사이트가 짱이라고 착각했다.- 나는 정말 아무것도 모르는 존재기 때문에 많은 사람으로부터 배워야 한다는 걸 깨닫기 까지 오래걸렸다.이것은 내 개인의 문제에 대한 지각이다. 분노를 쉽게 하고 타협을 모르는 내 성격이 많은 문제를 발생시켰고, 인간관계에서 정말 여러번 실수했다. 이 중에는 이제 돌이킬 수 없는 관계들도 있는데, 이 부분에서 더욱 많이 배울 수 있었다.직접 경험해보지 않으면, 이런 나의 실수들이 와 닿지 않을 수도 있다. 물론 내가 팀에서 나이가 가장 어렸고 내부적으로는 형 동생을 하고 있었기 때문에 생긴 문제일 수도 있다. 그러나 결국, 트렐로 등 툴을 써서 프로젝트를 관리하고 싶을 때 2-3번 계속 이야기를 했어야 했고, 회의 자료를 준비해달라고 해도 몇 사람은 회의 때 아무것도 준비해오지 않는 일이 반복됐다. 출근 시간은 이미 존재하지도 않았고, 누군가 아프다고 안 나오겠다고 하면 딱히 할 말도 없었다. 이 약점을 깨는 방법은 간단하다. 스타트업의 특별성을 없애면 된다.대한민국 사람들이 일하는 방식 그대로 규정을 만들고 일하면 된다. 출근은 9-10시 퇴근은 7시.더 할 사람은 자기 마음대로.자기가 세운 일정은 지킨다.이렇게 해도 더 할 사람은 더 한다. 모든 것은 자율에 맡기고 그 성과만 공정하고 냉정하게 평가되면 될 일인데, 그것을 미처 깨닫지 못했다. 아마, 대학생 창업자들은 이 문제로 고민을 겪고 있을 수 있다. 누구는 시험 보러 간다고 하고, 누구는 수업을 듣는다 하고, 다시 복학을 한다 하고 스트레스의 연속일 것이 분명하다.그런데, 내가 겪어온 바로는 그런 상황에서는 그냥 뛰어들지 않는 것이 낫다. 스타트업이란 것은 팀에 대한 고민은 줄이고 서비스와 고객에 대한 고민의 시간을 늘릴 수 있을 때 성공과 가까워진다는 것을 깨달았다. 팀원과 사업 자체에 대한 고민은 백날 해봐야 서비스 어려워지면 나갈 팀원들은 나가게 되어있다. 안 나갈 사람은 애초에 고민거리도 안주는 경우가 많다. (실제로 투자를 받고 조인한 팀원은 비캔버스의 사용자였는데, Self-organized된 사람이라 딱히 내가 모티베이션을 주거나 할 시간을 들이지 않아도 됐다. 그리고 지금도 전혀 문제없이 근성있게 나아가고 있다) 이게, 내가 망각한 두 가지 공식이다. 이제, 내 뇌 깊숙이 자리 잡고 있다.팀원에 대한 고민이 줄어 온전히 서비스와 고객에 대해 고민할 수 있을 때 비로소 속도감이 붙는다매출이 없다면 지출을 줄여야 한다. 지출의 대부분 비율을 차지하는 인건비에 대해선 매달 고민해야 한다.작년을 돌아보면, 사업에 있어 왜 팀이 중요한 지에 대해 다시 감을 잡게 되는 소중하고도 비싼 수업료였다. 왜 투자자들은 팀을 보는가? 누군가는 좋은 대학, 직장을 볼 수도 있지만 사실은 그게 중요한 것이 아니다. 팀이 중요한 이유는 대부분 결성되는 팀이 막상 내부적으로는 서비스에 온전히 몰입할 수 있는 상황이 아니기 대문이다. 설득과 커뮤니케이션에 너무 많은 시간이 들어가게 되면 서비스는 뒷전일 수밖에 없다. Y Combinator의 폴 그레이엄이 대부분 성공한 창업자들에게 들은 이야기를 공유한 에세이가 있는데, 이것이 정답이라고 본다. Be Careful with CofoundersThis was the surprise mentioned by the most founders. There were two types of responses: thatyou have to be careful who you pick as a cofounder, and that you have to work hard to maintain your relationship.What people wished they'd paid more attention to when choosing cofounders was character and commitment, not ability. This was particularly true with startups that failed. The lesson:don't pick cofounders who will flake.- Paul graham (Co-founder, Y combinator)문제 생길 것 같으면 같이 일하지 말라는 게 핵심이다. 그리고 폴 그레이엄의 수많은 에세이는 이런 내용보다는 서비스와 Growth나 이에 관련된 창업자의 마인드셋 등 실제 사업 전반적인 내용에 대한 것이 대부분이다. 팀에 과도하게 매달리면 사업이 아니라 사업 놀이만 하다 끝날 확률이 매우 크다는 것을 몸으로 느꼈다.앞으로 내가 추구할 방향과 길은 이 실수들에서 비롯된다. 혹독하게 회사와 서비스를 성장시키는 데만 집중하는 것이 올바른 방향이라는 것을 깨달았다. 무언가 내부적으로 이슈가 있음에도 우리를 좋은 팀으로 포장해서 투자를 받을 생각도 하지 않을 것이다. 서비스에 대해 심각하고 밀도 있게 고민하고 회의할 수 있는 팀. 그것을 전제로 매주 다양한 시도를 통해 성장하는, 그런 그림을 그려보고 싶다. 나 또한 많이, 잘 일하지 않으면 팀에서 쓸모없는 존재가 되어버릴 수 있다. CEO라는 것은 직함일 뿐이기 때문에, 이것을 특권이라 생각하지 않고 부단히 단련하고 혹독하게 나를 채찍질하는 것을 멈추지 않겠다고 결심했다. 그리고, 사람들에게 강요하기를 멈추기로 했다. 고객이 우리를 냉정하게 바라보듯, 우리도 우리 내부의 현실을 냉정하게 바라보고 냉정하게 평가해서 회사 자체를 키워나가야만 한다. 회사는 네이비씰이 아니었다. 내가 우긴다고 되는 것이 아니었다. 내가 Motivation 할 때 큰 영향을 준 영상, 책이 누구에게나 의미 있는 것은 아니다. 결국 자기 스스로 자신만의 다양한 point에서 Motivation을 얻어야만 한다. 매주 확신과 비전, 모티베이션을 다른 사람이 계속해서 줘야만 일을 할 수 있는 사람은 언젠가 낙오하게 돼있다. 그게 내가 강요를 멈추기로 한 이유다.내가 팀원들에게 자주 말했던 것을 인용하며 글을 마치겠다.지금 이 돈 받고 이 지분 받고 일하는 이유가 무엇이냐?(뭔가 큰 명예나 부를 얻거나 원하는 삶을 살아보고 싶어서가 대부분)그렇다면, 당신이 원하는 건 항상 매일 몰아치는 잔잔한 파도가 아니라,거대한 쓰나미를 보고 싶단 건데 쓰나미는 몰아치기 전에 전조현상이라는 것이 있다. 거대한 쓰나미일수록 더 물이 많이 빠진다. 그래서 누구나 쓰나미를 본능적으로 예측할 수 있다. 그럼 우리는 지금 무슨 전조현상을 일으키고 있나? 무엇을 특별하게 하길래, 우리가 얼마나 비상식적으로 특별하길래 그런 말도 안 되는 결과를 기대할 수 있는 것인가? 우리를 바라보는 사람들은 우리의 뭘 보길래 본능적으로 성공을 예측할까?대부분 스타트업이 원하는 결과는 말도 안 되는 것이 대부분이다.그런데 대부분 말도 안 되게 뭔가 해야겠다는 생각은 안 하는 것 같다.일을 진짜 말도 안 되게 많이 하면서도 잘한다던가, 얼굴 팔리는 것 각오하고 길에서 이상한 짓을 하거나..말도 안 되는 뭔가를 해야 정말 거대한 무언가를 만날 수 있지 않을까? 이 고민을 매일 하며 잠이 든다. 그리고 매일 밤 부끄러움이 느껴진다.2014년 3월 스마트벤처창업학교 사업계획서를 쓸 때, 그때의 각오를 되살리며..
조회수 1822

Tips for building fast portrait segmentation network with TensorFlow Lite

PrefaceDeep learning has led to a series of breakthroughs in many areas. However, successful deep learning models often require significant amounts of computational resources, memory and power. Deploying efficient deep learning models on mobile devices became the main technological challenge for many mobile tech companies.Hyperconnect developed a mobile app named Azar which has a large fan base all over the world. Recently, Machine Learning Team has been focusing on developing mobile deep learning technologies which can boost user experience in Azar app. Below, you can see a demo video of our image segmentation technology (HyperCut) running on Samsung Galaxy J7. Our benchmark target is a real-time (>= 30 fps) inference on Galaxy J7 (Exynos 7580 CPU, 1.5 GHz) using only a single core.Figure 1. Our network runs fast on mobile devices, achieving 6 ms of single inference on Pixel 1 and 28 ms on Samsung Galaxy J7. Full length video. There are several approaches to achieve fast inference speed on mobile device. 8-bit quantization is one of the popular approaches that meet our speed-accuracy requirement. We use TensorFlow Lite as our main framework for mobile inference. TensorFlow Lite supports SIMD optimized operations for 8-bit quantized weights and activations. However, TensorFlow Lite is still in pre-alpha (developer preview) stage and lacks many features. In order to achive our goal, we had to do the following:Understand details of TensorFlow and Tensorflow Lite implementation.Design our own neural network that can fully utilize optimized kernels of TensorFlow Lite. (Refer to 1, 2 and 3)Modify TOCO: TensorFlow Lite Optimizing Converter to correctly convert unsupported layers. (Refer to 4)Accelerate several quantized-layers with SIMD optimized code. (Refer to 5 and 6)We are willing to share our trials and errors in this post and we hope that readers will enjoy mobile deep learning world :)1) Why is depthwise separable layer fast in Tensorflow Lite ?Implementing low-level programs requires a bit different ideas and approaches than usual. We should be aware that especially on mobile devices using cache memory is important for fast inference.Figure 2. Memory access requires much more energy (640 pJ) than addition or multiplication.Accessing cache memory (8 pJ) is much cheaper than using the main memory (table courtesy of Ardavan Pedram) In order to get insight into how intrinsics instructions are implemented in Tensorflow Lite, we had to analyze some implementations including depthwise separable convolution with 3x3 kernelsBelow we describe some of the main optimization techniques that are used for building lightweight and faster programs.Loop UnrollingCan you spot the difference between the following two code fragments?for (int i = 0; i < 32; i++) { x[i] = 1; if (i%4 == 3) x[i] = 3; } for (int i = 0; i < 8; i++) { x[4*i ] = 1; x[4*i+1] = 1; x[4*i+2] = 1; x[4*i+3] = 3; } The former way is what we usually write, and the latter is loop-unrolled version of former one. Even though unrolling loops are discouraged from the perspective of software design and development due to severe redundancy, with low-level architecture this kind of unrolling has non-negligible benefits. In the example described above, the unrolled version avoids examining 24 conditional statements in for loop, along with neglecting 32 conditional statements of if.Furthermore, with careful implementation, these advantages can be magnified with the aid of SIMD architecture. Nowadays some compilers have options which automatically unroll some repetitive statements, yet they are unable to deal with complex loops.Separate implementation for each caseConvolution layer can take several parameters. For example, in depthwise separable layer, we can have many combinations with different parameters (depth_multiplier x stride x rate x kernel_size). Rather than writing single program available to deal with every case, in low-level architectures, writing number of case-specific implementations is preferred. The main rationale is that we need to fully utilize the special properties for each case. For convolution operation, naive implementation with several for loops can deal with arbitrary kernel size and strides, however this kind of implementation might be slow. Instead, one can concentrate on small set of actually used cases (e.g. 1x1 convolution with stride 1, 3x3 convolution with stride 2 and others) and fully consider the structure of every subproblem.For example, in TensorFlow Lite there is a kernel-optimized implementation of depthwise convolution, targeted at 3x3 kernel size:template <int kFixedOutputY, int kFixedOutputX, int kFixedStrideWidth, int kFixedStrideHeight> struct ConvKernel3x3FilterDepth8 {}; Tensorflow Lite further specifies following 16 cases with different strides, width and height of outputs for its internal implementation:template <> struct ConvKernel3x3FilterDepth8<8, 8, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 4, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 2, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 1, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 2, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 4, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<1, 4, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 1, 1, 1> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 2, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 4, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<4, 1, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 2, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 4, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<2, 1, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<1, 2, 2, 2> { ... } template <> struct ConvKernel3x3FilterDepth8<1, 4, 2, 2> { ... } Smart Memory Access PatternSince low-level programs are executed many times in repetitive fashion, minimizing duplicated memory access for both input and output is necessary. If we use SIMD architecture, we can load nearby elements together at once (Data Parallelism) and in order to reduce duplicated read memory access, we can traverse the input array by means of a snake-path.Figure 3. Memory access pattern for 8x8 output and unit stride, implemented in Tensorflow Lite's depthwise 3x3 convolution. The next example which is targeted to be used in much smaller 4x1 output block also demonstrates how to reuse preloaded variables efficiently. Note that the stored location does not change for variables which are loaded in previous stage (in the following figure, bold variables are reused):Figure 4. Memory access pattern for 4x1 output and stride 2, implemented in Tensorflow Lite's depthwise 3x3 convolution. 2) Be aware of using atrous depthwise convolutionAtrous (dilated) convolution is known to be useful to achieve better result for image segmentation[1]. We also decided to use atrous depthwise convolution in our network. One day, we tried to set stride for atrous depthwise convolution to make it accelerate computation, however we failed, because the layer usage in TensorFlow (≤ 1.8) is constrained.In Tensorflow documentation of tf.nn.depthwise_conv2d (slim.depthwise_conv2d also wraps this function), you can find this explanation of rate parameter.rate: 1-D of size 2. The dilation rate in which we sample input values across the height and width dimensions in atrous convolution. If it is greater than 1, then all values of strides must be 1.Even though TensorFlow doesn’t support strided atrous function, it doesn’t raise any error if you set rate > 1 and stride > 1. <!-- The output of layer doesn't seem to be wrong. -->>>> import tensorflow as tf >>> tf.enable_eager_execution() >>> input_tensor = tf.constant(list(range(64)), shape=[1, 8, 8, 1], dtype=tf.float32) >>> filter_tensor = tf.constant(list(range(1, 10)), shape=[3, 3, 1, 1], dtype=tf.float32) >>> print(tf.nn.depthwise_conv2d(input_tensor, filter_tensor, strides=[1, 2, 2, 1], padding="VALID", rate=[2, 2])) tf.Tensor( [[[[ 302.] [ 330.] [ 548.] [ 587.]] [[ 526.] [ 554.] [ 860.] [ 899.]] [[1284.] [1317.] [1920.] [1965.]] [[1548.] [1581.] [2280.] [2325.]]]], shape=(1, 4, 4, 1), dtype=float32) >>> 0 * 5 + 2 * 6 + 16 * 8 + 9 * 18 # The value in (0, 0) is correct 302 >>> 0 * 4 + 2 * 5 + 4 * 6 + 16 * 7 + 18 * 8 + 20 * 9 # But, the value in (0, 1) is wrong! 470 Let’s find the reason why this difference happened. If we just put tf.space_to_batch and tf.batch_to_space before and after convolution layer, then we can use convolution operation for atrous convolution (profit!). On the other hand, it isn’t straightforward how to handle stride and dilation together. In TensorFlow, we need to be aware of this problem in depthwise convolution.3) Architecture design principles for efficient segmentation networkUsually segmentation takes more time than classification since it has to upsample high spatial resolution map. Therefore, it is important to reduce inference time as much as possible to make the application run in real-time.It is important to focus on spatial resolution when designing real-time application. One of the easiest ways is to reduce the size of input images without losing accuracy. Assuming that the network is fully convolutional, you can accelerate the model about four times faster if the size of input is halved. In literature[2], it is known that small size of input images doesn’t hurt accuracy a lot.Another simple strategy to adopt is early downsampling when stacking convolution layers. Even with the same number of convolution layers, you can reduce the time with strided convolution or pooling within early layers.There is also a tip for selecting the size of input image when you use Tensorflow Lite quantized model. The optimized implementations of convolution run best when the width and height of image is multiple of 8. Tensorflow Lite first loads multiples of 8, then multiples of 4, 2 and 1 respectively. Therefore, it is the best to keep the size of every input of layer as a multiple of 8.Substituting multiple operations into single operation can improve speed a bit. For example, convolution followed by max pooling can be usually replaced by strided convolution. Transpose convolution can also be replaced by resizing followed by convolution. In general, these operations are substitutable because they perform the same role in the network. There are no big empirical differences among these operations. <!-- substitutable -->Tips described above help to accelerate inference speed but they can also hurt accuracy. Therefore, we adopted some state-of-the-art blocks rather than using naive convolution blocks.Figure 5.  Atrous spatial pyramid pooling (figure courtesy of Liang-Chieh Chen) Atrous spatial pyramid pooling[1] is a block which mimics the pyramid pooling operation with atrous convolution. DeepLab uses this block in the last layer.We also substitute most of the convolution layers with efficient depthwise separable convolution layers. They are basic building blocks for MobileNetV1[3] and MobileNetV2[4] which are well optimized in Tensorflow Lite.4) Folding batchnorm into atrous depthwise convolutionWhen quantizing convolution operation followed by batchnorm, batchnorm layer must be folded into the convolution layers to reduce computation cost. After folding, the batchnorm is reduced to folded weights and folded biases and the batchnorm-folded convolution will be computed in one convolution layer in TensorFlow Lite[5]. Batchnorm gets automatically folded using tf.contrib.quantize if the batchnorm layer comes right after the convolution layer. However, folding batchnorm into atrous depthwise convolution is not easy.In TensorFlow’s slim.separable_convolution2d, atrous depthwise convolution is implemented by adding SpaceToBatchND and BatchToSpaceND operations to normal depthwise convolution as mentioned previously. If you add a batchnorm to this operation by including argument normalizer_fn=slim.batch_norm, batchnorm does not get attached directly to the convolution layer. Instead, the graph will look like the diagram below: SpaceToBatchND → DepthwiseConv2dNative → BatchToSpaceND → BatchNorm The first thing we tried was to modify TensorFlow quantization to fold batchnorm bypassing BatchToSpaceND without changing the order of operations. With this approach, the folded bias term remained after BatchToSpaceND, away from the convolution layer. Then, it became separate BroadcastAdd operation in TensorFlow Lite model rather than fused into convolution. Surprisingly, it turned out that BroadcastAdd was much slower than the corresponding convolution operation in our experiment:Timing log from the experiment on Galaxy S8 ... [DepthwiseConv] elapsed time: 34us [BroadcastAdd] elapsed time: 107us ... To remove BroadcastAdd layer, we decided to change the network itself instead of fixing TensorFlow quantization. Within slim.separable_convolution2d layer, we swapped positions of BatchNorm and BatchToSpaceND. SpaceToBatchND → DepthwiseConv2dNative → BatchNorm → BatchToSpaceND Even though batchnorm relocation could lead to different outputs values compared to the original, we did not notice any degradation in segmentation quality.5) SIMD-optimized implementation for quantized resize bilinear layerAt the time of accelerating TensorFlow Lite framework, conv2d_transpose layer was not supported. However, we could use ResizeBilinear layer for upsampling as well. The only problem of this layer is that there is no quantized implementation, therefore we implemented our own SIMD quantized version of 2x2 upsampling ResizeBilinear layer.Figure 6. 2x2 bilinear upsampling without corner alignnment. To upsample image, original image pixels (red circles) are interlayed with new interpolated image pixels (grey circles). In order to simplify implementation we do not compute pixel values for the bottommost and rightmost pixels, denoted as green circles.for (int b = 0; b < batches; b++) { for (int y0 = 0, y = 0; y <= output_height - 2; y += 2, y0++) { for (int x0 = 0, x = 0; x <= output_width - 2; x += 2, x0++) { int32 x1 = std::min(x0 + 1, input_width - 1); int32 y1 = std::min(y0 + 1, input_height - 1); ResizeBilinearKernel2x2(x0, x1, y0, y1, x, y, depth, b, input_data, input_dims, output_data, output_dims); } } } Every new pixel value is computed for each batch separately. Our core function ResizeBilinearKernel2x2 computes 4 pixel values across multiple channels at once.Figure 7. Example of 2x2 bilinear upsampling of top left corner of image. (a) Original pixel values are simply reused and (b) – (d) used to interpolate new pixel values. Red circles represent original pixel values. Blue circles are new interpolated pixel values computed from pixel values denoted as circles with black circumference. NEON (Advanced SIMD) intrinsics enable us to process multiple data at once with a single instruction, in other words processing multiple data at once. Since we deal with uint8 input values we can store our data in one of the following formats uint8x16_t, uint8x8_t and uint8_t, that can hold 16, 8 and 1 uint8 values respectively. This representation allows to interpolate pixel values across multiple channels at once. Network architecture is highly rewarded when channels of feature maps are multiples of 16 or 8:// Handle 16 input channels at once int step = 16; for (int ic16 = ic; ic16 <= depth - step; ic16 += step) { ... ic += step; } // Handle 8 input channels at a once step = 8; for (int ic8 = ic; ic8 <= depth - step; ic8 += step) { ... ic += step; } // Handle one input channel at once for (int ic1 = ic; ic1 < depth; ic1++) { ... } SIMD implementation of quantized bilinear upsampling is straightforward. Top left pixel value is reused (Fig. 7a). Bottom left (Fig. 7b) and top right (Fig. 7c) pixel values are mean of two adjacent original pixel values. Finally, botom right pixel (Fig. 7d) is mean of 4 diagonally adjacent original pixel values.The only issue that we have to take care of is 8-bit integer overflow. Without a solid knowledge of NEON intrinsics we could go down the rabbit hole of taking care of overflowing by ourself. Fortunately, the range of NEON intrinsics is broad and we can utilize those intrinsics that fit our needs. The snippet of code below (using vrhaddq_u8) shows an interpolation (Fig. 7d) of 16 pixel values at once for bottom right pixel value:// Bottom right output_ptr += output_x_offset; uint8x16_t left_interpolation = vrhaddq_u8(x0y0, x0y1); uint8x16_t right_interpolation = vrhaddq_u8(x1y0, x1y1); uint8x16_t bottom_right_interpolation = vrhaddq_u8(left_interpolation, right_interpolation); vst1q_u8(output_ptr, bottom_right_interpolation); 6) Pitfalls in softmax layer and demo codeThe first impression of inference in TensorFlow Lite was very slow. It took 85 ms in Galaxy J7 at that time. We tested the first prototype of TensorFlow Lite demo app by just changing the output size from 1,001 to 51,200 (= 160x160x2)After profiling, we found out that there were two unbelievable bottlenecks in implementation. Out of 85 ms of inference time, tensors[idx].copyTo(outputs.get(idx)); line in Tensor.java took up to 11 ms (13 %) and softmax layer 23 ms (27 %). If we would be able to accelerate those operations, we could reduce almost 40 % of the total inference time!First, we looked at the demo code and identified tensors[idx].copyTo(outputs.get(idx)); as a source of problem. It seemed that the slowdown was caused by copyTo operation, but to our surprise it came from int[] dstShape = NativeInterpreterWrapper.shapeOf(dst); because it checks every element (in our case, 51,200) of array to fill the shape. After fixing the output size, we gained 13 % speedup in inference time.<T> T copyTo(T dst) { ... // This is just example, of course, hardcoding output shape here is a bad practice // In our actual app, we build our own JNI interface with just using c++ code // int[] dstShape = NativeInterpreterWrapper.shapeOf(dst); int[] dstShape = {1, width*height*channel}; ... } The softmax layer was our next problem. TensorFlow Lite’s optimized softmax implementation assumes that depth (= channel) is bigger than outer_size (= height x width). In classification task, the usual output looks like [1, 1(height), 1(width), 1001(depth)], but in our segmentation task, depth is 2 and outer_size is multiple of height and width (outer_size » depth). Implementation of softmax layer in Tensorflow Lite is optimized for classification task and therefore loops over depth instead of outer_size. This leads to unacceptably slow inference time of softmax layer when used in segmentation network.We can solve this problem in many different ways. First, we can just use sigmoid layer instead of softmax in 2-class portrait segmentation. TensorFlow Lite has very well optimized sigmoid layer.Secondly, we could write SIMD optimized code and loop over depth instead of outer_size. You can see similar implementation at Tencent’s ncnn softmax layer, however, this approach has still its shortcomings. Unlike ncnn, TensorFlow Lite uses NHWC as a default tensor format:Figure 8. NHWC vs NCHW In other words, for NHWC, near elements of tensor hold channel-wise information and not spatial-wise. It is not simple to write optimized code for any channel size, unless you include transpose operation before and after softmax layer. In our case, we tried to implement softmax layer assumming 2-channel output.Thirdly, we can implement softmax layer using pre-calculated lookup table. Because we use 8-bit quantization and 2-class output (foreground and background) there are only 65,536 (= 256x256) different combinations of quantized input values that can be stored in lookup table:for (int fg = 0; fg < 256; fg++) { for (int bg = 0; bg < 256; bg++) { // Dequantize float fg_real = input->params.scale * (fg - input->params.zero_point); float bg_real = input->params.scale * (bg - input->params.zero_point); // Pre-calculating Softmax Values ... // Quantize precalculated_softmax[x][y] = static_cast<uint8_t>(clamped); } } ConclusionIn this post, we described the main challenges we had to solve in order to run portrait segmentation network on mobile devices. Our main focus was to keep high segmentation accuracy while being able to support even old devices, such as Samsung Galaxy J7. We wish our tips and tricks can give a better understanding of how to overcome common challenges when designing neural networks and inference engines for mobile devices.At the top of this post you can see portrait segmentation effect that is now available in Azar app. If you have any questions or want to discuss anything related to segmentation task, contact us at [email protected]. Enjoy Azar and mobile deep learning world!References[1] L. Chen, G. Papandreou, F. Schroff, H. Adam. Rethinking Atrous Convolution for Semantic Image Segmentation. June 17, 2017, https://arxiv.org/abs/1706.05587[2] C. Szegedy, V. Vanhoucke, S. Ioffe, J. Shlens, Z. Wojna. Rethinking the Inception Architecture for Computer Vision. December 11, 2015, https://arxiv.org/abs/1512.00567[3] A. Howard, M. Zhu, B. Chen, D. Kalenichenko, W. Wang, T. Weyand, M. Andreetto, H. Adam. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications, April 17, 2017, https://arxiv.org/abs/1704.04861[4] M. Sandler, A. Howard, M. Zhu, A. Zhmoginov, L. Chen. MobileNetV2: Inverted Residuals and Linear Bottlenecks. January 18, 2018, https://arxiv.org/abs/1801.04381[5] B. Jacob, S. Kligys, B. Chen, M. Zhu, M. Tang, A. Howard, H. Adam, D. Kalenichenko. Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. December 15, 2017, https://arxiv.org/abs/1712.05877
조회수 738

[모바일 앱분석] Step2. EXPERIENCE (사용자경험 분석)

지난 글에 이어 앱 분석의 2단계 Experience (사용자경험 분석) 에 대해 알아보겠습니다.( [모바일 앱분석]  Step1. MARKETING (마케팅 분석) 보기 )2013년 Compuware의 조사에 의하면 사용자가 다운로드 한 앱 중 80-90%는 단 한 번 실행 후 삭제한다고 밝혔습니다.매우 높은 수치이긴 하지만, 경험상 수긍되는 결과이기도 합니다. 생각해보면 앱을 삭제하는 이유는 단순합니다. 우리는 앱을 설치하기 전 편의, 문제해결, 유희 등 분명한 목적있습니다. 그러나 설치 후 실행한 앱이 기대한 만큼의 만족도를 제공하지 못했거나 서비스 경험을 하기도 전에 부정적인 경험을 제공했기 때문입니다.Experience 단계의 분석 핵심은 마케팅으로 획득한 사용자가 앱을 사용하면서 겪고 있는 문제점을 정량적 데이터로 빠르게 발견하고, 개선하는 데 있습니다.# 호환성 분석반송률(Bounce Rate)이란 지표는 앱 실행 시 인트로를 지나 첫 페이지에서 서핑이 종료된 비율을 뜻합니다. 쉽게 말해 앱 실행 후 바로 종료한 비율인데요, 앱의 경우 일반적으로 단일 페이지(화면)에서 실행 목적을 달성하기 어렵다고 볼 수 있기 때문에, 앱의 반송률은 극히 낮은 것이 정상입니다. 그러나 반송률이 높다면 왜 그런 것일까요?– 불필요한 푸시 알람을 무심코 눌러 실행되서 바로 종료한 경우– 앱을 실행했는데 제대로 동작하지 않는 경우위와 유사한 행위가 자주 반복된다면 반송률은 증가할 수 있습니다. 즉, 반송률은 앱의 부정적 컨디션을 확인할 수 있는 유일한 지표라고 볼 수 있는데요, 이 지표는 주로 시스템 관련 디멘젼과 어울려 제공됩니다. 앱을 업데이트 했는데 문제는 없는지. 특정 OS에서 또는 특정 디바이스에서 에러가 발생하지 않는지 등을 반송률 지표를 통해 추정할 수 있습니다. # 사용성 분석많은 카테고리와 복잡한 네비게이션은 장시간 앱 사용에 극심한 피로도를 주고 재사용률을 감소하게 만듭니다. 그렇기 때문에 항상 프로바이더 입장에서 앱 개발 시 가장 노력하는 부분이 카테고리, UI, 네비게이션 최적화입니다.일반적으로 컨텐츠 데이터는 앱 개편 시 가장 많이 활용됩니다. 사용자의 관심도에 따라 카테고리 위치를 조정하며, 인기가 높은 카테고리는 유지 및 컨텐츠를 강화하고, 인기가 낮은 카테고리는 제거해서 복잡한 카테고리를 간소화 합니다.컨텐츠 데이터로 사용자의 관심도를 알 수 있다면, 행동패턴 데이터는 사용자의 앱 이용 목적(방법)을 이해할 수 있습니다. 로그인 유저와 비로그인 유저의 행동패턴은 어떻게 다를까? 남성은, 여성은 어떻게 앱을 이용하고 있을까? 서핑을 주로 종료하는 시점은 언제일까? 등 다양한 질문에 답변이 될 수 있는 인사이트를 얻을 수 있으며 검증된 데이터 기반으로 효과적인 앱 네비게이션 개선을 이끌 수 있습니다.# 검색엔진 편의성 분석검색엔진은 목적한 컨텐츠에 가장 빠르게 도달할 수 있는 도구로써, 커머스/뷰티/미디어 앱 등 다수의 컨텐츠를 다루는 앱에서 높은 사용성을 보이고 있는데요, 사용성이 높은만큼 검색엔진이 사용자에게 제공해야 하는 경험 또한 매우 중요합니다.검색을 하는 사용자의 마음가짐은 아래와 같습니다.– 서핑하기 귀찮다– 원하는 정보만 빠르게 얻고 싶다이런 사용자에게 다음과 같은 검색결과를 제시한다면 Conversion은 기대하기 힘들 것 입니다.– 원하는 검색결과를 제공하지 못했을 경우– 너무 많은 정보를 제공하여 선택에 혼란을 줄 경우내부 검색엔진을 운영하는 앱이라면 매일 검색엔진 데이터 모니터링을 통해 사용자의 트렌드 키워드를 확인하고, 그에 적절한 결과 값을 제시해주고 있는지 늘 점검해야 합니다. 또한 정량적 데이터 확인 뿐만 아니라, 실제 앱에서 검색해 보면서 불편함은 없는지, 더 효과적으로 컨텐츠에 접근할 방법은 없는지 등에 대한 고민이 필요합니다.앱 사용자에게 긍정적인 경험을 제공했다면, 최종 목적인 전환 최적화를 위해 집중해야 할 때입니다. [모바일 앱분석] Step3. CONVERSION (성과 분석) 에서는 전환 트렌드를 이해하고 전환을 방해하는 요인을 도출/개선하는 방법에 대해 살펴보겠습니다
조회수 10724

브랜딩은 린(lean)하게, 합리적인 선에서

브랜드는 자칫 사치스럽다. 지금 당장 눈 앞에 팔아야 할 제품 혹은 서비스가 있는데 한가하게 브랜딩이나 하고 앉았나 라는 자괴감이 들 수 있다. 대기업에서 브랜드 디자인을 몇 년간 하며 브랜딩의 중요성에는 공감했지만 때로는 그 허세와 말장난에 쓴웃음이 나왔다. 100 페이지 가까운 브랜드 전략 문서를 읽다 보면, 이게 내가 아는 우리 회사 맞나?라는 생각이 들며 공감하기 어려웠다. ‘문서를 위한 문서’의 본보기 같은 문서였다.세상에서 젤 싫은 '문서를 위한 문서'그래서인지 이제 갓 시작한 스타트업 ‘삼분의 일'에서 브랜딩을 해야 한다는 얘기를 들었을 때 어떻게 접근해야 할지 감이 오지 않았다. 그러나, 이거 정말 해야 할까? 왜 필요할까?라는 의문이 반복할수록, 대기업에서 하던 낡은 관습들을 하나씩 내려놓고 브랜딩의 본질에 다가갈 수 있었다.그래서, 이 짓을 왜 했나브랜딩으로 시간을 많이 끌고 싶지는 않았다. 딱 필요한 만큼만 진행하고 싶었다. 그래서 제일 먼저 했던 일은 브랜딩을 해야 하는 목적을 규정하는 일이었다. 딱 이 세 가지를 위해서만 브랜드를 정의했고 그 이상 쓸데없는 수고는 들이지 않기로 했다.정체성 찾기 : 우리가 누구인지 스스로 알아야 한다.남들에게 각인시키기 : 우리가 누구인지 다른 사람들에게 최대한 선명한 모습으로 알려야 한다. 이 무한경쟁 시장에서는 정체성이 분명한 브랜드만 사람들은 기억한다.직원 모두가 한 목소리로 일하기 : 직원 모두가 브랜드를 이해하고, 공감하고, 익히고, 일관성을 가지고 지켜야 한다. 브랜드를 내재화해야 흔들림 없는 선명한 브랜드를 유지할 수 있다.이렇게 진행했다브랜딩의 카테고리는 너무나 많고 사람들마다, 기업마다 정의가 다 다르다. 초반에 용어에 대한 의견이 분분했으나 (예: 그건 비전이 아니라 미션이다.) 여기에 시간을 많이 들이고 싶지 않았다. 어차피 학술논문을 쓰는 것도 아니었기에, 위 언급한 목적을 달성하기 위해 우리끼리 끄덕끄덕 이해할 수 있는 수준이면 됐다.정리할 카테고리를 6가지로 나누었다.1. 핵심가치: 우리를 나타내는 핵심 키워드2. 비전: 궁극적인 목표3. 미션: 비전을 이루기 위해 수행할 과제4. 타겟: 가장 집중하여 생각할 사용자층5. 페르소나: 브랜드 의인화6. 브랜드 아이덴티티: 사람들이 직접 경험할 브랜드의 표면과 시각화된 모습핵심가치브랜드 정의를 할 때 핵심가치부터 시작했다. 브랜드 담당자로서 이것저것 정의하기에 앞서 다른 직원들이 생각하는 '삼분의 일'의 인상을 알고 싶었다. 이를 어느 정도 합의를 한 후 구체적으로 살을 붙여나가고 싶었다. 삼분의 일에서는 커뮤니케이션 툴 중 하나로 ‘MeisterTask’를 쓰고 있는데 거기에 댓글로 ‘삼분의 일을 표현하는 형용사’를 공모받았다. 총 35개 형용사 후보가 나왔다.투명한, 저렴한, 합리적인, 꾸미지 않은, 멋 부리지 않은, 편한, 캐주얼한, 기존에 없던, 남다른, 담백한, 미니멀, 심플, 꼭 필요한 것만 있는, 전문적인, 스마트, 똑똑한, 분석적인, 효율적인, 나에게 꼭 맞는, 친절한, 완벽한, 거품을 뺀, 실속 있는, 유능한, 믿을 수 있는, 명쾌한, 필요한, 실용적인, 새로운, 흥미로운, 몰랐지만 뒤늦게나마 알게 된, 가치 있는, 신뢰 가는, 재미있는, 호감 가는이 형용사들을 펼쳐놓고 모두 모여서 이 중에 각자 5개씩만 골라달라고 했다. 각자 골랐다. 그런 다음, 2개씩 버리라고 했다. 5개를 고르기는 쉬웠는데 3개로 추리는 건 다들 어려워했다. 3개씩 고른 후 모두 펼쳐놓고 각자 고른 걸 비교했고 고른 이유를 돌아가며 설명했다. 재미있는 건 모두가 ‘합리적인’을 골랐다는 점이었고, 나머지는 겹쳐지는 부분이 있거나 유사한 내용이었다. 격렬한 토론 끝에 핵심 키워드를 3개로 정리했다.합리적인 : 이유가 타당하고 납득이 간다. 꼼꼼하게 따져보고, 꼭 필요한 것만 간결하게 제시한다.   전문적인 : 우리가 가장 잘 알고 능숙해야 한다. 그러기 위해서는 계속 연구하고 분석한다.섬세한 : 사용자에게 관심이 많다. 주의 깊게 관찰하고 친절하게 다가간다.비전과 미션핵심가치를 정의한 후 나머지는 의외로 정하기 쉬웠다. 기존에 막연하게 맴돌던 이야기들을 다듬고 이름을 붙여주었다.우리의 비전은 처음 이 사업을 논의했던 단계부터 이야기를 많이 했었다. 이 비즈니스를 왜 하고 싶고 해야 하는지, 꿈이 무엇인지 전주훈 대표가 내게 지속적으로 이야기해주었고 그 꼬임에 넘어가 삼분의 일에 합류하게 되어 지금 이렇게 글을 쓰고 있다. 그동안 했던 말들은 이렇게 정리했다."더 많은 사람들이 완벽한 수면을 누려야 한다."시작은 폼 매트리스라는 단일 상품의 판매지만, 궁극적인 목표는 수면이라는 영역을 지배(!)하여 수면 전문 브랜드로 확장하고 싶다. 사람들이 하루의 2/3를 생산적으로 보내기 위해 하루의 1/3은 '완벽한 수면'을 경험해야 한다. 소수의 선택된 사람들을 위한 프리미엄 브랜드가 아닌 '더 많은 사람들’이 누릴 수 있는 대중적이고 편한 브랜드이고 싶다.비전을 이루기 위해 3가지 미션을 세웠다. 미션은 앞서 정의했던 핵심 가치와 호응하도록 정리했다.완벽한 수면 : 수면을 끊임없이 분석하고 연구하여 완벽한 수면을 제공한다. 우리가 이 분야에서는 최고의 전문가가 된다.합리적인 구매 : 온라인으로 쉽게 구매할 수 있고, 배송과 설치가 간편하고, 거품을 뺀 합리적인 가격으로 승부한다.평생 케어 : 팔면 끝이 아니다. 관계의 시작이다. 수면 경험 전반을 책임진다.타겟과 페르소나배달의 민족 브랜딩을 다룬 책 ‘배민다움’을 읽었는데 이 프로젝트를 진행하며 도움이 많이 되었다. 모두가 좋아할 브랜드를 만들려고 하면 누구에게도 사랑받을 수 없다. 하지만 일부층에서 찐한 사랑을 받으면 많은 사람들에게 관심을 받을 수 있다. 배달의 민족은 메인 타겟을 ‘회사 막내’로 좁게 잡아서 그들에게 어필할 수 있는 B급 정서로 승부했다. 이 전략은 통했고 소수의 팬층을 만들었다. 그 코드를 좋아하는 인접 소비자층까지 퍼지며 많은 사람들에게 사랑받는 브랜드가 되었다.우리도 메인 타겟은 최대한 좁게 잡았다. ‘30대 직장인 남성’ 같은 모호한 개념보다는 라이프스타일과 철학을 반영할 수 있게 잡고 싶었다.그래서 설정한 타겟은 ‘자부심을 가진 개발자.’공대 나오고 IT 업계에서 개발자로 일하면서 자신이 하는 일에 자부심을 가진다. 빅뱅이론, 실리콘밸리, IT 크라우드 등의 미드/영드에서 나올법한 괴짜(geek)이며, 개발자 농담을 좋아한다. IT 전반에 관심이 많고 새로운 제품이나 서비스가 나오면 한 번씩 써본다. 쇼핑은 주로 온라인에서. 오프라인 쇼핑은 귀찮다. 허세 떠는 명품 브랜드보다는 합리적이고 가성비 높은 브랜드가 좋다. 이를테면 샤오미. 과도한 업무로 피로가 쌓여있고, 건강을 염려하지만 딱히 운동을 하진 않는다.넘나 재밌게 본 미드 '실리콘 밸리'메인 타겟의 사람들이 좋아할 사람을 떠올리며 브랜드를 의인화한 페르소나를 잡았다. 타겟과 마찬가지로 최대한 구체적으로 설정했다.'뭘 좀 아는 형’공대 등 남자가 많은 집단에 한 명쯤 있는 뭘 좀 아는 형. 잡스보다는 워즈니악 타입. 모르는 건 이 형한테 물어보면 된다. 따르는 후배들이 많고 이 형이 얘기하면 왠지 믿음이 가고 귀 기울이게 된다.브랜드 아이덴티티앞에서 정의한 내용이 브랜드의 상위 개념이라면, 브랜드 아이덴티티부터는 사용자가 직접 보는 표면에 해당한다. 사용자와의 접점이고, 직접적으로 느껴지는 브랜드의 외관이다.네이밍: '삼분의 일'하루의 ‘삼분의 일’은 잠을 자는 시간이다. 인생의 2/3를 생산적으로 살기 위해, ‘삼분의 일’ 수면 시간은 완벽해야 한다. 사용자는 일상에 집중하고, 나머지 삼분의 일은 우리에게 믿고 맡기면 된다.우리의 비전을 담아 네이밍을 만들었다.슬로건: ‘하루의 삼분의 일, 완벽한 수면의 시간'우리의 비전을 한 문장으로 커뮤니케이션할 슬로건을 만들었다. 네이밍이 무슨 의미인지 모르겠다는 피드백을 받고 이를 일부 해소하려고 했다.톤(말투)'뭘 좀 아는 형'의 말투를 상상하며 톤을 '진지한, 담백한, 캐주얼한'으로 잡았다. 정색하며 진지 빨고 쓴다. 농담을 해도 진지하게. 단호하고 확신에 찬 말 투로 신뢰를 준다. 담백하게 쓴다. 할 말만 간결하고 명확하게 전달한다. 불필요한 설명은 생략한다. 캐주얼하게 쓴다. 극존칭보다는 편하고 자연스러운 말투를 쓴다.고객센터 응대부터 소셜 채널에서의 포스팅, 마케팅, 그리고 웹사이트 팝업 하나까지도 일관된 톤으로 커뮤니케이션한다. 이건 기회가 된다면 좀 더 자세하게 글을 따로 써볼까 한다.브랜드 디자인우리의 브랜딩을 시각적으로 표현했다.이건 다음 글로 따로 작성하려고 한다. (2부를 기대해주세요. 뜨든.)요약1. 핵심가치: 합리적인, 전문적인, 섬세한2. 비전: 더 많은 사람들이 완벽한 수면을 누려야 한다.3. 미션: 완벽한 수면, 합리적인 구매, 평생 케어4. 타겟: 자부심을 가진 개발자5. 페르소나: 뭘 좀 아는 형6. 브랜드 아이덴티티    - 네이밍: 삼분의 일    - 슬로건: 하루의 삼분의 일, 완벽한 수면의 시간    - 톤: 진지한, 담백한, 캐주얼한    - 브랜드 디자인: (다음 글)Be the brand브랜드 정의가 브랜딩의 완성이 아니다. 이제 시작일 뿐, 직원 모두의 관심과 노력으로 지속적인 성장이 필요하다. 브랜드를 성장시키는 건 ‘일관성’이다. 직원 한 명 한 명이 한 목소리를 내며 ‘내가 곧 삼분의 일 브랜드’라는 마음으로 일해야 한다. 마케팅, 사용자 경험, 콘텐츠, 제품에서 일관된 목소리로 이야기하고, 더 나아가면 조직문화, 일하는 방식 그리고 채용까지도 브랜드의 날카로운 모습을 유지할 수 있도록 노력하려고 한다.에버노트로 위 내용을 정리해서 직원들에게 간단하게 공유했다. 대단한 문서를 만든 건 아니었지만 브랜드 정의를 한 후 직원들끼리 커뮤니케이션하거나 의사결정을 내리는 게 한결 수월해졌다. A/B 선택지가 있을 때, 우리끼리 묻는다. 이게 합리적인지, 전문적인 선택인지, 섬세한 접근인지. ‘자부심을 가진 개발자’가 과연 이걸 좋아할지, ‘뭘 좀 아는 형’은 이럴 때 어떻게 대처할지. 그렇게 묻다 보면 고민했던 문제의 답이 의외로 명쾌하게 나오는 경우가 많았다.우리의 브랜딩 과정이 정석은 아니지만, 빠르게 훅 정리하고 필요한 것만 간추리고 직원들과 소통 하기에는 ‘합리적’이었다. 브랜딩을 해야겠는데 어디서부터 시작해야 할지 모르겠는 사람들에게 우리 사례가 조금이라도 도움이 되었으면 좋겠다.#삼분의일 #브랜드 #브랜딩 #브랜딩디자인 #디자이너 #기획 #브랜드기획 #인사이트 #성장
조회수 1022

생각은 어떻게 정리해야 하는 걸까.

고백할 게 있습니다. 전 정리변태에요. 정리를 샤샤샥 하는 걸 굉장히 좋아하죠. 그래서 애프터모멘트(제 회사예요. 이제 다들 기억해줘어어어)의 빠워는 '정리력'에 있어요. 뭔갈 챡챡 정리해서 깔끔하게 짠. 하고 보여주는 걸 좋아하죠. 막 이런거..곰곰히 생각해보니 저는 디자인 일을 하고 있지만 크리에이티브하진 않은 것 같아요.예전엔 저의 예민함과 풍부한 감수성을 '예술성' 이라고 생각했었어요. 아...내가 희대의 예술가적 소울을 지니고 있나보다... 그래서 조만간 항정살에 소주라도 한 잔 걸치는 날엔 위대한 작품이 하나 나올 수도 있겠구나 싶었죠. 하지만 이젠 알 것 같아요. 그건 예술성이 아니라 그냥 성격이 이상한 것 뿐이었어요. 하지만 뭔가 기발하고 창의적인 무언가를 만들어내는 능력 대신 다른 게 있단 사실을 깨달았죠. 5살때부터 30년내내 끊이지 않고 해온 게 있더라구요.'정리'였어요. 어떤 유전자를 받았는지 모르지만 방정리를 할 때가 제일 행복했던 것 같아요. 쓰그으으스ㅡ쓱싸ㅏㅇ아아삭쓸데없이 고된 즐거움을 너무 어린 나이에 깨우쳐버렸달까요. 영원히 끝나지 않는 정리의 저주에 걸려서 보이는 방마다 다 청소를 하고 싶어지는 슬픈 운명을 짊어지게 되었어요.(물론 지전분한 방을 보면 도전정신과 자존감이 솟구쳐 올라요...)이런 변태취향은 일할 때도 고스란히 녹아들어요. 사실 앞서 말했듯 저에겐 디자인을 하면서 필요한 크리에이티브함 조차도 사실 기발한 재치와 아이디어보단 수백개의 레퍼런스를 모아서 정리하는 습관에서 만들어진 부수적인 능력일 거예요. 이제 다들 한 번쯤은 자기방이든, 생각이든, 뱃살이든, 일이든 정리해보고 싶은 시즌이 돌아왔어요. 연말연시의 마법이죠. 이런 시점에서 얘기해보고 싶은 게 있었어요. 생각을 정리하는 5가지 방법 말예요.생각을 정리하기일을 하다보면 혼돈의 사도들을 만날 때가 있어요. 스스로 생각이 정리가 안되서 내적붕괴를 일으키거나 차크라를 주변에 폭발시켜 직원 또는 동료에게 광역피해를 주는 거예요. 모두에게 큰 데미지대표님이 생각정리가 안되면 '어제 한 얘기 뒤엎기''한 말 또하기''말로 세상을 구하기' '정리가 안된다고 짜증내기''회의성애자'등등의 문제가 생겨요.실무자가 생각정리가 안되면'일 꼬이고 결과물 망치기''메일과 전화로 말실수하기''일속도가 -5 저하되고, 표정 어두워지기''자신의 적성과 미래에 대해 고민하기''스트레스성 위장장애와 원형탈모'등등의 문제가 생기구요. 혹여라도 생각정리가 안된 대표님과 실무자가 만나면 이 세상 회사가 아닌 새로운 사내문화가 탄생하기도 해요. 그래서 미팅할 때는 일단 실무자와 대표님의 말을 다 들어보려고 하는 편이예요. 둘은 바라보는 시점이 다르기 때문에 각 시점에서 정리가 되어야 해요. 대표님은 미래를 보고, 실무자는 현재를 보기 마련이거든요. 두 생각을 각각 한 문장으로 정리해요. 두 점을 만들어 선을 잇는 느낌이랄까요.이런 맥락에서 제가 현장에서 '생각정리' 에 대해 느낀 몇 가지를 얘기해드릴께요.1. 저 말은 훼이크다.말은 생각을 100% 담지 못해요. 흔히들 말은 '구체적이다' 라고 생각하는 경향이 있는데 그렇지 않아요. 말은 생각보다 훨씬 추상적이예요. 구체적인 단어를 써도 그 단어는 그 뜻이 아니에요. 예를 들어볼께요. 실무자와 미팅하던 도중 실무자가 갸웃하면서 다음과 같이 말했어요.'그런데 보고하려면 레퍼런스가 좀 더 필요할 것 같아요.'얼핏보면 실무자가 레퍼런스를 요구하는 것처럼 보여요. 아주 단순한 문장같죠. 하지만 중요한 건 '레퍼런스' 가 아니예요. '보고하려면' 이죠. 그래서 저 말에 대한 응답은 - 어떤 레퍼런스가 필요할까요? 가 아니라- 결정권자 성향이 어떠세요? 가 되어야 맞아요.레퍼러스든 계획서든 기획안이든 아니면 예제시안이든 상관없어요. 보고를 통과시키기 위한 썸띵이 필요한 것 뿐이예요.  이 실무자는 이미 컨펌자의 피곤한 성격에 많이 털려봤어요. 그러니 레퍼런스를 추가로 가져다주는 건 바보 짓이예요. 차라리 컨펌자의 성향부터 물어보는 게 원활한 대화를 이끌어 낼 수 있어요.2. 생각정리엔 의외로 다독임이 필요해요.생각은 태어난 곳과 자라난 곳이 달라요. 보통 태어나는 곳은 무의식과 욕망이죠. 특히 출산율 높은 곳은 '불안' 이라는 도시에요. 불안에서 태어난 생각은 이성적(인 것처럼 보이는) 논리라는 옷을 입고 그럴 싸한 생각으로 둔갑해요.그리고 지상으로 서서히 올라오죠. 생각은 피라미드와 같아서 제일 밑바닥에 있는 불안을 이해하지 못하면 꼭대기의 표현을 제대로 볼 수 없어요. 그래서 보통 생각정리에는 독설보다 위로가 효과적이에요. 불안을 자극하면 생각은 더더욱 논리로 무장해버려요. 위로를 받고 인정을 받았을 때 비로소 아랫층이 열리게 되죠. 그래서 '그간 많이 복잡하고 힘드셨죠?.. 이전에 일하시면서 가장 답답했던 부분이 있으셨어요?' 라는 위로와 공감을 먼저 해드려요.그럼 이런 표정이...절로3. 딕테이션이 필요해요.보통 자신의 생각을 말할 때는 자기가 뭔 말하는 지 몰라요. 사람은 자신이 굉장히 논리적으로 말하고 있다고 생각하지만 실은 수없이 떠오르는 생각의 일부만을 잡고 계속 연결시킬 뿐이에요. 마치 대강 '코길고 귀큰 동물! '하면 '코끼리'를 떠올리듯이 말이예요. 아주 일부의 정보들로 생각을 이어나가죠. 전체적인 면을 고려하고 내 말을 곱씹는 건 굉장히 피곤하고 어려운 일이거든요. 그래서 두뇌는 경제성을 우선적으로 선택해요.이런 혼돈의 생각을 멈추게 해주는 건 누군가가 내 말을 다시 반복해주는 거예요. '아 그럼, 말씀하시는 건 예술가들의 명화, 명작들을 자유분방한 거리문화의 결합을 말씀시는 거죠?'라는 식으로 말이예요. 토론에는 사회자가 필요하죠. 그리고 사회자의 역할은 패널의 의견을 한 번 정리해서 상대패널에게 넘기는 역할을 해요. 요점과 핵심을 정확히 추리고 방향성을 잡는 거죠. 이런 역할을 하는 사람은 타고나는 거예요. 그러니 이런 역할을 잘하는 친구와 대화를 하도록 하세요. 만약 친구가 없다면.... 괜찮아요. 없을 수 있어요. 엉엉..... 없다면 녹음기를 이용해봐요. 내가 한 말을 다시 들으면 이 세상 대화가 아닌 느낌을 받을 수 있을 거예요. 굉장히 부끄럽고 능욕당한 느낌이겠지만 조금만 참으면 돼요.4. 서술어가 진짜 중요해요.본인이 스스로 생각하든, 누군가의 컨설팅을 받든 제일 중요한 건 '서술어' 예요.'아 그럼, 말씀하시는 건 예술가들의 명화, 명작들을 자유분방한 거리문화의 결합을 말씀시는 거죠?'위에서 이런 식으로 딕테이션했다고 쳐봐요. '결합'은 서술어가 아니에요. 그냥 개념일 뿐이죠. 그러니까 결합을 어떤 방식으로 하느냐가 더 중요해요. 그래서 질문은 이렇게 들어가야 하죠.'그럼, 명화의 레벨을 낮추는 거예요? 아니면 거리문화의 레벨을 높이는 거예요?'맞아요. 낮추다. 높이다. 나란히 가다. 등등의 눈에 보이는 동작형 서술어를 활용해줘야 해요. 보통 무슨 말인지 모르겠는 대화의 특징은 형용사와 명사가 겁나 많다는 거예요. 명사가 많아지면 문장엔 개념만 판치게 되요. 개념은 각각 이해하는 의미가 다르기 때문에 오해와 혼란을 부추기죠. 하지만 동작은 아주 명확해요. 모두가 공통적으로 떠올릴 수 있어요.만들다. 인쇄하다. 제작하다. 포스팅하다. 광고태우다. 채용하다. 등등.... 정확한 서술어로 생각을 표현하는 게 좋아요.5. 멋진 말 뒤에는 혼돈이 숨겨져 있어요.자꾸 가치, 평화, 공유, 사회, 모두의 만족, 추구, 도모, 높인다.. 등등의 추상적인 말이 많아지는 이유는 3가지가 있어요.진짜 어휘력이 없거나양가감정 때문에 갈등하고 있거나진짜 욕망을 숨기고 싶을 때예요.이런 말을 쓰는 분과 얘길 하기 위해선 두 가지 방법이 있어요. 대놓고 정곡을 찌르던가 아니면 술을 마시는 거예요. -_-  (물론 위의 2번처럼 처음엔 위로와 공감을 시도해봐야겠죵)정곡을 찌르는 건 이런거예요. '그럼 돈은 어떻게 벌어요?' 내지는 '일은 누가...?' 또는 한 템포 쉬고 '그게....뭔 말이예요??....' 라거나.적당히 돌직구가 가능한 사이라면 이런 식의 정곡은 꽤 좋은 효과를 낼 수도 있어요. 물론 어색한 사이끼리 이런 말을 하면 햇님달님이 되겠죠. 두번째 방식인 음주미팅은 가끔 생각보다 효율적이예요. 원래 앞에서는 서로 공적인 대화니까 좋은 말과 칭찬 일색, 두리뭉실한 예쁨으로 가득한 언어가 가득해요. 하지만 술 한잔들어가고 파란만장한 얘기를 주루룩 늘어놓다보면 진짜 욕망이 드러나기도 하거든요. 생각이 민낯을 드러낼 땐 언어가 아닌 감정으로 드러나는 경우가 많아요. 생각이란 결국 언어로 포장된 욕망과 같거든요. 그래서 잘 정제된 언어로 드러내는 생각은 실상 팩트가 아닌 경우가 많죠. SUMMARY위에 5가지 이야기의 공통점이 있어요. 1. 자기 생각은 자기 스스로 정리하기 힘들다. 누군가의 도움이 필요하다는 것2. 생각은 왜곡과 합리화, 일반화의 함정에 빠져있을 수 있다는 것3. 생각은 작정하고 정리하는 것이 아니라는 것.정확히 말하자면 '생각을 정리하는' 게 아니라 '욕망을 정리하는' 것이 맞다고 생각해요. 내가 원하는 것이 무엇이고 그걸 이룰 수 있는 방법이 무언인지를 고민하는 과정이기 때문에, 결국엔 궁극적인 욕망과 욕망의 우선순위를 결정해야하는 것이죠. 하지만 우리는 욕망이란 종종 부끄럽거나 비도덕적인 것으로 여기기도 해요. 하지만 사실 남한테 말하고 보여주기 부끄럽고 뭐가 없어보여서 그렇지 그 자체가 나쁘진 않아요. '이유는 모르겠지만 돈이 있었으면 좋겠어!!!''그냥 쟤 짜르고싶다..개스트레스받아..''괜히 다른 거 한다고 하면...인내심이 없어보일까..''이것만 하면 불안한데...다른 것도 해야 먹고 살 수 있을 것 같은데..''주님의 뜻이니 굽힐 수 없어!!! 그냥 믿음으로 가는거야!!''21세기가 나를 원하고 있어. 이 미친세상에 빛이 되버리겠어!!! 고나비롸잍' '난 권력이 좋아!!! 하앍..''그냥 아무것도 하기 싫어. 그러니 안할래.'등등 실제의 욕망은 매우 단순하고 직관적이잖아요. 그래서 더욱 에너지가 강하고 충돌이 잦기도 해요. 그래서 우린 욕망의 소용돌이에서 도망쳐 생각의 숲으로 들어가요. 그곳은 아주 논리적이고 내가 이해할 수 있는 것들로 가득찬 안전한 세계니까요.생각이 복잡하고 혼란스럽다면 그 아래를 움직이는 욕망을 먼저 관찰해줘야 해요.그리고 욕망이 분명해졌다면 아주 심플하고 단순한 문장으로 날것의 욕망을 언어화 시켜요.'난 내년에 두배매출을 내서 통장에 1억을 만들고싶다. 왜냐면 없으면 불안하니까.'이런 욕망이 있다고 해봐요. 이게 잘못된 건 아니예요. 뭐 사람에 따라선 어리석어 보일 수도 있죠. 실제로 1억이 있어도 불안한 건 마찬가지일 테니까요. 하지만 지금 내 불안이 그걸 외치고 있다면 솔직하게 정리하는 게 좋아요. '있다고 해서 안불안할까? 그건 아니겠지만, 일단 없이 불안한 것보다 있고 불안한게 더 명확하니까.'라고 단순하게 명제화시켜요. 이건 부끄러운 게 아니예요. 남들에게 보여주기에 멋진 것을 만들려고 하면 점점 이상한 언어들로 꼬일 뿐이더라구요. 거창하고 예쁘고 멋지지 않아도 되니 깔끔하게 정리했다면... 그냥 그 방법들만 구체적으로 잘 만드는 게 좋다고 생각해요. 생각보다 실제 욕망은 음....? 스러운 게 많다라는..혹시 너무 많은 생각과 언어들에 둘러싸여 있나요? 그렇다면 지금 여러분은 종이, 스티로폼, 뽁뽁이, 박스, 비닐, 택배상자로 겹겹히 둘러쌓인 택배박스를 보며 머리를 쥐어뜯고 있는 것일 지도 몰라요. 내용물을 뜯어보도록 해요. 포장지만 잡고 달리다간, 언젠가 벗겨지기 마련이니까요.    :)끗
조회수 1130

기운's Slide share 공유 결과

작년부터 I/O는 대표님을 시작으로 스위처 시즌1 생산과정에 대한 내용을 공유하였다. SlideShare에는 스위처와 관련하여 현재 총 3개의 Slide가 올라가 있다.1. 스마트홈 스타트업 스위처가 지난 3개월 동안 시도한 것들 그리고 앞으로의 계획2. 스마트홈 스타트업 스위처 마케팅 이야기3. 하드웨어 스타트업이 1700개의 제품을 생산할 수 있었던 4가지 단계(*내용이 궁금하면 보세요.)지난 2개의 경우 어떤 페이지에서 효과가 가장 좋았는지 기록을 남기지 않았다. 앞으로는 어떤 페이지에서 우리와 같은 하드웨어 스타트업들이 관심을 많이 받는지 공유하기 위해 결과물을 남겨야겠다. I/O Maker의 슬라이드 쉐어Maker의 Slide를 공유한 곳은 다음과 같다.(1) 스위처 페이스북 페이지(2) 스타트업 타임스(3) 코딩이랑 무관합니다만(4) start up together(5) IOT 패러다임(6) Opencreators(7) ArduinoStory(8) Fab Lab이 중 결과가 가장 좋은 것은 역시 facebook! 그중 그중 'IOT 패러다임'과 'start up together'에서의 효과가 가장 좋았다. (slide를 올린지 3일이 지난 지금도 자는데 계속 페이스북 알림이 뜬다. 이번 주말까진 계속 관심을 받지 않을까? 싶습니다.)(* 위 페이지 중 (6), (7)만 네이버 카페)* '스타트업 타임스'의 경우 페이지가 망한듯하다. 작년 6월 글이 최신이고 내가 올린 글 승인이 떨어지지 않는다.. 2016.4.21 15:44 현재 링크 클릭률슬라이드 쉐어 전체 클릭율(1) 스위처 페이스북 페이지 - 738(2) 스타트업 타임스 - 0 (3) 코딩이랑 무관합니다만 - 627(4) start up together - 720(5) IOT 패러다임 - 1,019(6) Opencreators - 111(7) ArduinoStory - 96(8) Fab Lab - 207클릭률 상위 4개 페이지 '공유' / '좋아요' / '댓글' 수(1) 스위처 페이스북 페이지 - 59 / 82 / 4(3) 코딩이랑 무관합니다만 - 89 / 113 / 24(4) start up together - 75 / 72 / 8(5) IOT 패러다임 - 52 / 60 / 2신기하다. 링크 클릭률이 가장 높은 (1)과 (3)이 '공유수'는 가장 낮다. 왜일까? 해당 링크를 공유해간 사람들의 관련도(?) 관심도(?) 차이일까? 가령, 스위처는 IoT 제품이다. 당연히 다양한 스타트업 분야 중 하드웨어/IoT 관련된 사람들의 관심이 많을 것이다. 그렇다면 공유를 해간 사람들의 지인 역시 그런 분야에 종사 혹은 관심을 가지고 있는 사람이 아닐까? 그러다 보면 자연스럽게 클릭률이 올라갈 것이고.스위처 페이지 역시 마찬가지. 스위처에 관심을 가지고 있는 사람들이다 보니 클릭을 더 많이 했을 것이라고 생각이 든다. (네 당연한 소리입니다.)앞으로 I/O 는 디자인 / 운영 / 개발 분야의 내용도 공유할 것입니다. 이런 저희의 공유 정신이 이제 막 혹은 같은 출발선에 있는 다른 팀에게 작은 도움이라도 되길 바랍니다. 스타트업 파이팅! global! (I/O는 더 파이팅!)#스위처 #Switcher #마케터 #마케팅 #SNS마케터 #SNS마케팅 #슬라이드쉐어 #Slideshare #페이스북 #Facebook
조회수 992

Jeykll에서 플러그인 없이 sitemape 생성하기

오늘은 구글에서 블로그를 검색할 수 있도록 설정하는데에서 크게 삽질했다.. 구글 웹마스터에 사이트맵을 등록해야 했는데 그 사이트맵이 자꾸 테스트를 통과못해서 3시간이나 삽질했다.. ㅠㅠ계속 삽질하다가 찾은 이유는.. _config.yml 파일에 url 속성이 없어서 url을 가져오지 못해 생긴 문제였다. ㅠㅠ 정말 허무하고 신나고.. 아무튼 모든 문제를 해결하여 성공적으로 완료했으니 그 방법에 대해 정리하도록 하겠음.참고한 블로그: 스우의 게임서버와 클라이언트! 미친듯이 영어 검색어들로 오류를 찾으며 삽질했었는데 의외로 한글 블로그에서 이 부분에 대해 언급되어 있어 해결할 수 있었다. 감사합니다 ㅠㅠsitemap 생성하기1. sitemap.xml 파일 생성블로그의 root 디렉토리에 sitemap.xml 파일 생성.2. sitemap.xml 파일 작성하단의 코드를 복사하여 만들어준 sitemap.xml 파일에 붙여넣기.            3. url 설정추가_config.yml 파일에 url 설정이 없는 경우 url 설정을 추가하여 sitemap.xml에서 site.url 변수값을 사용할 수 있도록 해줌. (이 부분 때문에 무한 삽질 ㅠㅠ)4. 구글 웹마스터 툴에서 테스트 혹은 제출구글 웹마스터 툴에서 테스트 혹은 제출을 통해 만들어준 sitemap이 제대로 동작하는지 확인.여태 GA나 기타 여러가지를 설정하느라 공개하지 않았는데 이제서야 공개합니다.제 블로그는 https://heelog.github.io/about/ 입니다!#트레바리 #개발자 #안드로이드 #앱개발 #Jeykll #백엔드 #인사이트 #경험공유

기업문화 엿볼 때, 더팀스

로그인

/