태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

넣는 것 보다 빼는 것이 더 어렵다.

2013/05/14 23:29 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed





초창기에 좋은 소프트웨어로 성공하는 업체들이 지속적으로 성장하지 못하고 고전을 면치 못하는 이유는 여러가지가 있다. 그중 하나가 제품이 점점 과도하게 비대해지는 것을 꼽을 수 있다.


성공하는 회사들의 초기 제품은 간략하고 핵심적인 기능으로 사용자들의 요구를 만족시켰다. 하지만 시간이 흐를 수록 경쟁상대가 많아지고 선두를 유지하거나 따라잡기 위해서 제품은 기능은 경쟁 제품들의 모든 기능을 다 포함하기 시작하곤 한다.


고객이 많아질수록 고객들의 요구사항도 다양해지고 하나의 고객도 놓치기 싫어서 가능하면 모든 요구사항을 신제품에 다 우겨 넣으려곤 하다.


이렇게 온갖 기능이 다 포함된 제품을 우리는 "Kitchen Sink"라고 한다. 설거지통에 닦아야 할 그릇들이 잔뜩 쌓여 있는 모습을 상상해보라.


기본적으로 영업은 한명의 고객도 놓치기 싫어서 무조건 고객의 요구사항을 다 들어달라고 요청을 한다.


이것을 조정해서 새로운 제품의 전략을 수립하는 부서는 마케팅부서이다. 하지만 내 경험에 의하면 우리나라의 많은 소프트웨어 회사들은 마케팅보다 영업에 가깝다. 소프트웨어 제품 전략에서 중요한 것은 많은 기능을 넣는 것보다 얼마나 적은 기능으로 최대한의 고객을 만족시키느냐이다. 경쟁제품을 모두 조사해서 슈퍼세트의 제품을 기획하는 일은 쉽다. 어려운 일은 기능을 빼는 것이다.


기능을 빼는 과정에서 기존의 고객을 잃을 수도 있다. 하지만 이것이 두려워서 "Kitchen Sink" Software를 만든다면 더 큰 것을 잃을 수도 있다. 


하지만 많은 사람들이 기능을 빼는데는 익숙하지 않다. 영업, 마케팅은 물론이고 마음씨 좋은 개발자들이 기능을 빼는 것을 주저하기도 한다. 그러면 제품의 아키텍처는 점점 복잡해지고 회생 불가능한 상태가 되곤한다.


스펙을 적을 때도 지원할 기능 외에 뺄 기능도 잘 기술해야 한다. 스펙에 지원하지 않을 기능을 적는 것은 지원할 기능을 적는것보다 더 중요할 때가 많다. 물론 모든 미지원 기능을 적는 것이 아니고 기존에 있던 기능을 빼거나 누구나 능히 포함될 것으로 생각하는 기능을 뺄때는 꼼꼼히 적어줘야 한다.


그래서 마케팅팀의 역할이 더욱 중요하다고 할 수 있다.


1%의 사용자도 쓰지 않는 수많은 기능을 개발하느라고 개발 비용은 훨씬 많이 들어가고 프로젝트가 망가져가는 것을 흔히 볼 수 있다. 중요한 것은 넣은 것이 아니고 빼는 것이다.


image by Kingfox





저작자 표시 비영리 변경 금지

전규현 프로젝트/요구사항분석

Trackback Address: http://allofsoftware.net/trackback/310 관련글 쓰기
  1. 저는 하위버전 호환성을 유지하는 것이 매우 중요하다고 생각합니다.

    고객사에서 제품을 상위버전으로 업그레이드 했을 때 서비스가 안되는 부분이 생긴다면 이는 재앙에 가깝습니다.

    조엘이 쓴 책에서도 MS 가 하위버전 호환을 유지하기 위해 얼마나 노력을 많이 했는지 언급되었던 것으로 기억합니다.

    새버전 출시 시 마케팅 자료나 영업자료에서 그 기능을 삭제하는 것은 가능하지만 제품에서 물리적으로 삭제가 되는 것은 아니라고 생각합니다.

  2. 공감합니다.

    소프트웨어 업그레이드 시 하위호환을 유지하기 위해서 많은 노력을 들이게 됩니다. 정말 잘 설계를 해서 꾸준히 하위 호환성을 유지하기도 하고 Migration 기능을 제공하기도 합니다.

    여기서 지적하는 것은 기존의 기능을 무작성 빼자는 것이 아니고 전략적인 생각없이 경쟁 회사들의 기능과 특정 고객이 원하는 기능을 잔뜩 포함해서 키친씽크를 만들지 말자는 얘기입니다.

    하위호환성을 유지하면서도 기존 기능을 없애거나 새로운 형태로 진화시키는 일은 종종 있습니다. 결국 기획팀에서 전략을 제대로 수립해야 겠죠.

[공지] 요구사항 분석 세미나를 실시합니다. - 마감되었습니다.

2013/03/14 19:05 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed





소프트웨어를 개발하는데 있어서 가장 어려운 것을 하나 꼽으라면 "요구사항분석"입니다.

소프트웨어를 개발하는데 있어서 가장 중요한 것을 하나 꼽으라도 "요구사항분석"을 선택합니다


하지만 우리나라에서 "요구사항분석" 역량을 제대로 갖춘 개발자를 만나보는 것은 매우 어렵습니다. "요구사항분석"은 교과서를 통해서 배울 수 없고 실전을 통해서 익혀야 하는데 우리나라는 자수성가한 개발자들로부터 시작되고 이어져 왔기 때문에 이를 가르쳐 줄 수가 없었습니다. 대기업에서는 대규모 방법론이나 비싼 툴을 사용하여 "요구사항분석"을 해보려고 하는데 아무리 비싼 골프채가 있어도 골프를 잘치는 것은 딴 얘기이듯이 툴이 이것을 해결해주지는 않습니다.


결국은 요구사항분석의 핵심을 꺠닫고 꾸준히 현실 프로젝트에서 경험을 쌓아가는 것이 유일한 방법입니다. 그래서 그 실전적인 방법을 공유하고자 세미나를 개최합니다. 많은 성원 부탁합니다. 


시간과 장소는 아래 URL 참조하세요. 


http://projectresearch.co.kr/2013/03/11/대한민국-개발자들이여-깨어나라-올바른-sw-개발-방법/


