레이블이 SI인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SI인 게시물을 표시합니다. 모든 게시물 표시

2014년 11월 30일 일요일

유저학 개론

http://subokim.wordpress.com/2013/04/21/what-is-user/

유저학 개론

비즈니스 세계에서 소비자, 고객은 매우 중요한 요소입니다.
성공과 직결된 요소이므로 그들에 대한 연구를 게을리 하지 않습니다.
반면, 아직 인터넷 시장에서는 ‘소비자’, ‘고객’, ‘사용자’ 등이 혼재되어서 사용되고 있습니다.
하지만, 명백히 다르므로 이것을 분류해서 이해하고자 합니다.
※ 참고
1. 국부론, 김수행 역, 비봉출판사
2. 경영학의 실체, 피터드러거
3. ‘고객, 클라이언트, 소비자’ 작지만 큰 차이, 조지틸먼

(아이패드를 보고 있는 아기는 사용자일까, 소비자일까, 고객일까?)


1. 소비자, 사용자, 고객
  • 사용자(User)
  • 물건의 기능을 이용하는 사람
    리모콘을 사용한다고 하지 소비한다고 하지는 않습니다.
    제조업에서 많이 사용한다.
    기능은 물건을 팔리게 만드는 가치와 직결된다.
    사용자는 기능을 어떻게 만들 것인가라는 고민에서 출발한다.
  • 소비자(Consumer)
  • 물건(또는 가치)를 이용해서 사라지게 하는 사람
    음식물은 먹어서 없애는 거죠. 소비한다고 합니다.
    생산, 공급, 소비 (=시장)로 나뉘는 경제학에서 주로 사용한다.
  • 고객(Customer)
  • 물건(가치)을 돈을 내고 사는 사람 또는 대상.
    유통이나 마케팅 등 Sales 파트에서 주로 이야기한다.
2. 서비스를 발전시키는 키워드, 사용자(User)
사용자는 기능을 사용함으로써 자신의 욕구를 해소합니다.
그래서 좋은 서비스는 기능을 자꾸 사용하도록 사람의 욕구를 건드립니다.
사람은 욕망의 화신이기 때문에, 욕구를 건드리는 서비스는 오래 갑니다.
욕망이란, 큰 것부터 자질구레한 것까지 다양한 것이 있습니다.
얼마나 어떻게 욕구를 건드리는가 하는 것이, 서비스의 존속가치를 결정하는 것 같습니다.
3. 비즈니스 모델의 키워드, 소비자(Consumer)
가치를 소비하는 사람이 있어야 생산하는 사람이 삽니다. 
돈이 돌고 도는 게 아니라 가치가 돌고도는 겁니다. Value Chain 이라고 부르지요.
가치의 흐름은 예측가능하지 않습니다. 짐작해볼 수는 있지요. 과거에는 가치의 흐름을 생산자가 예측한대로 움직이게 하는 것이 중요했습니다만, 요즘에는 가치를 누구나 사용할 수 있도록 개방하고 접근성을 높여 시장이 가치흐름을 자율적으로 만들 수 있게 합니다.
하지만 , 돈을 벌려면 역시 가치흐름은 통제 되어야 합니다.
그리고 가치흐름은 절대 혼자 커지지 않습니다. 다양한 소비패턴에 의해 증가합니다.
따라서 ‘적절한 제휴’는 비즈니스 모델 뿐 아니라 서비스의 성장에도 매우 중요합니다.
어떤 것이 소비되고 있는지를 잘 파악하는 것이 매우 중요합니다.
소비되는 가치를 발견할 수 없다면 엉뚱한 것을 생산하다가, 고비용으로 사업이 쓰러질 수 밖에 없습니다.
4. 사업을 발전시키는 키워드, 고객(Customer)
소비자는 사실 사람보다는 소비되는 재화, 가치에 집중된 단어입니다.
고객은 사람을 표현하는 말입니다. 고객은 B2C, B2B의 고객일 수도 있습니다.
고객은 돈을 지불하고 제품을 사는 사람을 말합니다.
지불과 산다는 것에 초점이 맞추어진 용어입니다.
사업이란 재화를 팔아서 이윤을 남겨서 법인과 구성원이 존속하는 것이 목적입니다.
사업은 반드시 고객이 있어야 합니다.
그래서, 고객은 바로 ‘사업의 목적’이라고도 합니다. – 피터드러거
아직 고객을 정의하지 못했다면, 일이 아직 사업단계에 진입하지 못했다는 뜻입니다.
사업을 준비할 때 고객을 정의하는 것은 매우 중요합니다.
하지만, 많은 사람들이 신규사업을 준비할 때 존재하지 않은 ‘새로운 고객’을 정의합니다.
레드오션에서 경쟁하는 것보다 블루오션을 찾는 건 누구에게나 당연합니다.
하지만, 새로운 고객을 통해 새로운 시장을 여는 것은 아이디어 하나로 만들어지지 않습니다.
현실적으로 수많은 물량공세가 동반됩니다.
2013년 애플의 설비투자가 100억달러(11조)에 달하고, R&D비용이 한해 34억달러(3.8조)에 달한다고 합니다.
새로운 사업을 준비하는 사람들을 만나보면, 고객과 소비자가 헷갈리고, 사용자와 고객을 헷갈려 하는 경우를 자주 보아왔습니다.
준비가 완벽해야 한다고 말하려는 것은 아닙니다.
다만, 위 세가지 개념을 헷갈리신다면 아직 사업할 준비가 되어있지 않은 것입니다.

개발자의 인생은 프로그램이다.

http://subokim.wordpress.com/2012/06/20/developer-story/

개발자의 인생은 프로그램이다.

programmer__s_life_by_spitfire47-d52hfny
프로그래머는 자신의 인생에 프로그래밍 습관이 베어 있습니다.
왜냐하면, 프로그래머는 하루시간의 대부분을 코딩을 하다보니 무의식 중에 그렇게 살고 있기 때문입니다.
몇가지를 볼까요?
  1. 통신을 하기 위해서는 프로토콜을 맞추어야 합니다.
  2. 프로토콜을 맞추지 않고, 메시지부터 던지면 통신은 되지 않습니다.
    당신은 혹시 회의석상에서 메시지부터 던지시진 않나요?
  3. 그리고, 스펙도 정의해야 합니다.
  4. 즉, 같은 용어는 같은 뜻이어야 합니다.
    같은 말을 다르게 듣고 있지 않으신가요?
    논쟁을 하거나 회의를 할 때 만일 같은 이야기가 맴돈다면,잠시 중단을 하고 스펙을 정의하셔야 합니다.
  5. 일을 시작할 때는 “{” 끝날 때는 “}” 라고 하십시요.
  6. 일의 시작선언과 종료선언을 하지 않는다면, 당신은 프로그래머가 아닙니다.
    “언제 시작해서 언제쯤 끝날 것 같아요.”
    “끝났습니다.” 이렇게 이야기를 해야 합니다.
    늦어지면, 당연히 늦어진다고 이야기해야죠. 익숙해지셔야 합니다.
  7. 그리고, 전역변수와 글로벌변수를 잘 선언해서 쓰십시요.
  8. 대화하면서, “아까 그거? 아니 그거” 를 자주 말씀하신다면, 변수선언을 잘못했을 확률이 큽니다.
    잠시 대화를 멈추시고, “그건 A이고, 그건 B야.” 라고 다시 선언을 하세요.
  9. 일이 많고, 혼란스러우신가요?
  10. 그러면, thread 를 더 만들어야 합니다.
    thread 는 멀티태스킹을 의미합니다.
    thread 없이 여러 개의 일을 혼돈해서 처리하고 있다면, 분명 잘못된 결과가 나올 가능성이 큽니다.
    일이 복잡해진다면, thread를 분리하십시요.
  11. 혼자서 할 수 없을만큼 일이 많다구요?
  12. 프로세스를 하나 더 만들어야 합니다.
    자신과 비슷한 일을 하는 사람을 데려오세요.
    그렇지 않으면, 현재 돌고 있는 프로세스(당신)가 dead-lock 이 걸려서 좀비상태가 되어버립니다.
    만일, 혼자 밖에 없다면 혼자서 할 수 있는 만큼만 하세요.
    dead-lock이 되면, throughput 이 제로이지만 혼자서라도 처리하면 적어도 제로는 아니니까요.
  13. 그리고, 가능하면 super deamon이 process들을 control 하는 방식으로 일하지 마세요.
  14. 대용량 처리가 힘들어집니다. component 를 잘 정리하고 스펙을 잘 정리해서 event driven 방식으로 처리하세요.
    (잘 안될겁니다. 하지만, 성공하면 업그레이드 되는 겁니다.)
    당신이 사람인 이상, super process 의 한계는 있습니다.
    일욕심을 혼자 내지 마세요.
    일이 늘었다 줄었다 하는 동안 프로젝트는 실패를 향해 치닫게 될겁니다.
  15. 일이 잘 진행되고 있는지 모르겠다구요? Alive check를 날리세요.
  16. 물론, 규격은 사전에 합의해야겠지요.
    Alive check를 하지 않으면, 업무 펑크(장애)가 나도 알 수가 없습니다.
    이건 매우 중요한 행위입니다.
  17. 자, 중요한 건 로그입니다.
  18. 화면이 없는 서버프로그램의 경우, 로그를 통해서만 정상작동 여부를 알 수 있습니다.
    당신은 업무로그는 어디에 찍고 계십니까?
    만일 팀에 당신이 하고 있는 일을 찍은 로그시스템이 없다면, 당장 JIRA 를 설치하십시요.
    그렇지 않으면 wiki 라도 설치해서, 하고 있는 일의 이력을 남기십시요.
    그렇지 않으면, 일이 중간에서 멈추었을 때 추적하고, 분석하고, 감지하는 모든 행위를 할 수 없게 될 것입니다.
    로그를 남기지 않는 서버 프로세스는 빠르지만, 결국 유지보수할 수 없는 프로세스가 되고 맙니다.
    항상 하는 일이 똑같아서 소스변경이 없는 경우에는 로그를 남기지 않기도 합니다.
    하지만, 매번 하는 일이 갱신이 되는데, 업무 로그를 남기지 않는다면 이미 당신은 프로그래머가 아닙니다.
    빨리 다른 직업으로 전환하시길 권유드립니다.
  19. 주석을 잘 달지 않는 사람들은 두 가지 경우입니다.
  20. 아주 쉽게 말을 하거나, 대화를 잘 하지 않는 성격인 경우입니다.
    아주 쉽게 말을 하는 사람은 코드가 실제 언어처럼 쉽게 읽힙니다.
    따라서, 주석을 달 필요가 없습니다.
    하지만, 대인관계에 서투른 사람은 다른 사람을 배려하지 않기 때문에 주석을 달지 않습니다.
    전자는 고수이고, 후자는 하수이죠.
  21. 프로그래머가 procedual language 에서 object oriented language 를 배우게 되면, 사고체계도 그렇게 변하게 됩니다.
  22. 은행 전산실의 사람들은 일을 순차적으로 처리하는 걸 좋아합니다.
    또, cobol의 숙련도만큼 순차적 일처리가 매우 세련됩니다.
    일을 잘하는 것과 사고체계가 다른 것은 분리되어 이해되어야 합니다.
    자신과 카테고리가 다른 개발자들을 무시해서는 안됩니다.
    우리와 맞는지 안맞는지를 판단해야 합니다.
    맞지 않다면, 빨리 제자리를 찾아주는게 좋습니다.
  23. 웹 프로그래밍과 서버 프로그래밍과 클라이언트 프로그래머는 사고체계가 틀립니다.
  24. 프로그래머들도 그 변화를 겪을 때 매우 많이 성장하게 됩니다.
    하지만, 꼭 클라이언트에서, 웹, 서버, DB가지 섭렵해보시길 강권해드립니다.
    시장에서 강자가 되려 하신다면, 적어도 1년씩은 해보시길 추천드립니다.
