조엘 온 소프트웨어 (에이콘)


읽은 기간 : 2010년 10월



1. 소프트웨어팀 평가 방법


1. 소스코드 관리시스템을 사용하고 있습니까?

  a. CVS (오픈소스)

  b. IIS, classic ASP 환경에 맞는것은?

2. 한방에 빌드를 만들어낼 수 있습니까?

  a. 컴파일 환경에 국한

3. 일일빌드를 하고 있습니까?

  a. 협업환경에서 최신 소스코드를 유지하는 문제

4. 버그추적시스템을 운영하고 있습니까?

  a. 이슈트래커

5. 코드를 새로 작성하기 전에 버그를 수정합니까?

  a. 새로운 코딩을 하기전에 알려진 버그를 고치는 것

6. 일정을 업데이트하고 있습니까?

  a. 개발일정을 만들고 계속해서 업데이트 하는 것

7. 명세서를 작성하고 있습니까?

  a. 개발자는 (설계없이 작성한) 엉망인 코드라도 그게 자신의 코드라면 버리기 어렵다.

  b. 명세서는 의사소통 시간을 절약한다.

  c. 세부명세서 없이 일정을 계획하기가 불가능한다.

8. 조용한 작업환경에서 일하고 있습니까?

  a. 참고서적) 피플웨어 : 정말로 일하고 싶어지는 직장 만들기


9. 경제적인 범위 내에서 최고 성능도구를 사용하고 있습니까?

  a. 컴파일시 좋은 성능의 컴퓨터를 사용하라

  b. 모니터가 두개면 편하다


10. 테스터를 별도로 두고 있습니까?


11. 프로그래머 채용 인터뷰 때 코딩 테스트를 합니까?


12. 무작위 사용 편의성 테스트를 수행하고 있습니까?

  a. 복도를 지나는 사람을 데려다 방금 작성한 코드를 사용하게 하는 것

  b. 이렇게 하면 코드에 존재하는 사용 편의성 문제를 95%까지 찾아낸다.

  c. 참고서적) User Interface Design for Programmers (한국판은 없는것 같음)




2. 소프트웨어 5가지 종류


1. 상품 소프트웨어

a. 정의 : 대규모 사용자가 '자기 의지에 따라' 선택해 사용할 수 있는 소프트웨어

b. 상용, 오픈소스, 웹사이트 모두 포함

c. 상품이 성공하기 위해선 사용자 인터페이스를 평균 이상으로 쓰기 쉽게 만들어야 한다.

d. 인터페이스 개발에 개발시간 절반을 쏟아야 한다.

e. 다양한 시스템 환경에서 돌아가야 한다. (웹 일경우 브라우저)

f. 안정성


2. 사내용 소프트웨어

a. 특정회사의 해당 문제점을 해결하기 위한 소프트웨어

b. 개발시간 중요 > 사용편의성, 안정성은 나중문제. 비용을 최소로 하기 위해


3. 임베디드 소프트웨어

a. 업데이트 불가능. 하드웨어의 일부로 취급.

b. 빠른 코드가 중요하므로 최적화와 튜닝에 많은 시간 소요.

c. 예) 전자레인지 EPROM 

4. 게임 소프트웨어

a. 성공하는 게임이 소수이므로 게임을 여러개 만들어서 포트폴리오를 구성하는게 관건이다.

b. 게임은 소프트웨어라기 보단 영화에 가깝다.

c. PC게임은 버전이 하나 뿐이다. 사람들은 한 게임을 마스터 하면 다시 하지 않는다.

d. 온라인 게임일 경우 예외. 

5. 일회성 소프트웨어

a. 특정한 목적만을 위해 임시로 만든 코드



3. 쏘면서 움직여라


"매일 조금씩 움직여야 합니다. 코드가 엉성하고 버그 투성이고 아무도 원하지 않는다는 사실은 문제가 되지 않습니다. 

늘 움직이면서 코드를 쓰고 버그를 지속적으로 잡아낸다면, 시간은 당신 편입니다.

