11/24/2023

기획자/디자이너와 개발자: 왜 우리는 사이 좋게 지낼 수 없는 건가요?

 


수많은 서비스와 제품은 기획자, 디자이너, 개발자의 협업으로 만들어진다. 우리가 매일 마주하는 서비스들은 원활하고 완벽하게 작동되지만, 이것을 구축하는 과정은 상당히 험난했을 수 있다.

왜? 기획, 디자이너, 개발자는 때때로 사이가 좋지 않다.

모두 같은 목표를 향해 노력하지만, 그 목표를 바라보는 관점은 실제로 다를 수 있다. 디자이너들은 자신의 디자인이 원래 배치된 방식과 다르게 구현되는 것을 보고 화를 낼 수 있다. 개발자들은 디자이너들의 디자인 문제를 따지는 것에 불만을 품는다.

많은 갈등은 상대방에 대한 이해 부족에서 비롯되는데, 둘 간의 분열이 그런 경우라고 느껴졌다. 우뇌와 좌뇌 사이의 평화라는 이름으로 생각을 정리한다.

“기획/디자인: 우리는 어려운 일을 만드는 것이 아니다.”

우리는 좋은 일을 하려고 노력하고 있다. 어려운 사람이 되려고 노력하지 않는다. 일부 개발자들 사이에서 유지 관리 수준이 높다는 얘기를 듣고 있고 우리가 기능보다 형태를 선호한다고 생각하는데, 이는 전혀 사실이 아니다. 기능을 최대한 활용할 수 있도록 기능에 가장 적합한 형태를 고안하려고 노력하고 있다.

과거와는 다르게 사용자 경험(UX)에 대한 역할을 맡고 있다. 해당 요구사항에 맞게 기획/디자인 하기전에 사용자에게 무엇을 제공해야 하는지 이해하는 것이 중요하다. 때때로 미려한 그래픽을 추가하려고 시도하지만, 이는 단지 사용자의 경험이 즐거운 경험이 되길 원하기 때문이다.

”개발: 우리는 어려운 사람이 되려고 노력하는 것이 아니다.”

코드를 작성할 때 프로젝트의 완성은 우리가 생각하는 것의 일부일 뿐이다. 앱은 시간이 지남에 따라 변경되며, 우리는 이런 변경이 쉽게 이루어질 수 있도록 노력하고 있다. 자동화된 테스트를 할 수 있는 코드도 필요하고, 구성 요소 등 우리가 당신들로부터 받은 작업 결과물에 대한 변경을 요청하는 것은 모두의 미래를 위해 테스트 가능하고 유연하게 유지하려는 목적이다.

걱정하지 않았으면 좋겠다. 유연성을 구축하는 것은 비용이 많이 들 수 있고 미래를 위한 과잉 구축을 의미할 수 있기 때문에 무한한 유연성을 요구하진 않는다. 우리는 “YAGNI”를 피하려고 노력한다.

“기획/디자인: 우리가 이해하도록 도와달라”

우리는 규칙을 배울 수 있고, 규칙을 이해하도록 도와주면 된다. 우리가 개발자들이 이해하지 못하는 언어로 때때로 말하듯이, 개발자도 우리가 이해하지 못하는 언어로 우리에게 말한다. 서로 이해하고 나면 가장 큰 혜택을 받는 사람은 사용자이다. 모두가 승리한다.

우리는 규칙을 따르지 않고 “고정관념에서 벗어나서 생각”하도록 교육을 받았다. 이것이 개발자의 삶을 어렵게 만들어야 한다는 의미는 아니다. 우리가 규칙을 이해하면 기능을 더 어렵게 만들지 않고도 한계를 뛰어넘어 규칙에서 벗어날 수 있다. 올바르게 동작되면 그래픽 기능도 강화할 수 있다.

“개발: 데스크탑에서 작동하는 것이 웹에서는 작동하지 않을 수 있다.”

윈도우 환경에서는 대소문자 파일 이름 구별이 중요하지 않을 수 있지만, 리눅스에서는 대소문자를 구별한다. 가능하면 파일 이름을 모두 소문자로 사용하는 것을 선호하며 하이픈으로 단어를 구분한다.