그리고, 당신이 프로그래머라면 지켜야 하는 당연한 것들이 있습니다.
만일 당신이 동료들과의 커뮤니케이션조차 어려움을 겪고 있다면 분명 당신은 이 업종이 적성에 맞지 않는 겁니다.

IT 프로젝트 종류와 특징

http://subokim.wordpress.com/2013/01/23/it-project-feature/

IT 프로젝트 종류와 특징

“IT프로젝트 is not 빔프로젝트”
Joke 입니다. (_ _)
beams
IT에 입문하는 사회 초년생의 눈에 소프트웨어 개발이라는 것이 비슷해 보입니다.
하지만, 각 산업분야별로 그 프로젝트 특성들이 모두 다릅니다.
처음에 잘못된 길로 들어왔다가 적성에 맞지 않다고 소프트웨어 개발을 포기하지 않았으면 하는 마음에, 특징들을 모아서 정리해보았습니다.
궁금해하시는 분들께 참고가 되었으면 좋겠습니다.
혹시 제가 잘못 알고 있거나 첨언을 해주실 내용이 있으면 댓글을 부탁드립니다. (좀 오래된 경험도 있어서. 긁적)
그리고, 한 분야을 하다가 다른 분야로 넘어가는 것은 굉장한 도전이 됩니다.
IT를 천직으로 생각하시는 분이 있다면, 충분한 시간과 계획을 가지고 다양한 도전을 해보시길 권하고 싶습니다.(물론 한 분야를 깊이 파는 것도 좋습니다.)

1. 은행 프로젝트
검증된 기술만 쓴다. 기술보다는 업무처리가 중요하다. 검증되지 않은 새로운 기술을 이야기 하면 바보취급 당한다. ‘한 번 해봅시다.’ 식의 접근은 거의 없다.
기본이 안정성이다. 대부분 24시간 365시간 무중단 운용성은 기본이다.
레거시를 걷어낼 수 없다. 레거시를 두고 가능한 좋은 성능과 결과를 낼 수 있어야 한다.
코드가 깔끔해야 한다. 언제나 유지보수할 수 있어야 한다. 만료된 서비스는 적시에 종료되어야 한다.
새로운 기술은 쓰지 않지만, 여러 기술분야의 체계성을 배우기 좋은 곳이다.
2. 보험사 프로젝트
업무요건들이 대부분 10년이상 장기 상품들이다. 삼성생명 ‘종신보험’과 신한생명 ‘종신보험’은 같으나 다르다.
재개발 수준의 고도화는 거의 없다. 대부분 덧붙이기 식으로 개발한다. 종료되고 폐기되는 상품은 거의 없다. 상품특성이 비슷해서 소스코드 재활용률이 높다. 하지만, 똑같지 않으므로 모듈레벨의 재활용은 거의 없다.
업무 전문성이 높은 개발자를 우대한다. 기존 소스코드가 자산이 된다.
트렌디한 기술을 사용하는 경우는 많지 않다.
금융업무에 관심이 많은 개발자라면 해볼만 한다.
3. 공공부문 프로젝트
전국 데이터는 기본이다. 규정(보안 등)을 준수하는 개발이 중요하다.
재기발랄하고 창의적인 분야는 거의 없다. 트렌디하지 않다. 공공의 편의성이 우선이다.
법제도가 바뀌거나, 규제가 늘거나 하는 등에 의해 유지보수가 발생한다.
큰 정부정책이 내려오면 대부분 큰 시스템의 개발이나 고도화가 동반된다.
큰 고도화의 경우 대부분 재개발이다. 깔끔한 개발보다는 일정준수가 중요하다. (대부분 제도 시행과 맞물려 일정이 잡힌다.)
기술보다는 업무목표 완성이 중요하다. 필요에 따라서 신기술도 자주 쓴다.
SI 프로젝트 중심이다. 기술습득이 빠르고, 여러가지 기술을 배우기에 좋다. 폭넓게 기술전반을 이해하기 좋다.
4. 이통사 내 부가서비스 프로젝트
24*365서비스가 기반이다. 레거시가 많다. 빌링과 인증 연동이 까다롭다. 대부분 연동을 많이 해야 한다. 클라이언트보다 대부분 서버 중심의 기술환경이다.
shut down되는 서비스는 거의 없다. 돈이 한 푼이라도 벌리면 살려둔다.
플랫폼형 서비스가 많은데 외부 CP등 제어할 수 없는 요인들이 많다. 당연히 예외처리가 많다. 상용반영하다가 장애나는 경우가 허다하다.
레거시가 오랫동안 살아있는 반면, 매뉴얼이 거의 없고 개발업체도 다양해서 유지보수하기 쉽지 않다. 작은 서비스를 계속 개발해서 런칭한다.
이통사 서비스는 오픈하면, 대부분 어느정도 트래픽을 확보한다.
서버 개발 기술(API, 연동, 통신 등)을 마스터하려면 이통사 프로젝트를 해보길 추천한다.
대용량 트랜잭션 처리의 경우도 많고, 현금이 실시간으로 흘러다니는 경우가 대부분이어서 긴장감이 매우 높은 편이다.
5. 이통사 레거시 프로젝트
회원관리, 빌링과 인증이다. 레거시를 걷어낼 수 없다.
오래된 코드의 경우 제대로된 유지보수 매뉴얼도 없는 경우가 많다. 덧붙이기식으로 개발한다. 폐기하기 힘들다. 정밀한 운영프로세스가 필요하다.
원복시나리오 없이 반영하지 않는다.
오래된 기술이 남아 있는 곳도 있다. 복잡도가 매우 높다.
큰 시스템을 경험하고 싶다면 한 번쯤 도전 해볼만 하다.
6. 웹포털 프로젝트
웹페이지 중심의 빠른 개발이 중요하다. 서버기술보다 프론트엔드 기술이 중요하다.
서비스가 끝나면 빠른 폐기도 중요하다. 웹기반 연동방식을 많이 쓴다. 트렌디하다.
정통적이고 무거운 개발환경보다 2 Tier 중심의 가벼운 개발환경을 선호한다.
특정기간에 치고 빠지는 개발을 많이 한다.
기술난이도가 높지 않다. 무료의 대용량 트래픽이 많기 때문에 라이센스 비용 등에 민감하다. 소스의 형상관리 등은 중요하지 않다. 빠른 속도의 오려붙이기식 개발을 한다.
웹서비스의 성공과 실패를 경험해보고 싶어하는 개발자들이 많이 지원한다.
현실적으로 포털이 네이버와 다음 밖에 남지 않아서, 입사하기 어렵기도 하다.
7. 스마트폰 앱기반 프로젝트
서버와 클라이언트로 나누어 개발한다. 서비스 피쳐를 기능으로 만들고, 서버와 클라이언트로 나누어 처리한다.
아직 인프라가 부족해서 이해해야할 기술의 폭이 넓고 다양하다.
기술 난이도가 높고 복잡도가 높은 반면, 빠른 개발속도가 필요해서 초급자가 도전하기 쉽지 않다. 복잡한 온라인형 서비스보다 단순한 단독형 앱서비스를 선호한다. 소규모 팀의 팀웍이 중요하다.
기술장벽을 극복하기 위해 REST API 등 기술트렌드 변화가 심한 분야이다.
새로운 기술을 배우고 싶어하는 개발자들이 도전해볼만 하다.
하지만, 베테랑이 충분한 팀을 선택하시길.
8. 폰게임 프로젝트
대작게임은 1년 정도의 개발이지만, 대부분 3개월 개발하고 출시하면 1개월 정도 팔린다.
빡세다. 빨리 개발해야 하므로 업무 체계성이 상대적으로 부족하다.
개발자 개인의 능력에 많이 좌우된다. 실패율도 높다. 출시 후 뜨더라도 6개월 가기 힘들다.
다작으로 승부하는 분야다. 체력 좋은 젊은 개발자 중심이다.
게임에 관심이 많은 개발자들이 도전한다.
온라인 게임보다는 단독형 게임이 대부분이라 클라이언트 개발이 대부분이다. 서버기술을 배울 기회가 많지 않다.
9. 대형 온라인 게임 프로젝트
기획도 좋아야 하고 개발도 체계적으로 해야 한다. 분업화하지 않으면 성공적으로 런칭하기도 힘들다. 돈이 많이 든다.
메인 게임에 Oracle, MySQL같은 RDB는 안쓴다. 빠른 ISAM DB(File DB)를 쓴다. (물론 회원정보 저장 등을 위해 쓰기도 한다.) 빠른 통신과 동접처리, 게임엔진 등이 중요하다.
폐인 기질이나 스스로 천재라고 생각하는 개발자라면 도전해볼만 한다.
10. 솔루션 프로젝트
스펙(규격)이 중요하다. 제품전략이 중요하고, 기능하나가 수익과 밀접하므로 기능 하나 쉽게 더하기 힘들다. 아름다운 설계가 중요하다.
완성도가 매우 중요하다. 최적화와 다양한 시험케이스가 매우 중요하다.
한번 출시되면, AS 하기 힘든 경우가 많기 때문이다.
완성도 높은 개발을 어떻게 하는지 알고 싶은 개발자라면 도전해볼만 한다.
11. ERP 프로젝트
회사마다 조금씩 다를 뿐 업무가 정형화되어 있다. ERP 패키지를 주로 사용한다.
기술적 도전이나 성취감은 낮다. 그러나, 회사라는 기업이 어떻게 돌아가는지 아주 잘 이해하게 된다.(현실적으로)
한 번 참여해보게 되면, 자기 회사를 할 때 매우 큰 도움이 된다. 또는, 전산실을 노린다면 도전해볼만 하다.
12. 학생들 프로젝트
학점이 중요하다. 기능이 구현되면 신기하다.
내 손으로 만든 것이 돌아간다는 게 놀라운 경험이다.
IT에 입문하고 싶어하는 사람이라면 반드시 한번은 거쳐야 한다.
동아리나, 커뮤니티에 들어서 많은 프로젝트를 해보길 바란다.
13. 기타
물류 프로젝트. 고생이라고 들었다. 소프트웨어는 그냥 수단이다. 개발서버가 별도로 없는 경우가 많다고 들었다.
병원 프로젝트. 모르겠다.

