인생은 많은 자유를 안겨주지만, 그에 상응하는 의무도 따라옵니다. 자동차를 소유할 권리가 있지만 등록하고 보험가입해야 합니다. 부동산을 구입하는 권리도 땅세를 납부해야 한다는 의무가 따릅니다. 시민으로서 투표할 권리가 있지만, 투표소에서 목소리를 내야 하는 책무도 있습니다.
권리와 책임의 조합은 사람들이 사회 속에서 어떻게 맞물리는지를 정의합니다. 미국에는 미국 헌법의 처음 열 개 개정안인 국민권리장이 있습니다. 그러나 대응되는 책임의 권리장은 없습니다. 시민의 책임은 수많은 법률과 규정에서 구체화되어 있으며, 각기 다른 관할 지역에서 존재합니다. 또한 지구 상의 동료 주민들에게는 서로에 대한 사회적 책임이 있습니다. 그냥 함께 있는 이유로 말이죠.
소프트웨어 프로젝트에서도 사람들은 권리와 책임을 갖습니다. 우리가 상호작용하는 사람들을 고려해 이 두면을 조직화할 수 있습니다. 우리는 서로의 팀원, 고객, 매니저, 공급업체, 대중과의 이러한 권리-책임 관계를 갖습니다. 협업하며 상대방에게 필요한 것과 '이 프로젝트가 함께 성공적으로 진행되기 위해 당신에게 필요한 것이 무엇인지'에 대해 대화해야 합니다.
모든 소프트웨어 실무자는 전문 윤리를 준수하는 책임이 있습니다. 컴퓨팅 머신리(Association for Computing Machinery)과 IEEE 컴퓨터 협회는 소프트웨어 공학 윤리 및 전문 실무에 대한 윤리 강령을 공동으로 마련했습니다. 이 강령은 실무자가 기밀을 유지하고 지적 재산권을 존중하며 높은 품질을 추구하는 책임을 다룹니다. 소프트웨어 전문가들은 이 강령에 익숙해져야 합니다.
소프트웨어 전문가들의 권리와 책임 간에는 대칭이 있습니다. A 그룹의 사람들이 B 그룹의 사람들로부터 특정 서비스나 행동을 요구할 권리가 있다고 가정해봅시다. 그럼에도 불구하고, A 그룹의 구성원들은 B 그룹의 사람들에게 몇 가지 책임이 있습니다. 이러한 일대일 관계에 각 권리 선언에 대응하는 책임 선언을 함께 수립할 수 있다고 상상해볼 수 있습니다. 또는 관계에 참여하는 양쪽 당사자에게 상응하는 상호 책임이 내포된 상호 권리의 보완 선언을 설계할 수도 있습니다.
소프트웨어 개발에 종사하는 여러 그룹의 권리 및 책임 예시 몇 가지를 다음에 소개하겠습니다. 다양한 소스에서 가져온 것이며, 이를 통해 이해관계자들이 더 원할하게 협업할 수 있도록 귀하의 현지 시각에서 권리 및 책임을 항목별로 세부화하는 것이 도움이 될 수 있습니다. 공식적으로 이를 기록하는 데 불편함을 느낀다면, 다음과 같은 형태로 이러한 아이디어를 표현하는 것을 고려해보세요: "당신이 나에게 X를 기대하는 것은 일반적으로 합리적이며, 나는 당신이 Y를 기대하는 것을 합리적으로 여길 수 있습니다."
일부 고객의 권리 및 책임
소프트웨어 요구 사항의 영역은 비즈니스 분석가(BAs)와 고객 대표 간의 밀접한 협력을 필요로 합니다. 이들은 상호 권리와 책임을 갖고 있습니다. 이 내용은 Joy Beatty와 공동 저술한 책인 Software Requirements에서 설명한 바 있습니다. 여기서 소프트웨어 고객을 위한 10개의 요구 사항 권리 및 해당하는 요구 사항 책임서를 다운로드할 수 있습니다. 몇 가지 주요 내용은 다음과 같습니다.
- 고객으로서 BAs가 귀하의 비즈니스 및 목표에 대해 학습하도록 요구할 권리가 있습니다. BAs와 개발자에게 귀사의 비즈니스 또는 응용 프로그램 도메인에 대해 교육하는 책임이 있습니다.
- 고객으로서 귀하의 기능적 요구 사항과 품질 기대를 충족시키는 시스템을 수령할 권리가 있습니다. 요구 사항을 제공하고 명확히 설명하는 데 필요한 시간을 할애하는 책임이 있습니다.
- 고객으로서 요구 사항을 변경할 권리가 있습니다. 개발팀에 요구 사항 변경 사항을 즉시 전달하는 책임이 있습니다.
일부 개발자 권리 및 책임사항
윤리와 공정성은 소프트웨어 엔지니어링 및 제품 개발의 모든 측면에 적용됩니다. 예를 들어 Nils Löwe는 책임 있는 소프트웨어 개발을 위한 선언문을 작성했고, Jeff Atwood는 효율적인 근무 환경을 위한 프로그래머 권리 선언서를 제시했습니다. 더불어 다른 하나의 개발자 권리 선언서도 있습니다. 코드를 작성하는 사람들에게 특화된 일부 권리 및 책임사항은 다음과 같습니다.
- 개발자로서 여러분은 다른 사람들에 의해 지적재산이 인정되고 존중받을 권리가 있습니다. 다른 사람의 작품을 허락을 받아 재사용함으로써 다른 사람의 지적재산권을 존중하는 책임이 있습니다.
- 개발자로서 여러분은 진행 중인 요구 사항의 우선순위를 알 권리가 있습니다. 새로운 요구 사항이나 다시 우선순위를 매기는 경우 일정 영향을 고객에게 알리는 책임이 있습니다.
- 개발자로서 여러분은 작업에 대한 추정치를 할 수 있고 업데이트할 권리가 있습니다. 가능한 정확한 추정치를 제시하고 현실을 반영하기 위해 일정을 조정하는 책임이 있습니다.
일부 프로젝트 매니저 또는 스폰서의 권리와 책임
프로젝트나 조직을 이끄는 사람들은 제품을 개발하는 사람들과는 다른 책임과 권리를 갖습니다. 몇 가지 예를 보겠습니다.
- 프로젝트 매니저 또는 스폰서로서, 개발자들에게 고품질 소프트웨어를 제작할 것을 기대하는 권리가 있습니다. 고품질 소프트웨어를 생산할 수 있도록 환경, 자원 및 시간을 제공하는 책임이 있습니다. 조직이나 팀의 리더는 건설적이고 협력적인 방향으로 그룹 문화를 이끌어가는 책임이 있습니다.
- 프로젝트 매니저 또는 스폰서로서, 프로젝트 목표를 설정하고 일정을 수립할 권리가 있습니다. 개발자들의 추정치를 존중하고 현실적이지 않은 시간 내에 작업을 완수하도록 개발자들에게 압력을 가하는 것을 피하는 책임이 있습니다.
일부 자율 팀 권리 및 책임
Willem-Jan Ageling은 권한이 부여된 자율적인 Scrum 팀에서 작업하는 데 필요한 개발 팀의 책임을 탐색했습니다. 여기에는 어떤 유사한 개발 환경에도 적용할 수 있는 몇 가지 주요 사항이 있습니다.
- 자율적인 자체 관리 팀 구성원으로서, 여러분은 여러분의 용량을 관리하고 반복을 실행하는 방법을 제어하며 작업이 완료되었는지를 설정하는 권리가 있습니다. 여러분은 반복 목표를 결정하고 백로그를 작성하며 반복 목표에 대한 매일의 진행 상황을 평가하고 반복이 진행되는 방식을 평가하고 개선 계획을 작성하는 회고에 참여하는 책임을 져야 합니다.
위기 전에 고려해야 할 사항
다른 커뮤니티에서 특정 권리를 요구할 자격이 있다고 생각할 수 있지만, 그들이 당신의 기대를 충족시킬 능력이나 의지가 없을 수도 있습니다. 그런 상황에 부딪힐 때는 당사자들이 상호 협력적이고 얌전하게 일할 방법에 합의해야 합니다. 협력자들이 서로의 권리와 책임을 논의하고 기록하여 오해를 방지하는 것은 시간 낭비가 아닙니다. 이러한 대화는 기대 관리의 한 형태입니다.
가까운 개인 간 관계에서 위기가 되기 전에 문제를 다루려고 노력합니다. 우리의 전문적 상호작용에서도 유용한 실천법입니다. 대부분의 사람들은 어떤 경우에도 선의로 행동하려고 노력합니다. 권리와 책임에 대한 공유된 이해를 도출하는 것은 불쾌한 인간 간 위기를 방지하는 데 도움이 됩니다.
우리의 가장 큰 책임은 모든 전문적 동료를 공정하게 대접하고 존중하는 것입니다. 우리 모두가 그렇게 할 수 있습니다.
본 글은 칼 와이거스(Karl Wiegers)의 '소프트웨어 개발 보석: 소프트웨어 경험 50년의 교훈'에서 채취되었습니다. 칼 와이거스는 캔다세 호캔슨(Candase Hokanson)과 저서 '소프트웨어 요구사항 필수' (Software Requirements Essentials), 조이 비티(Joy Beatty)와 공저한 '소프트웨어 요구사항' (Software Requirements), '생각지 않고 만든 일상물의 디자인', '성공적인 비지니스 분석 컨설팅' 등 다수의 책을 저술한 저자입니다.