저는 주니어 개발자 (~ 3 년)이며 업무를 수행하면서 새로운 시스템을 설계하고 있습니다. 저의 수석 개발자는 수석 아키텍트가되지만 시스템을 직접 설계 해 보도록 요청했습니다.
아이디어를 브레인 스토밍하고 아키텍처 제안으로 본 것을 제안하는 몇 가지 반복 과정에서 내 리드는 내가 수행 한 대부분의 작업이 "설계"가 아니라 "설계"라는 피드백을 받았습니다.
그는 아키텍처가 구현에 무관 한 것으로 설명했지만 디자인은 구현에 대한 설명입니다. 그는 디자이너 모자를 벗고 건축가 모자를 써야한다고 말했습니다. 그는 그렇게하는 방법에 대해 약간의 조언을했지만, 나는 당신에게도 묻고 싶습니다.
소프트웨어 디자이너 모드에서 벗어나 건축가처럼 생각하기 시작하는 방법은 무엇입니까?
다음은 제가 리드에 의해 아키텍처와 관련이없는 것으로 보이는 "디자인"의 예 입니다.
- 시스템에서 리소스를로드 및 언로드하는 알고리즘을 생각해 냈으며 리더는 알고리즘이 아키텍처가 아니라고 말했습니다.
- 나는 시스템이 제기해야 할 일련의 이벤트와 그것들을 어떤 순서로 올려야 하는지를 생각해 냈지만 이것도 아키텍처로 자르지 않는 것 같습니다.
나는 세부 사항에 사로 잡히고 멀리 물러서지 않는 것 같습니다. 아키텍처 수준의 무언가를 생각해 낼 때조차도 다양한 구현을 시도하고 세부 사항을 살펴보고 일반화하고 추상화하여 종종 거기에 도달했습니다. 내가 이것을 내 리드에 설명했을 때, 그는 내가 잘못된 접근법을 취하고 있다고 말했다. 나는 "하단"이 아니라 "하단"을 생각해야했다.
프로젝트에 대한 보다 구체적인 내용은 다음과 같습니다 .
- 우리가 설계하는 프로젝트는 웹 애플리케이션입니다.
- 약 10-10 만 줄의 코드를 추정하고 있습니다.
- 우리는 스타트 업입니다. 우리의 엔지니어링 팀은 약 3-5 명입니다.
- 응용 프로그램과 비교할 수있는 가장 가까운 것은 간단한 CMS입니다. 구성 요소로드 및 언로드, 레이아웃 관리 및 플러그인 스타일 모듈과 유사한 복잡성을 가지고 있습니다.
- 응용 프로그램은 ajax-y입니다. 사용자는 클라이언트를 한 번 다운로드 한 다음 서버에서 필요에 따라 데이터를 요청합니다.
- 우리는 MVC 패턴을 사용할 것입니다.
- 응용 프로그램은 인증을받습니다.
- 우리는 오래된 브라우저 지원에 대해 크게 신경 쓰지 않습니다. (HTML5, CSS3, WebGL ?, 미디어 소스 확장 등)
프로젝트의 목표는 다음과 같습니다 .
- 응용 프로그램을 확장해야합니다. 가까운 시일 내에 사용자는 수십만 명에이를 것이지만 수만 명 이상을 계획하고 있습니다.
- 우리는 응용 프로그램이 영원히있을 것이기를 바랍니다. 이것은 임시 해결책이 아닙니다. (실제로 우리는 이미 임시 솔루션을 보유하고 있으며 우리가 설계하는 것은 장기적인 대안입니다.)
- 응용 프로그램은 민감한 개인 정보와 접촉 할 수 있으므로 안전해야합니다.
- 응용 프로그램이 안정적이어야합니다. (사실, 그것은 Gmail 수준에서 안정적이지만 화성 로버의 극단에있을 필요는 없습니다.)