Agile하게 일하기

http://subokim.wordpress.com/2011/11/07/agile-work/

Agile하게 일하기

고민
Agile 방법론이 대세이고, 화두입니다. (Agile = 날렵한, 재빠른, 기민한)
“어떻게 일해야 하고, 어떻게 해야 성공적일 수 있을까?”를 고민해보았습니다.
  1. 왜 대세인가?
  2. 소프트웨어 제품은 만드는 것도 중요하지만, 계속해서 온라인으로 업그레이드 시킬 수 있다는 장점이 있습니다.
    이것은 제품 출시 후에는 업그레이드 할 수 없는 하드웨어보다는 매우 매력적인 특성입니다.
    온라인 서비스의 경우는 특히 “신규 개발”보다 “운영 및 지속적 업그레이드”가 중요한 비즈니스입니다.
    하지만, 안타깝게도 비즈니스 환경이 개발자가 선호할만한 환경은 아닙니다.
    1. 체계적인 요구사항이 없다.
    2. 사업 환경에 따라서 구현하거나 보완해야 할 사항이 자주 바뀐다.
    3. 어떤 것이 목표인지 목적인지 뚜렷하지 않다. 신기술이나 실험적인 시도도 필요하다.
    4. 이런 짓을 평생 반복해야 한다.
    이런 상황에 대해 분석, 설계, 개발을 엄격하게 규정짓는 Waterfall 방법론은 넌센스라고 할 수 있습니다.
    Waterfall 은 “요구사항을 Fix시키지” 않으면, 이후 프로세스를 진행할 수 없기 때문입니다.
    그리고, “요구사항이 변경”되면 그만큼 Roll back해야 합니다.
    과거 하드웨어 중심의 프로젝트에서는 제품출시 후 변경하기 어려웠으므로, 개발 착수 전에 모든 걸 결정짓는 Waterfall 방법론이 적합했습니다.
    하지만, 소프트웨어 비즈니스에서는 위와 같이 규정짓기 힘든 경우가 태반입니다.
    즉, Agile 이 주목받고 있는 이유는, 소프트웨어 시장이 포화가 되어서 신규구축이 많이 없어졌고, 시장에 유연하게 대응하면서 사업을 성장시키는 노하우가 중요해졌기 때문입니다.
  3. 누가 필요로 하는가?
  4. Agile 한 환경을 누가 필요로 할까요?
    Waterfall 은 버려야 할까요? 그렇지 않습니다. 방법론은 “프로젝트를 성공시키는 수단”일 뿐.
    방법론을 잘 지켰다고 반드시 프로젝트가 성공하지는 않기 때문입니다.
    Agile하다는 것은 “눈에 보이는 (작은)성과물을 가지고 Speedy 하게 Communication 하는 것”을 말합니다.
    • Agile 은, “프로세스가 없어서 일을 못한다고 이야기하는 조직”이 해야 합니다.
    • 프로세스를 이야기하는 조직은 대부분 큰 조직들입니다. 프로세스는 감정적인 분쟁을 억제하고, 전체적인 책임으로부터 자유롭게 해줍니다.
      프로세스를 중시하는 조직에서는, Agile을 “또 하나의 프로세스”로 이해하는 경우가 있습니다.
      그러나, Agile 은 일하는 방법이지, 프로세스가 아닙니다.
      작은 조직이이라면, 프로세스를 논의하기 전에 Agile 한 방법을 도입해보길 강력히 추천드립니다.
      큰 조직이라면 상황이 다릅니다.
    • Agile 은 “매일 상황이 변하는 서비스 운영 조직”에서 해야 합니다.
    • 작게 일을 나누고, 작게 개선합니다. 그리고, 많이 커뮤니케이션합니다.
      “이야기하면서 방향을 정하고, 이야기하면서 피드백합니다.”
      상황이 매일 변하므로 약속과 원칙에 얽매이면, “변화의 시기”를 놓쳐버리기도 합니다.
      여기서 중요한 것은, 노하우를 기록하고 남겨야 한다는 것입니다.
      Agile 은 작고 가볍기 때문에 체계가 부족합니다.
      즉, 실패를 기록해두지 않으면 반복할 가능성이 큽니다.
      노하우가 유사한 환경의 멤버들에게 공유될 수 있어야 합니다.
      기록을 공유하는 가장 쉬운 방법은 사내 게시판을 활용하는 것입니다. 잊지 마십시요. Agile은 툴이 아닙니다.
      사내 게시판이 없는 경우는 메일을 사용해도 좋습니다.
  5. 어떻게 일해야 하는가?
  6. Agile 방법론은 “프로세스”가 아니라“문화”입니다.
    일하는 방식에 대한 것입니다. 형식없는 형식입니다. (무슨 도 닦는 이야기 같군요.)
    • 첫째, 목표를 정하라.
    • 진행하다가 목표가 달라지면, 연관된 것을 재점검합니다.
      목표를 정하는 것은 협업의 기본입니다.
      무엇을 바라봐야 할지 정하는 것은 당연합니다.
      목표가 공유되지 않았는데, 이야기할 거리가 있을까요?
      아무도 그 목표에 대해 고민하지도 않을거고 서로의 역할에 대해서 말하지도 않을 겁니다.
      주욱, 텍스트로 적으십시요. 그리고, 그것으로 논의하십시요.
    • 둘째, 기한을 정하라.
    • 언제쯤이면 무엇을 눈에 볼 수 있는지 기한을 정하십시요.
      그래서, 무엇을 평가하고 어떻게 피드백할 것인지도 사전에 공유하십시요.
      “이 기능이 되면, 이런게 만족 되는지 보자.”라고 이야기하십시요.
      iteration의 기본은 반복하는 것입니다. 즉, iteration 이라는 갈림길에서 어떤 의사결정을 할 것인가를 미리 공유해두는 건 매우 중요합니다.
      팀원들은 그 의사결정을 할 수 있도록 충분히 준비할 것입니다.
    • 셋째, 각 일의 책임자를 정하라.
    • 애매한 것이 없도록 나누어서 맡아야 합니다.
      애매한 것의 업무부담은 PM이 조절해야 합니다.
      PM은 쪼개어진 일에 따라 전문인력을 쉽게 넣고 빼고 할 수 있어야 합니다.
      모듈의 전문성을 높이기 위해서는 일단위의 시작과 끝을 적절히 자르는게 중요합니다.
      그렇지 않으면, 한 번 투입된 인력이 오랫동안 투입되고 단위업무의 품질은 떨어지고, 전체일정의 혼란은 가중될 것입니다.
      PM은 Job Load 에 대한 분배와 함께 전체 스토리가 초점을 잃지 않도록 관리해야 합니다.
    • 넷째, 빠진 것이나 이슈는 bucket list로 관리하라.
    • iteration 을 도는 동안 test 를 하면서, 문제나 이슈가 제거되거나 완화되어야 합니다.
      iteration 을 하면서 만들어진 새로운 기능이 “다른 문제를 야기”하지 않도록, Business Unit을 모듈화시키고, “Sandbox 형태”로 설계해야 합니다.
      만일, exception을 발생시킨다면 다른 iteration에서 쉽게 참조할 수 있도록 document 가 있어야 합니다.
      project wiki page 를 하나 만들고, 거기서 관리하십시요. 아니면, issue tracker도 좋습니다.
      이슈 관리에 “메일”은 가능하면 쓰지마십시요. “메일”은 공유의 개념보다 책임 떠넘기기로 오해될 수 있습니다.
      wiki 나 게시판 같이 함께 볼 수 있는 곳에 게재하십시요.
    • 다섯째, 위험의 크기를 사전에 공유하라.
    • 기일을 정했는데 변할 수 있습니다.
      Feature를 정했는데 변경될 수 있습니다. 기한 내에 맡은 일을 못할 수도 있습니다.
      어떤 경우든 팀원들이 빨리 위험신호를 알리고 미리 대응할 수 있게 해야 합니다.
      위험을 미리 예상하여 작게 쪼개어서 점검할 수 있게 계획하십시요.
      실패에 대한 부담이 적을수록, 창조적으로 일하게 된다.
      기일을 못맞추면 어떤 일이 생기는지 구성원들이 사전에 공유하십시요. 위험에 대한 인식이 다르면, 협업이 힘들어집니다.
  7. Agile 방법론의 종류
  8. 이 항목은 wiki 페이지를 참조하였습니다.
    • eXtreme Programming 해야 할까?
    • 무조건 우선 개발을 시작하는 방식입니다.
      처음에 고객과 2주 정도 이야기하면서 컨셉을 잡고는, 우선 개발합니다.
      구성원들이 시스템에 대한 이해도가 높아야 하고, 전문가들이어야 합니다.
      따라서, 외주활용이 힘듭니다.
      중요한 것은 자동화된 테스트 시스템이 있어야 합니다.
      즉, 개발환경(테스트가 가능한)이 없으면 결과를 확인할 수 없어서 다음 Cycle에 진입할 수가 없습니다.
      개발환경 하에서 짧게 짧게 Cycle을 돌면서 개발을 하는 것이므로, “기능개선 중심의 과업”에 적합합니다.
      하지만, 개선효과를 금방금방 확인할 수 있으므로 신기술을 플랫폼에 도입하거나, 중소규모의 기능을 플랫폼에 추가하고자 할 때 적합합니다.
      개발환경없이 신규멤버로 맨땅에서 시작하는 경우라면, XP 개발은 하지마십시요.
      구성원들 간 커뮤니케이션에 혼란이 생길 것입니다.
      XP 를 하기 위해서는 개발환경을 잘 갖추는게 중요합니다. 아주 빡센 개발방법입니다.
    • Scrum 원래 Scrum은 한 달 단위로 한다고 합니다.
    • 사전에 개선할 목록을 뽑고, Iteration 마다 동작가능한 결과물을 내어 놓을 수 있도록 일을 나누어 일하는 방식입니다.
      매일 정해진 시간에 모여서 짧게 개발을 하는 방식인데, 오픈 소스 커뮤니티가 많이 사용한다고 합니다.
      조금 느슨하므로, 구성원들의 참여의욕이 높아야 합니다. 너무 Free 해보여서 기업형 개발에는 적합하지 않을 것 같네요.
    • Feature-Driven Development
    • 도메인 객체 모델이 중요합니다. 전체 업무를 객체단위로 부품화하고, 이 목록대로 기능을 나누어서 개발합니다.
      2주 단위로 Cycle 을 돌면서, 반복 개발합니다.
      분석 설계를 끝나고, 개발단계 이후로 iteration을 할 수 있네요.
      최근에 “아키텍쳐 개발방법”에 많이 사용되기도 합니다.
    • Adaptive Software Development
    • 이게 Agile 을 대표하는 방법론이 아닐까 싶습니다. 이 방법은 Rapid Application Development 의 확장판입니다.
      이것은 상시 적용이 가능하다는 전제에서 시작합니다.
      ASD는 추측, 협동, 학습을 반복하는 것인데요.
      추측이란 의사결정권자들이 어떤 관점에서는 이슈를 잘못 판단할 수 있다는 가정에서 시작하는 것입니다.
      학습이란, 디자인-개발-테스트를 반복함으로써 의사결정권자들이 알게하는 것을 말합니다.
      ASD 는 의사결정권자들이 쉽게 결정할 수 있도록, 포인트를 나누어서 iteration을 도는 것을 말합니다.
      Waterfall 방법론과 섞어서 진행할 수도 있습니다.
      중요한 건, 중간 성과를 자주자주 보고하는 것입니다.
  9. Agile 하게 일하지 않아야 하는 경우는?
  10. SI 용역 프로젝트의 경우 Agile 하기 힘듭니다.
    외부집단이 내부 내용까지 깊이있게 이해하기 힘들 뿐더러, 책임감이나 위기의식이 공유되기 힘들기 때문입니다.
    Agile을 적용하기 힘들다면 “전통적인 Waterfall 방법론에 Agile 한 문화를 조금 섞어서” 해보길 추천드립니다.
    중간 산출물에 대해 Feed-back 만 제대로 할 수 있어도 Risk는 꽤 줄어듭니다.
    그러기 위해서는, PM 이나 아키텍쳐가 상세레벨까지 이해할 수 있어야 합니다.
  11. 어떻게 끝낼 것인가?
  12. Agile 은 끝이 있을까요? 취지에 따르면 끝이 없다고 봐야 합니다.
    하지만, 모든 일에 끝이 없다면 멤버들은 금방 지치고 말 것입니다.
    일정을 너무 내세우면 Agile 하게 일하기 힘듭니다. 실패하면 다시 해야 하거든요.
    • 단위 과업의 목표품질을 가지고 이야기하십시요.
    • 그 품질목표를 만족해야 단위 프로젝트가 끝나게 하십시요.
    • 그 목표에 다다르기 위해 일정과 리소스를 정하고,
    • 리소스을 얼마나 활용할 수 있는지 미리 예측하십시요.
    만일 그렇게 한다면, Agile 은 “장기 인프라 개발”에도 꽤 유용한 방법론입니다.