브라우저에서 이미지를 볼 때 큰 파일의 로드 시간이 눈에 띄지 않을 수도 있지만, 배경으로 사용하는 페이지 크기가 메가바이트라면 천천히 로드 되어야 한다. 성능을 계산하는 브라우저 플러그인이 많이 있으니 이를 사용했으면 좋겠다.

결론

서로 자기 입장만 얘기하면 협업이 어려워 질 수 있다. 본질적으로는 함께 협업을 해야 좋은 결과가 나온다. 그들은 동전의 양면이다. 각각 작동하지만 동일한 제품의 서로 다른 결과물에 초점을 맞추고 있다.

사용자 원하는 요구 사항을 충족하려면 두 가지 기술이 모두 필요하다. 기획/디자인, 개발은 동시에 작업하지 않고 순차로 작업한다. 예를 들어 기획/디자인은 초기에 개발자와 상담해야 한다. 연관된 제약 조건을 아는 것외에 실제로 구현될 수 있도록 보장되는지 확인이 되어야 한다.

하지만 실제로는 서로 다른 전문가들이 오해를 하는 경우가 많다. 서로의 지식을 이해 못하는 것은 오히려 자연스러운 것이다. 우리가 실천해야 할 것은 서로를 이해하는 법을 배워야 한다.

서로 사이 좋게 지내려면 어떻게 해야 할까? 첫째, 미팅에 참석해야 한다. 기획/디자이너 미팅에 개발자가 초대되어 브레인스토밍 세션 중에 합의를 해야 한다. 회의에 개발자를 초대하면 모든 당사자가 같은 환경에서 이해할 수 있게 된다. 너무 늦기전에 다툼을 방지하기 위해 업무를 시작하기 전에 서로 주의할 사항에 대해서 논의할 수 있어야 한다. 이 프로세스를 통해 잘못된 결과에 대해 소요되는 시간도 단축될 수 있다.

둘째, 피드백으로 소통해야 한다. 일반적인 충돌은 개발 중에 일부 사항이 누락되어 발생한다. 개발자는 이를 사소하게 여기고 삭제하거나 변경할 수도 있다. 따라서 기획/디자인과 개발 프로세스 사이에 피드백을 공유하는 것이 중요하며 권장해야 한다.

셋째, 팀으로 협력해야 한다. 개발자와 기획/디자이너는 엄연히 다른 직업이지만, 서로 다른 직업으로만 생각한다면 둘 사이의 간극을 메우는 데 도움이 되지 않는다. 서로를 하나의 팀으로 보려고 노력해야 한다. 누구나 기한 내에 좋은 품질로 제품을 완성해 출시하고 싶어하는데 그러기 위해서는 협력을 해야 한다. 일반적으로 상대방을 이해할 수 없을 때는 타협이 어렵다. 그러니 미워하기보다는 이야기하고 협상을 해야 한다. 궁극적으로 더 나은 팀이 되기 위해 한 단계 더 나아가는 것이다.

넷째, 서로 협업하여 작업할 수 있도록 만들어진 다양한 도구가 있다. 이러한 도구들은 개발자와 디자이너가 동일한 정보를 공유할 수 있도록 도와준다. 즉, 공동 작업보다 실질적이고 효과적으로 작동할 수 있도록 해준다. 예를 들어, Storybook은 UI 구성 요소와 페이지를 별도로 구축하기 위한 오픈 소스 도구이다. UI 개발, 테스트 및 문서화를 간소화한다. 또한 개발을 표준화하고, 코드 중복을 줄이고, 팀 간 협업을 개선하고, 확장성을 촉진 할 수 있는 기회를 제공한다.

기획/디자인, 개발은 서로에게서 배울 수 있는 것이 많다. 어떤 역할을 하더라도 프로젝트 측면에서 고민해야 한다. 어느쪽도 서로에게 고통을 주려고 하지 않는다. 서로 아는 것과 경험, 관점이 다르기 때문이다.