경쟁자가 당신을 향해 사격할 때 조심하십시오. 혹시 당신을 일제 사갹에 허겁지겁 대응하게 만들어 단지 앞으로 나가지 못하게 하려는 건 아닐까요?"


"(MS의 ODBC, RDO, DAO, ADO, OLEDB, ADO.NET 을 이야기 하면서..) 경쟁사는 새 기술을 따라잡고 자사 제품에 이식하기 위해 시간을 쏟아부을 수 밖에 없습니다."


"큰 회사에 별로 의존하지도 않고, 윈도우 xp에서만 우후죽순으로 쏟아지는 버그를 수정하고 다시 구현하고 따라잡기 위해 모든 노력을 기울일 필요가 없는 회사는 잘 나가게 돼있습니다."


"저처럼 작은 회사를 운영한다면, 쏘면서 움직이는 방법은 두가지 사항을 의미합니다. 장기적인 안목을 키워야 하며, 매일 조금씩 앞으로 나아가야 합니다. 이렇게 하다보면 조만간 당신이 이길 것입니다."



4. 결코 하지 말아야 하는 일 1)


프로그래머는 천성적으로 건축가와 닮은 구석이 있어서, 발길이 닿은 곳을 불도저로 완전히 밀어 버린 다음에 위대한 유산을 창조하고 싶어합니다. 점진적인 개조만으로는 성에 차지 않습니다.

프로그래머가 항상 코드를 버리고 새로 시작하기를 원하는 미묘한 이유가 있습니다. 이런 이유는 예전 코드가 엉망진창이라는 생각 때문입니다.

왜 엉망진창이라고 생각하는가? "코드 쓰는 작업보다 읽는 작업이 더 어렵기 때문에"


1. 새로운 코드가 예전코드보다 좋다는 생각이 잘못된 이유:

a. 예전코드는 한번 사용해 본적이 있음

b. 테스트도 마침

c. 버그도 수정한 것임 (예전코드가 비대한 이유)

d. 이런 버그들은 실사용에서 여러 주 동안 테스트해야 겨우 발견할 수 있음


2. 예전코드를 수정하는 방법

a. 아키텍처 : 코드가 올바르게 나눠지지 않았을 경우 

=> 이런 문제는 주의깊게 코드를 옮기고, 리팩토링하고, 인터페이스를 변경하는 방식으로 한번에 하나씩 해결할 수 있다.

b. 코드가 비효율적

=> 최적화 작업을 하거나 그 부분만 다시 작성한다.

c. 코드가 보기 흉할 경우

=> 변수명, 함수명을 가독성있게 수정한다.

작업을 새로 시작하면 처음보다 훨씬 더 나은 성과를 거두리라는 믿음은 절대로 근거가 없습니다.



5. 결코 하지 말아야 하는 일 2)


1984년 개인용 소프트웨어 최상위 10개 회사


순위별 실수

1) 마이크로프로 - 주제품인 워드스타를 업그레이드하는 대신 프린터 아키텍처를 다시 짜느라 시간 허비

2) 마이크로소프트

3) 로터스 - 제품을 640KB 메모리에서 돌려보려고 1년 반을 투자

4) 디지털 리서치 - CP/M-86에 너무 주력한 나머지, PC운영체제에서 업계 표준이 될 기회를 놓침 (CP/M : PC가 나오기 전 유일한 운영체제)

5) 비지코프 - 소송에 휘말려 자멸

6) 애시톤테이트 - 기회를 놓쳐 dBase 개발자들을 화나게 함 (?)


실수중 대다수는 기술관련 지식이 없는 비지니스 쪽 사람이 기술적인 기본 사실을 이해하지 못하기 때문에 발생하게 됩니다.

제 의견을 물으신다면, 프로그래머를 조타수로 두지 않는 소프트웨어 회사는 결코 성공할 수 없다고 답하겠습니다.


소프트웨어 비즈니스에서 성공하려면 프로그래밍에 해박한 동시에 비즈니스도 이해하고 좋아하는 관리층이 있어야 한다고 말하겠습니다.




