태터데스크 관리자

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

태터데스크 메시지

저장하였습니다.

스펙을 제대로 작성하는 것은 구식이다?

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





'소프트웨어 개발 방법이 얼마나 발전했는데 아직도 스펙을 제대로 작성하고 개발을 하는가?' 라고 하면서 스펙 작성에 반대하는 주장을 하는 사람들이 있다.

스펙, 설계를 작성하고 구현을 하고 테스트를 하는 방식으로 개발하는 것을 판에 박힌 절차라고 생각하고 부정하기도 한다. 그런 주장을 하는 사람들은 이 방법은 Waterfall 방식으로 구닥다리이며 요즘은 Agile 등의 최신 방법으로 개발을 하기 때문에 과거처럼 스펙을 작성하지 않는다고 한다.

이렇게 주장하는 사람들에게 반문해보고 싶은 것이 있다.

"스펙을 한번이라도 제대로 작성해 본적이 있는가?" 

이런 생각을 하는 것 자체가 스펙을 제대로 이해하고 있지 못하다는 반증이다.
왜냐하면 스펙이 무엇인지 제대로 이해하고 있다면 이런 말이 나올 수가 없다.
지금 그렇게 부정하는 스펙을 작성하지 않아서 개발을 잘하고 있는가? 

99% 이상의 개발자는 죽을 때까지 제대로 된 Waterfall 방식의 개발을 한번도 해볼 기회가 없다. 그러면서도 과거에 Waterfall 방식으로 개발을 했다고 착각을 하는 것이다. Waterfall 방식을 참고하여 약간 응용을 한 것 뿐이다.

Waterfall 방식이 다른 모든 SW 개발 Lifecycle의 모델이 되는 이유는 소프트웨어는 나중에 고치기가 정말로 어렵기 때문이다. 빌딩 올리는 것과 별 차이가 없다. 즉, 코딩을 다 해놓은 다음에 설계나 스펙을 바꾸는 것은 10배, 100배 비용이 많이 드는 것이다. 아무리 최신 기술을 적용해도 이는 별로 나아지지 않는다.

따라서 그중에서 가장 앞단에 있는 스펙이 가장 중요한 것이다.

스펙을 작성하는데 있어서 가장 중요한 것은 필요한 만큼 적절하게 적는 것이다. 단계 별로 작성할 수도 있고, Unit test로 작성할 수도 있고 방법의 선택은 자유이다. 가장 효과적인 방법을 선택하면 그만인 것이다.

문제는 적는 방법이 아니고 그 내용이다. 대부분 스펙을 작성하지 못하고 어려워하고 반대하는 사람들의 공통점은 스펙에 무엇을 적는지 모른다는 것이다. 그렇기 때문에 아무리 잘 적으려고 해도 잘 안되는 것이다. 정리를 잘하고 예쁘게 적는 것은 추후 문제이다.

실제로 필자는 여러 회사의 다양한 프로젝트의 스펙(SRS)를 대신 적어준 경험이 있다. 해당 분야의 Domain 지식이 부족한 나는 해당 분야의 전문가들을 인터뷰하고 의논해가면서 스펙을 적는다. 대부분은 Domain 지식에 대해서는 훤하지만 스펙에 어떻게 적어야 하는지 모르고 있다. 즉, 지식은 있지만 스펙은 모르는 것이다. 스펙을 적는 방법에 대해서 구체적으로 적는 방법을 얘기하면 책 몇권도 모자르기 때문에 여기서 다 적을 수는 없다.

한마디로 요약하면 적어 놓은 스펙을 보고 설계/구현이 가능해야 하는 것이다.

조금만 더 설명하면 시스템을 기능, UI, Architecture의 뷰로 설명하고 비즈니스 요구사항, 비기능 요구사항 등을 포함해야 한다. 

스펙을 제대로 작성하는다는 것은 수십/수백페이지에 달하는 Template를 채우는 작업이 아니다. 어떤 SW를 만드는 것인지 정의 하는 것이다. 방법은 여러가지고 있고 그중에서 가장 효과적인 것을 선택하는 것이다. 

이것을 부정한다면 무엇을 만들지도 모르는 상태에서 무조건 코딩부터 시작하는 것이 가장 좋은 방법이라고 주장하는 것과 다를 바가 없다. 


image by 
Lichfield District Council 

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

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

Trackback Address: http://allofsoftware.net/trackback/251 관련글 쓰기
  1. Blog Icon
    althea

    매번 글 재밌게 읽고 있습니다.
    스펙을 정확하진 않더라도 간략히나마 추릴수 있는 방법은 어떤건가요?
    항상 혼자서 취미 및 공부로 코팅하는 저는 어떤 프로그램을 짜고나서 결과는 생각처럼 움직이지만 더 구조적인 방법이 생각나서 다시 만들까 매일 고민합니다ㅡㅜ

  2. 안녕하세요. althea

    스펙은 개발이 가능한 수준에서 가장 간략하게 적는 것이 중요합니다. 본인이 개발할 것이면 그냥 Text파일로 간단히 정리하는 것도 좋습니다. 형식은 구애받지 마세요.

    흔히 스펙을 기능명세로 착각하는 경우가 많은데 스펙에는 회사의 목표, 비즈니스 전략, 비기능, 인터페이스, 환경 등 여러가지가 적힙니다.

    개발해 놓고 나중에 아키텍처 개선이 생각나는 것은 스펙에서 충분히 아키텍처를 고민하지 못했거나 경험이 적은 제품이라서 개발해보지 않고 미리 좋은 아키텍처를 생각하기 어려운 경우 입니다. 이런 경험이 쌓여서 나중 제품의 아키텍처는 점점 좋아집니다. 그래서 경험이 많은 개발자들이 좋은 아키텍처를 만듭니다.

설계가 필요할까?

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




최근에 Software Architect의 정체에 대해서 혼란을 겪고 있는 것 만큼 Software 설계에 대해서도 혼동스러운 것은 마찬가지인 것 같다.


그래서 설계에 대해서도 깔끔하게 정의를 해보자.
흔히 설계에 관한 다음과 같은 궁금증을 가지고 있다.
 

  1. SW를 개발하는데 설계는 과연 필요할까?
  2. 설계서는 작성할 필요가 있을까? SW는 설계서 없이 개발하는 것이 더 빠르지 않나?
  3. 설계는 어떤 기법을 이용하는 것이 좋을까?
  4. 설계툴은 UML을 꼭 이용해야 하나? 

일단, 설계를 하는 행위와 설계서를 작성하는 행위를 분리해서 생각하는 것이 좋다.


첫째, 우리는 설계서를 작성하든 하지 않든 "Hello world"를 제외하고는 설계 없이 개발하기 어렵다. 단지 단순한 것은 설계를 머리 속으로 할 뿐이다.

복잡하거나 여러 사람들이 서로 나눠서 개발을 해야 하는 경우는 머리 속으로만 설계를 하기란 거의 불가능하다. 천재라도 복잡한 시스템을 머리로 설계를 할 수 있지만 두뇌를 꺼내서 다른 사람에게 보여줄 수는 없는 일이다. 그래서 설계서를 작성하게 된다.

설계서 없이 개발이 가능한 경우는 극소수일 뿐이다.

그럼 주변에서 보는 설계서 없이 개발하는 수많은 프로젝트는 무엇인가? 

대충 머리 속으로 설계를 해서 코딩을 하면서 서로 맞춰가는 것이다. 이런 식으로라면 재작업하는 일이 여러번 발생하게 되어서 오히려 시간이 더 많이 걸린다. 재작업 문제만 있는 것이 아니다.

설계는 필요한 만큼 해야 하고 거의 대부분은 문서화를 해야 한다.

즉, "Hello world"보다 복잡하거나 다른 사람과 나눠서 일을 하거나 다른 시스템과 인터페이스가 있을 경우는 설계를 적어야 한다.

설계 없이 만들어보려고 하는 것은 Software밖에 없을 것이다. 집, 빌딩, 전자부품, 애들 장난감 모두 설계가 있다. 



둘째, 설계는 어디에 적히는 것일까?

많은 설계는 소스코드와 중복이 되게 된다. 소프트웨어를 개발하는데 있어서 중복은 2배가 아니라 10배의 문제를 야기한다.  따라서 최대한 중복은 피해야 한다.

일단, 설계의 시작 부분은 스펙(SRS)에 적히게 된다. 시스템의 조망과 구조는 스펙의 가장 중요한 부분 중 하나이다. 이렇게 스펙에 설계를 적기 시작하면 스펙과 설계의 경계가 모호해지게 된다. 스펙과 설계의 경계는 따로 정해져 있는 것이 아니고 상황에 맞게 판단하면 된다.

라이브러리르 개발하는냐,  웹서비스를 개발하느냐,  게임을 개발하느냐에 따라서 그 경계는 달라질 수 있다.

보통의 경의 스펙에는 상위 설계 언저리 까지 적히는데 많은 프로젝트에서 설계는 이 정도만 적혀도 충분하다.

설계가 충분하지 아닌지 판단은 이 설계를 가지고 다른 개발자들이 나눠서 각자 개발을 할 수 있는지 생각해보면 된다. 그렇다면 스펙에도 어느 정도로 적히는지를 상상할 수 있을 것이다.

따라서 시스템의 크다고 하더라도 설계서가 별도로 없이 UI만 있어도 개발이 가능 Web 등의 시스템은 스펙에 적히는 정도만 가지고도 개발이 가능하다.

이것으로도 부족하면 별도의 설계 문서를 만들기도 한다. 개발자가 수십명이상 참여하는 프로젝트에서는 대부분 별도의 설계서가 따로 있어야 할 만큼 시스템이 크다.  그런 경우는 설계서를 따로 만드는 것이 좋다.


셋째, 설계는 어떻게 해야 하는가? 무엇을 고려해야 하고 무엇을 적어야 하는가?

설계를 하는 방법에 대해서 고민을 하는 개발자는 매우 많다. 막상 회사에서 설계서를 만들라고 하면 막막하고 많은 경우 코딩을 다 하고 형식적으로 만드는 경우가 많다.

이런 경우는 설계도 제대로 한 것이 아니고 설계서도 엉망이다. 거의 쓸모 없는 문서를 시간을 더 들여서 만든 것이다. 나중에 유지보수에 필요하다고 하는데 유지보수에서 가장 많이 필요한 것은 소스코드와 스펙이다.

설계는 해당 프로젝트를 제대로 짧은 시간 안에 끝내기 위해서 하는 것이다. 또한 잘 된 설계는 미래에 발생할 여러가지 환경을 반영해야 한다. 이렇게 작성된 설계서라야 시스템과 일치를 하며 유지보수 시에도 유용하다.

설계의 기준이 되는 것은 스펙이다. 즉, 스펙이 제대로 적히지 않으면 좋은 설계가 나올 수 없다.

스펙이 없거나 기껏해야 기능명세만 적었다면, 설계는 아무리 잘해도 현재의 요구 기능이 동작하는 것에만 머물 것이다.

이 부분이 가장 중요하다. 수많은 회사들이 여기서 다 망쳐서 지금 그 고생들을 하고 있는 것이다.
스펙에 기능명세 뿐만 아니라 미래의 비즈니스 전략과 비기능 요구사항들이 모두 적혀야 있고 이를 설계에 반영해야 한다.


스펙이 이러한 내용들이 누락이 되어 있으면 설계가 어떻게 될지 상상해보라.

  • 지금은 고객이 10개 회사인데 5년 안에 1,000개의 고객사를 확보할 것이다.
  • 지금은 국내 판매를 대상으로 하는데 1년 후 부터는 세계 200개 회사를 대상으로 마케팅을 할 것이다.
  • 현재의 시스템은 내년에 회사의 다른 시스템들과 통합하는 작업이 진행 될 것이다.
  • 현재는 C/S 구조인데 2년 안에 Web을 지원해야 한다.
  • 현재는 Windows만 지원하는데 1년 안에 MacOS, 2년 안에 iPhone과 Android 폰을 지원해야 한다.
  • 지금은 모델이 3개지만 내년까지 100개의 모델이 5년 안에 5,000개의 모델이 생산될 것으로 예상된다. (사업이 잘 될 경우)
  • 지금은 카메라 모듈을 한 가지만 지원하지만 5년 안에 100개 이상의 카메라 모듈을 지원해야 할 가능성이 80%이다.
  • 현재 만든 Framework로 2년 안에 사내의 모든 TV의 Firmware를 교체할 예정이다.

위 예는 실제 현장에서 발생할 수 있는 수백만개 경우 중 몇 개일 뿐이다.

이러한 내용들이 설계에 적절히 고려되지 않는다면 미래에 큰 댓가를 치루게 된다. 이러한 것을 설게에 잘 반영하도록 설계를 하는 사람들을 Architect라고 부른다.

이런 것을 고려하지 않고 마구 어질러 놓고 인력만 많이 투입해서 엄청 비효율적으로 일을 하고 있으면 그 원인과 방법도 모른체 계속 똑같은 시행착오를 계속 반복할 가능성이 99%이다.