※ 엮인글 : 애자일방법론
※ 참조 :
  • 위키피디아
  • 블로그 : Agile과 프로젝트 현실
  • Adaptive Software Development
  • Domain Knowledge-기술지식


    http://subokim.wordpress.com/2013/03/31/technical-domain-knowledge/

    Domain Knowledge-기술지식

    EXTERNAL-PRODUCT-DESIGN-1
    소프트웨어 뿐 아니라 대부분의 분야에서, Developer와 End User와의 커뮤니케이션은 쉽지 않습니다.
    왜 그럴까요? End User의 도메인 지식(Domain Knowledge)이 부족하기 때문인데요.
    도메인 지식에 대해 간단히 고민을 해보았습니다.
    1) Domain Knowledge란?
    Wikipedia에 보면, “도메인 지식이란, 인간활동 영역이나 자율적인 컴퓨터활동이나, 다른 전문분야에서 사용되어지는 유효한 지식을 말한다.” (Domain knowledge is valid knowledge used to refer to an area of human endeavour, an autonomous computer activity, or other specialized discipline.)고 기술되어 있습니다.
    소프트웨어 기술에서 Domain Knowlege라 한다면, 목표 시스템이 운영되는 환경에 대한 지식을 이야기합니다.
    하지만, 창업이나 사업을 준비하다보면 Domain Knowlege를 조금 더 넓은 의미에서 이해할 필요가 있습니다.

    2) 종류
    당신이 의류브랜드를 가진 사장님이라면, 종이 위에 그려진 디자인, 색상만 가지고 사업전략을 짤 순 없습니다. 컨셉수립 정도는 할 수 있겠지요.
    의류업에 종사하는 사장님들을 만나보면 옷감의 종류, 나염의 종류, 세탁방법, 무게와 재질 등에 해박한 지식이 있습니다.
    이런 걸 모르고 의류사업을 시작했다가 망한 경우를 주변에서 많이 보셨을 것입니다.
    자동차 회사에서 디자이너나 마케터도 마찬가지입니다. 엔진, 시트(재질, 질감, 내구성), 전기제품 등에 대한 지식이나 이해도가 일반인들보다 훨씬 깊습니다.
    반도체, 건설, 백화점, 유통업도 마찬가지입니다.
    어떤 업종이든 제품 기획이나 사업전략을 수립할 때, 반드시 그 분야의 ‘기술지식’, ‘업무지식’, ‘재무지식’ 세 가지를 함께 생각합니다.
    업종마다 각각 달라서, 새로운 분야에 들어갈 때마다 새로 익혀야 하는 것들입니다.
    이 세가지를 Domain Knowledge 라고 할 수 있을 것 같습니다.
    3) 기술지식 (Technical Knowlege)
    시장을 돌아다니다보면, 세부 사업전략을 수립할 때 아직도 기술팀 없이 진행되는 경우가 종종 있습니다. 또는, implementation의 역할로만 한정되어 중요한 부분에서 의견 개진이 안되는 경우도 있습니다.
    IT회사에서 소프트웨어와 개발을 모르고, 제품기획이나 전략수립이 가능할까요?
    이론적으로야 가능하겠지만, 경험적으로 불가능합니다.
    현장을 이해하지 못하고 만든 전략은 반드시 ‘구현단계’와 ‘성장단계’에 벽에 부딪혀 고꾸라지고 맙니다.
    소프트웨어는 하드웨와 형상이 다르지만, 사용자에게 “효용가치를 주는 제품”이라는 점에서는 동일합니다.
    Domain Knowledge에서 ‘기술지식’은 팔기 위한 제품자체를 의미하므로 ‘업무지식’이나 ’재무지식’에 못지 않게 중요합니다.
    하물며 소프트웨어 분야(서비스든 솔루션이든)도 예외가 될까요?
    소프트웨어의 특성, 가치, 제작방법, 제작 후의 유지보수, 그에 필요한 기술적 지식 등을 이해하지 못하고, 어떻게 좋은 전략과 디자인이 나올까요?
    사업논리에 묻혀 기술논리를 등한시 한다면 ‘제품’없이 제조업을 하겠다는 것과 같습니다.
    ‘Technical Domain Knowledge’ 없이 IT 사업에 도전하는 것은, 경쟁자들에게 스스로 호구임을 자처하는 꼴입니다.
    4) 개발팀의 에너지가 키워드다.
    개발팀은 UI,UX 등 제품의 ‘제작에 참여하는 모든 팀’을 말합니다.
    자기 제품을 가진 회사라면, ‘재무지식’과 ‘업무지식’ 만으로 차별된 제품가치를 만들어 내기 힘듭니다.
    – 개발팀을 단순히 구현을 위한 역할로 한정짓지 말고,
    – ‘개발팀의 에너지를 어떻게 활용하는가?’를 기본으로 깔고 가는 것이 매우 중요한 키워드임을 의사결정권자들이 충분히 공감했으면 좋겠습니다.
    그러한 시스템이 되지 않은 상태에서, 개발팀의 열정을 독려하는 것은 물에 젖은 종이에 불을 붙이고자 하는 것과 같습니다. 그런 시스템을 만드는 것은 의사결정권자들의 역할입니다.
    5) 사업지식(Business Domain Knowlege) 
    사업현장에서 개발팀의 에너지가 유용해지려면, 비즈니스에 대한 지식공유나 이해가 선행되어야 합니다.
    중동지방의 기후적 특성이나 고객의 기호를 이해하지 못하고, 수출가능한 자동차를 만들 수는 없습니다. – 중동지방은 밤낮의 온도차가 크고 모래바람이 심해, 도장처리나 철판의 팽창,수축에 대한 심화된 기술지식이 필요했다고 하더군요.
    제품을 제작하는 사람이 사업에 대한 이해도를 높이는 건 ‘매우 당연하면서 자연스러운 일’입니다.
    큰 회사건 작은 회사건 개발자들의 사업에 대한 이해가 없다면, 핵심과는 동떨어진 기술과 아이디어들로 많은 시간을 낭비하게 될 것입니다.
    6) 기타
    Domain Knowledge에서 업무지식이나 재무지식도 중요합니다.
    다음에는 IT 산업에서의 ‘업무지식’과 ‘재무지식’ 등에 대한 관련 포스팅을 해보겠습니다.

    IT회사의 유형


    http://subokim.wordpress.com/2013/02/13/the-type-of-it-comapny/

    IT회사의 유형

    technical sales training(Technical Sales, 실제 현장에서 이런 멋있는 화면은 거의 연출되지 않는다.)

    취업을 준비하는 예비 개발자들이 어떤 회사에 취직해야 할 지 선배들을 찾아 다니는 때인데요.
    베테랑들이라면 대부분 알고 있습니다만,모르는 사람들께 정보가 될까 하여 아는 범위 내에서 몇 개 회사 유형별로 “무엇을 만들고”, “무엇을 파는지” 정리해보았습니다.
    회사의 형태가 다양하기 때문에 아래처럼 똑 부러지게 분류되지는 않습니다.
    많지는 않지만, 그냥 참고가 되었으면 합니다.

    1) SI (IT 아웃소싱) 회사
    “영업은 계약을 수주하고, 개발은 일을 하고 돈을 받아냅니다.”
    개발팀은 프로그래머로 구성됩니다.
    기업이 과제에 대한 입찰 공고를 내면, 업체들이 자신들의 기술을 이용해 과제수행 계획을 제안합니다. 이 제안서를 쓰는 것은 개발팀의 역할입니다.
    영업은 기존 고객 관리와 새로운 시장 탐색을 합니다.
    “돈은 프로젝트 수행 대가를 받아서 법니다.”
    해외 시장의 경우는, 인건비가 높아서 인기있는 직업인데, 우리나라의 경우 기준 인건비가 낮아서 기피현상이 심합니다.
    우리나라도 수요가 공급보다 높아지면 상황이 많이 달라질거라고 생각해봅니다.
    (2000 년대는 개발자 유입이 수요에 비해 많았습니다.)
    삼성SDS, HP, IBM 등 큰 회사부터 작은 회사까지 다양합니다.
    하지만, 큰 회사나 작은 회사나 일하는 건 별반 차이가 없습니다.
    큰 회사일수록 개발업무보다는 관리업무를 더 빨리 배울 수 있습니다.
    2) 패키지 솔루션(오라클, ERP, CRM 등) 회사
    “개발은 제품Product을 만들고, 영업은 제품Product을 팝니다.”
    개발팀은 프로그래머와 제품 기획자, 엄격한 검수자로 구성됩니다.
    영업은 고객영업(채널)과 기술영업으로 나뉩니다. 기술영업은 컨설턴트로 불리우기도 합니다.
    사이트 별로 기술지원하는 SE(솔루션 엔지니어)가 있습니다.
    SE는 개발자들이 잘 개발할 수 있도록 기술지원을 하거나, 솔루션의 최적화를 지원합니다.
    신규 제품은 SI 회사를 통해 시장에 팝니다. 즉, SI 회사가 제품의 시장보급 역할을 맡습니다.
    제품이 팔리고 나면 기술지원, 서버 확장, 라이센스 등을 통해 유지보수 수익을 올립니다.
    “돈은 제품 판매 수익New Sales과 유지보수 수익Maintenance으로 법니다.”
    SI 시장이 포화가 되면서, 판매 중심에서 유지보수 중심으로 시장전략이 바뀝니다.
    최근에는 클라우드와 오픈소스의 출현으로 유지보수 시장마저도 축소되고 있어서, 전략변화가 심합니다.
    국내 솔루션은 오랫동안 정책적으로 육성되지 않아서 거의 찾아보기 힘듭니다.
    일반적으로 제품의 완성도가 올라갈 때까지 정부가 꾸준히 투자해주어야 하는데요.
    IT 솔루션이 하나의 훌륭한 산업이 된다는 정부의 인식이 부족했기 때문이 아닌가 싶습니다.
    오라클 외산 솔루션의 경우는 내부 개발자가 없고, Timax, Altibase, Kairos 등 국내 회사는 개발팀을 보유하고 있습니다.
    3) 솔루션 SI 회사
    “개발팀은 제품을 만들고, 영업은 계약을 수주합니다.
    프로젝트 팀은 제품을 이용해 프로젝트를 합니다.”
    SI를 통해 반제품을 만들고, 비슷한 프로젝트에 들어가서 소스를 재활용합니다.
    repetition-plus-capabilities 라고, 반제품을 통해 개발원가를 낮추어서 이익을 실현하는 전략입니다.
    어떤 회사는 시장 검증을 통해 자사 솔루션의 완성도를 높이기 위해 SI를 하기도 합니다.
    업무가 정형화되어 있는 분야에서 많이 취하는 전략으로, 금융 분야나 ERP 분야에서 많이 볼 수 있습니다.
    회사 내에 연구소와 SI 프로젝트 팀을 가지고 있습니다.
    우리 나라의 경우는, 커스터마이징이 많고, 반제품의 가치를 인정해주지 않아서 이익실현이 어렵습니다. 그래서, ASP 서비스 형태로 전환을 시도하기도 합니다.
    그러나 솔루션SI는 개발원가를 낮추고, 박리다매로 빠른 프로젝트를 통해 돈을 버는 모델이고,
    ASP는 월 이용료를 받아서 돈을 버는 서비스 모델인데요.
    고객과 시장이 달라지므로 이에 맞게 판매와 영업조직도 바뀌어야 하는데, 이를 이해하지 못하고 사업모델을 전환하다가 실패하는 회사가 많습니다.
    4) 응용소프트웨어(아래한글, V3, 기업용 패키지) 회사
    “개발팀은 제품을 만들고, 유통을 통해 제품을 판매합니다.
    공공에 납품하기 위해 전문 영업조직을 만들기도 합니다.”
    제품의 품질이 중요해서 개발팀의 역할이 매우 중요합니다.
    제품 출시 후 업데이트가 불가능하므로, 기능 하나를 더하고 빼는게 매우 어렵습니다.
    개발팀은 제품기획자, 프로그래머와 검수자를 포함합니다.
    “패키지솔루션”과 다른 점은 SI회사를 통해 공급하지 않고, 직접 시장에 제품을 판다는게 다릅니다.
    “마케팅과 유통으로 제품을 팝니다.”
    반면 기업용 협업 도구들은 오픈소스화되거나, 클라우드 기반의 사용료 모델로 가고 있는 등, 제품 전략과 판매 전략의 변화가 심합니다.
    기술구조가 PC기반 클라이언트 중심에서 웹환경으로 바뀌고 있는 추세이고, 그에 따른 수익모델도 바뀌어야 해서 새로운 사업적 시도가 많이 되고 있습니다.
    5) 서비스 회사
    “개발팀이 서비스를 만들고, 마케팅이 서비스를 팝니다.
    무료 서비스로 사람을 모으고, 광고를 통해 돈을 버는 전략입니다.
    중개수수료 등 복잡한 사업모델을 가진 회사도 있습니다. 쇼핑몰처럼 오프라인 유통을 카피한 회사도 있습니다.”
    개발팀은 프로그래머와 기획자로 구성됩니다.
    마케팅은 고객을 연구하고 시장전략을 수립합니다.
    “판매는 비즈니스모델을 통해서 합니다.”
    창의적인 아이디어만 있으면 소프트웨어 만으로 제품Product을 만들 수 있어서 스타트업이 많은 분야입니다. 무형이므로 고객이 느끼는 서비스의 가치와 만족도가 매우 중요합니다.
    대박이 터지면 크게 터지지만, 성공율이 높지 않습니다.
    6) 컨설팅 회사
    “고객의 문제를 해결하는 고민의 결과물이 상품Product입니다.”
    비슷한 패턴의 문제는 있은나, 동일한 문제는 없습니다.
    따라서 비슷한 문제를 접했더라도 지식노동의 강도는 동일합니다.
    고객에게 컨설팅이라는 용역을 제공하고 돈을 받습니다. 다만, 대가의 크기는 고객이 문제로 인해 고생하는 만큼 비례합니다. 또는, 향후 사업가치의 크기에 비례하기도 합니다.
    물론, 그만큼 고생합니다.
    컨설팅은 고객의 문제를 발견해내거나 고민을 끄집어 내는 행위가 영업 행위입니다.
    본질과 요점을 짚어야 하므로, 고객에 대한 깊은 이해가 기본입니다.
    따라서, 신규 사이트를 떠돌아 다니는 영업보다는 사이트별로 관리하는 채널영업이 중심입니다.
    High Level 컨설팅은 드라마에서 나오는 것처럼 멋집니다만, 입사하기 매우 힘듭니다.
    맥킨지 등이 있습니다. Mid Range 컨설턴트는 현업에서 발생되는 실무적 고민을 컨설팅합니다. 생각보다 화려하지 않습니다.
    HP나 IBM의 경우 컨설턴트가 대형프로젝트의 마스터PM으로 나가는 경우도 종종 있습니다.
    7) 게임회사
    관련링크를 첨부합니다.
  • 국내 게임회사들
  • 해외 게임회사
  • SI산업의 문제점


    http://subokim.wordpress.com/2014/06/20/problem-of-si-industry/

    SI산업의 문제점

    얼마전 최근 IT분야에 들어오신 분이 이런 질문을 합니다.
    ‘왜 다들 SI가 문제라고 하는건가요?’
    글쎄요. 무엇부터 말해야 할지 몰라 선뜻 대답을 하지 못했습니다.
    이미 악순환의 고리로 접어들어서 불평할 것들이 너무 많기 때문입니다.
    물론 SI 개발자 입장에서 좋았던 부분도 꽤 있습니다.
    짧은 경험을 바탕으로 제 생각을 정리해 보았습니다.
    IT를 잘 모르는 일반인들의 이해를 위해 쉽게 써보려고 노력했습니다.

    SI 프로젝트 현장, 베트남, 어디나 비슷하다.
    SI 프로젝트 현장, 베트남, 어디나 비슷하다.
    1. SI 란 (System Integration)
    윈도우가 나오기 이전에 IT라는 것은 어떤 기능을 하는 하드웨어를 사는 것이었습니다.
    시스템 통합(System Integration)이란 여러 개의 솔루션을 조립하여 납품하는 행위였습니다.
    사용자 요구사항을 분석하고 거기에 맞게 소프트웨어를 하드웨어에 넣어서 팔았습니다.
    소프트웨어를 만들기도 하고 솔루션과 패키지를 설치해서 팔았습니다.
    대부분의 경우가 수작업을 전산화하는 것이어서 비교적 ‘불확실성’이 적었습니다.
    ‘주민등록관련 업무’나 ‘회계 업무’ 등을 생각하시면 됩니다.
    오랫동안 해왔던 업무이므로 기성품을 선택하거나 기능을 새로 만들기도 어렵지 않았습니다.
    틀에 박힌 업무여서 납품이 되고 나면 소프트웨어 변경은 거의 없었습니다.
    하지만, IT가 발달하자 온라인 비즈니스가 중심에 서기 시작했습니다.
    기존에 없었던 새로운 일들을 바로 시스템으로 만듭니다.
    어떤 비즈니스는 매일 개발자들의 손으로 돌려야 돌아가기도 합니다.
    인터넷 쇼핑몰, 인터넷 뉴스 서비스, 인터넷 뱅킹 서비스 등을 생각하시면 됩니다.
    사업 환경이 수시로 변해서 ‘설계 후 개발’을 하는 것도 어려워 졌습니다.
    개발이 완료되어도 종료라고 보기 힘들어졌습니다.
    ‘불확실성’이 높아진 것입니다.
    2. SI의 본질이 바뀌다.
    초기 SI 회사들은 자동차 공장의 회계시스템과 백화점의 회계시스템이 같다고 생각했습니다.
    그래서 기성복을 만드는 것 처럼 시스템과 매뉴얼을 만들고 값싼 노동력을 투입해서 이윤을 만들고자 했습니다. 즉, 건설처럼 ‘비싼 설계’에 ‘값싼 노동력과 자재’를 조달하는 방식입니다.
    이것이 아웃소싱 사업의 시작이었습니다.
    사업의 규모는 Man Per Month (1달에 투입된 사람수)인 투입되는 개발자 수로 측정했습니다.
    너무 많은 일을 싸게 하는 것 같아서 Function Point (기능 난이도, 개발량 등을 점수화) 제도를 도입하기도 합니다.
    그러나,둘다 표준화된 노동력을 팔아서 이윤을 남기고자 하는 본질은 같습니다.
    수많은 차세대 첨단 프로젝트들이 만들어집니다.
    하지만, 많은 프로젝트들이 실패합니다.
    자동차 공장의 회계시스템과 백화점의 회계시스템이 많이 달라지게 됩니다.
    요구사항을 정의하지 못해서 엉뚱한 걸 개발하기도 합니다.
    잦은 변경으로 기일 내에 개발을 못 끝내기도 합니다.
    업체는 발주자들이 자신들의 요구사항조차 모른다고 비아냥대기도 합니다.
    발주사는 주관 수행업체가 요구사항을 정리하지 못했으므로 책임져야 한다고 합니다.
    물론 갑과 을의 능력부족으로 실패하는 프로젝트도 있지만, 뜯어보면 요구사항을 정의하기 힘든 새로운 일들인 경우도 많습니다.
    요구사항을 정하고 만들었는데 원하던 결과물이 아니기도 합니다.
    설계를 중간에 변경하는 경우도 허다합니다.
    따라서, 처음부터 끝까지 베테랑들을 투입할 수 밖에 없습니다.
    규격 개발자들을 대량으로 공급해서 이윤을 남기는 사업 방식이 어려워진 것입니다.
    SI 회사들은 이렇게 이야기합니다.
    “시장에 쓸 만한 개발자들이 없다.”
    “개발자 몸값이 높아져서 사업해도 남는게 없다.”
    “프로젝트 위험도가 높아서 맨날 적자 본다.”
    3. IT현업부서의 개발능력 상실
    예전에는 전산실 직원들이 직접 개발을 했습니다.
    하지만, IT 시장이 성장하면서 큰 규모의 프로젝트가 계속해서 만들어지게 됩니다.
    전산실은 개발부서가 아닌 용역발주부서로 바뀌게 됩니다.
    이 기간이 오래 되면서 많은 전산실이 개발능력을 상실해 버리고 맙니다.
    이것은 기업들이 기술 주도권을 상실하게 만들었습니다.
    SI 회사들은 기업들이 쉬지않고 IT 용역사업을 발주하도록 이슈를 만들어 냅니다.
    각 기업들의 IT 비용은 당연히 상승합니다.
    기업들은 이렇게 이야기 합니다.
    “ 매년 투자를 엄청나게 하는데 뭐가 좋아지는지 모르겠다.”
    최근 대기업들은 이런 교훈을 바탕으로 아웃소싱 보다는 자체 개발역량을 보유하는 방향으로 전환하고 있기도 합니다.
    4. 갑을병정 생태계
    아웃소싱이 없어지지는 않을 겁니다.
    모두가 천재일 수 없으므로 부족한 부분에 전문가의 힘을 빌리는 것은 자연스러운 것입니다.
    그러나, 재하청구조는 문제가 됩니다.
    재하청은 중간 업체가 이윤을 가로채기 때문에 일의 최종 대가는 낮아집니다.
    베테랑이 해야 할 일에 초급자를 고용할 수 밖에 없습니다.
    두 명 들어가야 하는 일에 한 명을 쓸 수 밖에 없습니다.
    베테랑의 실력을 가진 초급자나 두 배 일할 수 있는 개발자를 고용하고자 합니다. (물론 그런 개발자는 없습니다.)
    초보자도 기능을 개발할 수는 있습니다.
    하지만 오랜 경험을 넣어서 개발할 수는 없습니다.
    시행착오가 잦아지니 야근을 할 수 밖에 없습니다.
    이것은 나중에 수습해야 할 기술적 부채를 만들어 냅니다.
    재하청은 대표적으로 ‘일감 몰아주기’에서 발생됩니다.
    하청업체가 자기가 소화할 수 없는 분야를 다시 아웃소싱 하면서도 이윤을 떼기 때문입니다.
    일감 몰아주기는 주관업체에게 실패 책임을 묻기는 좋습니다.
    발주사가 관리를 하기에도 용이합니다. (한 놈만 패는 거니까)
    그러나 여러번 이윤떼기는 실제 일하는 사람에게 제값을 줄 수 없게 만듭니다.
    원하는 수준의 전문가와 일할 수 없으므로 이상한 결과물이 나오게 됩니다.
    일감 몰아주기가 적어지면 ‘중간업체 살찌우기’가 사라집니다.
    그러면, 많은 SI업체들이 인력유통사업의 비중을 줄일 수 밖에 없습니다.
    슈퍼을이 되기 위해 고객영업에 집중하는게 불필요해집니다.
    높은 값을 받을 수 있는 기술 개발이 더 남는 장사가 될겁니다.(이 이야기를 펼치면 좀 복잡해지네요.)
    5. 요약
    한마디로 정의하면, 한국형 SI 의 본질은 기술 개발보다는 인력유통 산업에 가깝습니다.
    따라서, 고부가가치의 상품이 나오지 않고 학연 지연을 바탕으로 한 영업경쟁만 치열합니다.
    당연히 국제적인 경쟁력도 약합니다.
    IT 산업분야에서 이런 환경 개선을 위한 자성의 목소리들이 나오고 있습니다.
    하지만, 산업적 체질이 변화되기 위해서는 적지 않은 시간이 흘러야 할 것입니다.
    제도의 개선과 함께 IT 종사자들의 마인드도 바뀌어야 하기 때문입니다.

    SI산업의 문제점 2

    시카고의 일용직 근로자 시장
    시카고의 일용직 근로자 시장
    SI산업의 문제점 두번째 이야기입니다.
    SI 시장에는 인력소개소 수준의 업체들이 많습니다.
    왜 생겼을까요? 여기에 대해 이야기 한 번 해보겠습니다.
    정책과 제도는 양날의 검인데 부정적인 효과가 오랫동안 방치되지 않았나 싶습니다.
    1. 제도의 부정적 효과가 오래 지속
    발주사는 개발의뢰를 위해 제안요청서를 공지합니다.
    업체들은 제안서, 제안설명회, 가격입찰서를 통해 수주경쟁을 합니다.
    경쟁에서 이긴 업체는 주관업체가 되어 해당 프로젝트를 진행합니다.
    당연히 발주사는 믿을만한 업체, 실패를 책임질 수 있는 업체를 원합니다.
    어려운 사업일수록 입찰자격은 까다롭습니다.
    한 번 자격을 가진 업체는 진입 장벽 안에 서게 됩니다.
    자격이 되지 않는 업체는 입찰할 수 없습니다.
    입찰할 수 없다보니 자격을 얻을 수 없습니다.
    바보같은 쳇바퀴지만 엄연히 존재합니다.
    자격이 없는 작은 기업들은 큰 기업을 통해 제품을 납품합니다.
    큰 기업들은 자사의 이익을 위해 제품을 헐값에 제공하기도 합니다.
    작은 기업은 오히려 치명적인 피해를 입기도 합니다.
    자격제도의 폐단입니다.
    실제로 꽤 많이 일어나고 있습니다.
    SI 주관업체는 항상 충분한 리소스를 가지고 있지 못합니다.
    그러다보니 인력파견전문 SI 업체들이 등장하게 됩니다.
    많은 SI개발자들이 겪는 사례를 살펴 보겠습니다.
    2. 경력 속이기
    대부분의 제안사가 선수주, 후수습을 합니다.
    프로젝트 제안을 할 때는 자바 개발자 스무명이면 충분히 수행할 수 있을 것 같습니다.
    규격화된 개발자가 넘치던 시절의 구축 논리입니다.
    하지만 현실은 자바 개발자 스무명을 구하기 힘듭니다.
    그래서 아래와 같은 일들이 일어납니다.
    1) 초급인데 중급으로 투입
    주관업체가 약속된 중급개발자를 못구하는 경우입니다.
    경력을 속입니다. 정체가 노출되므로 가능한 침묵하게 됩니다.
    커뮤니케이션이 쉽지 않으므로 프로젝트는 힘들고 개인의 멘탈도 무너집니다.
    2) C고급자가 java고급자로 투입
    자바를 배운지는 1~2년 밖에 되지 않습니다.
    언어 숙련도가 낮아 java고급만큼 성과를 내지 못합니다.
    커뮤니케이션도 어렵고 개발환경도 잘 이해하지 못합니다.
    처음엔 잘 모르고 투입 됩니다만 대부분 중간에 발각됩니다.
    안타깝지만 주관업체는 여러가지 이유로 이 길을 선택하거나 선택할 수 밖에 없습니다.
    경력속이기는 결국 품질의 하락으로 이어집니다.
    대부분 펑크가 나고 PM이 가장 큰 스트레스를 받게 됩니다.
    3. 회사 소속 속이기
    주관업체가 현재 역량에 비해 초과수주를 한 경우입니다.
    즉 영업은 너무 잘 되는데 사업수행 인력이 부족한 경우입니다.
    정상적인 경우라면 사업포기를 해야 하는데 현실적으로 그렇게 하기 쉽지 않습니다.
    그래서 아래와 같은 일이 일어납니다.
    1) 한시적 소속 변경
    최근 계약서에는 주관업체 직원의 참여비율을 지정하는 경우가 많습니다.
    정직원들의 책임감을 기대하기 때문입니다.
    그래서 한시적으로 하청 회사 직원들의 소속을 바꾸어 투입합니다.
    하지만 회사 소속감이 없으므로 정직원 수준의 책임감을 기대하긴 힘듭니다.
    2) 수행업체 PM으로 투입
    심지어 PM을 확보하지 못한 경우도 있습니다.
    하청업체 소속이지만 주관업체 PM으로 소개됩니다. 고객을 속입니다.
    당연히 권한과 책임을 제대로 행사하기 힘듭니다.
    프로젝트는 연속된 이슈와의 싸움인데 모든게 여의치 않습니다.
    좌절 속에서 시간을 보내면서 프로젝트는 망가집니다.
    개인은 정체성 혼란으로 인한 스트레스가 매우 높아집니다.
    하청업체는 회사 이력으로 쌓을 수가 없어 사업자격을 확보할 수 없습니다.
    자격조건이 권력화되어 기형적인 구조를 만들어 내는 것입니다.
    4. 희생양으로 투입되기
    프로젝트 문제가 발생되면 기술부분이 희생양이 되어 아웃소싱하는 경우가 있습니다.
    솔루션 문제, 아키텍쳐 문제, DB 문제 등은 거의 단골로 등장합니다.
    1) 아키텍트로 투입되었는데 아키텍쳐 문제가 아닌 경우
    어떤 문제의 원인으로 아키텍쳐가 지목되었습니다.
    그래서 아키텍트로 투입됩니다.
    하지만 경험상 정말로 그런 경우는 거의 없었던 것 같습니다.
    대부분은 투입되면 기술 이슈 이외 정치적 부담까지 짊어지게 됩니다.
    2) DBA로 투입되었는데 어플리케이션 문제인 경우
    어플리케이션이 느린 이유는 대부분 SQL Query 때문입니다.
    그런데 SQL Query는 전부 어플리케이션에 있습니다.
    진단은 DBA가 할 수 있지만, 조치는 DBA가 할 수 없습니다.
    DB만 보면 된다고 해서 가보면 아무것도 할 수 없는 경우가 많습니다.
    위의 경우는 주관업체나 발주사의 프로젝트 수행역량이 부족하기 때문에 발생됩니다.
    프로젝트는 사람을 움직여서 일을 하는 것입니다.
    IT프로젝트는 기술도 알아야 하고 사람도 알아야 합니다.
    사람에 서투르고 기술에도 서툴러서 생기는 문제입니다.
    사람문제는 서로 회피를 하게 되므로 결국 기술만 남아서 기술문제처럼 보이게 됩니다.
    5. 왜 문제일까?
    위 사례들은 한국적 SI 문화로 이미 오랫동안 자리를 잡았습니다.
    그래서 대부분 조용히 별 문제없이 지내왔습니다.
    먹고 사는 문제야 해결되겠지만 장기적 관점에서는 문제가 됩니다.
    어떤 문제가 될까요?
    1) 어디에도 축적되지 않은 경험과 기술
    겉으로는 수행업체에 기술력이 쌓입니다.
    하지만, 실제로는 어디에도 기술력이 쌓이지 않습니다.
    주관업체도 아니고 하청업체도 아닙니다. 발주고객도 아닙니다.
    그저 개발자 개인의 경험으로만 쌓입니다.
    사회적으로는 별 도움이 되지 못합니다.
    사회적으로 가치가 생기려면 경험과 기술이 조직화되어야 하기 때문입니다.
    SI 환경에서는 누구도 기술을 올바로 자산화하지 않습니다.
    그냥 개발자 노트북에 하나의 개발소스로 존재할 뿐입니다.
    2) 아무도 책임지지 않는 구조
    실패나 문제에 대한 외형적 책임은 수행업체가 집니다.
    돈을 토해내거나 추가 개발자를 투입해서 프로젝트를 정상화합니다.
    담당고객은 감봉이나 문책을 당하기도 합니다.
    하지만, 책임은 ‘문제를 바로잡는 것’과 ‘재발방지’를 전제로 합니다.
    IT가 핵심역량인 비즈니스의 경우 일회성으로 끝나지 않고 계속 프로젝트가 이어집니다.
    발주사에 학습시스템이 없으므로 문제는 반복되고 상황은 나아지지 않습니다.
    사회적으로 매년 막대한 비용이 전산으로 지출됩니다만 비슷한 사례가 반복되고 아무도 해결할 수 없습니다.
    3) 개발자 시장의 붕괴
    SI시장에서는 신입 개발자들이 진입할 공간이 없습니다.
    개발자 한 명으로서의 역할을 기대하기 힘들기 때문입니다.
    SI 시장에서 초급이란 단순작업의 일을 하는 것이지 배우면서 일하라는 의미가 아니기 때문입니다.
    주로 개인 단위 고용이라 좋은 사수를 만날 수도 없습니다.
    실수나 실패를 완충해줄 팀원들도 없습니다.
    즉, 좋은 자질의 인력이 개발시장에 들어와서 성장할 수 없습니다.
    팀웍이 낮으므로 높은 협업 생산성을 기대하기도 힘듭니다.
    잘 훈련된 사람과 팀은 훌륭한 개발방법론이나 소프트웨어공학보다 몇 배 더 중요합니다.
    개인단위 아웃소싱은 사회적 개발역량의 성장을 방해하는 가장 큰 요소입니다.
    6. 요약
    현재 한국 SI 시장의 큰 문제점은 이런 구조가 넓게 퍼져 있다는 것입니다.
    SI 발주물량이 늘어나면 IT회사들은 제품개발보다는 이 구조에 참여하게 됩니다.
    생존을 위해서이기도 하거니와 회사 성장이 쉽고 빠르기 때문입니다.
    그러나 사회적 IT자산은 쌓이지 않습니다.
    10년이 넘도록 솔루션 하나 만들지 못하고 SI 파견만 하는 회사도 꽤 많습니다.
    자산이 쌓이지 않으니 부가가치는 생기지 않습니다.
    최근 SI 사업이 많이 줄면서 자연스레 이런 업체들이 줄고 있기는 합니다.
    하지만 사회적 체질개선이 되었다고 보기는 힘듭니다.
    IT가 사업의 핵심역량이라면 그 곳에 시간을 들여서 경험과 기술자산을 쌓아야 합니다.
    인력소싱을 유발하는 풀 아웃소싱은 일반적이고 규격화된 결과물을 얻는데는 무난한 선택일 수 있습니다.
    하지만, 훌륭한 결과물을 얻기 위해서는 훈련된 정직원 팀을 갖는 것이 기본입니다.
    여기에는 시간과 문화가 필요합니다.
    종래산업 분야에서 IT의 역할은 점점 커지고 있습니다.
    그러나 SI산업에게 IT분야의 씽크탱크 역할을 기대하기 힘들 것 같습니다.
    개인이 잘해서 풀릴 것 같지는 않습니다.
    제도적, 정책적, 사회적으로 함께 풀어야하는 이슈가 아닐까 싶습니다.


    SI 시장이야기

    아직도 이런 현장들이 있습니다.
    국내 IT시장의 80%정도가 SI시장임을 감안하더라도, 아직 선순환 구조로 접어들고 있지 못하는 답답함이 있습니다. 국내 소프트웨어 시장이 성장하기 위해서는 IT종사자들 스스로의 노력과 함께 정책적 접근도 절실한 시점이 아닌가 생각해봅니다.
    2011년 국내 IT서비스기업 매출 순위
    2011년 국내 IT서비스기업 매출 순위
    사례1) 정상적인 프로젝트라면 이래야?
    이번 일은 높은 가치 생산성이 있다.
    구축하고 나면 현장업무의 생산성이 두 배로 높아질 것이다.
    하지만, 만들어야 하는 것이 규격화되어 있지 않기 때문에 패키지를 이용하긴 힘들다.
    직접 모든 걸 개발하는 SI 비용은 비싸다.
    하지만, 투자비용보다 더 높은 부가가치를 만들거라 믿기 때문에 예산을 받아낼 수 있었다.
    충분한 비용을 가지고, 훌륭한 개발업체의 도움을 받아 시스템을 만들었다.
    시스템이 생산성을 높여 회사고객을 더 만족시켰다.
    사례2) 어떤 프로젝트 이야기
    업체가 적자를 본다.
    범위 대비 많은 인력과 시간이 투입되었다.(사실 예상되었던, 들어가야할 비용이 들어갔다.)
    원래 무리한 계획과 목표였다. (무리한 요구였다.)
    무리하지만, 누군가 할 수 있다고 했다.
    누군가는 무리하지 않다고 했다. (영업이겠지)
    누군가는 예산이 작아 그 일을 하기에는 무리라고 생각했다. (“갑” 님이겠지.)
    “갑”은 윗사람을 제대로 설득하지 못했다.
    “갑”은 그 일이 정말 회사에 이로운 일인지는 모르겠다.
    그러나, “갑”은 그 일을 평가시즌 이전에 꼭 끝내야겠다고 생각했다.
    그 일이 “갑”의 진급과 성과에 중요한 영향을 끼친다.
    사례3) 적자 프로젝트의 뒷편
    “을”이 적자를 본다.
    “갑”이 적자 보전을 위해 2차 프로젝트에 과다예산을 상정한다.
    하지만, “갑”은 과다예산에 맞는 새로운 목표를 회사로부터 받는다.
    “을”이 다시 적자를 보고 일을 한다.
    “을”이 망한다.
    결국 “갑” 회사는 “을” 회사의 돈을 빼앗아서 발전하는 거다.
    돈 바치고, 몸 바치는 “을” 회사는 미친 거?
    계속 이런 악성 프로젝트 물어오시는 사장님. 직원들 생각 좀 했으면.
    이런 상황 모르고, “내가 돈주는 거”라고 착각하는 “갑”님은 미친 거?
    그 돈은 당신 회사가 당신에게 빌려주는 돈이라고.
    당신은 그 돈으로 “을” 회사와 힘을 합쳐 회사가 만족할 결과물을 만들어 내야 하는 거라고.
    회사 돈을 쓸 때는 책임이 뒤따르는 법!!!
    사례4) 시장이야기, 언제쯤 이렇게 될까?
    시장에 SI 업체들이 넘쳐난다.
    공급이 많아서, 가격이 자꾸 내려간다.
    수지타산이 맞지 않아 업체가 망한다.
    개발자가 죽어난다. (일정도 힘들고, 사람 수도 적다.)
    대졸자들이 개발을 기피한다. 시장에 개발자가 없다.
    SI 업체가 점점 줄어든다.
    오랜 시간 후 이제는 SI 업체 찾아보기도 힘들고, 가격도 비싸다.
    SI 하려면, 알기도 많이 알아야 하고 경험도 많아야 해서 경쟁률이 빡세다.
    사례5) 시장이야기, 요즘 좀 이런 트렌드?
    기업들의 부가가치 생산성이 낮아진다.
    낮은 비용으로 적당한 효율을 올리고자 한다.
    SI는 비싸니, 패키지나 플랫폼을 이용하려고 한다.
    시장에 패키지나 플랫폼을 제공하고 A/S 해주는 회사가 많다.
    적당한 패키지를 골라, 우리 회사에 맞는 적당한 제품을 만든다.
    현장에 적용해서 우리 고객을 만족시키고 협업 생산성을 올린다.
    사례6) 어떤 개발자 이야기
    대학교 4년 다니는 동안, 동아리에서 개발해본게 전부.
    우연히 손재주 있는 친구를 만나 전산과 실습으로 개발해본게 전부.
    취직 전에 멀티캠퍼스에서 자바개발 초급과정 들어본게 전부. (스스로 위안을 삼고자)
    작은 회사에 취직. 선배가 개발하는 거 어깨너머로 보고 요령을 익힘.
    아 저렇게 하면 되는군.
    그렇게 3~5년을 보냄.
    개발 요령이 점점 늘어난다.
    “이론은 없고, 경험만 있을 뿐.” (이론 없는 경험은 발전이 없다.)
    발전은 없고, 계속 사이트를 떠돈다.
    이런게 개발자 인생인가?
    해외 유명개발자들도 이렇게 사나?
    이런 개발자 손에서 만들어진 제품은 유지보수비용이 계속 더 들어간다.
    요즘 오라클이 인수한 몇몇 회사 제품이 이렇던데…