불일치를 피하는 가장 좋은 방법은 프로세스 초기에 자주 소통하는 것이다. 가능한 한 빨리 개발자를 참여시켜야 한다. 이렇게 해야 핸드오프 단계가 시작되기 훨씬 전에 잠재적인 문제를 식별하고 해결 할 수 있다.

지식을 공유하는 것도 중요하다. 코딩을 배울 필요는 없지만, 개발자의 작업 방식과 그들이 직면한 과제를 이해하는 데 시간을 할애하는 것은 가치가 있다.

기획/디자인 측면에서 사용자가 필요로 하는 것, 경험하는 것 이상의 부분에 집중할 수 있다고 생각한다. 물론 이것은 매우 중요하다. 하지만 요구 사항과 프로젝트가 전반적으로 얼마나 효과적으로 개발될 수 있는지 집중해야 한다. 팀에 효과적인 의사소통, 효율성 및 일관성이 부족한 경우에는 사용자 경험에 영향을 미칠 수 있기 때문이다.

결국 우리 모두는 훌륭한 결과를 만들고 싶어한다. 하지만 그러기 위해서는 이해와 타협을 바탕으로 한 일관된 팀워크가 뒷받침되어야 한다. 좋은 결과를 만드는 것을 잊지 말아야 한다.

11/23/2023

좋은 개발자를 만드는 습관

 


좋은 개발자가 되려면 기술적인 능력 이상의 것이 필요하다. 프로그래밍 언어 및 프레임워크에 대한 숙련도가 필요하며 그 외에 일부 습관이 숙련되고 효과적인 개발자로 두각을 나타내는 데 도움이 될 수 있다.

좋은 개발자로 만드는 습관을 적어본다.

꾸준한 연습

기술이 끊임없이 나오고 발전하고 있다. 최신 트렌드를 이해하는 것은 매우 중요하다. 좋은 개발자는 기숧을 배우고 향상시키려는 마음이 있어야 한다.

블로그를 읽는다거나 세미나에 참석하거나 온라인 강좌를 듣는 형태로 새로운 기술에 대해 알고 있어야 한다.

이런 습관이 지속되면 귀중한 사람이 될 수 있다.

협업

혼자 일하는 상황은 없다. 다른 개발자들과 끊임없이 협업을 해야 한다. 협업을 하려면 잘 구성된 코드를 작성해야 한다. 내가 작성한 코드를 다른 이들이 쉽게 이해하고 작업할 수 있게 해야 한다. 좋은 개발자는 코딩 표준을 따르고, 명명 규칙에 일관성이 있고, 이해하고 관리하기 쉬운 코드를 작성한다.

버전 관리

여러명이 협업을 하기에 버전 관리는 매우 중요하다. 코드 변경 사항을 추적하고 꼬이지 않도록 관리를 해야 한다. 좋은 개발자는 Git과 같은 버전 관리 시스템을 사용할 줄 알아야 한다. 이런 도구를 이용해 코드를 관리하고 다른 이들과 협업을 해야 한다.

테스트

좋은 개발자는 작성한 코드를 테스트하는 것에 대한 중요성을 이해한다. Normal 테스트만 하는 것이 아닌, Abnormal 테스트도 진행해야 한다. 이렇게 테스트를 해도 버그가 나오기 때문이다. 코드에 대한 테스트를 작성하고 자동화 테스트 도구를 사용하여 시간 절약 및 완정성을 보장해야 한다. 테스트는 코드 품질을 유지하고 버그를 해결하는데 도움이 된다.

배움

이 바닥에 발을 들였으면, 계속 배워야 한다. 내가 사용하는 기술 스택외의 분야에 트렌드를 인지하고 새로운 기술이 등장하면 왜 기술이 나왔는지, 어떤 목적이 있는지등을 이해해야 한다. 이런 습관이 있어야 앞서 나가는데 도움이 될 수 있다.