넷째, 특별한 툴을 이용하는 것이 좋은가?

 나는 설계를 위해서 특별한 툴이나 방법론을 선호하지 않는다. 하지만 툴가 방법론을 팔아먹는 사람들이 만병통치약처럼 선전을 한다.

좋은 워드프로세스를 쓴다고 좋은 소설이 안나오고 비싼 붓 쓴다고 그림 잘 그리는 것이 아니듯이 설계를 가장 잘 표현할 수 있는 툴을 알아서 쓰면 된다. 혼자만 이상한 것을 써서 다른 동료들이 편집하지 못하게 해서도 안된다.

설계의 핵심은 컴포넌트와 인터페이스를 적절히 나누고 표현하는 것이기 때문에 이것을 그릴 수 있으면 된다. 그냥 워드프로세스로 정리를 하는 경우가 많다.

하지만 설계를 하는 중간 과정에는 툴을 가지고 깔끔하게 정리를 하는 것은 시간 낭비이다. 설계가 끝날 때까지 설계는 전체를 뒤엎는 과정을 수차례 겪으므로 정리를 해 놓은 낭비이다.  큰 종이나 칠판에 적고 지우고를 반복하는 것이 좋다. 그렇게 거의 완성이 되면 옮겨 적으면 된다.

심지어는 사진을 찍어서 이미지를 문서에 첨부하기도 한다. 이런 경우는 나중에 편집이 안되므로 적절히 사용해야 한다.

그 외에 필요한 것은 설계자가 적절히 판단해서 시스템을 표현할 수 있는 그림이나 다이어그램을 그리거나 글로 적기도 한다. 여기서 창의성을 발휘해야지 규칙을 정해 놓고 따라하면 오히려 비효율적으로 변하게 된다.

디자인패턴 하나 배워서 모든 곳에 써먹는 것은 태권도 정권지르기 하나 배워서 그걸로만 싸우는 격이다. 분명히 도움은 되지만 상황에 맞게 적절한 방법을 창의적으로 생각해 내는 것이 가장 좋다. 그러기 위해서는 먼저 많이 알아야 하고 경험도 많아야 한다.

하위 설계는 소스코드와 중복이 되므로 그냥 소스코드로 작성하는 것이 좋다. Doxygen이나 JavaDoc을 이용하면 소스코드에서 필요한 설계 문서를 거꾸로 만들어 낼 수 있다.

 결론

설계는 필요한 만큼 적절하게 꼭 해야 한다.

하지만 흔히들 문서화의 부담 때문에 아예 안하거나 적는 방법을 몰라서 너무 많이 적는다.
설계문서는 꼭 필요한 만큼만 적절하게 적어야 한다. 가장 어려운 말이지만 이 이상으로 표현하기는 어렵다.

설계서는 한 페이지가 될 수도 있고 수천 페이지가 될 수도 있다. 스펙이 이를 결정한다.

만약 제대로 된 스펙이 없다면 차라리 스펙을 제대로 적는데 먼저 신경을 써야 한다. 설계는 스펙 다음이다.


image by John E. Lester

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

'프로젝트 > 설계' 카테고리의 다른 글

설계가 필요할까?  (4) 2011/12/22
Software Architect를 양성하는 나라  (8) 2011/12/19
UML전문가가 설계전문가?  (6) 2009/04/15
코더(Coder)의 비애  (6) 2008/11/24

전규현 프로젝트/설계

Trackback Address: http://allofsoftware.net/trackback/250 관련글 쓰기
  1. Blog Icon
    Realbj

    좋은글 잘 읽었습니다...

    기본을 중시한

    보양식 같은 글이네요 ^^

  2. 안녕하세요. Realbj님

    감사합니다.

  3. Blog Icon

    비밀댓글입니다

  4. 감사합니다.

Software Architect를 양성하는 나라

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




우리나라에서는 종종 SW Architect를 양성한다고 한다. 
정부에서 막대한 예산이 지원도 되며 SW Architect를 양성하는 학원도 생기고 야단법석이다.

그럼 도대체 SW Architect는 무엇인가?

 SW Architect 교육을 받아야 Archtect인가? 설계 방법론을 알아야 하는가? 설계 툴을 다룰 수 있어야 하는가?
이런 접근은 SW Architect에 대한 왜곡된 시각을 유발할 수 있다.

SW Architect는 "고참 개발자"이다. 외국에서 SW Architect 양성 학원이 있나 물어보라. 개발자들이 스스로 SW Architect라고 강조하는지 알아봐라. 

그냥
Software를 오래 개발하면서 경험이 쌓이고 고참 개발자가 되면 그냥 SW Architect인 것이다.

그런데 왜 우리나라는 SW Architect에 대해서 열을 올리고 있는 것일까?

아마, 많은 고참 개발자들이 일반적인 기준의 SW Architect에 미치지 못해서 쓸만한 사람이 부족하기 때문일 것이다. 물론, 그 원인이 개발자에게 있다고 전적으로 말할 수는 없다. 환경적인 요소가 크고 그런 환경에서 자란 개발자들은 피해자라고 볼 수도 있다.

그럼, SW Architect라고 말할 수 있으려면 어떤 일을 해야 할까?

SW Architect는 한마디로 Software 설계를 할 줄 아는 사람이다. 물론 설계만 하는 것이 아니고 코딩도 한다. 때로는 스펙도 적는다.

SW Architect라고 불리려면 설계를 제대로 해야 한다. 제대로 된 설계는 현재 뿐만 아니라 미래에 발생할 수많은 요구사항을 유기적으로 고려하여 가장 합리적인 구조를 만드는 것이다.
그리고 설계를 머리 속으로만 하는 것이 아니고
문서로 만들 수 있어야 한다. 이렇게 작성된 설계 산출물을 가지고 설계자 본인이 아닌 다른 사람들이 코딩을 할 수 있어야 한다.

내가 설계한 것을 내가 코딩 할 밖에 없다면 빌딩을 설계한 사람이 벽돌도 쌓는 격이다. 비용적으로 비효율적일 뿐만 아니라 벽돌은 더 잘 쌓는 사람에게 맡기는 것이 낫다.

설계를 잘하려면 우선 분석이 잘되어야 한다. 즉 SRS가 잘 작성되어야 한다. 분석이 대충 되는 환경에서는 좋은 설계가 나올 수도 없다. 또한 우리나라 대부분의 고참 개발자들은 설계서를 잘 작성해서 다른 개발자들이 개발할 수 있도록 넘기는데 아주 취약한다. 그런 식으로 개발을 안 해봤기 때문에 방법을 잘 모른다.

수많은 설계 방법론이나 툴이 이를 해결해주지 않는다. 설계는 형식에 구애받지 않고 가장 효과적으로 기술하는 것이 좋다. 이러한 역량은 따로 배울 수 있는 것이 아니고 좋은 환경에서 경험과 협업에서 저절로 익히는 것이다.

그럼에도 불구하고 많은 SW Architect 교육이 툴과 방법론이 주류를 이루는 것은 이것 외에는 마땅히 전파할 것이 없기 때문이다.

즉, 단시간 SW Architect 교육을 받는다고 설계 역량이 향상되는 것은 아니다. 지식을 아는 것은 도움이 될 수 있지만, 오히려 위험한 경우가 더 많다.

경험과 실력에 걸맞지 않게 지식들이 들어오면 현실성의 판단이 흐려져서 무리한 적용으로 오히려 낭패를 볼 수도 있다. SW Architecture는 적절해야 하는데 그 적절함을 판단하지 못하는 것이다.

정부에서 SW Architect를 양성하는 것 자체를 반대하지 않는다. 그렇게 효율적이지는 않지만 안하는 것보다는 나을 것이다. 하지만 그런다고 단기적으로 많은 SW Architect가 생겨나는 것은 아니다. 그러니 큰 기대는 하지 말자.

본인이 SW Architect가 되고 싶은 사람은 이런 교육에 기웃거리는 것보다는 스펙을 잘 쓰고, 설계를 해서 다른 팀원들에게 개발을 맡겨보는 일에 좀 더 집중하는 것이 좋다. 이것이 처음부터 잘 될리는 만무하다. 하지만 경험을 여러차례 해보면 점점 나아질 것이다. 

그때서야 외부에서 접하는 여러 지식들이 도움이 될 것이다.

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

'프로젝트 > 설계' 카테고리의 다른 글

설계가 필요할까?  (4) 2011/12/22
Software Architect를 양성하는 나라  (8) 2011/12/19
UML전문가가 설계전문가?  (6) 2009/04/15
코더(Coder)의 비애  (6) 2008/11/24

전규현 프로젝트/설계

Trackback Address: http://allofsoftware.net/trackback/248 관련글 쓰기
  1. Blog Icon
    hoony

    좋은 말씀이시네요.

    사내에서 역량강화 혁신이랍시고 추진하는 과제에서...
    1년차 사원을 SA과정에 내 몰고서는 실적 달성.이라고 써놓은거 보고........

    휴..

    사장님이라고 SA가 교육으로 만들어지는게 아닌건 아실텐데 말이죠.

  2. 안녕하세요. hoony님

    사장님이 잘 모르실 가능성이 99%입니다. ^^

  3. 잉여가 없어서 그런게 아닐까요? 여유가 있다면 좀 더 좋은, 좀 더 발전적인 결과물이 나올텐데요. ^^

  4. 안녕하세요. 미물님

    환경과 저변이 척박하기 하죠.

  5. Blog Icon
    Jake Kim

    왜들 이렇게 뭐든지 인위적으로 만들려고 하는지 모르겠습니다. 결국 내용은 보지 않고 겉모습만 보고 따라가려고 하는데에 있지 않나 싶네요.

  6. Jake님 오랫만입니다.

    CMMI인증이 대표적인 사례중 하나 아닐까요?

  7. Blog Icon
    똥꽃

    줄기차게 SRS의 중요성을 말씀하시네요. 그리고 SRS의 전파는 하루 아침에 이루어지지 않는다. 지속적인 자기혁신이 필요하다. 일부 학교에서 SRS 쓰기과정이 있다고 하는데...

    SRS를 잘 쓰는 법 좀 가르켜 주세요.

    어떤 문제를 내고 거기에 SRS양식에 맞춰서 보내봐라...그러면 거기에 첨삭을 한다든지 등의....

    답답한 마음에 적어봤습니다.

  8. 안녕하세요 똥꽃님

    SRS 작성은 소프트웨어를 개발하는데 가장 중요하면서 가장 어려운 일입니다.

    피아노 잘치는 법, 골프 잘치는 법을 한마디로 가르쳐 줄 수 없듯이, SRS도 마찬가지 입니다.

    SRS는 예제가 아닌 실제 프로젝트에서 작성을 해봐야 그 경험이 도움이 됩니다. 가상 프로젝트는 별 도움이 안됩니다. 실제 프로젝트에서 코치가 리뷰를 해주는 것은 도움이 많이 됩니다.
    SRS Template를 이용하는 것은 도움이 되지만 Template만 가지고는 절대로 제대로 작성하지 못합니다.

    KAIST 소프트웨어 전문가 과정에서 Requirement Engineering 과목에서 SRS 작성법을 가르쳐 줍니다. 국내에서는 거의 유일할 겁니다. 해외에서도 과정은 찾아보기 쉽지 않습니다. 교육과정으로 배우기 어렵기 때문입니다.

    점점 더 어렵게 느껴지나요? ^^

프로토타입을 재활용하면 될까? 안될까?

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



며칠 전 프로토타입에 관해 올린 글에 대해서 프로토타입 재사용에 대해서 여러 의견이 있어서 이 내용에 대해서 조금더 설명해보려고 한다.

2011/11/03 - [프로젝트/요구사항분석] - 프로토타입이란?

소프트웨어공학의 목적은 가장 적은 비용으로 가장 빠른 시간에 Software를 만들어내는 것이다.
여기에 부합되면 옳은 방법인 것이다. 하지만 우물 안에서 자신의 방법이 가장 좋은 방법이라고 우기는 것은 미숙함일 뿐이다.

여러가지 의견이 있었지만 모두 옳고 그름으로 구분 지을 수는 없다. 여러 답변들을 맞다 틀리다 얘기를 할 수 없으므로 좀더 원칙에 치중해서 얘기를 해보겠다.

필자의 의견은 프로토타입은 만들어 보고 버리는 것이라고 했다. 또한 버리는 코드라고 생각하고 만들어야 하는 것이다. 프로토타입을 버리는 것이 프로젝트를 가장 빨리 끝낼 수 있는 방법이기 때문이다.

그 이유는 다음과 같은 것들이 있다.
  • 프로토타입의 목적은 가장 빠른 시간내에 Feaserbility study(실현가능성 검증)을 하는 것이다. 보통 실제 프로젝트에 반영될 때 제대로 적히는 소스코드 양의 20%정도의 코드만 적는다. 
  • 보통 에러처리와 약간의 버그는 무시한다.
  • 검증된 것은 스펙에 기능으로 포함될 수 있고 이렇게 작성된 스펙을 외주를 줘서 개발할 수도 있고 회사의 다른 개발자들이 설계, 구현을 할 수도 있다.
  • 이렇게 검증된 기능들은 모두 제품에 반영되는 것이 아니고 많은 기능은 최종 스펙에서 제외 될 수가 있다.
  • 프로토타입은 C언어로 했지만 실제 개발은 Java로 할 수도 있다. 