참석하실 분들 댓글 달아주시고, 여기(http://onoffmix.com/event/13214)로 신청하시면 됩니다.




image by naotakem

저작자 표시 비영리 변경 금지

전규현 프로젝트/요구사항분석

Trackback Address: http://allofsoftware.net/trackback/309 관련글 쓰기
  1. 꼭 회사차원의 컨설팅을 받아보고 싶었는데
    개인적인 교육수강기회가 생겨서 너무 좋습니다.
    다음날 교육도 맘에 들더군요..
    신청해버리고 말았습니다... ㅎㅎㅎ

  2. 안녕하세요.
    꼭 듣고 싶은 세미나인데 정원이 차서 참가가 힘드네요 ㅠ
    온오프믹스쪽에 문의해보니 그 쪽에선 결제대행만 하기 때문에 인원 조정은 주최자에게 직접 문의해야 한다고 하시더군요.
    서서 들어도 좋으니 인원을 늘려 주실 수는 없는지 문의드립니다.

  3. 안녕하세요.
    세미나 장소의 공간이 한계가 있고 대기가 40명이 넘어서 인원을 늘려서 해결이 어려울 것 같습니다. 다음 기회에 참여을 하시면 어떨까요?

  4. Blog Icon
    권인호

    네.. 어쩔 수 없지요.
    꼭 가까운 시일 내에 다음 기회가 있기를 희망합니다.
    답변 감사드립니다.

  5. 세미나 잘 들었습니다.
    高僧을 모시고 禪問答 하는 시간 같았습니다.
    어떠한 질문에도 거침없이 답변을 쏟아내시는 모습이 인상적이었고요.
    저도 열심히 SRS의 道 를 닦아서 解脫 에 이르러 보겠습니다.

거의 다 만들었어요.

2013/02/27 23:49 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed





"거의 다 만들어서 2주후에 개발이 끝나요"


이 말을 이해할 수 있는가? 우리 주변에서 소프트웨어를 개발할 때 흔히 들을 수 있는 말이다.

개발자들도 이렇게 얘기하고 관리자나 경영자도 대충 알아듣는다.


하지만 이런 대화는 여러 오해를 양산한다.


영업 담당자는 2주후면 고객에게 소프트웨어를 제공할 수 있는 것으로 착각하기도 하고, 경험이 좀 있는 관리자는 아직 충분히 안정적이지 않거나 테스트가 남아 있다는 것도 알기도 한다. 하지만 정확하게 언제 고객이 쓸 수 있는 제품이 나오는지는 알 수가 없다.


그래서 우리는 좀더 전문적으로 제대로된 용어를 사용해서 커뮤니케이션을 할 필요가 있다.


우선 개발 단계별로 정확한 용어를 사용하는 것이 필요하다.


"개발"이라는 말은 너무나 모호하다. 사실 스펙을 쓰는 일부터 유지보수 까지 모두 개발이다.

그래서 분석/설계/구현/테스트 등 단계별로 세분화된 단어를 쓰는 것이 좋다.


따라서 "개발이 끝나요"보다는 "구현이 끝나요"가 좋다.


그 다음에는 개발팀에서 만들어내는 버전이 어느 정도 수준인지 표현할 필요가 있다. 내부 테스트를 진행할 수 있는 수준인지 필드테스트를 할 수 있는 수준인지 알려줘야 한다.


일반적으로 이런 수준을 표시하는 용어는 많이들 들어봤겠지만, 알파/베타/RC 등이 있다.


알파버전이란 모든 기능의 구현이 완료되었고 버그는 많지만 Show stopper가 없는 수준을 말한다. 주변에서 "개발이 다 됐어요"라고 말할 때도 자세히 살펴보면 알파 수준도 안되는 경우 많다. 기능이 99% 완료 되었으면 알파가 아닌 것이다. 예를 들어 설치 프로그램은 아직 개발을 안했다던지 간단한 기능의 일부가 미 구현상태면 알파가 아닌 것이다. 


따라서, 미국이나 인도나 어디에서도 알파버전이라고 하면 이 수준으로 이해를 하면 된다. 


그리고 알파버전 테스트에서 발견된 버그를 대폭 수정해서 버그를 많이 줄인 버전을 베타버전이라고 한다. 베타버전은 내부테스트를 하기도 하고 고객을 대상으로 외부 테스트를 하기도 한다. 베타버전은 버그는 있지만 꽤 쓸만한 버전이다.


RC버전은 Release Candidate의 약자로 테스트를 해보고 출시를 결정할 후보 버전이다. 따라서 대부분의 경우 아주 안정적이다. 출시가 결정되면 바로 고객이 사용하는 버전이다. 물론 버그가 없는 것은 아니지만 충분히 안정적이다.


따라서 알파/베타/RC등의 용어를 적절하게 사용해서 개발팀에서 만들어낸 버전이 정확하게 어느 정도 수준인지 전달을 해야 한다.


"2주후에 개발이 끝나요"보다는 "2주후에 알파버전 구현이 끝나요"가 좋다.


좀더 자세히 말하면 "2주후 금요일 오후3시 정각에 알파버전 소스코드 프리즈가 있습니다."라고 하면 좀더 정확한 의미가 전달된다.

개발자들은 3시까지 모든 소스코드를 Commit해야 하고,

빌드팀은 3시가되면 소스코드를 내려받아서 빌드를 하고

테스트팀은 3시쯤 되면 알파테스트를 시작할 준비를 하고 기다리고 있을 것이다.


관리자나 경영자는 당연히 테스트 일정을 알고 있고 언제 출시 예정인지 알고 있다.

이슈관리시스템을 보고 있으면 거의 실시간으로 발견되는 버그와 고쳐지는 버그의 현황을 볼 수 있다. 


하지만 아직도 대부분의 개발 현장에서는 이런식으로 커뮤니케이션이 이루어지지 않고 있는 것이 현실이다. 


알파/베타 등의 용어를 들어봤거나 사용하고 있어도 그 의미를 정확하게 사용하지 않고 있는 경우가 많고 개발자와 영어/관리자/경영자가 그 의미를 똑같이 공유하고 있는 않다. 서로 다르게 생각하고 있으면 커뮤니케이션에 문제가 자주 생긴다.


세계적으로 표준으로 사용하는 용어들이니 표준에 맞게 사용하고 모든 직원이 똑같이 공유를 해야 한다.


그래야 좀더 합리적인 일정으로 개발이 진행된다. 



저작자 표시 비영리 변경 금지

'프로젝트 > 품질관리' 카테고리의 다른 글

거의 다 만들었어요.  (8) 2013/02/27
고쳤으니 테스트 해주세요.  (3) 2013/02/18
우리는 개발자가 테스트해요.  (8) 2009/01/28

전규현 프로젝트/품질관리

Trackback Address: http://allofsoftware.net/trackback/306 관련글 쓰기
  1. Blog Icon
    염구나

    저부터라도 오늘부터 이런 세부적이고 명확한 커뮤니케이션을 해야겠군요. 좋은 글 감사합니다.

  2. 글의 취지는 공감하나, 글에서 쓰신 알파, 베타, RC의 정의도 올바르지 않아 보입니다.

    알파버전은 모든 기능의 구현이 완료된 것이 아니라, feature freeze를 하기 위한 테스트 버전입니다. 즉, 알파 버전 가지고 테스트를 한 후에야 feature freeze가 된다는 겁니다. 상황에 따라 crash가 있을 수도 있고, data loss도 있습니다.
    베타버전은 알파버전을 통한 테스트 후 feature freeze가 되고, feature complete을 한 후 수행하는 테스트입니다. 베타 테스트의 목적은 주로 feature들에 대한 usability 테스트입니다. 그래서 사용자의 피드백에 따라 반영하는 과정을 베타1, 베타2, .. 등 여러 번 거치기도 합니다.
    RC 버전은 Unknown Major Bug가 없는 상태(그에 따라 Known Bug는 있을 수 있음)이며, RC 버전을 통한 테스트를 거쳐 Code Complete을 하는 것을 목표로 합니다. RC1, RC2 등 여러개가 나오는 경우가 있는데, 베타와는 다르게 말 그대로 별도의 후보 Set을 말합니다. 숫자가 높다고 더 좋은 것도 아닌거죠. 이 경우 Known Major Bug를 workaround하기 위한 경우들이 대부분입니다. 회피할 버그의 종류나 workaround 방법이 달라지니 후보 set이 여러개 나오는 거죠.

    위키피디아에 있는 정의라도 잘 읽어보셨으면 합니다.
    http://en.wikipedia.org/wiki/Software_release_life_cycle

  3. 안녕하세요. 안재우님

    의견 감사합니다. 이런 정의를 모르고 썼겠습니까? ^^ 쉽게 풀어서 설명한 것이지요.
    제 책에서는 자세히 설명이 되어 있으니 참고를 하세요.
    릴리즈사이클에 대한 정의도 일반적으로 이렇게 정의를 하지만 회사마다 약간씩 다르기도 하고 실제 프로젝트에서는 이보다 훨씬 복잡한 상황들이 벌어지죠. 알파버전 이후에 기능을 추가하는 경우고 심심치 않게 발생합니다. 원칙에는 어긋나보이지만 그런 경우 회사마다 대처하는 방법이 다르죠. 백과사전에는 모든 답이 있지만 실제 경험을 해보지 않은 사람들은 백과사전을 보고 따라 할 수 있는 것은 아니죠. 그런 맥락으로 대부분의 독자의 눈높이에 맞추고 있다고 생각하시면 되겠습니다.

    대부분의 회사가 이런 단계별 테스트를 하지도 않고 있기 때문에 왜 복잡하게 설명하지 않고 일관된 커뮤니케이션 한 주제에 대해서만 간단하게 설명하고 있는지 이해를 하실 수 있을 겁니다.

  4. 알파버전에는 crash가 있을 수는 있지만 Show stopper가 있어서는 안되는데 그 정의는 빠져있군요. :)

  5. 글쎄요, 쉽게 풀어서 설명하는 것과 각 단계를 구분하는 핵심이 설명되지 않은 것은 좀 다르다고 봅니다. 대부분의 사람들이 알파, 베타, RC 간의 차이가 그냥 버그가 더 적고 안정화되는 것이라고만 알고 있습니다. 그러다 보니, 개발팀에서 제멋대로 갖다 붙이는 경우가 많습니다. 하지만 알파/베타/RC라는 명칭은 원래 개발팀에서 임의로 붙일 수 있는 것이 아니지요.

    항상 베타가 알파보다 버그가 적지도 않습니다. 물론 알파 테스트를 거쳤기에 적을 수도 있지요. 하지만 Feature 변동이 있기에 베타가 오히려 버그가 더 많을 수도 있습니다. 그리고 Known Bug가 아닌 항목들이 베타에서 등장하기도 하지요.

    그리고, 답글을 주신 내용을 보면 이상한 항목이 있는데요,
    '알파 버전 이후에 기능을 추가하는 경우는 심심치 않게 발생합니다. 원칙에는 어긋나 보이지만'이라고 하셨는데, 원칙에 어긋나지 않습니다. 알파 버전의 '개발'이 아닌 '테스트' 이후에야 Feature Freeze가 일어날 수 있으니까요. 테스트도 안해보고 사용자의 피드백도 들은 적이 없는데, 알파 버전이 모든 기능 구현이 완료된 버전이 될 수 없지 않을까요?

    백과사전, 이론, 원칙대로 현실에 모두 반영할 수 없는 것은 맞는데, 이론과 원칙을 잘못 알고 있으면서 현실만을 얘기하는 것도 위험하지요.
    예를 들어, 어떤 프로젝트의 개발팀장이 이 글을 읽고 알파 버전에선 기능 구현이 이미 끝나서 버그 고치는거 빼고 일체 기능 추가나 변경은 못한다라고 주장하면 어떻게 될까요? 사실 알파 단계에서 이렇게 한다는 건 고객의 피드백을 별 그다지 들을 생각이 없는 경우입니다. 프로젝트는 일정 내에 끝낼 수 있을지 몰라도, 고객에게 좋은 평가를 듣거나 시장에서 크게 성공할 가능성이 거의 없다고 봐야죠.

  6. 안녕하세요. 안재우님

    제가 원래 이런 토론을 아주 좋아하지만 이상하게 말꼬리를 잡고 늘어지는 형태로 얘기를 하시는 것 같아서 조심하게 되는군요. "원칙에 어긋나 보이지만"이란 말도 과도하게 해석해서 부풀리는 것 같습니다. 또, 첫번째 댓글에 약간 빈정대는 투가 있기는 하지만 그대로 이해하겠습니다.

    기본적으로 안재우님의 주장은 다 공감합니다. 친절하게 쓰셨으면 더욱 공감했을 겁니다. ^^ 제 독자들도 이런 말꼬리에 회사에서 억지 주장을 하지 않을 거라고 믿고 있습니다. 많은 독자들은 제가 쓴 "소프트웨어 개발의 모든 것"을 읽었거나 오랫동안 블로그를 구독하고 있어서 말꼬리 하나하나 보다는 전체적인 맥락에 공감을 합니다.

    소프트웨어 개발의 큰 원리는 같으나 회사마다 다른 것들도 많아서 하나의 주장만 맞다고 하면 문제가 되는 경우가 있습니다.

    알파버전에 관한 것도 큰 맥락은 같으나 용어와 정책들도 서로 다릅니다. 헌법은 아니죠. Feature freeze라고 하는 곳도 있고, 알파버전에 Spec을 close하는 회사도 있습니다. 고객의 피드백을 알파 이후에 하는 회사도 있고 개발단계에서 Mock up을 가지고 미리 하는 회사도 있습니다. 사실 현실에서는 이보다 100배 더 복잡합니다. 이런 것에 대한 원리를 설명한 글은 안재우님의 참고로 들으신 Wikipedia글이 더 잘 대표를 한 것 같습니다. 그렇다고 제가 항상 Wikipedia를 배낄 필요는 없다고 생각합니다. 20년부터 알파, 베타를 비롯해서 소프트웨어 공학을 사용했고, 미국 실리콘밸래의 회사와도 같은 방식으로 일을 했고 이론과 경험은 충분하다고 생각합니다.

    건설적인 주장과 토론은 환영합니다. 가끔 이런 반응에 대한 우려로 글을 쓸 때도 좀더 신중하게 정리를 해서 쓰고 싶기는 하지만 저도 시간이 그렇게 많은 편이 아니라서 후다닥 글을 쓰는 형태를 바꾸기는 어렵겠네요. ^^

    아무튼 적극적인 반응 감사합니다.

  7. 베타단계에서 사용자의 피드백을 받아서 베타1, 베타2 등을 만들어 내는 것은 안재우님의 경험을 말씀하신 것이 아닌가 생각합니다.
    그럼 베타단계에서 사용자의 의견에 따라서 스펙이 바뀐다는 얘기인데 어쩔 수 없이 그렇게 해야 하는 소프트웨어도 있기는 하지만 스펙을 베타단계에서 바꾸는 것은 많은 비용을 지불해야 하기 때문에 애초에 스펙단계부터 변경을 최소화하기 위해서 잘 작성하는 것이 일반적이라고 볼 수 있습니다.

    소프트웨어 개발 방법론(or 라이프사이클)에는 여러가지가 있기 때문에 베타테스트에서 사용자의 피드백을 반영해서 계속 바꾼다는 것이 틀렸다고 말하고 싶지는 않습니다.

    우리나라의 많은 회사들이 그런 식으로 소프트웨어를 개발하고 있고 그럼으로 인해서 많은 비용을 지불하고 있습니다. 우리나라에서는 흔히 고객은 실제 동작하는 소프트웨어를 보여주기 전에는 피드백을 줄 수 없다고 합니다. 많은 비효율이 여기서 출발합니다.

    제가 많은 대기업, 중견기업를 포함해서 중소소프트웨어 회사에서 요구공학을 가르치고 스펙 작성을 도와줬는데 제대로 스펙을 작성할 수 있는 엔지니어는 2~3%도 안되는 것이 현실이죠. 그래서 이같은 현상이 어쩔 수 없이 벌어집니다. 스펙을 제대로 작성하면 이후 발생하는 변경이 최소화되죠. 방법론에 따라서 스펙 작성방법이 다르기 때문에 꼭 어떻게 작성해야 한다고 주장하지는 않습니다. 하지만 스펙 작성 역량도 없이 이런 저런 방법론만 주장하는 사람들도 많기는 합니다.

    아무는 저는 소프트웨어를 보여주기 전에 스펙단계에서 고객의 요구사항을 충분히 반영할 수 있도록 교육을 하고 있습니다.

    RC 버전은 Unknown Major Bug가 없는 상태라는 것은 발견하지 못한 Major bug가 없다는 얘기인데 이것은 불가능한 것 같습니다. Unknown한 것은 있는지 없는지는 알 방법이 없습니다. 또한 RC는 후보군이기 때문에 Major Bug가 있을 수 있는데 회사에 따라서는 Major bug가 있으면 Release가 허용이 안되는 회사도 있습니다. 또한 한국에서는 많은 회사들이 Critical,Major,Minor,Trivial,Showstopper 등 버그의 숫자만 보고 결정하는 프로세스를 만들려고 하는데 버그의 숫자만 가지고는 판단하기 어렵기 때문에 Go-live회의를 통해서 Release여부를 결정합니다. 실패시 RC2를 만들어 내기도 합니다.

    저는 소프트웨어 공학은 실전이라고 생각합니다. 이론을 잘아는 소프트웨어 공학 교수님들이 소프트웨어는 제대로 개발을 못하는 이유입니다. 따라서 저는 다른사람들의 실전적인 방법에 대해서 비난을 하지는 않습니다. 단지 컨설턴트로서 좀더 좋은 방향으로 개선을 해줍니다. 그렇다고 제가 소프트웨어 공학 이론을 모르는 것은 아니죠. 처음부터 이론을 먼저 공부한 것은 아니고 20년 실전을 해오다 보니 이론을 접할 기회가 많아서 익히게 된 것이죠. 그렇게 쌓이면 원리를 깨우쳐서 이론에서 주장하는 문구 하나하나에 집착하지 않은 상태가 됩니다. 저는 몇몇 분야에서는 원리를 깨우친 상태라고 할 수 있습니다. 그래도 여러 회사의 상황들은 제게 많은 도움이 됩니다.

    앞으로 건설적인 토론이 계속 되면 좋겠습니다.

  8. 안녕하세요. 처음 댓글에서 밝혔듯이 저는 기본적인 글의 취지 자체에는 공감하고 있습니다. 다만 Consensus를 형성하기 위한 전제가 되는 '용어의 정확한 의미를 이해하고 사용'이라는 측면에서의 문제를 지적한 것입니다. 예로 드신 용어가 보편적인 정의와 일치하는 것이라면 제가 애초에 댓글을 달 이유도 없었겠지요.
    계속 말씀하시는 것은 용어에 대한 정의가 '상황에 따라 다르다', '회사에 따라 다르다'라는 건 결국 '개인에 따라서도 달라질 수도 있다'라는 건데, 원 글의 취지와 모순되어 보인다는 생각이 듭니다. 하지만 엄밀히 말하면 정의가 다른게 아니라, 해석과 적용이 다른 것일뿐이 겠지요.

    토론의 정의는 '각각 다른 의견을 말하면서 논하는 것'인데, 의견이 같아 공감하는 부분은 이미 얘기했고, 다른 의견에 대해 논하는 것을 원치 않으신듯 하니 저 역시 더 이상 토론을 진행할 것이 없을 것 같습니다. 그에 따라 '원래 정의가 뭐라고 되어 있든, 최소한 조직 내에서는 동일한 것으로만 맞추면 된다' 정도가 원래 글의 취지였다고 이해하도록 하겠습니다. 그럼 이만..