6. 맥도날드의 교훈


질문1 : 세계에서 가장 큰 IT 컨설팅 기업이 가장 일을 못하는 이유는?

질문2 : 극적인 성공으로 순식간에 두각을 드러낸 컨설팅 기업이 유성처럼 빛났다가 보통 기업으로 빠르게 쪼그라드는 이유는?


1)재능이 있어야만 잘 할 수 있는 일이 있습니다.

2)재능을 확장하기는 어렵습니다.

3)재능을 확장하려는 시도로 평범한 사람이 따라할 수 있게 비범한 자가 규칙을 미리 세워둡니다.


IT 컨설팅 분야에서 벌어지는 현상과 같다.



7. 아마존 모델 vs. 벤앤제리 모델


 

 아마존 모델

 벤앤제리 모델

 성장방식

 대규모 자금을 투자해 빅뱅식 성장

 수익을 창출하면서 유기적으로 천천히 성장

 

 투자금을 가능한 끌어모아 몸집을 최대한 빨리 키움

 (=> 진입장벽을 높임)

 수익성에 대한 우려는 뒷전

 목표를 제한하고 소규모로 출발

 오랜시간을 들여 비즈니스 구축

 경쟁업체가 있는가?

 신기술, 초반에는 경쟁업체가 없었음

 탄탄한 기존 경쟁업체가 많음

 네트워크 효과

 크다

 없다

 감금효과

 (고객이탈방지)

 크다

 약함

 투자자금

 엄청나게 많이 필요함

 거의 필요없음

 수익

 손익분기점에 도달하기 까지 수년이 걸릴수 있음

 단시간에 손익분기점에 도달

 기업문화

 기업문화 정립이 불가능함

 기업문화가 중요

 성장

 빠르게 성장

 오래걸림

 성공

 백만장자가 될 가능성이 있으나 아주 작음

 실패할 확률이 큼

 성공할 가능성이 충분함

 크게 손해볼 확률은 적음


네트워크 효과 : 고객이 많을 수록 더많은 고객을 확보할 수 있는 상황을 말함. "네트워크의 가치는 가입자 수의 제곱과 같다" 는 멧칼프의 법칙에 근거

감금효과 : 사용자가 다른 서비스나 제품으로 전환하지 못하게 하는 비즈니스 특성 


네트워크와 감금효과가 중요하고 기존 경쟁업체가 없는 사업이라면, 아마존 모델을 추천합니다. 남보다 먼저 하지 않으면 시장을 점령할 수 없습니다.



천천히 유기적으로 성장하는 회사에서는 과장 자체가 보상이 되도록 업무 환경을 개선할 수 밖에 없습니다. 주당 80시간을 요구할 수는 없습니다. 사무실 환경도 좋아야 하고 휴가를 적절히 지급해야 합니다. 동료와는 업무상 관계가 아니라 친구가 돼야 합니다.



8. 닭이 먼저냐, 달걀이 먼저냐


IBM-PC가 처음 나왔을 때 PC-DOS,  XENIX,  UCSD P시스템 이라는 운영체제 셋 중 하나를 선택할 수 있었습니다. 그때 시장을 휩쓸던 회사는 디지털리서치사 였습니다.

PC가 나오기 전 유일한 운영체제는 CP/M 이었습니다. 가격이 만달러나 했지만 CP/M용 워드스타 라는 멋진 워드프로세서가 있었기 때문에 사람들은 CP/M 을 샀습니다.

DOS 는 버전 1.0 부터 CP/M 하위 호환성 모드를 내장하고 있었습니다. DOS 가 인기 있었던 이유는 처음부터 소프트웨어가 있었기 때문입니다. 


PC 플랫폼 역사 전체를 살펴보면, 모든 PC 사용자를 움직일 정도로 큰 패러다임 변화가 두번 있었습니다. 모두가 윈도우 3.x로, 그 다음에는 윈도우 95로 바꿨죠. 