따라서 재사용 가능하도록 만든다면 낭비가 될 수 있다.

보통 개발자들은 자신이 정성들여서 만들어 놓은 소스코들 버리기 싫어한다. 그래서 어떻게든 소스코드를 재활용해보고자 노력하는 것이 보통이다. 따라서 제품의 비전이나 가치와는 상관없이 자신이 작성해 놓은 코드의 기능을 살려보고자 마케팅의 의견과 반대되게 우겨서 제품에 기능을 포함하기도 한다.

제품의 스펙은 개발자가 일방적으로 정하는 것이 아니고 여러 부서가 같이 정하는 것이지만 특히 개발자보다는 마케팅의 의견이 주가 되는 것이다.

그런데 개발자가 미리 잘 작성해 놓은 코드가 이런 결정에 방해가 되는 경우가 많고 대부분의 소프트웨어 회사의 마케팅은 별 생각이 없기 때문에 그냥 따라가는 경우가 허다하다. 

그럼 프로토타입을 재사용한다는 생각을 하고 만들게 되는 상황은 어떠한가?
이러한 가정들을 사실로 생각하고 개발을 하는 것이다.
  • 내가 스펙을 쓰고 설계를 하고 구현까지 모두 나 혼자 다한다.
  • 프로토타입을 해본 것들은 제품에 모두 포함될 기능들이다.
  • 프로토타입 해본 그 기능 그대로 제품에 반영될 것이다.
  • 프로토타입을 해본 개발 언어 그대로 제품을 개발할 것이다.
  • 프로토타입을 하기 전에 이미 아키텍처도 다 정해서 재 사용하는데 전혀 문제가 안된다.
 사실 아주 작은 제품이나 소수의 팀이 개발하는 제품이 아니라면 위의 모든 것을 가정하기는 대단히 어렵다.

스펙을 작성하는 과정에서 수많이 기능이 추가되고 제거되며 무슨 개발 언어로 개발을 할 것인지 보통 스펙을 작성할 때는 정하지도 않는다. 

어떠한 프로토타입은 개발언어를 정해야 하는 경우도 있고, 라이브러리도 정해야 하는 경우도 있다. 이런 경우라면 프로젝트에 또 제약사항이 생긴 것이다. 물론 프로젝트에 따라서는 스펙단계부터 개발언어와 특정 프레임워크를 사용하도록 정하는 경우도 있다.

스펙을 제대로 작성해야 하는 이유가 이러한 가능성이 있는 수많은 요소들과 제약사항, 가정들을 모아놓고 스펙을 정하는 것이다. 이런 것들을 정하지도 않고 코딩부터 시작하는 것이 흔히 개발하는 방식이다.

이런 프로젝트는 개발자 의지대로 그냥 개발이 되던가 나중에 뒤엎는라고 비용가 시간을 낭비하던가 제품이 점점 뒤죽박죽이 되어서 못써먹게 되는 경우가 많다.

프로토타입을 재활용할지 말지 하나의 이슈만 보면 원칙은 재활용하지 않는 것이 맞다.
하지만 위에서 말한 것들을 모두 알고 스펙도 제대로 쓰고 설계도 제대로 하고 개발을 하는데 재활용하는 것이 옳다고 생각한다면 프로토타입재사용도 틀린 방법은 아니다.

단, 적은 경험과 미숙함을 기반으로 기존에 하던 방식을 그냥 따라하는 것은 주먹구구의 연장선이 될 수 있다.

Image by ッ Zach Hoeken ッ


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

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

Trackback Address: http://allofsoftware.net/trackback/246 관련글 쓰기
  1. 저는 프로토타입은 2가지 경우에 사용한다고 생각합니다.

    1.고객과의 의사소통용(UI가 주가되는 프로토타입)
    2.기술검증용

    1번의 경우야 말할것도 없이 요구분석이 끝나면 버려야 하는 것이죠.
    2번의 경우는 기술검증이 실패하면 어차피 버려질 코드입니다.
    물론 성공했을때에 코드를 정리하여야 하지만 프로토타입을 만들때 발생하는 실패리스크에 비하면 그렇다하게 큰 리스크라고 보기는 힘든것 같습니다.

    물론 프로토타입을 만들면서 발생한 이슈나 기술에 대한 이해가 떨어지는 상태로 만든부분은 주석으로 표시를 해두는정도의 정성은 있어야 한다고 생각합니다.

    이 포스트에서 지적하신대로 자신의 코드에 저도 집착 합니다 ㅎㅎ;;그래서 테스트는 했지만 스팩아웃된경우 따로 정리해놨다가 블로그에 올리곤 하죠.
    최소한 다음번에 같은 검증을 하지 않아도 되게 정리해두는것도 좋은 생각인것 같습니다.

  2. 안녕하세요. 당근천국님

    여기서 UI프로토타입은 전혀 언급하지 않았습니다. ^^ 별이슈가 없거든요.

    현재 프로젝트의 특성이나 조직의 상황을 고려하여 가장 적절한 방법을 택하신 것으로 이해가 됩니다. ^^

  3. Blog Icon
    아무것도모름

    좋은 글 잘 보았습니다. 저도 SW 분야에서 근무한지가 두자리 숫자를 좀 넘어가면서
    쓰신 내용에 대해서 감성적으로, 이성적으로 공감을 하는데요....

    국내 현실은 너무나 무지한 것 같습니다. 모든 프로젝트가 그렇지만 일정, 리소스가 부족한데
    비해 '우아한' 행위 - 불필요한 임원보고, 언론플레이용 데몬스트레이션 등 - 에다가 정작 개발하고자
    하는 서비스/제품은 말도 안되고 유저 입장에서는 뭥미할만한 것인데 기획/UI는 수시로 변경하면서
    실제 개발에 드는 시간은 쉽게 잡아먹고 마는 현실이....--;;

    프로토타입을 대함에 있어서 고객은 '프로토타입'과 '실제 제품'의 차이를 인지하지 못하는 경우가
    허다하다고 봅니다. 저도 수없이 많이 겪어봐서 사실...좀 회의적이긴 한데요...프로토타입을 통한
    기술 혹은 시제품 정도의 검증으로 인식하게 하려면 어떤 방법이 있을까요?

    일하면서 성격이 시니컬하게 변하는 걸 느끼고 있어서....희망적인 뭔가가 있기를 기대하면서
    살고 있습니다.

    항상 좋은 글 감사합니다.

  4. 안녕하세요.

    그래서 소프트웨어를 개발하는데 있어서 가장 어렵고도 중요한 것이 스펙을 쓰는 겁니다. 즉 분석이 어렵다는 얘기죠.

    UI프로토타입의 경우 그럴듯한 화면을 보여주면 개발이 거의 된 것으로 착각하는 경우가 있습니다. 그래서 몇몇 UI프로토타입 툴들은 진짜 프로토타입처럼 찌글찌글하게 보여주는 것들이 있습니다. 딱 단순히 프로토타입인것을 알게 됩니다.

    마인드를 바꿔야 하는데 다른 사람의 생각을 바꾸는 것이 쉽지는 않죠.

    제가 쓴 "소프트웨어 개발의 모든 것"이라는 책을 사서 읽어보라고 해보세요. 여기에 관련된 거의 모든 내용이 이해하기 쉽게 정리되어 있습니다.

  5. Blog Icon
    MdadKight

    버리지 못 할 것 같으면 실용주의 프로그래머에 나왔던 예광탄 방식을 활용해볼 수도 있습니다.

프로토타입이란?

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



프로토타입 (경제/경영)

양산(量産)에 앞서 제작해보는 원형(原型)을 '프로토타입'이라 하는데, 프로토타이핑이란 개발자들과 사용자들의 의사소통상의 효과를 증진시키기 위하여 취하는 시스템개발상의 기법이다. 일반적인 분석방법을 취할 경우 양자간에 서로 다른 이해를 가져올 수 있으므로 프로토타입이라는 의사소통도구를 만들자는 것이다. 프로토타이핑은 그 목적에 따라 여러가지 형태가 있다.