고쳤으니 테스트 해주세요.

2013/02/18 10:13 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed





여기 두가지 테스트 방법이 있다. 우리 회사는 어떤 방법을 사용하고 있나 생각해보자.


첫째, 테스트 도중에 버그를 고쳐서 좀더 안정된 버전을 테스트팀에 계속 전달하는 방식이다.

테스트 한사이클을 도는데 2주일이 걸린다고 생각해보자. 테스트 기간내내 테스트 팀은 버그를 지속적으로 발견하여 보고를 할 것이다. 개발팀은 동시에 버그를 수정한다. 그리고 다음날 개발팀은 테스트팀이 보고한 버그를 많이 수정한 새버전을 테스트팀에 전달한다. 


테스트 팀은 새버전을 가지고 어제 테스트한 시점의 다음 단계부터 또 테스트를 진행한다. 이렇게 테스트 기간 내내 여러번 새버전을 받는다.


두번째 방법은 다음과 같다. 테스트가 2주가 걸리면 2주 동안 테스트 팀은 새버전을 절대로 받지 않고 한 버전을 가지고 테스트를 완전히 종료한다. 개발팀은 버그를 계속 고치지만 새 버전을 테스트 팀에 전달하지 않는다.


어느 방법이 더 효율적으로 보이는가? 많은 회사들이 첫번째 방법을 사용하고 있다. 믿기 어렵겠지만 사실이다. 첫번째 방법은 큰 문제가 있다. 테스트 기간 도중에 테스트 팀이 새로운 버전을 받으면 이전에 테스트 한 내용이 무효가 된다. 여기서는 그걸 무시하고 계속 테스트를 했기 때문에 테스트가 끝나도 끝난 것이 아니다.


그럼에도 첫번째 방법을 사용하는 이유는 있다. 도저히 테스트 할 수 없을 만큼 불안정한 제품을 테스트 해달라고 전달한 경우이다. 그래서 테스트 팀과 적당히 테스트를 하면서 차츰 안정화를 시켜가는 것이다. 이런 품질의 제품은 테스트를 할 필요가 없다. 이 경우는 테스트 팀을 개발팀의 딱까리로 생각하는 것이다. 


