역할: 소프트웨어 설계자
이 역할은 시스템 소프트웨어 아키텍처의 개발을 주도합니다. 프로젝트의 전체 디자인 및 구현을 제한하는 주요 기술 결정에 대한 지원 추진 및 작성을 포함합니다.
역할 세트: 개발자
관계
기본 설명

소프트웨어 설계자는 소프트웨어 아키텍처로 표현된 주요 기술 결정 추진에 대해 전체적인 책임이 있습니다. 일반적으로 시스템의 요구사항, 디자인, 구현 및 배치 "보기"를 포함하여 시스템의 구조상 중요한 측면을 식별하고 문서화합니다.

또한 설계자는 이 결정의 근거를 제공하고, 다양한 이해 당사자의 관심사항을 조화시키고, 기술 위험성을 억제하고, 결정이 효과적으로 커뮤니케이션, 검증 및 준수되는지 확인해야 할 책임이 있습니다.

인력 구성
스킬

"이상적 설계자는 문학자이자 수학자로, 역사적 연구에 정통하고, 근면한 철학도이며, 음악에 정통하고, 의학에 무지하지 않고, 법학자의 응답에서 정보를 탐지하고, 천문학과 천문학적 계산에 익숙한 사람이어야 합니다. - Vitruvius, circa 25 BC

요약하면, 소프트웨어 설계자는 문제를 빨리 파악하고 완전한 정보 없이도 경험에 의한 중대한 판단을 내릴 수 있을 정도로 잘 다듬어져 있어야 하고 성숙함, 비전 및 고도의 경험 지식을 소유해야 합니다. 특히 소프트웨어 설계자 또는 아키텍처 팀 구성원은 다음 스킬을 겸비해야 합니다.

  • 요구사항에 대한 철저한 이해를 통한 문제점 도메인 및 소프트웨어 엔지니어링 도메인에 대한 경험. 팀이 있는 경우 이 자질을 팀 구성원 전체에 보급할 수 있으나 최소한 소프트웨어 설계자 한 명은 프로젝트의 글로벌 비전을 제공해야 합니다.
  • 다양한 팀에 걸쳐 기술적 노력을 이끌어내며 업부 부담 하에서 중요한 결정을 내리고 이를 시행하기 위한 리더쉽. 소프트웨어 설계자 및 프로젝트 관리자는 긴밀한 협력을 통해 소프트웨어 설계자는 기술적 문제를 이끌고 프로젝트 관리자는 관리 문제를 이끄는 것이 효과적입니다. 소프트웨어 설계자는 기술적 결정을 내릴 권한이 있어야 합니다.
  • 신용을 얻고 설득, 동기 부여 및 조언을 위한 커뮤니케이션. 소프트웨어 설계자는 명령이 아니라 프로젝트의 나머지 관계자의 동의에 따라서만 리드할 수 있습니다. 효율성을 위해, 소프트웨어 설계자가 프로젝트 팀, 프로젝트 관리자, 고객 및 사용자 커뮤티니 및 관리 팀의 존경을 받아야 합니다.
  • 결과에 집착하는 목적 지향 및 주도성. 소프트웨어 설계자는 프로젝트 이면의 기술 원동력이며 몽상가가 아닙니다. 성공적인 소프트웨어 설계자는 불확실성과 부담 아래에서 장기간 연속해서 차선의 결정을 내리는 활동을 수행합니다. 수행해야 할 작업을 수행하는 데 초첨을 맞출 수 있는 사람들만이 이 프로젝트 환경에서 성공을 거둘 수 있습니다.

전문가의 관점에서 볼 때 소프트웨어 설계자는 역할: 디자이너 기능도 가져야 합니다. 그러나 디자이너와는 달리 소프트웨어 설계자는 다음 조건을 갖추어야 합니다.

  • 세부 레벨의 몇몇 기술이 아니라 상위 레벨의 다양한 기술을 알고 있어야 하므로, 전문가라기 보다 오히려 만능인에 가까와야 합니다.
  • 커뮤니케이션 및 리더쉽 스킬은 기본이고, 보다 광범위한 기술 의사 결정을 위해 일반적인 지식과 경험이 있어야 합니다.
지정 접근 방식

프로젝트가 아키텍처 팀을 보증할 수 있을 정도록 대규모인 경우, 폭넓은 각양각색의 경험을 수용하고 소프트웨어 엔지니어링 프로세스에 대한 일반적인 지식을 공유하는 복합적인 재능을 갖추는 것이 목적입니다. 아키텍처 팀이 다양한 팀, 도메인 또는 계약자의 대표 위원회일 필요는 없습니다. 소프트웨어 아키텍처는 전시간 조작하는 기능이므로 영구 전담 인력이 있습니다.

소규모 프로젝트의 경우, 단 한 사람이 프로젝트 관리자와 소프트웨어 설계자 역할을 겸임할 수 있습니다. 그러나 가능한 경우, 한 역할에 대한 시간적 압박으로 인해 다른 역할에 소홀해지지 않도록 하기 위해 두 역할을 각기 다른 사람이 수행하는 것이 더 바람직합니다.

자세한 정보