by 다음 백과사전 (http://100.daum.net)

소프트웨어 개발을 할 때 프로토타입은 여러 용도로 사용된다. 특히 고객과 스펙을 의논할 때 고객의 이해를 돕기 위해서 UI프로토타입을 만든다.

이외에도 기술적인 검증을 위해서 프로토타입을 만들어 보는 경우도 있다.
스펙을 작성하다보면 이것이 가능할지 불가능할지 잘 모른 경우가 있다. 스펙이 이렇게 불분명한 부분이 가득하다면 십중팔구 프로젝트는 산으로 갈 것이다.

그래서 스펙을 쓰면서 나중에 코딩에 들어가기 전에 미리 한번 만들어보는 것이다. 이렇게 만드는 프로토타입은 되는지 안되는지만 검증을 하는 것이므로 최대한 간단하게 만든다.

회사의 코딩 규칙을 따르지도 않고
에러 처리도 제대로 하지 않고
주석도 달 필요가 없다.

제대로 개발하려면 1주일 이상 걸릴 것도 몇시간에 걸쳐서 되는지만 확인해보는 것이다.
그렇기 때문에 이때 작성한 소스코드는 버리는 것이다. 절대 재활용하면 안된다. 규칙도 따르지 않고 에러처리도 안되고 주석도 없는 코드를 재활용하는 것은 대단히 불안한 일이다.

이렇게 검증을 해나가면서 스펙을 적으면 프로젝트가 계획된 시간에 끝날 가능성이 점점 높아지게 된다.

그렇다고 모든 내용을 다 검증해가면서 스펙을 적을 수는 없다. 어떤 항목은 된다는 감을 믿고 그냥 적어야 할 때도 있다. 모든 것을 다 검증하면 비용과 시간이 너무 많이 들기 때문이다. 따라서 검증할 것을 적당히 조율하면서 어느정도 Risk도 감수를 하면서 프로젝트를 진행해야 한다. 이때 발생한 Risk는 별도의 Risk 관리를 통해서 제어를 해야 한다.

프로젝트는 "해봤더니 안되더라"가 아니다.
그렇다고 모든 것을 검증하면서 할 수는 더욱 없다.
적절한 프로토타입을 통한 검증과 적절한 Risk관리를 병행하는 것이 가장 효율적이다.

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

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

Trackback Address: http://allofsoftware.net/trackback/241 관련글 쓰기
  1. 프로토 타입 코드는 가능성을 타진하는 것이니 품질에서는 상관없이, 오로지 가능성 타진에 초점을 둬야 하고, 그 때 쓴 코드는 절대로 재활용해서는 안되고, 폐기 처분 해야 한다!!!
    항상 이 말을 하는데도, 담당자들은 뭐가 아쉬운지, 재활용하려고 하네요... Copy & Paste 신공이 있는데 왜 못 쓰게 하냐고...

    "모든 로직은 네 머리 속에 있잖아... 너를 믿어..." 라고 말해줍니다.

  2. 안녕하세요. 디밥님

    Copy & Paste는 지옥의 시작이라는 것을 알아야 하는데 말이죠.

  3. copy & paste 와 reuse의 차이점이 무얼까 갑자기 고민이 들게 되네요 ㅎㅎ

    프로토타입이라고 해서 거기에 들어가는 라이브러리나 함수이름들이
    실제 개발시에 사용하지 않는것도 아니고 단지 예외처리부분이 빠졌을 뿐 실제 작성될 코드와 거의
    코어로직은 동일할텐데 다시 백지에서 부터 개발하라고 한다면
    개발자에게 조금 잔인한 처사 같은데요 ㅠ.ㅠ

  4. 구차니님 안녕하세요.

    Copy & Paste의 진정한 지옥은 소스코드를 여기저기 복사해서 회사에 비슷한 소스가 여러벌 존재하는 것이죠.

    프로토타입은 버린다고 생각하고 만드는 것이지만, 그 Logic은 다시 쓸 수 있죠.
    그렇다고 프로토타입을 만들 때 복사해서 쓸 것을 예상해서 코딩 규칙도 지키고 제대로 하려면 시간이 더 많이 걸립니다.
    백지부터 타입을 하는 것은 아니죠. ^^
    가장 빠르게 검증 목적으로 만든 경우는
    기존 소스코드를 그대로 붙여 넣기를 할 수는 없고, 붙여넣더라도 함수이름도 다 바뀌고 90%는 바뀔 겁니다.
    프로토타입이 재사용이 충분히 가능하도록 잘 만들어졌다면 시간을 좀 많이 쏟은 것이 아닌가 생각해볼 필요도 있을 것 같습니다.

  5. 저는 프로토타입을 꼼꼼하게 만드는 사람을 많이 봤습니다 ㅡ.-;;;
    프로토타입만드는데 변수명하나하나까지 고민하죠;;

    속으로
    "그 정성으로 주석이나 재대로 달라고!!!"
    라는 생각을 했습니다.

  6. 당근천국님 안녕하세요.
    동감입니다.

  7. 프로토타입의 재사용에 대해서는 의견이 분분할 수 밖에 없을것 같습니다. 코딩을 많이 하다보면, 변수 이름, 함수 이름등은 당연히 다시 사용할만큼의 이름을 가질 것 같습니다. 코딩 규칙도 마찬가지구요. 주석이야 없을 수 있다고 하지만, 경험자에 의해서 잘 만들어진 프로토타입의 소스는 다시 쓸 가치가 있을 것 같습니다.

    꼭 버려야만한다고 생각하지는 않습니다.

  8. zelon님 안녕하세요.

    이분법으로 얘기하기 어렵지만 원칙은 있습니다. 이에 관련된 글을 한번 올릴께요.

    감사합니다.

주석을 달기 어려운 이유

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



코딩을 하면서 주석을 적절히 잘 달아야 한다는데는 이견이 없을 것이다. 하지만 현실은 주석이 제대로 달린 코드를 찾아보기 어렵다.

"주석이 제대로 달렸다"의 애매한 기준을 명확하게 정리해보면 다음과 같습니다.
  • 과도한 주석은 나쁘다. 비용이 너무 많이 들어간다.
  • 소스코드를 활용하고 유지보수하는데 어려움이 없어야 한다.
  • 업데이트가 되어서 소스코드와 일치되어야 한다. 
  • 전체적으로 일관된 표준을 지켜야 한다.  
주석하나 없이 깨끗한 소스코드나 있어도 소용없는 주석은 개발에 보통 어려움이 있는 것이 아니다. 약간의 시간을 투자해서 주석을 달게 되면 투자대비 몇배의 효과를 볼 수 있다.

그럼 가장 효과적으로 주석을 다는 방법에 대해서 알아보자.

회사의 주석 표준을 정한다.

Doxygen이나 Javadoc등의 표준 주석 Notation을 따르면 여러 툴의 많은 도움을 받을 수 있고 가독성이 높아진다. 신입사원이 들어와도 널리 알려진 표준이므로 쉽게 따라할 수 있게 된다.

주석은 소스코드보다 먼저다.

주석은 코딩하면서 짬짬히 다는 것이 아니다. 코딩 이전에 설계 시 Public function을 정의하면서 주석을 먼저 작성한다. 이렇게 설계를 해서 완벽할 때 구현(코딩)에 들어가면 된다.
코딩을 하면서 Public interface가 자주 바뀌면 주석도 바꾸기 매우 귀찮아지게 된다.
하위 설계는 코드와 주석을 적당히 이용하게 되면 문서로 작성할 필요가 없이 대부분 소스코드로 작성할 수 있다.

Public function 위주로 주석을 단다.

모든 소스코드에 주석을 달아야 한다고 하면 헬스클럽 1년 끊어 놓고 일주일 운동하고 포기하는 사태가 발생하게 된다. 당장 바쁜데 언제 시간을 내서 주석을 달 수 있겠는가? 
Public function은 다른 개발자들이 가장 빈번하게 참조를 해야 할 함수들이다. 같은 시간에 주석을 달아서 가장 효율성이 높다.
하지만 모든 함수가 Public function이라면 효과도 없고 프로그램은 뒤죽박죽이 된다. 미리 Public function을 정하게 되면 최소화를 할 수 있다. 가능하면 거의 모든 함수를 속으로 숨기고 밖으로 최소한의 Interface만 open할 경우 프로그램도 간결하게 되고 유지보수도 쉬워진다. 
Doxygen이나 JavaDoc을 이용하면 API 메뉴얼이 근사하게 나오게 된다. 이 문서만 봐도 개발자들이 개발하는데 대단히 큰 도움을 준다.
이는 소스코드와 주석/설계문서를 지속적으로 일치 시키는데 지대한 도움을 준다.

주석같은 소스코드가 좋다.

복잡한 소스코드를 작성하고 주석으로 설명하는 것보다는 약간 효율이 떨어져도 가독성 높게 소스코드를 풀어서 쓰는 것이 좋다. 따라서 함수의 크기는 작게 유지하면서 읽어 내려가기 쉽게 작성하는 것이 좋다.
성능에 목숨거는 알고리즘을 개발하는 것이 아니라면 가독성 높은 소스코드를 작성하는 것을 높은 우선순위로 두는 것이 좋다. 왜냐하면 소스코드는 개발비보다 유지보수비가 몇배 더 들기 때문이다.

Prototyping 시에는 주석이 필요없다.

Prototyping한 소스코드는 버려야 한다. Prototype은 주석도 없고 에러처리도 안하고 가장 빠르게 검증을 해보는 것이다. 제품화 할 코드는 이것보다 몇배의 시간이 더 걸린다. 따라서 Prototyping을 한 소스코드는 꼭 버리고 제대로 설계를 해서 다시 만들어야 한다. 단, 참조는 가능하다.

처음에는 강제화가 필요하다.

강제화를 위해서는 리뷰가 필수이다. 코드 리뷰보다는 설계 리뷰가 중요하다. 설계 단계에서 대부분의 Public interface의 주석을 미리 완성하고 코딩에 들어가면 협업도 원활하고 재작업도 줄어든다. 그리고나서 코딩단계에서의 주석은 크게 강조하지 않아도 될 것이다.
규칙으로 무조건 주석을 달라고 강제하는 것보다는 정공법으로 분석/설계 리뷰를 통해서 설계가 끝났을 때 주석이 이미 달린 소스코드 헤더가 나오는 것이 좋다.


무조건 코딩부터 달려드는 것보다는 한번 더 생각해보고 Public interface를 먼저 정의하고 주석을 작성해서 리뷰하고 코딩을 하는 것이 전체 개발시간을 현저하게 단축 시켜준다. 시간이 없어서 주석도 없는 코딩만 마구 해대는 것은 핑계에 불과하다. 

효과적으로 주석을 다는 습관을 가지고 있다면 여러 동료들에게 사랑을 받고 후배들의 존경을 받을 것이다.

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

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

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

주석을 달기 어려운 이유  (9) 2011/09/09
Copy & Paste의 종말  (9) 2009/07/31

전규현 프로젝트/구현 주석, 코딩

Trackback Address: http://allofsoftware.net/trackback/235 관련글 쓰기
  1. 2011/09/09 13:45
    각혈염통의 알림 Tracked from hemoptysis' me2day
  1. Blog Icon
    popopome

    사랑과 존경을 받는 주석이 맘에 와닿네요. *^^*

    제 경우에는 주석 = 종교와 동일한 방식의 자세가
    중요 포인트입니다.

    대게 모든 함수와 모듈에는 주석을 달아야하고,
    로직 코드 내의 주석은 why에 focus를 하는 것이
    여러모로 편하더군요.

  2. popopome님 반갑습니다.

  3. 후배와 동료의 사랑보다 발뺴기가 편하려고 주석을 달아 놓습니다 ㅋㅋ

  4. 구차니님 안녕하세요.
    발 못빼게 하려고 주석 안다는 사람도 많습니다.
    자기 아니면 다른 사람은 잘 못하게 만들어 놓은 것을 파워라고 생각하는 사람들이죠.
    한마디로 물귀신이죠. ^^

  5. Blog Icon
    한금이

    주석 이전에 코드에 대한 정리가 먼저 일듯 합니다.
    주석이 없는 코드로 주석을 대신할 수 있을정도로 코드에 대한 가독성을 높이는 것이 먼저일듯 하구요.

    그 다음이 주석인데... 사실은 주석을 이렇게 저렇게 달아라 하는것은 자치하면 습관성이 될수 있으므로,
    코드를 작성하는 것처럼 주석을 작성하는 연습과 교육이 필요할듯 합니다.

  6. Blog Icon
    황석주

    저는 개발자가 아니지만 주석은 개발자의 발자취라고 생각되며, 또한 주석 한줄한줄이 소스 못지 않은 자산이라고 생각됩니다.


    잘 지내시죠? 뵙고 싶습니다.

  7. 황차장님 오랫만입니다.
    잘 계시죠? ^^ 조만간에 또 뵐날이 오겠죠.

  8. 저는 주석을 소설처럼 다는 스타일입니다 ㅡ.-;

    지금 까지 딱3분 빼고 다들 좋아하셨죠.
    어쩌면 그만큼 개발자들이 주석달기를 싫어하는 걸 반영하는 걸지도 모르겠습니다.

    유지보수해보면 주석 재대로 달린경우를 거의 못본것 같습니다-_-;
    이름만 들어도 알만한 회사들 조차 말이죠.

    그나마 요즘은 많은 회사들이 퍼블릭펑션에 대한 주석은 강제하는것 같습니다.
    (퍼블릭펑션은 시키지 않아도 주석다는 센스는 개발자의 센스라고 생각하지만 말이죠 ㅎㅎㅎ)

  9. 안녕하세요. 당근천국님.

    Public function을 제대로 구분해서 쓰지 않는 개발자도 수두룩합니다. ^^

    public function에 Doxygen으로 주석을 달면 더 좋죠.

90%에서 끝나지 않는 프로젝트

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



Software 개발 프로젝트에서 일정이 늦어지는 경우는 흔하다. 초기 일정을 완벽하게 맞추어서 끝내는 프로젝트는 구경하기 힘들 정도이다.

그 중 대부분의 프로젝트는 90%까지는 진도가 착착 잘 나가는데 10%를 남기고 나서 일정이 계속 지연되곤 한다. 남은 10%를 끝내기 위해서 90% 끝내는데 걸리는 시간보다 더 오래 걸리는 프로젝트를 보는 것은 그리 쉬운 일이 아니다. 설령 일정에 밀려서 출시를 해도 버그가 많은 알파버전 수준의 제품을 출시해서 고객들의 원성을 사기 일쑤이다.

경영자는 매달 개발자들이 하는 다음달이면 끝난다는 얘기를 반복해서 듣게 된다.

이러한 상황을 개발자들은 그렇게 심각하게 보지 않는 경우가 많다. 하지만 비즈니스를 하는 사람은 이것이 비즈니스를 하는데 얼마나 심각한 문제가 되는지 잘 알고 있다.

소프트웨어 공학은 프로젝트 일정을 단축하고 계획대로 개발할 수 있도록 하기 위한 방법에 온 힘을 기울여 왔다. 소프트웨어 공학에서 다루는 거의 모든 분야는 일정 준수에 포커스를 하고 있다고 해도 과언이 아니다.

남은 10%의 일정이 그렇게 잘 안끝나는 주요 원인들은 다음과 같은 것들이 있다.
  • 스펙을 충분히 제대로 작성하지 않았다. 단순한 요구사항을 가지고 개발자들이 알아서 개발을 한다.
  • 설계가 허술해서 인터페이스가 자주 바뀐다. 통합이 잘 안되서 통합하는데 시간이 많이 소요된다.
  • 상세 일정이 없이 큰 단위의 마일스톤만 가지고 있다. 일정관리는 거의 안한다.
  • 리스크 관리는 해본적도 없다.
  • 제품이 개발되기 전까지 스펙이 공유가 안되서 영업이나 경영층에서 프로젝트 막바지에 제품의 모습을 보고 요구사항을 계속 추가로 요청한다. 
  • 프로젝트 일정에 테스트 일정을 충분히 고려하지 않았다. 테스트 케이스를 제대로 만들지 않고 테스트 인력이 부족해서 테스트 할 때마다 계속 새로운 버그가 발견되서 끝나지를 않는다.
개발 방법론이 라이프 사이클들은 여러가지가 있고 최근에 유행을 타는 것들도 있지만 결국에는 스펙을 상세히 제대로 작성하는 것이 근본적인 프로젝트 일정을 지키는 방법이다. 스펙을 제대로 작성하지 않고 여러가지 기법으로 해결할 수는 없다. 스펙을 작성하는 방법이 어찌되었든 스펙이 정확하고 상세해야 정교한 일정 예측 및 관리가 가능해지게 된다. 이런 경험이 점점 쌓이면 일정을 지키는 프로젝트가 점점 늘어 갈 것이다. 그러기 때문에 스펙을 잘쓰는데는 10~20년의 경험이 필요한 것이다.

대충 개발자들이 알아서 개발해주고 일정은 하늘(개발자인가?)에 맡기는 방법에 익숙해진 개발자들은 이런 정교한 일정관리에 거부감을 가질 수는 있으나 결국에는 일정을 지키는 방법이 개발자의 역량을 향상시키는 방법과도 일치하기 때문에 개발자 손에 달린 프로젝트가 개발자에게 파워를 가져다 준다는 생각은 버리는 것이 좋다.

프로젝트 일정은 10%가 남았다면 진짜로 10%만 더 지나면 끝나야 한다. 

 * 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.
image from
 http://dimland.blogspot.com/2010_08_01_archive.html 
저작자 표시 비영리 변경 금지

전규현 프로젝트/일정 스펙, 일정

Trackback Address: http://allofsoftware.net/trackback/229 관련글 쓰기
  1. 프로젝트 일정 자체가 범위와는 무관하게 비즈니스 목표일정으로 정한 후 최대한 많은 기능을 넣는 프로젝트도 있고, 기획이 되지 않은 상황에서 일정추정을 강요하는 환경도 많이 있습니다. 이런 경우는 어떻게 대처해야 좋을지 혹시 좋은 의견이 있으신지요? ㅠㅠ

  2. 이런 프로젝트는 범위도 불투명한 상황에서 일정이 남는다 모자른다 아무리 싸워도 아무 의미가 없게 됩니다. 개발자들은 막연히 일정이 모자른다고 하지만 또한 대부분 늦어지지만, 초기에는 아무 근거도 없이 동대문시장에서 물건 깎듯이 아규를 하게 됩니다.

    가장 좋은 방법은 최대한 빨리 스펙을 쓴 다음에 근거를 가지고 얘기를 하는 겁니다. 일정의 근거가 명확해지면 기획이나 영업에서 무조건 우기기에도 궁색해지게 됩니다.

    또한 기획도 되지 않은 상황에서의 일정 추정은 무리지만 일단 대략의 일정을 주고 꼭 스펙을 써봐야 정확한 일정을 다시 산정할 수 있다고 강조를 해야 합니다. 이를 잘 이해 못하는 사람들도 많지만 이해를 시켜야 합니다.

    기능을 무조건 많이 넣는 것은 키친씽크입니다. 쓸데 없는 기능을 잔뜩 넣는 겁니다. 스펙을 쓰고 WBS에 근거해서 상세 일정이 나와야 쓸데 없은 기능으로 얼마나 일정이 늦어지는지 근거를 제시할 수 있고 이런 기능은 빼고 출시 할 수 있습니다.

    결국 근본적인 해결 방법이 가장 좋은 방법입니다. 문제는 스펙을 잘 작성하는 것이 소프트웨어 개발에서 가장 어렵다는 것입니다. 꾸준히 경험을 쌓아야 합니다.

  3. 의견 감사합니다. ^^ 고객이 무엇을 하고 싶은지도 모르는 상황에서 스펙을 이끌어낸다는 것은 무척이나 어렵군요 ㅠㅠ. 하지만 이게 바로 경험이고 능력이 아닐까 생각합니다. 말씀하신 부분을 명심해서 실천을 해보도록 하겠습니다.

  4. 한가지 더 말씀드리면 고객이 무엇을 하고 싶은지 모르는 상황은 매우 자연스러운 현상입니다. 특히 우리나라에서는 고객이 전문가도 아니고 노력도 안합니다. 우리나라가 좀 심하긴 하지만 외국이라고 고객들이 그렇게 잘 알지 못합니다.
    그래서 스펙을 제대로 작성하는 것이 어렵고 그게 실력의 차이입니다.
    고객이 잘 모르고 개발팀도 잘 모르면 산으로 갈 수 밖에 없습니다. 코딩하기 전에 스펙을 제대로 적고 개발해야 다 만들어 놓고 기능 추가 변경을 반복하지 않을 수 있고 기간과 비용이 절약됩니다.
    아무튼 코딩은 늦게 할 수록 이익입니다. ^^ 이걸 이해하려면 한참 걸립니다.

스펙에 있어서는 안될 표현들

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



필자는 여러 개발자들이 작성해 놓은 스펙문서를 볼 기회가 많다. 대부분 99.9% 스펙이라고 하기에는 내용적으로 부족하고 리뷰도 부족한 문서들이지만 우선 각 문장을 하나씩 보다라도 고쳐할 부분이 매우 많다.

스펙(SRS)은 작성을 하고나면 이를 토대로 비즈니스도 하고 설계/구현도 하고 테스트팀은 테스트를 준비한다. 따라서 각 내용은 매우 정확하게 적어야 하며 두루뭉실하게 적으면 안된다. 하지만 정확한 표현을 하는 습관을 가지고 있지 않은 거의 대부분의 개발자들은 무심코 대충 작성을 하게 된다. 이는 수많은 오해를 유발해서 재작업과 품질 저하를 초래한다.

사실 원칙은 간단하다. 오해를 불러일으키지 않게 정확하게 작성해야 하고 범위를 구체적으로 명시해야 한다. 또한 정량적인 테스트가 가능하도록 설명해야 한다. 비즈니스 관련된 부분은 예외이다. 

그럼 스펙을 작성할 때 피해야 할 표현들에는 어떤 것이 있나 알아보자.

SMTP를 지원해야 하다.
지원한다는 말은 대단히 모호한 표현이다.  지원해야 하는 범위를 아주 구체적으로 기술해야 한다.

1~5의 값을 가진다.
1,2,3,4,5인지? 1,3,5인지? 1~5의 float값인지? 그 정밀도와 가질 수 있는 값을 정확하게 기술해야 한다.

데이터를 효율적으로 저장해야 한다.
효율적이라는 표현은 모호한 단어로서 피해야 한다. 메모리나 CPU 자원 대비 효율적인지,  Storage 용량을 적게 차지해야 하는지, 성능이 중요한지 구체적으로 적어야 한다. 또한 정확하게 요구되는 수준을 수치로 표시하는 것이 좋다.

사과, 배, 복숭아 등등을 지원해야 한다.
등등은 사용해서는 안된다. 지원해야 하는 모든 항목을 다 나열해야 한다.

기존의 값과 동일하다.
기존이 무엇인지 구체적으로 명시를 하고 해당 문서가 있으면 Link를 걸어줘야 한다.

충분한 메모리를 할당해야 한다.
충분하다는 것이 정확하게 얼마인지를 명시해야 한다.

사용자에게 친숙한 화면을 제공해야 한다.
어떠한 사용자가 친숙함을 느끼기 위해서 제공해야 하는 정확한 요구를 구체적으로 설명해야 한다.

일반적인 조건을 모두 만족해야 한다.
일반적인 조건을 구체적으로 기술해야 한다. 또한 일반적이지 않은 상황에서 시스템이 어떻게 되는지도 설명이 되어야 한다.

필요한 경우 메모리를 추가로 할당한다.
필요한 경우를 정확하게 판단할 수 있는 조건을 구체적으로 설명해야 한다. 수치가 나오면 좋다.

이외에도 수많은 표현들이 있다. 개발자라면 적어도 개발문서에서 이런 표현들이 나오지 않도록 항상 조심하는 습관을 갖는 것이 좋겠다. 이것도 하루아침에 이뤄지지 않는다.

* 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.
image by 
churl
저작자 표시 비영리 변경 금지

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

Trackback Address: http://allofsoftware.net/trackback/225 관련글 쓰기
  1. Blog Icon
    M

    모호한 표현을 피하고 구체적으로 기술해야 된다가 핵심이군요. 두 번 물어보게 만들지 않게 한다도 통하는 말일듯 해요.

  2. 안녕하세요. M님
    습관이 중요합니다.

  3. 글 내용에도 있지만, Business Logic에 해당하는 부분은 열외이기는 하지만, 기술적인 부분과 섞여 있을 때가 난감합니다. 보통의 경우 SRS를 확정지으려고 하지 않고, 자꾸 뒤로 미루는 경우가 많거든요.

    개발자들도, 실제 개발에 쓰는 용어와 고객과의 대화시에 쓰는 용어를 구별해서 썼으면 좋겠는데... 개발할 때 두리뭉실 하는 경우가 많네요. 이러면 안되는데...

    또한가지 개발자들이 자주 놓치는 부분이 "단위" 표기 입니다. 시간인지 분인지, Kg인지 g 인지 등등 이 점이 굉장히 중요하다고 생각하는데, 의외로 많이들 놓치더군요.

  4. 디밥님 안녕하세요.
    개발자들은 결정을 하지 않고 자꾸 뒤로 미루려는 성향이 있습니다. 하지만 뒤로 미룰수록 더 복잡하고 비용이 많이 들기 때문에 미리 결정할 수 있는 것들은 최대한 빨리 결정해서 확정을 하는 것이 중요합니다.
    좋은 의견 감사합니다.

  5. 개발용 문서를 보면 확실이
    이전 버전과 동일 이라는 말 만큼 짜증나는 문장도 없는것 같아요 ㅋ

  6. Blog Icon

    비밀댓글입니다

  7. Blog Icon
    정도유

    스펙을 주고 외주개발한다는 가정하에 작성하는 것이 좋습니다.
    그리고 문서든 코드이든 Review를 하는 것이 가장 좋습니다.
    Review는 SE 분야에서 연구자와 실무자가 모두 품질 향상에 도움이 된다고 인정한 유일한 툴입니다.

  8. 정도유님 안녕하세요.
    이말을 제대로 이해하고 있는 개발자나 경영자는 정말로 만나보고 어렵습니다. ^^

문서가 없으면

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


작은 프로젝트인 경우 문서를 거의 만들지 않고 개발을 하면 더 효율적이라고 생각할 수도 있다.
가끔은 그렇게 생각할 수도 있다. 너무 시간이 없다는 핑계를 대기도 한다.

하지만 이렇게 해서 모든 프로젝트에 문서가 거의 없으면 개선을 하려고 하는 회사에서 도움을 요청해도 막상 도와주기가 매우 어렵다.

문서가 거의 없어서 모든 것을 물어보면서 파악을 해야 한다. 있는 것이라고는 거의 쓸모 없는 문서와 소스코드인데 소스코드는 회사와 제품을 파악하는데 별 도움이 안된다.

문서가 제대로 있다면 80%는 문서를 보고 20%만 물어 보면 된다.

이때 개발을 하고 나서 나중에 만드는 문서는 그 효율성이 반으로 줄어든다.
나중에 만드므로 일단 충실도가 떨어지고 개발하기 전에 만들때 고려해야 할 요소들은 프로젝트가 이미 끝났기 때문에 다 생략된다. 사실 제대로 적기도 어렵다.
이런 문서라도 없는 것보다 낫기는 하지만 프로젝트만을 위한 것이라면 이런 문서는 별로 필요도 없다. 유지보수를 위해서라면 차라리 코드를 보는 것이 낫다. 들어간 시간에 비해서 효과가 별로 없다는 뜻이다.

이는 신입사원이 입사를 했을 때에도 똑같다. 개발팀에 합류하여 제대로 개발을 시작하려면 프로젝트를 파악해야 하는데 문서가 없으면 파악하기가 너무 어렵다.

선배들이 말로써 하나씩 설명을 해줘야 하는데 다들 바빠서 그렇게 할 수가 없다. "멘토" 또는 "사수"를 정해서 알려주라고 하는데 어디 사수들이 그렇게 한가한가?

그러다 보니 신입 개발자들은 제 능력을 발휘하려면 너무 오랜 시간이 걸린다. 거의 자수성가 식으로 소스코드를 보고 분석해서 하나씩 시행착오를 거쳐서 배워야 한다. 이 과정에서 버그도 많이 양산해내게 된다. 

몇 년이 지난 후에 이제 좀 개발을 할만하면 또 후배가 들어온다. 해 온 방식이 이 방식이라 후배들에게 똑같이 전수를 하게 된다.

즉 "악순환"인 것이다.

프로젝트를 진행하면서 프로젝트 기간을 단축하기 위해서 당연히 만드는 문서들은 다른 개발자들이 도와주기 쉽게 만든다. 

무슨 문서를 얼마나 자세히 만들어야 하는지는 프로젝트마다 다르다. 하지만 내가 경험한 수많은 프로젝트들은 문서가 그렇게 많이 필요하지 않았다. 설계문서까지도 필요 없는 경우도 매우 많다. 어떤 문서를 어떻게 적는 것이 가장 효율적인지는 경험에서 나온다. 경험없는 개발자들이 문서를 아예 적지 않거나 너무 많이 적는다.

너무 많이 적을 바에는 아예 문서를 적지 않는 것이 나은 경우도 많다.

문서는 딱 필요한 만큼만 적어야 한다.

그래야 다른 사람이 도와줄 수 있고 나는 더 가치 있는 일을 할 수 있다.

* 이 포스트는 blogkorea [블코채널 : 꿈꾸는 소프트웨어 개발자 세상] 에 링크 되어있습니다.
저작자 표시 비영리 변경 금지

전규현 프로젝트 문서

Trackback Address: http://allofsoftware.net/trackback/219 관련글 쓰기
  1. 확실히 살아있는 문서를 관리하는게 상당히 힘든걸 또 다시 깨닫고 있게 됩니다.
    그런 이유에서 doxygen과 같이 소스코드를 문서화에 포함하는 게 아닐까 싶기도 하구요 ^^

  2. 구차니님 안녕하세요.
    그래서 문서는 가능하면 적게 꼭 필요한 만큼만 만들어야 합니다.
    설계서의 일부를 Doxygen으로 대신 하는 것은 매우 좋은 방법입니다.

경영진이 너무 촉박한 일정을 제시합니다.

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


나는 프로젝트 일정에 대해서 항상 "일정은 개발자가 산정해야 한다"고 얘기를 해왔다.

그런데 많은 개발자들과 얘기를 해보면 자신들은 도저히 그렇게 할 수 있는 상황이 아니라고 한다. 일정은 위에서 확정이 되어서 내려오기 때문에 개발자가 정할 수 없다고 한다. 또한 항상 촉박한 일정을 지시하기 때문에 스펙이나 설계는 작성할 수도 없고 코딩부터 한다고 한다. 자신들도 체계적으로 개발을 하고 싶지만 도저히 그럴 시간이 없다고 한다.

경영진이 일정을 제시하는 것과 개발자가 일정을 산정하는 것은 완전히 상반된 얘기가 아니다.

경영진은 어떤 프로젝트를 진행하기 위해서는 일정이 필요하다. 경영진이 일정을 정했다고 해서 불가능한 일정이 가능해지는 것은 아니다. 프로젝트는 들어가야 할 시간은 다 들어간다. 자칫 서두르다가 더 느려질 수 있다.

경영진이 지시한 일정은 경영자의 입장에서 필요한 일정을 제시한 것이다. 이 일정은 변경해도 되는 경우도 있고 절대 변경하면 안되는 경우도 있다.

어떠한 경우라도 이 일정을 지키는 가장 좋은 방법은 개발자가 일정을 산정하는 것이다.

일정을 산정하기 위해서는 스펙을 제대로 쓰고 1,2일 단위로 상세 일정을 개발자가 산정해야 한다. 이쯤되면 전체 일정에서 20~30%의 시간이 지난 시점이 된다.

이때 상당히 정확한 일정이 나오면 경영진이 지시한 일정을 지키기 위한 방법을 강구할 수 있다. 이 일정이 경영진이 제시한 일정과 차이가 없다면 다행이지만 촉박한 일정이라면 스펙을 조정하거나, 개발자를 더 투입할 수 도 있다. 아직 설계, 구현이 본격적으로 시작되지 않았기 때문에 스펙 조정이 가능하고 개발자를 추가 투입해도 상당히 효과가 있다. 

스펙도 조정이 안되고 개발자 추가투입도 어렵고 무조건 밤을 새가면서 일하는 수밖에 없다면 그것도 하루이틀이지 어차피 불가능한 일을 하고 있는 것입니다. 불가능하다는 것을 일찍 알아내는 것도 중요합니다. 불가능한 일을 밀어 붙인다고 가능한 일로 바뀌지는 않습니다. 기적은 일어나지 않습니다.

스펙이 끝날 때까지 손놓고 있는 것이 아니고 스펙을 쓰는 도중에도 일정이 촉박할 것으로 예상이 되면 리스크관리를 통해서 미리 대비를 할 수 있다. 

경영진이 촉박한 일정을 지시했다고 해서 이것을 돌판에 새긴 절대불변의 지시사항으로 생각하고 코딩부터 시작하면 나중에 할 말은 다음과 같은 것들 밖에 없다.
  • 매일 밤새면서 일했는데 못 지켰습니다. 원래 불가능한 일정이었어요.
  • 코딩은 끝났는데, 테스트는 못했습니다.
이런 핑계를 대도 사실 코딩도 안 끝난 경우도 많다. 코딩은 가능하면 늦게 시작해야 기능을 빼거나 변경하기 쉽고 더 일찍 끝낼 수 있다.

경영진은 개발자들이 합리적인 방법을 제시하고 일정을 지켜주기를 원한다. 그래야 비즈니스를 할 수 있기 때문이다.

시간이 부족해서 스펙을 적을 수 없는 것이 아니고 시간을 절약하기 위해서 스펙을 적어야 일정을 지킬 수 있는 방법이 나온다.

경영진이 6개월의 시간을 제시했다면 앞만보고 마구 달리는 것보다는 가장 빠른 시간에 6개월안에 프로젝트를 끝내는 방법을 마련해야 한다. 경영진은 이런 합리적인 방법을 제시하는 개발팀을 후원할 것이다. 가장 빠른 기간에 프로젝트를 일정에 맞게 끝낼 수 있게 방법을 마련하는 방법이 바로 적절한 스펙을 작성하는 것이다.

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

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

전규현 프로젝트/일정 스펙, 일정

Trackback Address: http://allofsoftware.net/trackback/214 관련글 쓰기
  1. 2011/03/11 01:49
    서로 일정 맞춰가기 Tracked from 세상을 놀라게 하자!
  1. Blog Icon
    Jake Kim

    너무나도 당연하고 좋은 말씀이시지만 대부분의 경우에는 이상적인 얘기가 아닐까싶네요. 위에서 일정이 잡혀서 내려오면 개발자는 무슨 일이 있어도 그 일정에 맞추어야 하는 것이 현실이죠. 맞추지 못하면 능력없는 개발자로 인식이 되구요. 경영진이 일정을 제시하고 개발자가 상세일정을 만들어 조율을 한다는 것이 정말 바람직한 과정이지만 현실적으로 얼마나 실천 가능한지 또 하고 있는지 모르겠습니다. 물론 그런 회사도 있기는 하겠지만 대부분의 개발자들에게는 아마 그림의 떡같은 현실이 아닐까 싶네요. 개발자들도 그걸 몰라서 못하는 건 아니거든요. 그렇지 못한 현실에서 어떻게 해야 하는지 조언을 주시는 것이 더 많은 도움이 되지 않을까 싶습니다.

  2. Blog Icon
    루니아

    저랑은 다른 각도에서 글을 이해하신듯 하군요.
    경영진이 제시한 일정에 맞추지 못하면 능력없는 개발자가 되지만, 일정을 완수하기 위해 개발자가 제시한 요구사항을 경영진이 맞추지 못하면 능력없는 경영진이 됩니다.

    위에 글이 현실적으로 들리지 않는다면 그건 능력없는 경영자 밑에서 일하는 경우거나, 능력없는 개발자거나 둘중에 하나가 아닐까요?

  3. 안녕하세요. Jake Kim님
    좋은 의견 감사합니다.
    제가 경험한 것은 다양한 프로젝트와 컨설팅 경험입니다. 거기에 비추어 보면 첫째 제 글은 지극히 현실적입니다. 하지만 경험없이 이렇게 하기는 어렵고 우리나라의 대부분의 소프트웨어 회사에서는 일어나지 않는 현상입니다.
    가장 큰 원인은 개발자들이 코딩은 잘하는데 스펙과 설계를 잘 못쓰기 때문입니다. 실제로 많은 개발자들이 그렇게 못해서 못하는 겁니다.
    왜냐하면 역설적으로 그렇게 할 줄 알았다면 무조건 그렇게 했을 겁니다. 제 경험상 말이죠.
    현실적으로 스펙과 설계를 잘하면 되는데 대부분은 이것을 구체적으로 보여달라고 하면 골프를 잘치는 방법을 글로 알려달라고 하는 것과 비슷한 정도로 설명하기 어렵습니다. 제 책에서도 많은 설명이 있지만 필요성은 인식할 수 있어도 스펙을 잘 적는 방법을 배우기는 매우 어렵습니다.
    그렇다고 그런 노력조차 하지 않으면 10년이 지나도 항상 일정에 허덕일 것입니다.
    항상 스펙에 관련된 얘기는 이슈를 많이 일으키는 것 같습니다.
    이유는 다음과 다음과 같습니다.

    "소프트웨어를 개발하는데 있어서 가장 어렵고도 중요한 것은 무엇을 만드는지 결정하는 것이다. 즉, 스펙을 작성하는 것이다."

  4. 안녕하세요. 루니아님
    제 경험에 의하면 소프트웨어 개발을 이해하지 못하는 경영자가 정말로 많습니다. 개발자들은 이런 SW를 잘 모르는 경영진에게 이해가 가도록 대응하는 것이 필요한데 개발자도 그런 면에서는 매우 취약합니다.

  5. Blog Icon
    SilliconValley

    스펙 작성하는 것과 무엇을 만들지 결정하는 것을 같은 걸로 보시는 것 같은데, 이해가 안되네요. 왜 그 두가지를 같은 것으로 보시나요?

  6. 안녕하세요. SilliconValley님
    스펙을 가장 간단하게 표현하는 말로 "무엇을 만드는지 결정하는 것"이라고 말합니다. 이 말이 맞다 틀리다 논쟁을 할 수 있습니다. 스펙의 실체를 정확하게 표현하기는 그만큼 어렵습니다.
    SilliconValley님이 이해가 안되서 여쭤보시는 것인지, 틀리다고 생각하시는 것인지, 다른 의견이 있으신 것인지, 즉 질문의 의도를 좀더 구체적으로 얘기를 해주면 건설적인 토론이 될 것 같습니다.
    스펙을 제대로 이해하려면 스펙을 제대로 다년간 작성을 해오면서 IEEE에서 나온 스펙에 관련된 문서들을 여러번 읽어보면서 음미를 하면 될 것 같습니다.

  7. Blog Icon
    SilliconValley

    스펙 작성은 80년대부터 해오고 있습니다.

    스펙 작성하는 것을 requirement engineering과 동일하게 보시나 보군요. IEEE 스탠다드는 오래전에 보긴 했지만 현업과는 거리가 멀어서 그다지 건질만한 것이 없더군요. 최근 requirement engineering 쪽의 발전을 따라오고 있지도 못하는 것 같고요.

    구체적으로 어떤 문서를 추천하시는지 reference를 알려주시면 고맙겠습니다.

  8. Blog Icon
    Jake Kim

    저는 현재 미국에 있고 스타트업 부터 미국 최대대기업까지 경험을 해봤습니다. 일정에 대해 말씀드리자면 그건 그 회사의 문화내지는 그 프로젝트의 스폰서의 성향에 따라 많은 차이가 있는 것 같습니다.

    며칠 걸릴 작업을 1-2주 주는 관리자도 있고 한달 걸릴 작업을 일주일주는 경우도 있습니다. 미국 회사라고 다 넉넉한 일정을 준다거나 일정을 조율할 수 있다는 인식을 주시는 것은 지양을 해야 하지 않을까 싶습니다. 그런 의미에서 드린 말씀입니다.

    위에 말씀하신 것들이 바람직하다는 것을 모르는 개발자들은 아마 없을 겁니다. 다만 특히 한국적 상황에서 경영자나 윗 사람에게 일정을 조율해야 한다는 것을 설득할 방법을 모르거나 없다는 것이 문제인 것이죠.

    스펙을 쓴다고 설득이 될까요? 그래서 설득이 될 경영자 같으면 처음부터 막장 일정을 제시하지 않겠죠. 개발자가 아무리 스펙을 갖다 밀고 소프트웨어 공학적인 지식으로 설득을 하야시가 경영자의 이말 한마디면 쓸모가 없어지죠.

    시장에 빨리 내놔야 해.

    문제는 항상 시장에 빨리 내 놓아야 하는 경영진을 어떻게 설득을 하는가인데 이는 소프트웨어 공학과는 거리가 있는 문제 같아 보입니다. 그리고 정말 상황이 그렇다면 도리 없는 일 아니겠습니까.

  9. Jake님 안녕하세요.

    항상 적극적인 의견 제시를 감사드립니다.
    저는 여러 의견을 통해서 항상 배우고 있습니다.
    제 글을 보고 있는 많은 개발자들은 경험과 환경이 매우 다릅니다.
    너무 당연한 것도 모르고 있을 수도 있고 아주 잘 알고 있는 개발자들도 있습니다.
    그래서 주로 가장 많은 한국의 보통 개발자를 주 독자로 생각합니다. 아주 정교한 것은 아닙니다.
    jake님 시각에서 좀 다른 것은 언제든지 말씀해주세요. 이런 대화 자체가 많은 독자에게 의미 있을 것 같습니다.


    한국에서는 대부분은 아무런 근거도 없이 "일정이 모자란다", "일정을 더 달라" 얘기를 하는데 근거가 필요하다는 얘기입니다.
    스펙은 그런 결정을 하는데 도움을 줍니다.

    경영자와 도저히 의사 소통이 안된다면 어쩔 수 없을 것입니다.
    무조건 시킨다고 한달 걸릴 일을 1주일만에 해낼 수는 없을 겁니다. 설령 해냈다고 하더라도 뭔가를 희생했을 겁니다. 품질을 희생했으면 회사가 나중에 손해를 볼 것이고 건강을 희생했으면 내가 나중에 손해를 볼 것입니다.

    상대적으로 미국보다 한국에서 합리적으로 대화가 안되는 경영자가 더 많습니다. 이런 경영자는 스펙이고 소프트웨어 공학이고 필요 없습니다. "이런 경영자를 설득하는 방법" 같은 것은 제가 따로 설명하지는 않습니다. 그런 개발자를 직접 교육하고 설득하여 경영자의 마인드를 바꾼 경험은 많습니다.

    이런 경영자 밑에서 일하고 있다는 것 자체가 피곤한 일이죠.

  10. SilliconValley님 안녕하세요.
    80년대부터 스펙을 작성해오고 있다면 80년대 말이라고 하더라도 30년 이상의 경험을 가지고 계시는군요. 이미 어느 정도 경지에 오르셨을 것 같은데요.

    "이론이 먼저냐 현실이 먼저냐"는 것도 이슈가 되는데 소프트웨어 공학은 현실이기 때문에 현업과 거리가 멀어서 쓸모가 없는 것은 소프트웨어 공학이라고 보기 어렵거나 다르게 이해하고 있는 경우가 많습니다.
    IEEE 스탠다드 문서들도 현실의 경험을 토대로 만들어진 것들이기 때문에 받아들일 때 적절하게 해석을 해야 할 것으로 생각합니다.
    제 경우를 말씀드리면 10년 전에 봤던 문서를 지금 보면 완전히 다릅니다. 그동안 쌓은 경험 때문이겠죠. 사소하게 읽고 지나갔던 문장들이 눈에 들어오더군요. 10년 후에는 또 달라져 있을 겁니다. 매우 오래된 문서들이지만, 지금도 유용합니다.
    그래서 스펙을 작성하는 실력은 몇 십년이 지나도 계속 발전한다고 봅니다.

  11. Blog Icon
    Jake

    맞습니다. 그런 경영자나 관리자와 같이 일한다는 것은 정말 고달픈 일입니다. 안타까운 것은 그런 환경이 꽤나 많다는 것이지요. 많은 사람들에게 편리를 제공하는 개발자들이 정당한 대우를 받고 일할 수 있는 환경이 빨리 만들어졌으면 좋겠습니다.

  12. Blog Icon
    SilliconValley

    "그런 개발자를 직접 교육하고 설득하여 경영자의 마인드를 바꾼 경험은 많습니다."라고 하셨는데, 개발자가 교육을 받고 경영자의 마인드를 바꿨다는 말씀이죠? 그런 경험이 많으시다면, 제 생각에 그 경험 이야기를 해주시는 것이 훨씬 더 유익할 것 같습니다.

  13. SilliconValley님 안녕하세요.
    경영자의 마인드는 저희가 바꾸는 교육을 합니다. 제 덧글에 오타가 있군요.
    사실 경영자의 마인드를 바꾸는 것은 매우 어렵고 바뀌지 않는 경우도 많습니다. 절대 바뀌지 않는 경영자들도 많지만 바뀔 준비가 되어 있는 경영자들도 많이 만나 봤습니다. 그들은 바뀔 준비가 되어 있지만 방법을 모르기 때문에 이런 저런 시도를 하다가 거의 실패하고 저희를 찾아오는 경우가 많습니다. 그런 경우에는 빠르게 개혁에 성공하곤 합니다.
    저희는 컨설팅할 때 NDA를 맺기 때문에 컨설팅 경험을 직접적으로 얘기를 할 수는 없습니다. 단 일반화 시켜면 언급을 할 수 있기 때문에 앞으로 그런 경험의 글을 올려보는 것을 고려해보겠습니다. NDA에 위배되지 않게 조심해야 하기 때문에 신중할 것입니다.
    제 블로그에는 SW 회사가 바뀌는 것은 경영자에게 달려있고 경영자가 어떻게 바뀌어야 하는지에 대한 글들이 여기 저기 있습니다.

  14. Blog Icon
    J

    포스트를 읽을때마다 드는 생각은 당연한이야기'만' 한다는 생각이듭니다.


    프로젝트기간이 10개월이라고 하고
    3개월동안 계획을 세우고 구현할 기능등 여러사항을 쭉 정리한 후.
    7개월동안 구현할 핵심목록을 정리해서 그걸 중심으로 진행하는게 좋은건 알고있습니다. < 개발자에게 이제는 너무나 당연한 이야기지요. 경험이좀쌓이면 그냥 알게 되기도하고, 경험이 입으로돌다가 책으로 한권 나오고 결국 책들이 무수히 쏟아질정도로 오래 지났습니다.


    10개월짜리 일정에 맞춰 임시로 릴리즈하고 13개월째 완성을 시켰다고 하면.
    현재 우리나라에선 3개월동안 놀아서-> 3개월 지연됐다 라는 이야기가 나올겁니다.
    어떻게 개발자를 충원을해서 10개월짜리 일정을 맞춘다고해도 3개월동안 놀아서 더 인력을 투입해야 했다는 이야기가 나올테구요.
    저 외부에서 보기에 아무것도 안하고 있는것같은 시간을 어떻게 설득하고 납득시키는지가 궁금합니다.


    회사에서 외부 컨설턴트를 부르고 그 외부 컨설턴트가 저런 의견을 주면 쉽진않지만 먹힐가능성이 있습니다만.
    회사내에서 외부로 컨설팅을 의뢰할 정도면 상황이 좋은 (좀 깨인 회사에 돈도 좀 있는)회사입니다.

    하물며 그냥 회사내 개발부서에서 이야기하면 어지간한 이야기는 다 그냥 변명으로 넘어갈껍니다.
    니 전임자 또는 너도 이전에 그냥 쭉쭉짜더니 설계? 뭔소린데 라던가.
    어 해~ 그런데 왠 3개월 1주일만에 끝내 라던가.


    이런부분은 전혀 적지 않으시는것 같습니다.
    컨설팅을 하시면 개발자는 납득을 하는데-> 쓸만한 스펙 작성에 어려움을 겪을것 같고
    관리나 경영쪽에 저 2~30%의 시간을 납득을 못했을것 같습니다.

    언제나 글을 읽으면서 궁금한건 저런 설득을 시키던 경험같은것입니다.

  15. Blog Icon
    개발20년차

    김익환씨가 쓰는 책도 그렇고, 경험을 중시한다는 태도는 좋지만 실제 "이러이러해서 이렇게 했는데 이렇게 되어서 이런 교훈을 얻었다"는 이야기가 없고, "이렇게 이렇게 해보면 이렇게 될 것이다 한번 해보라"는 이야기도 없어서 전반적으로 글들이 경험적이지 않은 것 같습니다. 좀 더 구체적이면 좋겠네요.

  16. 안녕하세요. J님
    현실감이 쭉쭉 느껴지는 의견이군요. ^^
    여러 회사의 여러 개발자들을 만나보면 자주 듣는 얘기들입니다.
    그런데, 그런 회사의 경영자, 개발자들도 스펙을 제대로 작성하는 것을 한번만 보기만 해도 완전히 인식이 바뀌는 것을 자주 봐 왔습니다.
    그동안 생각하고 있었던 스펙, 설계라는 것이 많이 다르다는 것을 경험하기 때문이죠.
    제대로 작성하면 병행 개발도 가능하고 일정도 단축된다는 것을 경험적으로 알게 됩니다.
    그렇다고 하더라도 스펙을 진짜 잘 작성하려면 5년, 아니 10년 이상 걸리게 됩니다. 즉, 많이 작성할수록 계속 실력이 늘게 됩니다.

    하지만 막상 회사 내부에서 경영진을 설득하기란 매우 어렵습니다. 그래서 컨설팅이 어려운 회사는 강연을 통해서 경영진의 마인드를 바꿔주기도 합니다. ^^

  17. 개발20년차님 안녕하세요.

    김익환 대표님은 실리콘밸리에서부터 27년가 소프트웨어 개발 경험이 있고 저는 17년간 소프트웨어를 개발하고 있습니다. 제 글에 있는 그대로 개발을 해왔고 그대로 컨설팅을 하고 있고 블로그에 글을 쓰고 있습니다. 물론 저는 초기에 시행착오를 한적도 있었습니다.

    제 글중에서 이해하기 쉬운 글들은 툴이나 간단한 기법들에 관련될 것입니다. 그리고 이해하기 어렵지만 더 중요한 글들은 스펙, 설계, 문화 등에 관련된 것입니다.

    골프를 배우는데 책과 글을 통한 영양학이나 체력훈련 방법, 장비 선택 방법은 익히기 쉬운데 진짜 스윙과 게임 방법은 글로는 한계를 가지고 있습니다. 눈으로 보고 배우는 것이 유일한 길입니다.

    실리콘밸리의 소프트웨어 회사에 입사를 하면 항상 보고 배우는 그것이라서 저절로 익히게 되는데 우리나라 현실에서는 그렇지 못하기 때문에 어렵습니다. 안타까운 현실이죠.

  18. J님 덧붙일 것이 있습니다. ^^

    제가 컨설팅을 한 회사 중에서 가장 작은 회사는 총 직원이 10명 정도에 매출액이 10억 정도인 회사도 있고, 큰 회사는 직원이 몇만명인 회사도 있습니다.
    컨설팅은 돈이 여유가 있어서 하는 것이 아니고 스스로 해내기 어렵지만 꼭 필요한 도움을 외부 전문가에게 도움을 청하는 것입니다.
    이를 통해서 회사가 얻는 이득이 비용에 비해서 훨씬 크다고 생각하는 회사들만 도움을 요청합니다.
    또한 저희는 컨설팅 보람이 큰 회사를 우선 순위 높게 생각하고 있습니다.
    컨설팅이 돈많은 회사가 여윳돈으로 하는 것이 아닌가 오해를 할까봐 말씀드립니다.

  19. Blog Icon
    J

    제가 적은걸 오해하신거 같습니다.

    제가아는상식선에서 어떤 회사라도 돈이 남아돌아서 컨설팅을 의뢰하진 않을것 같습니다.
    컨설팅을 의뢰한다는건 회사의사결정권자가 외부 의견에 따라 회사 내부 방침을 바꿀 생각이 있다고 보입니다. 돈때문에 오늘내일하는 회사도 아닐테구요.
    즉 컨설팅을 하면서 보신 회사는 적어도 프로세스 개선에 관해서는 비교적 설득이 쉬운 회사일 확률이 높습니다. 오히려 의사결정권자가 부른거니 개발부서에서 저항이 더 컸을지도 모르겠습니다...
    어쨋거나 보통회사는 개발부서쪽이 좀더 저런내용을 납득시키기 쉽습니다.



    그리고 경험을 좀 적어달라고 한것도, 쓰신 내용을보면 일이 쉬운회사만 컨설팅을한건가... 라는 생각이 들어서입니다.

    어제까지 날새면서 일을 하던 회사에서 이글을 보고 그대로 따라하면 어떻게 될까요?
    일단 기적적으로 스펙까진 정말 잘 - 한5년차쯤 되는사람이 잡는 수준으로 잡았다고 가정해도 100% 말한 일정 못지키고 깨진다에 표를 던지겠습니다.
    개발자 스스로 과대평가하는것(50%확률로 잘풀리면 끝날일정을 잡는다거나)도 문제지만, 규모가 커서 일이 서로엮이고 복잡한 경우는 프로세스대로 몇번 일이 흘러가며 데이터가 쌓여야 예측한 일정의 정확도가 높아질 수 있습니다. 게다가 이전에 날새면서 한 프로젝트 뒤처리가 안터질리도 없구요...
    적어도 이런 일반적인 이야기정도는 나올법한데 전혀없습니다.
    거의 예전 BBB가 AAA를 상속해서 라고 씌인 언어책을 보는느낌입니다.

  20. 안녕하세요. J님

    저도 대부분 동의합니다. ^^ 오해라기 보다는 제가 답글을 달 때 이또한 다른 분들도 모두 보기 때문에 1:1 의견 교환이 아니고 여러분들이 보고 있다고 생각하고 적습니다. 그래서 이런 얘기가 왔다 갔다 하는 것이 아주 좋은 현상이라고 생각합니다. 제가 모르는 것도 알게 되는 경우도 있습니다.

    맞습니다. 저희는 거의 대부분 최고경영자가 요청을 해서 컨설팅을 합니다. 또는 개발팀에서 필요성을 느껴서 최고경영자를 설득해 오는 경우도 종종 있습니다. 그리고 컨설팅하기 쉬운 회사는 없습니다. 저희 컨설팅은 개발자부터 경영자의 마인드까지 바뀌어야 하고 몸에 베인 여러가지 습관들은 바꿔야 하기 때문에 받는 입장에서는 어렵습니다. 저항이 심할 때도 많고요. 이는 대기업이나 중소기업도 마찬가지 입니다.
    변화가 그렇게 쉬웠으면 저희가 없어도 회사에서 자체적으로 변화를 했을 겁니다. 저희에게 의뢰를 하는 이유는 변화가 어렵기 때문에 그리고 변화의 방향을 잘못 잡아서 시행착오를 하는 리스크가 너무 크기 때문입니다.

    말씀하신 것 같이 지금까지 밤세워가면서 유지보수에 정신 없던 회사가 기적적으로 나아지기는 어렵습니다.
    악순환의 고리가 시작된 경우라고 볼 수 있습니다.
    이미 나쁜 폼이 몸에 익은 골프 선수는 이를 고치는데 처음부터 배우는 것보다 더 오래 걸릴 수 있습니다.
    이런 경우 "이미 망친 상태"는 제대로 하기 더 어렵다고 합니다.

    컨설팅을 하다보니 "망친 경우 어떻게 해야 할까"라는 의문에 많이 부딪힙니다. 어떤 경우 이미 너무 망쳐서 복구가 불가능한 경우도 많습니다. 하지만 대부분의 경우는 많이 망쳤든, 조금 망쳤든 원칙에 의거해서 회사와 개발자를 변화시키는 방법을 취하고 있습니다.

    많이 망친 경우 시간이 좀 오래 걸리고, 제대로 하고 있었고 다음 단계에 대한 고민을 가지 회사는 정말 잘 적응하고 성장합니다.

    제 얘기가 대부분 원칙을 강조해서 현실에서 멀어 보인다고 느끼는 분들도 많다는 것을 알게 되네요. 이런 경우에도 원칙대로 하라고 강조하는 것을 물러서지는 않습니다. 그방법이 가장 빠르다고 생각하기 때문입니다.

    여기서 원칙은 또 한참 얘기해야 하지만 흔히 알고 있는 정형화 된 프로세스를 말하지 않습니다. 프로세스나 문서를 작성하기 위해서 프로젝트가 더 늦어지면 원칙에서 벗어난 것입니다. 원칙에 대해서는 나중에 또 다루죠. ^^

    이렇게 좋은 의견을 계속 주셔서 정말로 감사합니다. 앞으로도 계속 의견 남겨주세요.

  21. 너무...이상적이지요...
    이상적인 세상에서는 버그도 없겠죠...^^;

  22. 안녕하세요. kalstein님
    이상적으로 생각할 수도 있겠네요. ^^
    이상적이기 보다는 우리나라에서는 어려운 것이라고 생각합니다. 개발자들이 경험하기 어려운 현실 때문에 힘듭니다.
    그래서 미국에서는 소프트웨어 개발자가 최고의 직업중에 하나인데 우리나라에서는 기피 직업이 아닌가 생각합니다.
    제 Twitter의 소개를 보면 "소프트웨어 개발자가 이 땅에서 최고의 직업이 되는 날을 꿈꾼다"라고 되어 있습니다.
    그런 날이 오겠죠?
    여담인데 과거 버그없는 사용 SW가 하나 있었다고 합니다. ^^
    버그를 찾는 사람에게 상금을 걸었는데 못찾았다고 하더군요.
    그래도 현실적으로 버그 없는 SW는 없겠죠.

  23. 본문보다 댓글을 더 재밌게 읽었습니다. ^^ 어느책에선가 '야근은 카드로 물건을 사는것과 같다.'라는 비유를 본적있습니다. 경영진의 마인드가 바뀌는게 최우선이겠네요.

  24. k16wire님 안녕하세요.
    저도 댓글을 매우 좋아합니다. 여러 개발자들의 의견을 들을 수 있어서 저에게도 매우 도움이 되고 블로그 독자들에게도 도움이 될 것으로 생각합니다.
    항상 시간을 내서 댓글을 달아주는 여러 개발자들에게 감사한 마음을 가지고 있습니다.

  25. Blog Icon
    kampf

    댓글이 궁금해서 다시 왔습니다.
    좋은 글은 Facebook으로 사람들에게 추천하고 있는데요.
    반응은 '우리회사 얘기네..' 라는 식입니다.(그런 글들만 추천하니까요.)
    마치 전규현님이 우리회사에 다녔던 분같습니다. &^^&..
    좋은 글들 많이 부탁드립니다..

  26. 안녕하세요. kampf
    Facebook ID 좀 알려주세요. 저도 Facebook을 하거든요. 댓글을 좀 보고 싶네요. ^^
    제 Facebook주소는 다음과 같습니다.
    http://www.facebook.com/raymond.jeon

    그만큼 우리나라의 대부분의 소프트웨어 회사가 실정이 비슷한 것 아닐까요?
    제 만나는 회사는 10명이하의 작은 회사에서 부터 직원이 10,000명이 넘은 대기업까지 다양합니다. 하지만 비슷한 문제점들을 가지고 있습니다. 바뀌기에는 작은 회사가 더 유리합니다.

  27. 댓글이 본문보다 더 길어져 버린 글이네요 ㅎ

    어떻게 보면 이런 상황으로 몰아온 개발자의 "소리없는" No! 가 문제가 아닐까도 싶지만
    칼을 쥐고 있는 쪽은 운영자/경영진 이다 보니 힘없는 개발자에서 힘이 넘치는 개발자로
    탈피를 하지 않는 이상에는 위와 같은 소모적인 논쟁의 끝은 없지 않을까 보여집니다.

    결국은 칼을 쥐는 쪽이 주도권을 잡을테니 말이죠.

  28. 구차니님 안녕하세요.
    댓글이 많은 것은 저도 환영합니다. 이를 통해서 개발자들이 어느 부분을 더 어렵게 생각하는지 잘 알 수 있습니다.

  29. Blog Icon
    최준용

    댓글이 길고, 여러 사람들과 주고 받았길래 읽어 보았습니다.. 정말 주옥같은 댓글과, 절절한 개발자들의 하소연이 느껴집니다.. 저역시 개발자라로서 같은 생각입니다..용기있게 글을 써주고, 성심껏 답변해주신 개발자들과 전규현님께 감사의 인사드립니다.

  30. 안녕하세요. 최준용님
    감사합니다.

  31. 이 블로그에서는 소프트웨어 회사 경영진이 주로 악역을 맡는데요. 경영진을 위한 변명도 있어야 할 것같아서 몇자 적어봅니다.

    제가 아는 많은 경영자분들은 일정을 함부로 결정해서 내려보내지 않습니다. 개발을 잘 모르는 사장님들도 자사의 개발팀장이나 지인들에게 어느 정도의 시간이 걸릴지 의견을 구하는 것이 일반적이고요. 계속 변하는 시장 상황이나 경쟁사에 대한 대응 수준, 과거 유사 프로젝트에서의 경험, 자사 개발자의 개발 능력 등도 일정 결정에 중요한 요인입니다. 즉, 막무가내 같이 보이는 경영진이라도 일정을 제시할 때는 뭔가 근거가 숨어있다는 것입니다.

    그래서 경영진에게 촉박한 일정이라고 의견을 낼 때는 본문에서 강조하신 스펙과 같은 근거가 필요하지 않을까 싶습니다. 무턱대고 촉박한 일정이라고 하거나, 데드라인에 다와서 해봤더니 무리한 일정이었다 하는 것보다는 나름의 근거를 가지고 개발팀의 의견을 제시한다면 조기에 일정을 재조정하거나 추가적인 지원을 받을 수도 있지 않을까 생각합니다.

    항상 좋은 글 감사드립니다.

  32. 안녕하세요. 전경헌 사장님

    개발자가 흔히 촉박하다고 말하면서도 그 근거가 희박한 경우가 많습니다. 전사장님 주변에는 개발을 이해하고 있는 분들이 많은 것으로 알고 있습니다. ^^

  33. 개발자들이 촉박하다고 얘기하는 근거는 명시적인 스펙 문서나 스케줄은 없지만.. 고참 개발자 같은 경우 자신이 그동한 해온 프로젝트와 이번에 진행할 프로젝트의 작업량을 비교해서 경험상 촉박하도고 하는 경우가 대부분일 겁니다.
    또한 우리나라의 경우 일정 자체가 영업쪽에서 워낙 비현실적으로 짧게 잡고 시작하는 경우가 많기 때문에
    개발자가 촉박하다고 하는 경우는 대부분 촉박한게 사실이죠

    전경헌님 생각이나 경험대로 경영자 분들이 일정을 함부로 결정하지는 않을지도 모르고, 그러고 싶지는 않더라도
    우리나라의 갑을병정 구조에서 일정이 갑쪽에서 결정되어 내려오는 경우가 허다합니다.
    경영자 까지도 선택의 여지가 없는 경우가 많다는 것이죠. 결국 갑쪽에서 일하고 싶으면 일정대로 한다고 하고, 일하기 싫으면 관더라 하는 식으로 나오면..

    사실 방법이 없습니다.

  34. 이성열님 안녕하세요.

    이렇게 방법이 없이 돈은 벌어야 겠고, 닥치는대로 일을 하면 점점 어려워 집니다.

    방법이 없는 것은 아니고 그 방법을 제시하고 회사를 변화시키는 것이 제가 하는 일입니다. ^^

    스펙을 쓰는 이유는 프로젝트를 시간을 단축하기 위함인데 그럼에도 불구하고 불가능한 일정의 프로젝트는 안하는 것이 좋습니다.
    그래도 진행하고 영업적으로 풀곤 하는데 그렇다면 스펙을 제대로 쓰고 영업적으로도 해결하는 것이 좋습니다.

    결국 어떠한 경우라도 스펙을 적절하게 쓰고 개발하는 것이 좋습니다. 스펙도 없이 무조건 시작했다가 망가지는 프로젝트가 많은데 이런 장님 코끼리 만지는 듯한 프로젝트 보다는 스펙을 제대로 쓰고 합리적으로 개발하는 것이 좋습니다.

  35. 제가 개발자여서 그런지 왠지 제목만 보고도 답답해지는 글이네요
    (글이 문제가 있다는 뜻이 아니라 그냥 제 상황이 떠올라서요ㅋ)
    제가 경영진이거나 사장이라면 다르게 느껴졌겠죠? ㅎ
    좋은 글 잘 보고 갑니다^^

  36. 안녕하세요. redred님
    누구의 탓이라기 보다는 서로들 소프트웨어에 대한 이해가 부족해서 그렇습니다.

관리자가 이런 일까지?

우리나라 SW 조직에서 관리자란 위치는 참 애매한 위치다. 물론 전문 관리자라면 얘기가 다르지만 왕년에 SW를 조금 개발해 본 경우가 애매하다. 개발팀에서 가장 경험이 많은 SW 개발자들이 주로 팀장이 되곤 한다. 이 경우와..

과거의 성공이 발목을 잡을 때

수많은 소프트웨어 회사들이 첫번째 성공을 거두고 나서 두번째 도약에 실패하고 사라져간다. 물론 첫번째 성공도 어렵지만 이미 성공의 경험이 있고 방법을 알고 있는 회사들이 두번째 또는 세번째에는 많이 실패하는 이유가 무엇일까?..

스펙을 제대로 작성하는 것은 구식이다?

'소프트웨어 개발 방법이 얼마나 발전했는데 아직도 스펙을 제대로 작성하고 개발을 하는가?' 라고 하면서 스펙 작성에 반대하는 주장을 하는 사람들이 있다. 스펙, 설계를 작성하고 구현을 하고 테스트를 하는 방식으로 개발하는 것..

내가 개발에 집중할 수 없는 이유

우리나라에서는 개발자들이 개발에 집중할 수 없는 환경인 곳이 참 많다. 정도의 차이가 있지만 거의 대부분이라고 봐도 무방하다. 그 결정적인 이유는 개발자 혼자서 북치고 장구치고 다해야 하는 상황이기 때문이다. 원래는 이렇게..

설계가 필요할까?

최근에 Software Architect의 정체에 대해서 혼란을 겪고 있는 것 만큼 Software 설계에 대해서도 혼동스러운 것은 마찬가지인 것 같다. 그래서 설계에 대해서도 깔끔하게 정의를 해보자. 흔히 설계에 관한 다음..

Software Architect를 양성하는 나라

우리나라에서는 종종 SW Architect를 양성한다고 한다. 정부에서 막대한 예산이 지원도 되며 SW Architect를 양성하는 학원도 생기고 야단법석이다. 그럼 도대체 SW Architect는 무엇인가? SW Archi..

우리에게 지금 필요한 것은? 바로 이것

우리나라 대부분의 소프트웨어 회사들에게 가장 시급하게 필요한 것은 "기초 체력"이다. 히딩크가 우리나라 국가대표 축구팀을 처음 맞았을 때 강조한 것이 기초 체력이었다. 그전까지 우리는 국가대표 축구팀이 체력은 세계 어디를 내..

프로토타입을 재활용하면 될까? 안될까?

며칠 전 프로토타입에 관해 올린 글에 대해서 프로토타입 재사용에 대해서 여러 의견이 있어서 이 내용에 대해서 조금더 설명해보려고 한다. 2011/11/03 - [프로젝트/요구사항분석] - 프로토타입이란? 소프트웨어공학의 목적..

프로토타입이란?

프로토타입 (경제/경영) 양산(量産)에 앞서 제작해보는 원형(原型)을 '프로토타입'이라 하는데, 프로토타이핑이란 개발자들과 사용자들의 의사소통상의 효과를 증진시키기 위하여 취하는 시스템개발상의 기법이다. 일반적인 분석방법을..

같이 일하려면 적어라.

"협업은 말로 하는 것이 아니라 문서로 하는 것이다." 동서고금을 막론하고 개발자들은 적는 것을 싫어하고 또 잘 적지 못한다. 우리나라 개발자들은 그 정도가 훨씬 심하다. 우리나라에서는 회사가 크던 작던 상관없이 대부분 5년..