원래 테스트를 진행할 수 없을 정도의 제품을 테스트팀이 받으면 테스트를 중단하고 개발팀으로 다시 돌려보내야 한다.


이렇게 비효율적인 테스트가 우리 주변에서 흔히 벌어지는 이유의 원인 따지고 들어가면 앞단계인 분석과 설계가 엉망이거나 없기 때문인 경우가 많다. 


제품의 품질을 유지하기 위해서는 분석/설계도 중요하고 전문적인 테스트를 해야 한다. 대충 개발하고 테스트팀이 개발팀을 도와주는 형태로는 평생 주먹구구식 개발에서 못벗어나고 비용과 시간도 많이 들뿐만 아니라 개발팀은 잦은 야근에서 벗어나기도 어렵다.


앞으로 테스트에 관한 얘기를 좀더 쉽게 풀어서 써보도록 하겠다.


image by cseward

저작자 표시 비영리 변경 금지

'프로젝트 > 품질관리' 카테고리의 다른 글

거의 다 만들었어요.  (8) 2013/02/27
고쳤으니 테스트 해주세요.  (3) 2013/02/18
우리는 개발자가 테스트해요.  (8) 2009/01/28

전규현 프로젝트/품질관리

Trackback Address: http://allofsoftware.net/trackback/305 관련글 쓰기
  1. 아직 댓글이 없네요.
    일등...

    테스트에 대한 글들을 많이 기다리고 있겠습니다.

  2. 안녕하세요, 자주 블로그글을 유용히 읽고 있는 독자중에 하나입니다.
    개발자가 만든 코드의 테스트를 결국 누가 하는가인것 같습니다만,
    [우리는 개발자가 테스트해요..] 라는 글과 상충되는 느낌을 받았습니다.
    개발자가 유닛테스트를 자동화해서 거치더라도 결국엔 누군가는 사람이 테스트를 해봐야 할텐데요,
    그것이 테스트부서나 팀내 테스트인원이 아니면 누가 해야할련지요?
    (결국 팀내 테스트인원이라면 팀내 테스트인원은 개발자의 딱까리(본문의 표현;;)가 될것같습니다.. ㅠ)

  3. 안녕하세요. 저도 기억이 잘 안나서 옛날 글을 읽어봤는데 어느 부분이 상충되는지 발견을 못했습니다. 좀더 자세히 찝어주시면 제가 아는한 자세히 설명드리겠습니다.
    과거의 글은 테스트팀이 없어서 발생하는 문제를 지적했고, 이 글은 테스트 프로세스 중 문제가 되는 경우를 설명했습니다.
    질문하신 내용의 요지는 테스트인원을 어디에 두느냐인 것 같습니다.
    여러 경우를 많이 봤지만 테스트인원이 개발팀내에서 개발팀장의 지휘를 받는 경우를 종종 봤습니다. 항상 그런 것은 아니지만 개발자의 딱까리가 되는 경우가 많더군요.
    그래서 테스트팀은 별도의 팀이나 부서로 두는 경우가 많습니다. 물론 순수 SW인가? HW에 탑재하는 Firmware인가에 따라서 약간씩은 효율적인 테스트 조직이 다르기 때문에 상황에 따라서 잘 판단해야하지만 테스트팀은 전문성을 발휘할 수 있도록 조직적인 배치를 하는 것이 좋습니다.

인해전술이 오히려 프로젝트를 망친다.

2013/02/11 23:31 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed


일정이 촉박하다고 프로젝트를 빨리 끝내고 싶은 마음에 프로젝트 초기부터 대거 인력을 투입하면 오히려 프로젝트를 망칠 가능성이 더 높아진다.


프로젝트 초기에 분석/설계 단계에는 그렇게 많은 인력이 필요하지 않다.


많은 인력을 분석도 안된 프로젝트에 투입을 하면 놀 수 없는 개발자들이 인터페이스도 정의가 안된 모듈이나 라이브러리를 만들기 시작한다. 이것들 중 대부분은 나중에 다시 만들어야 하고, 이것들을 버리기 아까워서 어떻게든 활용하려고 버티다보면 소프트웨어의 아키텍처가 점점 이상하게 된다.


많은 인력이 투입되는 단계는 구현단계이며 핵심 구현 인력들이 분석/설계 단계에 리뷰어로 참석할 수는 있다.  일정이 촉박하면 분석/설계를 최대한 빨리 끝내고 할일의 범위와 아키텍처를 명확히 한 후에 인력을 투입해야 한다.


필요한 라이브러리를 개발하지 말고 상용라이브러리를 구매하는 것도 일정을 단축하는데 도움이 된다.


가장 안좋은 방법이 프로젝트 초기에 시장통처럼 개발자를 잔뜩 투입하는 것이다. 소프트웨어 개발을 잘 모르는 경영자들이 이런 실수를 종종 하곤 한다.


우리 주변에서 1년짜리 프로젝트인데 10명의 개발자가 투입되면 10명이 12달동안 계속 같이 일하는 경우를 흔히 볼 수 있다. 이렇게 일정 투입 계획이나 현황만 보아도 개발이 얼마나 주먹구구식으로 진행되고 있는지 알 수 있다. 10명의 개발자가 투입되는 프로젝트도 초기 2,3개월 또는 3,4개월동안은 분석/설계를 담당하는 1,2명만 필요하다. 이 프로젝트에서 분석/설계를 담당한 엔지니어는 많은 개발자가 투입되는 구현기간에 같이 구현에 참여할 수도 있고 다른 프로젝트에서 또다시 분석이나 설계를 담당할 수 있다.


이렇게 인력이 효율적으로 순환이 되면 훨씬 적은 인력과 비용으로 많은 프로젝트를 효과적으로 진행할 수 있게 된다.


인해전술로 많은 인력을 투입하는 방법은 해당 프로젝트를 망치는 방법일 뿐만아니라 회사 전체적으로 효율적인 인력운영을 할 수 없게 만든다. 


image by   Boston Public Library



저작자 표시 비영리 변경 금지

전규현 프로젝트/일정

Trackback Address: http://allofsoftware.net/trackback/304 관련글 쓰기

절대 코딩하지 마라

2012/10/29 06:21 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed




"코딩은 늦게 할수록 프로젝트가 빨리 끝난다."


대부분의 개발자들은 이 말을 제대로 이해하지 못한다. 그래서 프로젝트 일정이 촉박하면 무조건 코딩부터 시작하곤 한다. 코딩을 빨리 시작하면 프로젝트가 빨리 끝날 것으로 믿곤 한다. 말은 그렇게 하지 않더라도 일정이 부족하면 문서 작성할 시간도 없고 무조건 코딩부터 시작한다.


물론 프로젝트에 따라서 대충해도 되는 경우가 많다. 그런 프로젝트를 예로 들어서 모든 프로젝트에 확대 적용하지는 말자. 즉, 개집은 어떻게 만들어도 다 되는 것이다. 


코딩 시작은 빨리 시작할수록 재작업은 급속히 늘어난다. 코딩을 최대한 뒤로 늦춤으로써 재작업 가능성을 낮춘다. 물론 스펙이 완전히 끝나야 코딩을 시작할 수 있는 것은 아니다. 스펙을 합리적으로 작성하는 요령 중 하나가 미리 확정할 수 있는 라이브러리나 Sub system들은 인터페이스를 미리 확정하고 코딩을 먼저 시작할 수 있다.


보통 프로젝트에서 분석을 해보면 코딩부터 할 수 없다는 것을 알게 된다. 코딩부터 시작하는 경우는 무엇을 개발할지도 모르고 코딩을 시작하는 것이다. 그렇게 미리 작성된 코드는 스펙이 정해지면 버리고 다시 짜야 하는 경우가 많다. 아키텍처에 요구사항이 제대로 반영되지 않는다. 그럼에도 미리 코딩을 해 놓으면 코드를 버리기가 아까워서 그냥 사용하게 된다. 그러다보면 아키텍처는 엉망이 된다.


개발자들은 자신이 작성한 코드를 살리기 위해서 요구사항을 거부하기도 하고 코드에 꼼수를 부리기도 한다. 


가끔은 코딩만하기에도 정말 일정이 부족한 프로젝트들이 있다. 이런 경우도 코딩부터 한다고 프로젝트가 빨리 끝나는 것은 아니다. 무모한 시도를 하는 것이다. 스펙을 작성할 시간도 없는 프로젝트는 안하는 것이 낫다. 그렇다고 회사에서 프로젝트를 거부할 수는 없다. 최대한 빨리 스펙을 써서 합리적으로 가능한 일정와 범위를 제시하는 것이 더 좋은 방법이다.


일정이 촉박하다고 매번 코딩부터 시작하면 10년을 개발해도 별로 나아지는 것이 없을 것이다.









저작자 표시 비영리 변경 금지

'프로젝트 > 구현' 카테고리의 다른 글

절대 코딩하지 마라  (11) 2012/10/29
주석을 달기 어려운 이유  (9) 2011/09/09
Copy & Paste의 종말  (12) 2009/07/31

전규현 프로젝트/구현