우리 모두가 윈도우 3.x로 바꾸었습니다. 왜 윈도우 1.0 이나 2.0 이 아닐까요?


PC-DOS -> 윈도우 1.0 -> 윈도우 2.0 -> 윈도우 286 -> 윈도우 386 -> 윈도우 3.x -> 윈도우 95


진짜 이유는 인텔 80386 칩에서 처음 선보인 복잡한 하드웨어 기능과 연관이 있습니다. 이런 기능은 윈도우 3.0에 반드시 필요합니다.

인텔 80386 상에서 돌아가는 윈도우 3.x 는 여러 DOS 프로그램을 동시에 실행할 수 있는 첫 버전이었습니다.

윈도우 3.x 이 옛 소프트웨어를 모두 돌릴 수 있으면서도 쓰기 좋은 첫 버전이었던 겁니다.


윈도우 95요? 멋진 32비트 api를 제공하면서도 16비트 소프트웨어를 완벽하게 돌릴 수 있었죠. 옛날 프로그램을 모두 구해다 윈도우 95에서 테스트하느라 엄청난 시간을 투자했습니다.


이제 닭이냐 달걀이냐 문제를 해결할 방법에 대한 실마리가 잡히실 겁니다. 어떻게 하건 하위 호환성을 지원하십시오. 그리고는 느긋하게 물러 앉아 돈을 긁어 들이면 됩니다.



9. 경쟁사에서 고객을 빼앗아 오려면?


진입장벽을 이해해야 합니다.

1990년대 초 MS는 벤앤제리 진영의 정회원이었습니다. 당시 기라성 같은 경쟁제품인 로터스 123가 거의 독점하고 있었습니다.

기존 제품보다 우수한 면이 있다면, 충분히 고객을 끌어올 수 있습니다. 그러나 전략적으로 사고해야 합니다. 전략적인 사고란 눈에 보이는 이상으로 한 걸음 더 나아가야 한다는 뜻입니다.


사용자가 제품을 바꾸게 하는 유일한 전략은 걸림돌 제거입니다. 

사용자가 제품을 전환하는데 걸림돌이 무엇인가?

로터스 123 사용자가 내일 당장 엑셀 사용자로 전환하는 과정에서 겪는 어려움은 무엇인가?


걸림돌 해결책

-----------------------------------------------------------------

1. 엑셀에 대해 알아야 한다.

엑셀이 나은 점을 알아야 한다.

=> 엑셀을 광고하고, 데모 디스크를 나눠주고, 전국을 돌며 데모를 한다.


2. 엑셀을 구매해야 한다.

=> 기존 123 사용자가 엑셀로 전환할 경우 특별 할일을 해준다.


3. 엑셀을 돌리기 위해서 윈도우를 구매해야 한다.

=> 윈도우 실행버전을 만들어, 엑셀에 무료로 끼워준다.


4. 기존 스프레드시트를 123에서 엑셀로 변환해야 한다.

=> 엑셀에 123 를 읽는 기능을 넣는다.


5. 엑셀에 맞춰 키보드 매크로를 재작성해야 한다.

=> 엑셀에 123 매크로를 실행하는 기능을 넣는다.


6. 새 사용자 인터페이스를 배워야 한다.

=> 사용자가 기존 방법에 익숙할 경우를 대비해서 엑셀에 로터스 방식 키입력을 이해하는 기능을 넣는다.

-----------------------------------------------------------------


기존 시장에 진입하기 위해서는 걸림돌 제거가 가장 중요하다는 사실을 알 수 있습니다. 

걸림돌 하나만 제거해도 판매액이 두배로 늘 수 있습니다.


일단 초기 진입장벽을 모두 제거한 후에는 그다지 눈에 띄지 않는 장벽을 파악해야 합니다.

시장을 점유하기 위해서는 모든 장벽에 대처해야 합니다. 잠재 고객 50%가 진입할 수 없는 장벽 하나를 남겨 둔다면, 

개념상 시장 점유율은 50%를 넘지 못합니다.


+ Recent posts