똘아이 주도 개발(Asshole Driven Development)

2008. 8. 3. 16:19Software Engineering

"Art of Project Management" 의 저자 스콧 버쿤 형님의 블로그를 보다가 재밌는 포스트가 있어서 올립니다.

http://www.scottberkun.com/blog/2007/asshole-driven-development/

[대충 요약]

소프트웨어 업계는 새로운 관리 방법이 만개하는 곳입니다. Agile, Extreme Programming, 테스트 주도 개발 등등이 계속 나오고 있지요.  혹자는 소프트 업계가 미성숙해서라고도 하고, 혹자는 사람들이 무언가 (말을) 만들어 내는 것을 좋아해서라고도 하죠. 그렇지만 지금까지 우리가 봐왔던 다른 방법론 을 계속 해왔다면 아마 엄청나게 시간을 잡아먹었을 겁니다.

[다른 방법론의 예들]

1. 똘아이 주도 개발(Asshole Driven Development): 대빵 멍청이가 모든 결정을 내리는 것을 "똘아이 주도 개발" 이라고 합니다.

2. 인지 부조화적 개발(Cognitive Dissonance development): 조직에 소프트웨어 개발에 대한 두 개의 상반된 믿음이 상충하는 상태를 말하는 겁니다. 믿음을 공유하는 사람 간의 편가르기와 알력 싸움 역시 대단하죠.

3. 실수를 덮는 엔지니어링(Cover Your Ass Engineering): 비난 받지만 않으면 된다. 라는 거죠.

4. 부정에 의한 개발(Development By Denial): 일하는 방법에 대한 메소드가 존재하는 것처럼 보이고, 일이 잘 돌아가는 체를 하지만 실상으로는 곪아 터진걸 말하는 거죠. 게다가 더욱 나쁜 건 개발 하는 사람들이 현실을 부정하고 제대로 돌아간다고 착각하는 거라니까요.

5. '나좀 승진시켜줘' 개발 방법론: 남에게 잘보이기 위해-특히 보스 맘에 들도록 -디자인 하고 코드를 짜는 방법을 말합니다

[댓글에 나온 개발 방법론들]

1. 이건 내 문제가 아니에요(Not My Problem) 방법론: 이건 내 문제가 아니라니까요! 엔진이 잘못된거에요, 오픈 소스 코드가 잘못된거에요, MS가 개같은 거라니까요.

2. 삽질 주도 방법론(Shovel-Driven Development): 구글 돌려서 나온 코드를 아무 생각 없이 Cut & Paste로 붙이는 방법론이죠. 땜질 주도 디자인(Duct-tape Driven Design)과 밀접한 관련이 있습니다.

3. 멍청이 MBA 주도 방법론(Idiot MBA-Driven Development): 몇 주정도 작업 해서 그럴듯한 프로토타입 만들어 놨더니, 데모만 보고 멍청한 MBA가 라이센스를 팔아버린 다음 한달 안에 제품을 내놓으라는 거죠. 6개월 정도 걸릴 거라고 말했는데도 말이죠. 결과야 뻔하죠.

4. 대장이 너무 많아요 방법론(To Many Chiefs, not enough Indians): 배놔라, 감놔라 하는 시어머니들은 많은데 일할 며느리는 없다니까요.

5. 모든 게 다 중요해요 방법론(Everything is High Priority): 모든 기능이 ASAP 구현 가능해야 합니다. 모든 기능이!!!

6. 거의 다 됐습니다 방법론(It's Almost Done Devleopment):

관리자: 이거 언제쯤 되나요?

개발자: 거의 다 됐습니다.


몇개월 후

관리자: 이거 전에 거의 다 됐다고 하지 않았나요?

개발자: 아 거의 다 됐지요. 조금만 수정하면 됩니다.


데드라인 가까이

관리자: 다 됐나요?

개발자: 거의 다 됐습니다.
 

무한 루프를 반복하면 되는 거죠.

7. 그건 내 일이 아닌데요 방법론(Not My Job Development): 이 일은 다른 사람 일인데요. 이 일은 서버 쪽 일인데요. 이러면서 그 개발자는 칼퇴근에 자기 취미 활동만 하고 다니더라고요. 문제는 그 회사의 모든 개발자가 똑같은 방법론을 사용한다는 거죠.

8. 프랭크 시내트라 방법론(다른 말로는 My Way 방법론): 프랭크 시내트라의 노래 "I Did It My Way." 에서 유래한 방법론이죠. 프로젝트에 있는 각 개발자가 그냥 자기 꼴리는 대로 하는 거라니까요. 전체 시스템이나 모듈간의 협업같은 거는 생각하지도 않은채요. 코딩 표준도 없고 남이 뭐하는 지 관심도 없어요. 각 태스크는 각 개발자가 좋다고 생각하는 대로 구현되어 있을 뿐이에요. 결과적으로 시스템에 여기 저기 중복된 기능이 널려 있게 된다니까요.

출처 : http://blog.naver.com/caesar13/30021094710