Trackback Address: http://allofsoftware.net/trackback/294 관련글 쓰기
  1. 좋은 글. 모든 일(Task)이 그렇듯이 고민을 충분히 해서 세를 짠 후에 한 번에 몰아붙여 끝내는 것이 효율적이라고 생각됩니다.

  2. @beomjinkim 블로그에 LiveRe 붙였어요. ^^ 좋죠?

  3. @beomjinkim 다 좋은데 Tistory 기존 댓글들을 포기할 수 없어서 지금은 기존 댓글과 중복해서 사용하게 되네요.

  4. 항상 손이 먼저나가서 문제
    참을수 없는 가벼움

  5. LiveRe 붙이고 좋아진 것 같긴 한데 LiKE 버튼이 없어졌네요! 아님 제가 못찾고 있는걸까요?

  6. 없어졌네요. - -; 다시 추가했습니다.

  7. 공감합니다. 저도 경력이 늘수록 코딩시작하는데 신중해지더군요. 나중에 고생하지 않으려고.
    비록 혼자 보게되더라도 간단하게 나마 문서작성해서 다 맞춰놓고 하는게 제일 좋더군요.

  8. 그렇다면 TDD 방법론에 대해서는 어떻게 생각하시나요?

  9. 안녕하세요. 윈플님

    개발적인 방법론을 보면 잘못된 것이 하나도 없습니다. TDD방법론도 마찬가지입니다. TDD방법론은 분석단계를 강화하는 아주 좋은 수단입니다. 그렇다고 모든 프로젝트에 TDD방법론을 쓰는 것이 좋은 것은 아닙니다.

    스펙을 적는 방법은 매우 다양합니다. 특히 기능을 적을 때는 어떤 형식으로 적으라는 규칙이 없습니다. TDD도 그 방법 중 하나입니다. 단계별로도 한번에 다 적을 수도 있고 차츰 발전시켜나갈 수도 있고 가장 효과적인 방법은 경험이 많은 개발자가 프로젝트의 성격에 맞게 판단하면 됩니다.

    무슨 방법은 옳고 뭐는 잘못됐다고 기법이나 방법을 가지고 얘기하는 것은 위험합니다.

    원칙 중 하나는 이 모든 고민은 소프트웨어를 어떻게 빨리 개발할지에서 출발하는 것이고 그러기 위해서는 대부분의 소프트웨어는 바로 코딩에 들어가는 것보다는 스펙을 적절하게 적는 것이 좋다는 겁니다. TDD도 그 한 방법입니다.

  10. 만족할때 까지 생각만 하면 아무것도 안되는 것 같고, 또 나름 고심했다고 막상 코딩하면 미처 고려치 못한 부분이 생기고, 설계와 코딩의 경계점을 잡기가 참 어려운것 같습니다.

  11. 내용을 보면 분석과 설계의 경계를 구분하기 어려운 것 같군요. 코딩은 분석, 설계 어느 단계라도 필요한 부분은 미리 해 놓을 수도 있습니다. 분석은 충분히 다 되었다고 확신하는 것도 어렵고, 필요한 만큼 적당히 해야 하는데 적당히가 가장 어렵습니다.

    그래서 설계는 예술이라는 말이 나오나 봅니다.

소프트웨어 개발시 일을 작게 쪼개야 하는 이유

2012/09/24 06:00 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed




대부분의 소프트웨어는 수명에서 수백명, 많게는 수천명이 같이 개발한다. 그래서 효과적으로 일을 나눠서 개발할 수 있어야 한다. 심지어는 혼자서 개발을 할 때도 일을 쪼개야 한다. 


왜 일은 쪼개야 하고 어떻게 쪼개야 하는것일까? 대부분의 다른 산업 분야는 일을 잘 쪼깬다. 시계하나를 개발해도 각 부품을 따로 개발해서 조립한다. 따로 개발하기 전에 이미 어떻게 연결이 되는지 인터페이스를 완벽하게 정의하고 개발한다. 그렇지 않으며 나중에 조립이 안되서 처음부터 다시 개발해야 할 수도 있다.


소프트웨어 프로젝트에서 일을 서로 어떻게 나눠서 개발을 하고 있는지 생각해보자. 


흔히 사용하는 방법이 화면 단위로 일을 나누는 것이다. 이 방법은 일을 나누기는 쉬워보이지만 문제가 많다. 나눠서 한 일이 서로 통합이 잘 안되고, 서로 중복된 개발도 많이 하게 된다. 다 개발해 놓고 서로 맞추는데 많은 시간을 소모하곤 한다.


일을 효과적으로 쪼개는 방법은 프로그램을 컴포넌트 단위로 잘 쪼개는 것이다. 컴포넌트는 특정 일을 담당하는 모듈로서 Class일 수도 있고, Class의 집합일 수도 있고, 함수의 집합일 수도 있다. 형태는 별로 중요하지 않다. 중요한 것은 컴포넌트의 외부 인터페이스가 간단하고 명료하게 잘 정의가 되면 되는 것이다.


분석/설계 과정에서 컴포넌트의 인터페이스가 잘 정의되면 많은 개발자들이 일을 나눠서 할 수 있게 된다. 10명이 개발을 하다가 시간이 부족하여 5명을 추가로 더 투입해도 큰 문제없이 개발이 가능하다.


서로 의존성이 있는 모듈들을 동시에 개발할 수 있게 된다. 특정 컴포넌트의 개발이 완료되어야 동작하는 모듈도 인터페이스가 확정되어 있으면 미리 개발을 할 수 있다. 개발 기간이 단축되는 것이다. 물론 모든 모듈이 다 개발되어야 테스트가 가능하지만 구현은 미리 해 놓을 수 있다.


또, 일부 모듈은 외주를 주는 것도 가능해진다.


이렇게 소프트웨어를 컴포넌트로 잘 나누게 되면 그 과정에서 문서화가 되고 서로 리뷰를 통해서 문제점을 발견하고 가장 뛰어난 아키텍처를 만들 수 있다. 또한 작업의 단위가 작아야 일정을 충분히 예측할 수 있다.


코딩을 시작하기 전에 이미 문서를 통해서 검증이 되고 공유가 된다. 그래야 변경이 최소화되고 가장 빠르게 소프트웨어를 개발할 수 있다.


분석 과정에서 부터 이미 주요 컴포넌트를 나누는 작업이 시작되고 외부 인터페이스를 정의하게 된다. 설계의 정도는 프로젝트마다 매우 다르지만 컴포넌트를 좀더 작게 나누고 function prototype까지 정의를 하면 설계가 완성된다. 간단한 프로젝트인 경우에는 스펙에서 정의한 컴포넌트와 인터페이스만 가지고 별도의 자세한 설계 없이 구현이 가능하다.


이렇게 일을 쪼개는 이유는 소프트웨어를 가장 빨리 개발하기 위한 것이다. 그렇지 않고 그냥 대충 일을 나눠서 서로 뭉쳐서 긴밀하게 의논해가면서 개발을 하는 것이 더 빨라 보인다고 생각하는 사람들이 매우 많다. 이 방법은 초기에 빠른 결과물을 보여주어서 초반에는 빨라 보이지만 결국 통합에서 지연되고 많은 재작업으로 시간을 소비하고 버그를 더 많이 만들어내어서 또 지연된다.


당장 코딩부터 시작하기 보다 생각을 더 많이 해서 컴포넌트를 잘 나눠 일을 쪼개서 재작업을 최소화하고 한번에 구현을 해 내는 것이 소프트웨어를 개발하는 가장 빠른 방법이다.


image by explainthatstuff


* 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.



저작자 표시 비영리 변경 금지

전규현 프로젝트/요구사항분석 컴포넌트

Trackback Address: http://allofsoftware.net/trackback/280 관련글 쓰기

국제화 시 고려해야 할 49가지

2012/09/19 06:03 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed




소프트웨어를 국제화해야 하기 위해서는 고려해야 할 것이 한두가지가 아니다. 그런데 많은 회사들은 메시지나 번역하면 되는 것으로 안다. 그렇게 쉽게 접근하다가는 해외 진출을 하면할 수록 문제가 커지고 비용이 늘어서 점점 어려워진다.


실제 만나본 거의 대부분의 회사가 국제화를 제대로 적용하지 못해서 낭패를 보고나 해외에서 크게 실패를 하였다. 비효율성이 높고 문제가 많아도 제품의 크기가 작거나 고객수가 적다면 그럭저럭 버티지만 큰 제품이나 대규모 서비스는 타격이 엄청나다. 심지어는 회사가 휘청할 정도의 문제를 야기 시키기도 한다.


국제화 기술은 알아야 할 지식도 많고 경험도 많이 필요하다. 


기본적으로 국제화(i18n)과 지역화(L10N)으로 나뉜다. 국제화(i18n)은 소프트웨어가 여러 Locale을 지원할 수 있는 기본 기술이고 지역화(L10N)은 각 Locale을 지원하는 것이다.


이 과정에서 고려해야 할 것은 수백가지가 넘는다. 그 중에서 49가지만 알아보자. 만약에 국제화된 소프트웨어를 개발하고 있는 개발자라면 이중에서 몇가지나 알고 있는지 세어보자. 어떤 항목은 그 하나가 엄청나게 큰 것도 있다. 특별하게 순서를 가지고 정리한 것은 아니지만 하나씩 살펴보자. 



번호 

 항목

 설명

1

언어 구분

한 국가에도 언어가 여러가지이기도 하고 하나의 언어가 여러 나라에서 서로 다르게 쓰이기도 한다.

