가끔 프로젝트에서 작업하고 갑자기 예기치 않은 일이 발생하여 작업에 막대한 스패너가 발생하고 복잡성이 크게 증가하는 것은 드물지만 일반적인 경험처럼 보입니다.
예를 들어, 나는 다양한 다른 컴퓨터에서 SOAP 서비스와 통신하는 응용 프로그램을 작업하고있었습니다. 나는 잘 작동하는 프로토 타입을 채운 다음 정기적 인 프론트 엔드를 개발하고 일반적으로 멋지고 매우 간단하며 따라하기 쉬운 방식으로 모든 것을 시작했습니다. 더 넓은 네트워크에서 테스트를 시작하고 연결 지연 시간과 원격 컴퓨터에서 계산을 수행하는 데 필요한 시간으로 인해 SOAP 서비스에 대한 요청 시간이 초과되어 페이지가 시간 초과되기 시작했을 때까지 훌륭하게 작동했습니다. 요청을 자체 스레드로 스핀 아웃하고 반환 된 데이터를 캐시하도록 아키텍처를 변경해야 요청별로 요청을 계산하는 대신 백그라운드에서 점진적으로 업데이트 할 수 있음이 밝혀졌습니다.
이 시나리오의 세부 사항은 그다지 중요하지 않습니다. 실제로는 예견 할 수 없었기 때문에 좋은 예는 아닙니다.이 유형의 환경에 대해이 유형의 많은 앱을 작성한 사람들은 예상했을 수 있습니다. 하나는 간단한 전제와 모델로 시작하여 갑자기 프로젝트 개발에 복잡한 단계를 거치게됩니다.
나중에 사양 변경이 아닌 환경 적 요인의 결과로 개발 프로세스에서 또는 테스트의 결과로 이러한 유형의 기능적 변경을 처리하기위한 전략은 무엇입니까? 조기 최적화 / YAGNI / 과도한 엔지니어링 위험을 피하는 것 사이에서 어떻게 효과가 있을지 모르지만 준비를 포함하지 않는 간단하고 쉬운 솔루션을 개발하는 것보다는 가능하지만 반드시 발생할 수있는 문제 를 완화 할 수있는 솔루션을 설계 할 때의 균형을 맞추는 방법 가능한 모든 사건?
편집 : Crazy Eddie의 답변은 "당신은 그것을 빨고 새로운 복잡성을 구현하는 가장 저렴한 방법을 찾는 것"을 포함합니다. 그것은 그 질문에 암시적인 것을 생각하게 만들었지 만 구체적으로 제기하지는 않았습니다.
일단 그 충돌에 부딪 치면 필요한 변경 사항을 통합합니다. 프로젝트를 가능한 한 일정에 가깝게 유지하지만 유지 관리에 영향을 줄 수 있거나 아키텍처로 돌아가서 더 세부적인 수준으로 다시 작업하여 유지 관리가 가능하지만 개발 중에 모든 것을 되돌려 놓는 일을합니까?