# 12가지 소프트웨어 개발 원칙 요약
# 서두
내용을 기억해두고 싶어서 요약본을 남겨본다.
원문은 12가지 필수적인 소프트웨어 개발 원칙과 개념 | IT World (opens new window)를 참고하시길.
# 권한 없는 책임
조직에 속하다보면 누구나 크게 작게 겪는 문제일 것이다. 권한 없는 책임은 조직의 기능 장애를 나타내는 징후라고 한다. 아얘 없을 수는 없지만. 권한을 더 부여하거나 책임을 덜어주도록 해야할텐데 이는 상사의 영역이기 때문에, 부하의 입장에서는 면담 등을 최대한 활용하여 상사를 설득하는 수밖에 없을것 같다.
# 반복하지 말 것
너무 당연한 얘기같긴 한데, 생각해보면 여러가지 측면이 있을 수 있다. 코드 측면에서 보면 리팩토링이겠지만, 업무 측면에서 보면 자동화가 가능한 부분이라든지 불필요한 또는 업무 몰입을 방해하는 작업들을 줄일 수 있을 것이다.
# 필요할 일이 없다
간단히 말하면 불필요한 기능은 만들지 말라는 것이다. 요구사항을 추출하다보면 막 아이디어가 쏟아지면서 당장 필요한 것들이 아닌게 들어간다. 미래를 예측하지 말고 현재에 집중하자.
# 최소 실행 가능 제품
바로 위 단원도 그렇지만 애자일 사상에서 항상 얘기하는 것이다. 일단 동작하는 최소 기능 제품을 완성하는게 중요하다는 뜻이다. 말만 거창하지 말고, 제대로 동작하는 제품이 더 중요하다. 그래야 시연도 가능하고 적절한 납기일 준수와 관리가 용이해진다. 최소 실행 가능 제품(Minimum Viable Product, MVP).
# 좁고 깊게
역시 맥락이 이어지는데, "선택과 집중"을 하라는 소리다. 제일 잘 할 수 있는 곳에서 제일 잘 하자. 생존이 치열한 요즘 환경에서 넓게 확장하는 것은 생존한 다음에 생각해도 늦지 않다.
# 셋 중 하나만: 최소 비용, 최고 제품, 토탈 서비스
최소 비용(운영의 탁월성), 최고 제품(제품 리더십), 토탈 서비스(고객 친밀성)
모두 잘하기는 사실상 불가능하다. 또한 일반적으로 토탈 서비스는 비용이 매우 높으므로 현실적으로는 최소비용이나 최고 제품중 하나의 전략을 택해야 한다.
# 테스트 먼저
원문은 테스트가 매우 중요함을 강조하지만 개인적으로는 약간 다른 생각이다. 한국이 유독 심하긴 하지만, 전 세계적으로 개발과 혁신 주기가 빨라지면서 테스트가 중요하지만 철저하게 수행되지는 못하는게 추세로 생각된다. TDD에서 BDD로, BDD에서 DDD로 자꾸 테스트 단위가 추상화 되는 것도 그런 흐름을 반영하는 것이 아닐까.
# 계약에 의한 설계
원문의 단어 선택이 좀 이상한데 영어로 Design by Contract라고 되어있다. 영어 버전이 좀 낫다. 다시 말하면 최대한 빠른 설계 시간에 인터페이스를 확정해야 한다는 뜻이리라.
# 경합 조건에 주의
다른 항목에 비해 매우 기술적인 이야기가 언급되었다. 최근 경향상 병렬, 비동기 프로그래밍이 유행하기 때문에 더욱 주목받는 키워드이다. 재밌게도 네이티브에 가까운 분야도 멀티코어 환경 덕분에 동시성 처리가 주목 받고, 웹 프론트 환경도 JS의 비동기 메카니즘 덕분에 비동기 <-> 순차처리 사이의 해결책을 찾는 노력들이 활발하다. 함수형 프로그래밍이 유행하는 시절이 올줄이야.
# 콘웨이의 법칙
소프트웨어 공학에 관심이 있다면 한번쯤은 들어봤을 내용이다. "소프트웨어의 구조는, 조직의 소통 구조를 반영한다." 바꿔 말하면, 소프트웨어 구조를 변경하기 위해서는 조직 구조를 변경해야 한다는 뜻이다.
# 빠른 실패
오류가 있으면 빨리 노출하라는 전략. 사용자 경험을 향상시킨다고 에러를 뱉지 않고 내부적으로 재시도하는 형태는 바람직하지 않다는 뜻이다. 개인적으로 매우 동의하는 부분이다. 하위 모듈일수록 "알아서" 처리하기 보다는 오류를 책임지지 말고 상위 모듈로 전달하는게 좋다고 본다. 보통은 알아서 처리하려고 하다가 오류는 해결되지 않고, 원인 파악만 힘들어지는 경우가 허다하다.
# 맨먼스 미신
The Mytthical Man-Month. 프로젝트 후반에 일정 지연을 막기 위해 인력을 투입할수록 일정은 더욱 느려진다. 제발 의사결정권자 분들이 통감했으면 하는 부분이다. 일정이 지연되지 않게 하려면 원인이 무엇인지 파악하고 해결하려는 리더의 자세가 필요하다. 물론 대부분의 원인은 인력 부족에 있지 않다.