2

지역 구분

지역과 국가가 완전히 일치하지는 않는다. 언어와 지역 정보가 합쳐져서 Locale이 된다. 소프트웨어는 Locale 단위로 지역화(L10N)를 한다.

3

소프트웨어의 인코딩 전략

소프트웨어가 지원해야 할 인코딩은 매우 복잡하다. Multibyte를 지원하냐 Unicode를 지원하냐에 따라서 인코딩이 다르고 Software, File, Database, Network 별로 다른 인코딩 전략을 사용해야 한다.

4

현지 로케일의 인코딩으로 Export

지역에 따라서 특정 인코딩을 선호하기도 하고 Software의 인코딩과 다른 인코딩으로 Export를 하기도 한다.

5

시스템에 따른 인코딩 차이

거의 대부분의 OS는 Unicode를 지원하지만 OS에 따라서 Unicode이 인코딩이 다르다. UTF-16(UCS2) 또는 UTF-32이 그 예이다.

6

로칼 요구사항의 차이

지역화(L10N)시 현재의 요구사항을 반영한다. 하나의 소스코드와 하나의 팩키지로 지역 요구사항을 반영할 수 있도록 한다.

7

메시지 번역

Locale별로 번역을 한다.

8

메시지 번역 프로세스

소스코드에서 메시지를 추출하고 번역하고 제품에 반영한다. 소스코드가 수정되면 수정된 메시지를 쉽게 반영할 수 있는 프로세스가 필요하다. 번역을 제외한 모든 부분은 자동화가 되어야 한다.

9

메시징 기술

메시징 기술은 수도 없이 많지만 여기서 언급한 모든 것을 지원하는 메시징 기술은 별로 없다. 거의 대부분의 회사는 개발툴에서 번들로 제공하는 간단한 메시징 기술을 사용하는데 이 정도로는 아주 간단한 소프트웨어 밖에 제대로 지원하지 못한다.

10

문자 인코딩 변환

소프트웨에서는 여러가지 인코딩을 사용하기 때문에 수시로 변환을 해야 한다.

11

번역에 따른 문자열 길이 변화

메시지를 번역하면 메시지의 길이가 변한다.  

12

국제화를 고려한 UI 디자인 

메시지의 길이는 지역에 따라서 바뀌기 때문에 이를 고려하여 UI를 디자인 해야 한다.

13

단수, 복수 표현의 차이

단수, 복수가 없는 언어도 있고 영어보다 훨씬 복잡한 단수, 복수를 사용하는 언어도 있다. 대표적인 것이 폴란드어이다. 메시징 기술은 이것을 지원해야 한다.

14

쓰기 방향의 차이

(오른쪽, 왼쪽)

언어 별로 쓰는 방향이 다르다.

15

커서의 이동 방향 

(오른쪽, 왼쪽)

오른쪽 화살표를 눌러도 커서가 왼쪽으로 이동하는 언어도 있다.

16

키보드 글자 배치

언어별로 키보드의 글자배치가 다르다.

17

키보드의 단축키 차이

키보드에 따라서 단축키가 서로 다르다.

18

문자입력기(IME)차이

언어별로 문자입력기가 다르다.

19

폰트의 차이

언어별로 사용하는 폰트가 다르다. 서로 다른 폰트를 고려해야 한다.

20

글자의 크기 차이

언어별로 기본 글자의 크기가 다르다. 특히 중국어는 영어보다 크기가 크다.

21

숫자 표기 방법

나라별로 숫자의 표기가 다르다. 콤마(,)와 점(.)를 표시하는 방법이 다르다. 심지어는 콤마(,)대신 공백을 사용하는 나라도 있다.

22

띄어쓰기 사용의 차이

영어와 한글에 띄어쓰기가 있기 때문에 모든 언어에 띄어쓰기가 있을 것 같지만, 띄어쓰기가 아예 없는 언어도 많아서 띄어쓰기를 기준으로 단어를 분리하면 안된다.

23

쉼표, 마침표 사용의 차이

쉼표와 마침표의 사용도 언어마다 다르다.

24

날짜 표기법의 차이

01/02/03을 읽는 방법은 나라마다 다르다. 미국, 한국, 호주가 각각 다르다.

25

타임존 고려

국제화된 소프트웨어를 만들려면 타임존을 고려해야 한다.

26

썸머타임 고려

썸머타임을 고려해야 하는 나라가 있다.

27

대소문자 구분의 차이

언어마다 대소문자가 다르다. 대소문자가 없는 언어도 있다.

28

관사 사용법 차이

언어마다 관사가 다르다. 관사가 없는 나라도 있다.

29

맞춤법 검사 모듈

맞춤법 검사 기능이 있다면 국제화를 고려해야 한다.

30

사전 제공

사전을 제공한다면 국제화를 고려해야 한다.

31

정렬 방법의 차이

문자열의 순서가 언어마다 다르다. 대부분의 소프트웨어는 목록을 정렬해야 한다. 이때 국제화 기술을 적용해야 한다.

32

화폐 단위의 차이

지역별로 화폐의 단위 및 그 표기법이 다르다.

33

길이, 무게, 부피 단위 차이

지역별로 측정 단위가 다르다.

34

종이 크기의 차이

지역별로 인쇄에서 사용하는 용지의 명칭이 다르다.

35

온도 단위 차이

지역별로 사용하는 온도의 단위가 다르다.

36

주소 형식의 차이

지역별로 주소 표시 형식이 다르다.

37

전화번호 등의 현지화

소프트웨어에서 전화번호를 사용한다면 지역별로 다른 형식을 지원해야 한다.

38

이름 표기법의 차이 

지역별로 이름 표기법이 다르다. 이름의 구성, 순서가 다르다. 

39

현지 법률 및 제도 적용

현지 법률이나 제도와 표준을 지원해야 한다.

40

문화에 따른 아이콘의 차이

동일한 아이콘이라고 하더라도 문화에 따라서 완전히 다르게 인식할 수 있고 금기시 되는 이미지들도 있다. 

41

알파벳을 형상화한 아이콘

아이콘 중에는 알파벳을 형상화 한 것들이 있는데 이는 언어에 따라서 바뀌어야 한다. 대표적인 것이 Bold 아이콘인 "B"이다. 언어에 따라서 Bold가 "B"로 시작하지 않는다.

42

텍스트를 포함한 아이콘

아이콘에 텍스트가 포함된 경우가 있다. 이때 텍스트의 길이 폰트의 크기 등을 고려해야 한다.

43

이모콘티 차이

나라별로 이모콘티가 다르고 지역화된 이모콘티도 있다.

44

색상의 의미 차이

나라별로 색상의 의미가 완전히 다르다. 선호 색상도 다르다.

45

O, X 등 기호의 차이

언어별로 기호의 의미는 천차만별이다. 우리에게 X는 틀렸다는 의미지만 영어에서는 Check라는 의미가 있다.

46

유니코드 처리

국제화된 소프트웨어를 개발하려면 유니코드는 기본이다. 누구나 다 아는 것도 유니코드이지만 유니코드를 제대로 알려면 1,2년 가지고는 모자르다.

47

외부 라이브러리의 유니코드 지원 고려

외부라이브러리들이 유니코드를 지원하지 않는 경우가 있다. 이를 고려해야 한다.

48

파일 시스템의 지원 인코딩

OS별로 파일 시스템의 인코딩이 서로 다르다. 이를 고려해야 한다.

49

멀티 Lingual 고려

하나의 소프트웨어로 수많은 언어를 동시에 지원하고 바꿀 수 있어야 한다.



여기에 모든 것을 다 나열한 것은 아니다. 하지만 이중에서 필요한 일부를 고려하지 않고 소프트웨어를 개발한다면 이것은 버그가 될 것이고 또는 해당 국가에서 보면 어색하고 기분 나뿐 소프트웨어가 될 수도 있다. 물론 소프트웨어의 종류에 따라서 국제화시 고려해야 하는 항목이 다르다. 따라서 위의 모든 것을 모든 프로젝트에서 고려해야 하는 것은 아니다. 한번씩은 생각해봐야 할 항목들이다.


좋은 소프트웨어를 가지고 비즈니스를 아무리 잘해도 국제화가 잘 안된 소프트웨어는 현지에서 성공하기 어렵다.


1~49번까지의 항목들이 제목만 본다고 쉽게 해결할 수 있는 것은 아니다. 하나의 항목을 가지고 10년 넘게 연구하고 개발하고 있는 것도 있을 정도로 크고 복잡한 것도 있다. 제대로 국제화를 적용하고 싶다면 국제화 전문가의 도움을 받는 것도 한 방법이다. 이것을 처음부터 제대로 하지 않고 시행착오를 거쳐서 고객이 버그를 찾을 때마다 하나씩 고쳐주는 것은 끝도 없고 제품의 이미지는 처음부터 추락할 것이다. 


확실한 것은 국제화를 스스로 생각해서 직접 개발하면 잘못될 가능성이 99%이다. 대부분은 이미 국제 표준이나 기술이 있으므로 직접 개발하기보다는 제대로 완성된 기술을 이용해야 한다.


국제화 기술이 소프트웨어 해외 진출 필수임을 잊지 말자.


image by enric archivell

저작자 표시 비영리 변경 금지

전규현 프로젝트/국제화

