"과도한 복잡성 지점"은 영어로 다음과 같이 나타납니다.
오 나의 하나님이게 뭐야?
문제는, 이것은 실제로 간단한 것에 적용될 수 있지만, 똑같은 반응을 보이는 끔찍한 방식으로 구현됩니다.
따라서 매우 복잡한 것을 매우 끔찍한 것으로 구별하는 것은 어려울 수 있습니다.
그러나 모든 소프트웨어에서 실제로 일어나는 경향은 다음과 같이 약간 처리됩니다.
1 단계 : 좋은 사양을 가지고, 좋은 디자인을하고, 좋은 물건을 구현하십시오. 모두 행복합니다.
1 단계가 끝날 무렵 : 개발자들은 디자인의 훌륭한 우아함을 축하하며 행복하게 생각합니다. "다른 사람들이 미래에 무언가를 추가 할 수있는 훌륭한 유산이 있습니다. 더 나은 곳. "
2 단계 : 일부 변경 사항, 추가 사항, 새 기능이 포함됩니다. 1 단계의 아키텍처와 구조는이 과정을 상당히 힘들게 만들었습니다. [그러나 죄송합니다. "크 러프 팩터"가 약간 증가했습니다.]
2 단계가 끝날 무렵 개발자들은 자신의 디자인의 멋진 우아함을 축하하며 행복하게 생각합니다. "Gee 나는 1 단계에서 모든 수당을 만들어서 정말 영리합니다. 앞으로 다른 사람들이 무언가를 추가 할 수있게된다면 정말 멋지고 세상은 더 나은 곳이 될 것입니다. "
3 단계 : 더 많은 변경 사항, 더 많은 항목이 추가됨, 더 많은 새로운 기능, 많은 항목이 변경됨, 사용자 피드백이 실제로 듣고 있습니다.
3 단계가 끝날 무렵 개발자들은 디자인의 훌륭한 우아함을 축하하며 상당히 행복하게 생각합니다. "이 아키텍처는 너무나 많은 변경 사항을 쉽게 적용 할 수 있도록하기에 매우 좋습니다. 그러나 나는 조금 불행합니다. X와 Y와 Z에 대해서. 지금 조금 정리할 수 있지만 아 !!!!!! 나는 1 단계에서 모든 수당을 낸 것이 정말 영리합니다. 다른 사람들이 미래에 무언가를 추가 할 수 있다면, 그것은 훌륭 할 것이며 세상은 더 나은 곳이 될 것입니다. "
4 단계 : 3 단계와 같습니다.
4 단계가 끝날 무렵 개발자들은 다음과 같이 생각합니다. "너무 좋았던 것은 유지 관리가 어려워지고 있습니다. 정말 심각한 변화가 필요합니다. 정말이 작업을 좋아하지 않습니다. 리팩토링이 필요합니다. 내가 그에게 6 주가 필요하다고 말하면 이것의 끝에 사용자가 볼 것이 아무것도 없을 것입니다 ...하지만이 작업을 수행하면 5 년 동안 맛있는 미래 수정 범위가 생길 것입니다 .... 흠 .. 맥주를 마시 러 술집에 갈 시간이야. "
5 단계 : 많은 변경이 필요합니다.
그리고 5 단계에서 개발자들은 서로에게 다음과 같이 말합니다. "이 코드는 엉망입니다. 누가이 코드를 작성 했습니까? 그들은 쏴야합니다. 끔찍합니다. 우리는 IT를 다시 써야합니다."
5 단계는 치명적입니다. 이것은 cruft factor가 너무 나빠서 코드에 몇 가지 변경 사항이 더있을 수 없으며 약간의 변경이 필요합니다.
5 단계의 문제점은이를 버리고 다시 시작하려는 욕구입니다. 이것이 치명적인 이유는 "Netscape Factor"입니다. 구글로 이동 이 시점에서 회사 DIE는 다시 시작한다는 것은 사실 대신에 약 50 %의 가정, 지식 대신에 150 %의 열정, 겸손이 아닌 200 %의 오만으로 시작한다는 것을 의미하기 때문입니다 ( "그 사람들은 너무 어리 석었습니다!"). 그리고 새로운 버그를 소개합니다.
가장 좋은 방법은 리팩토링하는 것입니다. 한 번에 조금 변경하십시오. 아키텍처가 약간 피곤하면 수정하십시오. 추가, 확장, 개선 차례로. 각 단계에서 테스트, 테스트 및 테스트를 더 진행하십시오. 이와 같이 증분 변경은 10 년 후 현재 코드와 원본 코드가 할아버지 도끼와 유사하다는 것을 의미합니다 ( "새 머리가 10 개, 손잡이가 3 개이지만 여전히 할아버지 도끼입니다"). 즉, 공통점이 많지 않습니다. 그러나 당신은 오래된 것에서 새로운 것으로 점차 조심스럽게 움직였습니다. 이렇게하면 위험이 줄어들고 고객에게는 성가신 요소가 줄어 듭니다.