좋은 개발자가 되려면 기술적인 능력 이상의 것이 필요하다. 위에서 언급한 것에 대해서 습관화 해야 한다. 이러한 습관은 고품질의 코드를 생성하는데 도움이 되고 귀중한 사람이 될 수 있다.

11/22/2023

문제에 직면 했을 때

 


프로젝트를 진행하다보면 다양한 문제에 직면한다. 문제를 왜 해결하지 못하는지와 문제를 해결하는 것에 대해서 느낀바를 적어본다.

문제를 해결하지 못하는 이유

사람들은 문제를 해결하기 위해 필요한 것이 무엇인지에 대해서 동일한 인식을 갖고 있지 않다. 특히 IT분야의 경우는 더욱 어렵다.

문제를 해결하기 위한 능력이 있더라도 자신감이 없다. 그리고 실수를 두려워한다. 문제를 해결하기 위해 시도할 수 있지만 여전히 방어망을 구축해둔다. 실패를 하더라도 비난 받으면 안되기 때문이다.

문제가 있을 때마다 조언을 구하는 사람들이 있다. 경험있는 사람이 조언과 지도를 해줘서 문제를 해결하더라도 스스로 생각하지 않도록 훈련시키는 결과가 발생할 수 있다.

단순한 문제를 해결하는 데 익숙하지만, 복잡한 문제를 해결하는 데 문제를 재정의하고 제약을 만들고 단위 단위로 분리하는데 익숙하지 않다. 능력이 없는 것이 아니라 좀 더 철저하고 집요하게 생각할 수 있도록 연습이 필요하다.

어떤 사람들은 특정 문제가 심각하다는 것을 인식하지 못할 수도 있다. 이 문제로 인해 발생할 수 있는 영향을 보지 못할 수도 있다. 더 큰 그림을 보려면 도움이 필요하다.

위에서 언급했지만, 집요하게 파고들지 않는 경우도 있다. 이 문제에 대해 무관심해지면 “그건 내 일이 아니라”라는 반응을 하는 경우가 있다.

채용 실수나 역할을 잘못 부여하여 적합하지 않는 경우도 있다. 그들이 무능력하다는 것이 아니라 그들의 능력이 역할에 적합하지 않을 수도 있다는 것을 알아야 한다.

문제를 해결하는 접근 방식

제약의 중요성

문제를 해결하는 사람은 문제에 대해서 명확하게 정의한다. 이게 정말 문제인지 아닌지 판단하기 위함이고, 문제로 인식될 경우에 해결 방안을 모색하기 위함이다.

문제로 인식이 되면, 제약을 만들어야 한다. 집중해야 할 부분과 하지 말아야 할 부분을 알아야 하기 때문이다.

너무 많은 선택권을 주면 창의성이 오히려 제한된다. 충분한 제약이 있으면 새로운 방식으로 해결방안을 찾도록 자극할 수 있다.

제약의 개념을 이해하기 위해서 놀이터를 예시로 들어본다. 놀이터 주변에 울타리를 설치하면 공간 전체를 아이들이 탐험하고 놀기 위해 사용한다. 울타리는 그들에게 안전과 안정감을 주기 때문이다.

반면, 놀이터 경계의 울타리가 제거되면 경계가 불분명해지고 아이들은 안전하게 느껴지는 중앙에 머무르게 된다.

명확한 제약이 없으면 현재 발생한 문제외의 다른 문제와 리스크를 언급하는 상황이 종종 발생한다. 본 문제에 집중하지 않고 다른 문제를 가져오면서 더욱 문제를 키우는 현상이 발생한다.

합의 실패 대응

문제를 해결하기 위한 충분한 지원을 받지 못하고 해결책을 내기 위한 연합을 구축하지 못하기 때문이다. 문제를 해결하기 위해서는 여러 이해관계자의 도움이 필요한데 합의를 얻지 못하는 경우 문제를 해결하지 못하는 상황이 종종 발생한다.

합의를 구축하는 방법에는 여러가지가 있지만, 개인적으로 유용하게 생각하는 것은 조용히 기반을 마련하는 일본의 네마와시 개념을 선호한다.