Trackback Address: http://allofsoftware.net/trackback/287 관련글 쓰기
  1. Blog Icon
    주의사신

    번역만 제대로 하는 것도 만만한 일이 아니던데, 저 목록은 "으악!"소리가 나올법하게 많은 내용을 담고 있군요...

  2. 주의사신님 안녕하세요.
    그래서 대충하거나 스스로 개발해서 적용해본다는 등의 시도는 거의 실패합니다.

  3. 솔직히 여기서 나오는 용어의 대다수는 단순 역사전공자에겐 외계어입니다만
    하나의 프로세스를 수행하기 위해서,
    또 내 홈그라운드가 아닌 곳에서 무엇을 생각해야 하나를 고민하게 해줍니다.
    이런 기술적인 문제에 약하다보니 그저 황제 폐하께서 가라~! 하시니
    백만대군이 갔다는 이야기 이상을 할 수가 없죠.
    요 글은 좀 더 진득하게 읽어봐겠습니다.

  4. RGM-79님 안녕하세요.
    그래서 소프트웨어가 인류가 만든 지식 산업 중에서 가장 어렵다고 하나봅니다.

  5. Blog Icon
    kil9

    15번에서, 오른쪽 화살표를 눌렀는데 왼쪽으로 가는 언어가 정말 있나요? osx에서 트랙패드의 스크롤 방향은 화면을 민다는 메타포라도 있지만, 키보드에서 물리적으로도 오른쪽에 위치한 오른쪽 화살표 키를 누르는데 커서가 왼쪽으로 간다는게 언뜻 이해가 가지 않습니다. 혹시 다른 종류의 키보드가 있을지도 모르고, 화살표의 의미가 반대인 문화권이 있을지도 모른다는 생각에 여러가지로 검색을 해봤는데, 그런 내용을 찾기가 힘들더군요.

  6. 안녕하세요. kil9님
    아랍어는 오른쪽에서 왼쪽으로 쓰는 것은 아시지요? 그런데 영어나 대부분의 다른 언어는 왼쪽에서 오른쪽으로 씁니다. 그런데 아랍어와 영어를 혼합해서 쓸 수 있으므로 문제가 발생합니다.
    그럴 때 아랍어에서는 커서가 거꾸로 진행합니다. 모든 Application이 이것을 지원하는 것은 아니고 MS Office는 지원합니다. 일반 텍스트 에디터는 지원하지 않습니다.
    궁금하시면 파워포인트에 Helloمرحبا 를 입력한 후에 커서를 옮겨보세요. 재미 있는 현상이 벌어집니다. ^^
    호환을 위해 많은 고민을 한 흔적이 보입니다.

  7. 언어 번역만 해서 될게 아니였군요. 여러가지 고려해야할 것들이 굉장히 많네요.
    좋은정보 주셔서 고맙습니다.

  8. 게중에는 쉬운것도 있지만 하나하나가 익히거나 해결하는데 시간이 꽤 걸립니다. 특히 번역 하나만 해도 기술, 프로세스 등 제대로하기는 매우 어렵습니다. 그래서 표준 기술을 써야하고 표준을 익혀야 합니다. 이 표준 기술을 제대로 익히는데는 몇년의 시간이 걸립니다. 그래서 국제화 전문가가 있는 것이지요.

  9. 많은 스타트업들에게 도움이 될 것 같습니다. 잘 읽었습니다~

요구사항이 계속 바뀌기 때문에 스펙을 적을 수 없다.

2012/08/30 01:40 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed



소프트웨어 개발 프로젝트에서 스펙을 제대로 적지 않는 회사들에게 그 이유를 들어보면 여러가지가 있다.


1. 프로젝트 기간이 너무 짧아서 스펙을 적을 시간이 없다.

2. 프로젝트가 너무 복잡해서 적어야 할 것이 너무 많아서 적을 수 없다.

3. 요구사항을 계속 바꿔서 스펙을 적을 수가 없다.


위의 어떠한 이유도 적절한 이유가 되지는 않는다. 오직 한가지 이유가 될 수 있다면 다음과 같은 것이 있을 수 있다.

"우리는 분석역량이 떨어져서 스펙을 적을려고 해도 제대로 적을 수 없다. 그래서 그냥 개발한다."


위 1,2,3번의 이유 때문에라도 스펙을 적어야 하는 것이다.

이중에서 3번 "요구사항이 계속 바뀌기 때문에 스펙을 적을 수 없다"에 대해서 얘기를 해보고자 한다.


99%의 소프트웨어 프로젝트는 분석 기간은 당연하고 설계, 구현 중에도 요구사항이 계속 바뀐다. 단지 프로젝트마다 바뀌는 정도의 차이가 있을 뿐이다.


스펙을 제대로 적었다는 전제하에 스펙을 결정한 후에도 요구사항이 계속 바뀌는 이유는 다음과 같은 것들이 있다.


1. 시장 상황의 변경

2. 경쟁 업체의 신제품 출시

3. 기술 환경의 변화

4. 미처 파악하지 못한 비즈니스 요구사항 발견

5. 예상치 못한 개발 상의 난관 봉착

6. 경영진의 변덕

7. 영업, 마케팅 부서의 끊임 없는 요구


이런 저런 이유로 요구사항 변경 요구는 계속 되기 마련이다. 스펙을 제대로 적어 놓지 않으면 이러현 변경 요구가 관리되지 않는다. 또한, 변경 프로세스를 적용하면 좀더 합리적인 변경 관리가 가능한다.


프로세스라고 하니까 뭔가 매우 부담스러워하고 특히, 영업과 마케팅 부서는 싫어하는 경향이 있다. 과거에는 코딩 중이라고 하더라도 친한 개발팀장에게 추가로 요구를 하면 잘 들어 줬는데 변경 프로세스를 밟으라고 하면 싫어하기 마련이다. 하지만 중요한 프로젝트의 일정과 품질에 영향을 줄 수 있는 결정에 큰 Risk를 안으면서 그냥 결정할 수는 없다.


변경 프로세스의 핵심은 "변경 영향 평가"이다. 이것도 그렇게 거창한 것은 아니다. 새로운 요구사항이 프로젝트에 어떠한 영향을 주는지 정량화하는 것이다. 일정이 더 필요할 수도 있고, 오히려 줄어들수도 있다.(드물지만) 또한 기술적인 위험이 증가할 수도 있다. 짧게는 10분, 길면 몇시간 걸리는 일이다. 스펙을 제대로 적어 놓지 않았다면 요구사항 변경으로 인해 아키텍처에 어떠한 영향을 주는지 파악하기 어렵고, 일정에 미치는 영향도 판단하기 어렵다. 그래서 스펙이 필요한 것이다.


변경 영향 평가가 되었다면 이러한 영향이 있는데도 불구하고 새로운 요구사항을 반영해야 하는지 투명하게 판단을 해야 한다. 어떤 요구사항은 정말 간단한 것 같은데 프로젝트에 큰 악영향을 주는 것도 있고, 커보이는 요구사항이 프로젝트에 문제 없이 포함될 수 있는 것도 있다. 즉, 요구사항 변경이 합리적으로 결정될 수 있다.


변경이 쉽지 않다는 것을 잘 알기에 스펙을 제대로 적고 철저히 리뷰하는 문화가 더욱 견고해지는 것이다.


이러한 프로젝스와 문화가 정착된다면 개발자들도 터무니없는 기능 추가 요청에 일정은 절대 안바꿔주는 비합리적인 요구는 줄어들게 된다. 스펙을 제대로 적고 변경을 관리하는 것이 회사에도 이익이지만 개발자에게는 더욱 좋은 문화임에도 많은 개발자들이 거부하는 경향이 있다. 이는 개발자들 탓이 아니다. 그동안 개발환경이 근거없는 일정 강요와 야간에 내몰리다보니 하루라도 빨리 코딩을 해야 한다는 생각에 내몰린 것이다.


또한, 무리한 요구사항 변경 요청에 "아키텍처를 너무 많이 바꿔야 한다". "몇달이 더 필요하다"라고 하면 개발자들은 항상 안된다고 주장한다고 치부를 해버리곤 한다. 그래서 무리한 변경 요구에 개발자들이 주로 약자가 되곤 한다.


스펙이 잘 작성된다면 일정, 리스크, 비용 등 모든 것에 근거가 생기고 합리적으로 결정할 가능성이 훨씬 높아지게 된다. 


스펙은 프로젝트가 끝날 때까지 계속 바뀌게 되어 있다. 그래서 스펙은 계속 업데이트가 되어야 한다. 하지만 합리적으로 변경 관리가 되어야 한다.


image by  m.a.r.c.


* 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.


저작자 표시 비영리 변경 금지

전규현 프로젝트/요구사항분석 스펙

