미분 해석기 이야기
해밍의 첫 번째 시스템 공학 규칙: 컴포넌트를 최적화하면 시스템 성능을 망칠 가능성이 높다.
그는 자신의 경험에서 나온 이야기로 이를 설명합니다. 그는 미분 방정식을 기계적 적분으로 해결하는 아날로그 컴퓨터인 미분 해석기를 운영했습니다. 수요가 증가하자 두 장치가 독립적으로 또는 함께 작동할 수 있도록 첫 번째 장치와 연결될 수 있는 두 번째 장치를 주문했습니다.
자신의 기술에 자부심을 가진 제작자들은 새 장치의 증폭기를 개선했습니다. 해밍은 주장했습니다: 모든 개선은 전체 시스템 작동을 방해해서는 안 된다고. 인수 검수 날, 그는 고전적인 테스트를 실행했습니다: y'' + y = 0을 풀고, y와 y'를 그래프로 나타내고, 완벽한 원을 기대합니다. 즉시 실패했습니다.
원인: 개선된 증폭기들이 접지 회로를 통해 더 많은 전류를 소모했습니다. 원래 증폭기에서 잘 작동했던 부적절한 접지는 이제 누설 전류가 서브시스템 간에 결합되도록 허용했습니다. 한 컴포넌트(증폭기)의 개선이 인터페이스(접지)를 악화시켰고, 시스템이 실패했습니다.
수정은 간단했습니다 — 더 굵은 구리 접지 — 하지만 원리는 명확했습니다: 컴포넌트 개선은 그 인터페이스 동작을 바꿉니다. 나머지 시스템은 이전 인터페이스를 중심으로 설계되었습니다. 컴포넌트를 개선하면 인터페이스를 깨뜨리고, 시스템을 악화시킵니다.
컴포넌트 최적화 인식하기
해밍은 이 규칙이 '고립된 컴포넌트를 더 좋게 만들면 전체 시스템도 더 좋아질 것 같아 보인다'고 말하지만, 그것은 틀렸습니다. 실패는 인터페이스 매개입니다: 컴포넌트 개선이 인터페이스가 보는 신호를 변경합니다.
컴포넌트보다 인터페이스
해밍의 실제적 결론: 시스템 엔지니어는 인터페이스를 먼저, 컴포넌트를 나중에 설계하고 검증해야 합니다. 완벽한 컴포넌트는 깨진 인터페이스로는 쓸모가 없습니다. 평범한 컴포넌트는 잘 정의된 인터페이스를 가지면 나중에 개선될 수 있습니다.
규칙 2: 시스템의 제약 조건(경계)은 종종 그 제약 조건 내의 최적값보다 더 중요합니다. 예상되는 작동점에서 성능을 최대화하도록 설계된 시스템은 종종 취약합니다: 예상 범위 외의 작은 편차가 실패를 초래합니다. 광범위한 범위에서 안전하게 작동하도록 설계되고 명확히 정의된 제약 조건을 가진 시스템은 견고합니다.
예: 정확히 25°C에서 100 Mbps의 트래픽에 대해 설계된 통신 시스템은 트래픽이 110 Mbps로 증가하거나 온도가 40°C로 상승하면 실패합니다. '어떤 온도에서도 60°C 이하에서 사용률이 90%를 초과하면 안 된다'는 제약 조건으로 설계된 시스템은 피크 성능이 약간 낮아도 더 유용합니다.
시스템 엔지니어의 일: A 또는 B를 개별적으로 최적화하는 것이 아니라, 제약 조건을 따르면서 A+B+C...를 전체로서 최적화하는 것입니다.
교육 시스템: 시스템 공학 설계 실패
해밍은 자신의 원리를 교육에 적용합니다. 수십 년에 걸쳐 대학들은 개별 수학 과정을 최적화했습니다: 미적분학은 필수 사항으로 축소되었고, 선형대수학은 정리되고 강화되었습니다. 각 과정은 개별적으로 평가할 때 더 좋아 보입니다.
하지만 시스템으로 보면 큰 격차가 나타났습니다:
- 수학적 귀납법: 고등학교 이후 거의 언급되지 않습니다.
- 복소수: 대수학에서 간단히 도입되었다가, 선형대수학의 후반부에서 복소 고유값이 나타날 때까지 회피됩니다. 학생들은 두 개의 새롭고 어려운 개념에 선행 준비 없이 동시에 직면합니다.
- 미정계수법: 간단히 언급됩니다.
- 불가능성 증명: 거의 전적으로 부재합니다.
- 이산 수학: 크게 무시됩니다.
각 컴포넌트(각 과정)의 최적화는 인터페이스 격차를 만들었습니다: 과정 간의 개념적 다리가 부족합니다. 시스템의 출력 — 교육받은 엔지니어와 과학자 — 는 각 과정의 출력 지표가 개선되었음에도 불구하고 고통을 겪었습니다.
깨진 부분을 고치려는 자연스러운 충동 저항하기
해밍의 관찰: 시스템 공학에 대해 올바른 말을 하기는 쉽습니다. 매우 적은 수의 사람들이 순간이 올 때 실제로 그렇게 할 수 있습니다.
시스템이 실패할 때의 자연스러운 반응: 가장 분명하게 깨진 컴포넌트를 식별하고 수정합니다. 이것은 컴포넌트 생각입니다. 시스템이 실패한 것은 컴포넌트의 상호 작용, 인터페이스, 제약 조건을 포함하는 이유 때문입니다 — 하지만 가장 명백한 실패는 보통 단일 컴포넌트입니다.
시스템 엔지니어의 규율: 명백한 실패를 수정하기 전에, 묻으십시오: 왜 시스템이 이 컴포넌트에서 이 실패를 생성했습니까? 컴포넌트가 실제로 성능 부진인가요, 아니면 나머지 시스템에 의해 설계 범위 밖에서 작동하도록 요구되고 있습니까? 컴포넌트 증상을 수정하면 시스템 실패가 그대로 남습니다.
큰 조직의 커뮤니케이션 병목은 이 패턴을 따릅니다: 부서가 통신을 제대로 하지 못합니다(명백한 실패). 컴포넌트 수정: 더 나은 의사소통자를 고용합니다. 시스템 수정: 동일한 조정을 달성하기 위해 더 적은 커뮤니케이션이 필요하도록 정보 흐름 아키텍처를 재설계합니다.
시스템 진단
구별: 컴포넌트 수정은 증상을 다룹니다. 시스템 수정은 원인을 다룹니다. 원인은 보통 시스템의 구조 — 어떤 컴포넌트가 존재하는지, 어떤 인터페이스가 그들을 연결하는지, 어떤 제약 조건이 그들의 작동을 경계 짓는지를 포함합니다.