서양식 접근 방식은 아이디어나 프로젝트를 구상하고 이를 상사에게 제안한 후 아이디어가 좋으면 선택되는 것이다. 이런 접근 방식이 성공한다고 해도 이미 합의가 되지 않는 이해관계자와 협상해야 하기 때문에 진행하면서 수많은 장벽과 마주치게 된다.

네마와시는 초안 형식으로 준비하지만, 상사 뿐만 아니라 이해관계자와 함께 확인하여 합의를 구축한다. 인내심도 필요하고 고도의 정치도 필요하다.

이제까지 잘 지내오던 환경에 다른 것이 전달되었을때, 대부분 저항한다. 이것은 인간의 자연스러운 반응이다.

타이밍

타이밍이 전부다. QR코드가 처음 세상에 나왔을 때, 생각보다 사람들은 많이 사용하지 않았다. 일부에서 사용되긴 했지만 전체가 사용하기에는 어려움이 있었다.

COVID-19가 모든 것을 바꿨다. QR로 인증을 해야 했기 때문이다.

문제를 파악하고 제약 조건을 설정하고, 브리핑하고 해결 방안에 대해 합의 구축 및 실행을 하는 것이 문제 해결에 필요한 구성 요소이다.

트레이드 오프

몇 가지 문제를 해결했을 수도 있지만, 몇 가지 새로운 문제가 생길 수도 있다. 이 부분이 절충점이며 피할 수 없다. 이런 경우 아무런 조치를 취하지 않는 것에도 장단점이 존재한다.

예를 들어, React Hooks는 코드 재사용성에 대해서 대폭 단순화했지만, 추상화를 구축할 때 기억해야 하며 value/reference identity에 대해서 배워야 한다.

궁극적으로는 문제를 해결함으로써 새롭게 나오는 문제를 이전 문제보다 해결하기 쉽고 해결하기 위한 리소스를 저렴하게 만드는 것이다. 즉, 작은 문제 대신 큰 문제를 제거해야 한다.

결론

주의를 기울이고 한발 물러나서 올바른 문제를 해결하고 있는지 자문을 해야 한다. 다른 문제에 대한 해결책에서 발생한 문제를 해결하고 있을 수도 있기 때문이다.

문제는 계속 발생하기에 가장 중요한 것은 문제를 해결하고 더 큰 문제가 발생하지 않도록 하는 것이다.

11/21/2023

Retail Media Network

이미 많은 사람들이 온라인으로 쇼핑을 하고 있다. 소비자의 행동 변화는 기업이 제품을 홍보하는 방식을 변화시키고 있다. 이제까지는 검색 사이트, SNS에서 잠재 고객을 타겟팅하면서 광고를 했지만, 이제는 RMN을 활용해서 잠재고객과 소통해야 할 시대이다.

RMN(Retail Media Network)란?

쇼핑몰 웹사이트/앱 및 매장에서 게재되는 광고를 리테일 미디어라고 한다. 그리고 이러한 광고를 제공하는 것을 RMN이라고 한다.

RMN의 주요 이점은 소비자가 쇼핑할 때 제품을 광고할 수 있다는 점이다. 고객이 구매할 시점이 가까워지면 구매할 가능성이 높은 제품을 적극적으로 찾기 때문이다.

누군가에 쇼핑몰에서 검색을 하거나 상품 카테고리를 살펴볼 때 당신의 광고가 나타날 수 있다. 이는 디지털 소비자 여정 중 가장 영향력이 있는 지점에서 잠재 고객을 확보하는데 도움이 될 수 있다.

RMN은 브랜드가 접근할 수 없었던 디지털 공간에 대해 문을 열어준다. 아마존의 경우에는 이미 스폰서 광고를 도입하여 앞서 나가고 있다. 그리고 다른 온라인 업체들도 뒤를 따르고 있다.

eMarketer의 자료에 의하면 RMN의 광고 지출이 더욱 빠르게 증가할 것으로 예측한다.


RMN의 원동력은 전자상거래이다. 온라인을 기반으로 하는 거의 모든 앱에 적용될 수 있다.