Trackback Address: http://allofsoftware.net/trackback/279 관련글 쓰기
  1. Blog Icon
    SI PL

    Budget, Time은 변경할 생각이 없으면서, 요구사항은 수용해야한다고 생각하는 고객이 문제입니다.

    프로세스를 FM대로 하려면 고객도 FM에 따라주면 좋겠지만, 그런 고객은 못만나 보았습니다.

    아키텍처에 영향을 미칠정도의 요구사항변경은 On Time, on budget에서는 무리라는건...

    변경관리를 하지 않아도 파악되어야 한다고 생각합니다.

    아키텍처에 영향이 없는 폰트변경, 버튼위치변경 요청까지 명문화하여 관리하기엔 인생은 그리 길지 않은것 같습니다.

  2. SI PL님 안녕하세요.

    스펙을 토대로 계약을 해야 하는데, 우리나라는 계약 후에 스펙을 작성하기 때문에 스펙 변경에 전혀 부담을 없어하죠. 그게 가장 큰 문제 중에 하나라고 생각합니다. 오타수정이나 누가봐도 너무 사소한 변경은 상식적으로 변경관리하지 않는 것이 맞으나 미 국방부 프로젝트라면 그런 것도 허용하지 않죠. ^^

    우리나라에서는 환경이 열악한 것은 사실인 것 같습니다. 그래도 이미 그런 것을 알고 감수를 하면서 프로젝트에 뛰어 든 것이지요. 그래서 사실 SI 프로젝트의 수익성이 그렇게 좋지 않습니다. 10건 성공해도 큰것 1건 폭탄을 맞으면 적자가 나기도 합니다. 그래서 분리발주를 법제화하려고 하는 이유중 하나입니다. 모든 것의 전제 조건은 분석 역량이 뛰어나야 하는 것인데 아직 해야 할 일이 많습니다.

  3. Blog Icon
    KIH

    들고온 스펙이 너무 허접하면 어쩌죠..?ㅎㅎ

  4. 안녕하세요. KIH
    약간 헷갈리네요. 고객이 준 스펙이 허접하다는 얘기 인가요?
    개발을 의뢰했는데 개발사가 스펙을 허접하게 작성했다는 얘기인가요?

    첫번째로 생각하고 의견을 말씀드리겠습니다. 일반적으로 고객은 스펙을 작성하지 않습니다. 고객이 스펙까지 다 작성하고 설계/구현만 발주하는 경우는 많지 않습니다. 고객이 소프트웨어 회사인 경우는 종종 있는 경우 입니다.

    분리발주인 경우 스펙을 작성하는 분석 프로젝트를 별도로 발주하기 때문에 스펙이 잘 작성된다고 봐야 겠죠.

    보통 프로젝트인 경우 고객이 스펙을 작성하지 않습니다. 설령 스펙이라는 이름으로 준 문서도 "요구사항"으로 보면 됩니다.
    요구사항과 스펙은 다릅니다. 고객이 허접한 스펙을 주면 분석을 다시 해서 스펙을 작성해야 하는 상황입니다. 원하시는 답이 되었는지 모르겠네요. ^^

해외 진출하는 족족 실패하는 이유

2012/08/09 02:42 by 전규현
 All of Software 블로그를 RSS Feed에 등록을 해 놓으시면 편리하게 받아보실 수 있습니다. rss RSS Feed




대한민국 이름을 걸고 해외에서 크게 성공한 Software가 없는 것은 안타까운 일이 아닐 수 없다. 내가 아는 한 그런 Software가 없다. 그런 Software가 있다면 알려주기 바란다.

게임 등 일부 분야에서는 성공 사례가 있지만 일부 특수 분야의 일이다.


그렇게 실패하는 이유는 여러가지가 있겠지만 내가 보는 가장 큰 이유는 소프트웨어를 개발하는 기초 역량이 부족해서이다.


누구는 해외 문화를 이해하지 못했다고 하기도 하고, 영업을 잘 못했다고도 하지만 가장 큰 이유는 개발 역량의 차이이다.


국내에서 개발했던 주먹구구의 방식이 해외에서도 그대로 먹힐 것이라고 생각하는 것은 큰 착각이다.


국내에서 성공했던 대부분의 회사들의 성공요인은 국내에서만 먹히는 서비스 전략 때문이었다. 대충 만들어 놓고 고객이 불만을 표시하면 무한 감동 서비스를 제공하는 것이 그것이다. 많은 회사들이 이 전략을 사용해서 국내에서는 성공을 했다.


작은 땅덩어리에서는 고객이 부르면 언제든지 달려갈 수 있지만, 시장이 세계로 넓어지면 그런 고객 감동 서비스는 꿈도 꿀 수 없는 일이 된다. 고객이 부르면 비행기 타고 날아가고 호텔에서 숙박을 해야 하기 때문에 비용과 시간이 너무 많이 들어간다.


해외에서 성공하려면 진짜로 제대로 개발을 해야 한다. 고객이 해달라는대로 개발하는 것이 아니고 제대로 전략을 세워서 제품 기획을 하고 분석/설계를 해서 개발을 해야 한다. 또, i18n Technology(국제화 기술)도 제대로 적용해야 하는데 99%의 회사는 나름대로 방식으로 또 엉터리를 만들어서 적용하기 때문에 해외에서 대패를 하게 된다.


이런 것을 모두 갖추어야 비로소 비슷한 출발선상에서 경쟁을 시작하는 것인데, 국내에서 하던 방법대로 해외서 성공하려고 하는 것은 100m 달리기에서 20~30m 뒤에서 출발하는 것과 다를 바가 없다.


근본적인 역량을 되돌아볼 때이다.


Image by bettlebrox

저작자 표시 비영리 변경 금지

전규현 프로젝트/국제화 국제화

Trackback Address: http://allofsoftware.net/trackback/269 관련글 쓰기
  1. Blog Icon
    지나가다

    제가 아는 성공사례(?) 너무 작은 성공인가요? ㅎㅎ

    http://download.cnet.com/EditPlus/3000-2352_4-10018241.html?tag=mncol;1

  2. 나름 훌륭한 제품이고 반응도 좋은 것 같습니다. 제품의 크기가 혼자 개발이 가능할 정도로 충분히 작아서 큰 문제 없이 개발할 수 있을 것 같습니다. 좋은 제품은 틀림 없으나 Global한 성공을 논하기에는 좀 작아보입니다. 그래도 이런 작은 성공이 많았으면 좋겠습니다.

넣는 것 보다 빼는 것이 더 어렵다.

초창기에 좋은 소프트웨어로 성공하는 업체들이 지속적으로 성장하지 못하고 고전을 면치 못하는 이유는 여러가지가 있다. 그중 하나가 제품이 점점 과도하게 비대해지는 것을 꼽을 수 있다. 성공하는 회사들의 초기 제품은 간략하고 핵..

[공지] 요구사항 분석 세미나를 실시합니다. - 마감되었습니다.

소프트웨어를 개발하는데 있어서 가장 어려운 것을 하나 꼽으라면 "요구사항분석"입니다. 소프트웨어를 개발하는데 있어서 가장 중요한 것을 하나 꼽으라도 "요구사항분석"을 선택합니다 하지만 우리나라에서 "요구사항분석" 역량을 제대..

투명한 개발 문화의 효과

흔히 투명한 개발이 효율적이고 좋다고 한다. 그 진정한 의미를 알아보자. 투명한 개발이란 개발에 관련된 거의 모든 정보와 지식이 공유되는 것을 말하지만 추가로 내가 강조하고 싶은 것이 따로 있다. 거의 모든 결정의 과정 및..

소프트웨어공학은 실전이다.

이 전글에 댓글을 달려다가 좀더 정리를 해야 할 것 같아서 본글로 올린다. 2013/02/27 - [프로젝트/품질관리] - 거의 다 만들었어요. 알파, 베타의 정의를 가지고 이렇게 강하게 주장하는 경우는 처음봐서 약간 당황스..

거의 다 만들었어요.

"거의 다 만들어서 2주후에 개발이 끝나요" 이 말을 이해할 수 있는가? 우리 주변에서 소프트웨어를 개발할 때 흔히 들을 수 있는 말이다. 개발자들도 이렇게 얘기하고 관리자나 경영자도 대충 알아듣는다. 하지만 이런 대화는 여..

고쳤으니 테스트 해주세요.

여기 두가지 테스트 방법이 있다. 우리 회사는 어떤 방법을 사용하고 있나 생각해보자. 첫째, 테스트 도중에 버그를 고쳐서 좀더 안정된 버전을 테스트팀에 계속 전달하는 방식이다. 테스트 한사이클을 도는데 2주일이 걸린다고 생각..

인해전술이 오히려 프로젝트를 망친다.

일정이 촉박하다고 프로젝트를 빨리 끝내고 싶은 마음에 프로젝트 초기부터 대거 인력을 투입하면 오히려 프로젝트를 망칠 가능성이 더 높아진다. 프로젝트 초기에 분석/설계 단계에는 그렇게 많은 인력이 필요하지 않다. 많은 인력을..

1:10:100 rule
1:10:100 rule 2013/02/05

소프트웨어를 개발하는데 있어서 꼭 알아야 할 규칙이 하나 있다. 바로 "1:10:100 rule"이다. 성숙한 개발문화를 가지고 있는 회사는 전 직원들이 진정으로 그 의미를 알고 있고 실행하고 있다. 하지만 우리나라의 크고..

티끌모아 태산 (개발 시간 절약하기)

성숙된 개발문화를 가지고 있는 회사는 개발 절차가 아주 효율적으로 진행된다. 하지만 그렇지 않은 회사들은 불필요하게 낭비하는 시간이 아주 많다. 10초에서 몇십분까지 자잘한 시간을 낭비해서 이것들을 합치면 어마어마한 시간이..

재택근무가 가능한가?

우리 주변에는 비효율적인 개발 환경을 가지고 있는 회사들이 매우 많다. 상상외로 많다. 스스로의 회사는 어떤가 생각해 보자. 나름대로 효율적인 개발문화를 가지려고 많은 노력을 해왔을 것이다. 그래서 과연 우리회사가 제대로 효..