RMN의 장점

RMN은 본질적으로 사업자가 소유 또는 운영하는 광고 기술 플랫폼이다. 웹사이트, 전자상거래 플랫폼, 모바일 앱 전반에 걸쳐 브랜드에 제공한다.

소매업체들을 하나로 묶은 최초의 플랫폼은 Amazon이다. Amazon.com에서 사용자가 수많은 제품과 서비스를 검색하고, 장바구니에 저장하고, 소유한 기기에서 편리한 시간에 구매할 수 있는 플랫폼이다.

Amazon은 아마존 광고 소매 미디어 네트워크를 통해 소매업체에게 광고 공간을 판매한다. 이 비즈니스 모델은 빠르게 성장했고, 다른 소매업체들도 따라하기 시작했다.

RMN은 모든 전자상거래 이해관계자에게 광범위한 영향을 미친다.

온라인 소매업체의 경우, 시장 경쟁으로 인해 영업이익이 감소하고 있다는 점을 고려할 때 이는 엄청난 새로운 수익원을 제공 할 수 있다. 그리고 소비자에게 더 낮은 가격으로 제품을 제공할 수 있다는 것도 의미한다.

RMN은 쇼핑객과 브랜드가 상호 작용하는 방식을 변화시키고 있다. 이 상황에 익숙해지는데에는 시간이 걸리겠지만, RMN의 이점으로 투자가 일어날 것이라고 생각한다. 다음은 브랜드가 소매업체의 웹 사이트와 모바일 앱에 광고를 게재할 수 있는 RMN들이다.

  • Walmart Connect - Walmart는 RMN을 출시하여 2021년에 매출이 약 26% 증가했다.
  • Walgreens Advertising Group - OTT(Over-the-top), CTV 시청자에게 제공하는 RMN
  • Retail Media+ - Home Depot에서 만든 RMN이다.
  • eBay 광고 - 약 1억 3500만 명의 활성 사용자에게 광고주가 다가갈 수 있는 플랫폼이다.

왜 소매업체는 RMN을 구축하려고 할까?

Walmart, eBay의 성공 사례를 따라하고 싶은 마음도 있겠지만, 아래의 이유로 RMN을 구축하고 있다. 즉, 돈을 더 벌기 위해서다.

  • 전자상거래 개발 - COVID19 이후 소비자들이 전자상거래의 편리함에 젖어들었기에 많은 성장을 했다. RMN을 구축하여 이런 현상에 편승
  • 제3자 쿠키의 종말 - RMN을 통해 브랜드는 개인화된 광고를 하고 싶어하고, 이때 자사 데이터와 소매업체의 데이터를 활용한다.

개인 정보 보호가 점점 더 중요해짐으로 브랜드는 자사 데이터를 사용하여 법을 위배하지 않고 타겟 고객을 식별하는 방법을 찾아야 한다.

소매업체는 RMN을 어떻게 활용할 수 있을까? RMN은 소매업체에 다양한 혜택을 제공한다. 브랜드 가치를 높이고, 판매를 간소화하고, 광고 지출에 대해 검색엔진, 소셜미디어와 경쟁할 수 있게 만들어준다.

다음은 RMN의 성장을 나타내는 몇 가지 숫자이다. 아마존은 2021년에 전년 대비 48% 증가한 310억 달러의 광고 수익을 창출했다. 2021년 Walmart Connect는 2020년보다 136% 증가한 21억 달러의 광고 수익을 창출했다.

끝으로, 현재와 미래에는 어떤 종류의 광고가 필요한지 생각해보자. 매장내 디스플레이에 광고를 노출하고 싶다면 Walmart 사례를 보는게 좋다. 다중 채널 캠페인으로 RMN을 이용하려면 아마존과 이베이 사례를 보는게 좋을 것 같다. RMN은 타겟팅 측면에서 브랜드에 많은 것을 제공한다. 더 많은 브랜드가 전략적으로 광고를 활용함에 따라 제품에 대한 경쟁적인 시장 환경이 조성 될 것이다.