팀이 성장함에 따라 애플리케이션 아키텍처에서 일관성을 유지하는 방법은 무엇입니까?


46

신생 기업의 유일한 개발자로서 저는 애플리케이션의 아키텍처와 프레임 워크에서 많은 결정을 내릴 수있는 사치를 누 렸습니다.

4 년 후 빨리 습득 한 후, 나는 5 명으로 구성된 팀을 가지고 있으며 서부처럼 느껴지는 경우가 많습니다. 디자인 결정을 내리는 사람들은 DB 유형에 대한 정수와 열거 형을 한곳에 배치하고 다른 곳을 문자열로 묶습니다.이 프레임 워크는 문제에 대한 프레임 워크이며 다른 곳에서는 동일한 문제에 대한 다른 프레임 워크 등입니다.

일관성을 유지하려면 어떻게해야합니까? 그것은 나에게 중요하다고 생각하지만 팀원들은 "작동하면 작동합니다"방법론을 구독하는 것 같습니다.

내 질문의 큰 부분은 다음과 같은 표준을 기대하는 것이 비현실적이라고 생각합니다. 나는 독창성을 방해하는 독재자라는 생각에 어려움을 겪고 있지만 원하는 것은 무엇이든 확장 할 수없는 것 같습니다.


8
기존 SDLC 프로세스에 대해 최대한 많이 말씀해 주시겠습니까? 폭포, 애자일 등입니까? TFS 또는 작업 관리를 사용합니까? 코드 검토를 수행하거나 FxCop 또는 다른 형태의 코드 유효성 검사를 사용합니까? 설계 문서를 작성합니까? 지정된 건축가 역할이 있습니까?
John Wu


1
@ gnat : 답변이 표시되면 큰 사본이 아닙니다.
Robert Harvey

2
공평하게 말하면, 이러한 표준은 누구에게도 호의 나 엘리트주의에 대해 불평 할 수 없도록 널리 인정 된 "모범 사례"문서를 바탕으로 매우 일찍 설정되어 있어야합니다. 만약 개인으로부터 어려운 반발을 겪고 있다면 한 카우보이가 나머지 팀을 위해 건강한 환경을 유지할 가치가 있는지 고려하고 그 카우보이를 교체해야합니다. 그런 다음 체크인 전에 엄격한 코드 검토를 사용하고 아키텍처 구성 요소를 추가하기 위해 아래에 제공된 모든 조언은 놀라운 일이라고 생각합니다.
Patrick Hughes

1
그것은 소프트웨어 공학의 성배입니다 (정확한 요구 사항 추출 인 다른 성배와는 별개입니다).
pmf

답변:


52

왜 그렇게 특별 해?

CPU가 작동한다고 말하고 집에 가고 싶습니다. 왜 나를 귀찮게합니까?

모든 사람들이 풀 요청을하도록 강요함으로써 이러한 태도를 다룰 수 있습니다. 그러나 지금 마감일이 다가오고 있습니다. 깨끗하지 못한 성의 문을 잘못 누르면 압력이 가해집니다. 아니면 당신은 모두가 나뭇잎을 찾기 위해 이기고 아무도 당신의 깨끗한 성을 사용하지 않습니다.

이 문제를 해결하는 데 도움이되는 도구가 많이 있습니다. 소스 제어, 코드 검토, 코딩 표준 등이지만 문제의 핵심은 영혼이 가장 관련성이 높은 것에 대한 주관적인 의견입니다. 이를 위해서는 존경을 받고 유지해야합니다. 그렇게하면 훨씬 쉽습니다. 그렇게하지 않으면 도구 나 연습이 당신을 구할 수 없습니다.

그렇게하는 가장 좋은 방법은 일찍 의사 소통하는 것입니다. 아이디어를 결정한지 6 개월 후 "이 상점에서 DB 유형에 문자열을 사용하지 않습니다"라고 말하지 마십시오. 2 년 동안 문서에 묻혔다는 말은 그렇게 할 수 있다는 정당한 근거가 아닙니다.

어떤 이유로 든 당신이 관심있는 것을 가지고 있습니다. 당신이 그들에 관심이 있고 요점을 가지고 있다면 모든 모듈의 코딩 직전, 도중 및 직후에 그러한 것들을 명확하게 전달하십시오.

코드 스토킹은 훌륭한 방법입니다. 필요한 도구와 실습에 투자하여 코드 작성 후 몇 분 안에 코드를 검토 할 수 있습니다. 페어 프로그램과 도구는 단순히 손님 의자입니다.

왜? 코드를 작성한 후 매초마다 코드를 변경하는 비용이 기하 급수적으로 증가합니다. 코드의 메모리 수명이 절반이기 때문입니다. 방광이 휴식을 요구하는 순간 잊어 버리기 시작합니다.

관심있는 것을 기본 원칙으로 줄이십시오. 따라야 할 101 가지 규칙 목록을 보지 말고 위반 한 10 가지 원칙을 알려 주어 규칙 102가 무엇인지 스스로 파악해야합니다.

당신의 모습을 볼 수있게함으로써 나 자신의 비전을 강요 할 수있게 해주세요.

이런 표준을 기대하는 것이 비현실적입니까? 나는 독창성을 방해하는 독재자라는 생각에 어려움을 겪고 있지만 원하는 것은 무엇이든 확장 할 수없는 것 같습니다.

그런 다음 지시하지 마십시오! 이것을 긍정적 인 경험으로 만드십시오. 이것은 새로운 시대의 히피 넌센스가 아닙니다. 기본 심리학입니다. 인간 행동을 수정하려고합니다. 랜덤과 포지티브가 가장 강화됩니다 (라스 베이거스에 문의하십시오). 당신이 부정적인 경우에 당신은 당신의 강화와 일치해야합니다. 그것은 얻을 수없는 고통입니다. 지혜를 전할 때 긍정적으로 생각하고 그것에 대해 우연히 할 수 있습니다.

내가 거기 있었기 때문에 당신이 어디에서 왔는지 압니다. 당신은 통제권을 가졌고 이제 사라졌습니다. 다시 원해 잘 극복 해 이제 팀이 생겼습니다. 제어 할 필요가 없습니다. 그들이 필요한 것은 리더십입니다. 당신이 필요로하는 것은 통제되지 않습니다. 영향을 미칩니다. 더 잘 작동하고 훨씬 적게 작동합니다. 그것을 마스터하고 휴식을 취하십시오. 재미 있어야합니다.

제대로하면 휴가를 갈 수 있으며 여전히 효과가 있습니다. 어떻게? 리더가 아니라 다른 사람들도 리더가되도록함으로써. 일단 당신이 팀에 비전을 심어 놓으면 단순히 당신이하고있는 일을 모방하여가는 동안 일할 수 있습니다. 초보자를 멘토링하고 다른 사람들에게도 영향을 미치도록 격려하십시오.

어렵다는 것을 알고 있습니다. 우리는 사람들을 잘 다루기 때문에이 직업에 들어 가지 않았습니다. 우리는 코드와 가장 잘 소통합니다. 괜찮아. 빠르고 자주하십시오. 왜 더 나은지 보여주세요. 그렇지 않다면 들으십시오. 내가 아직도 생각하는 동안 이것을하십시오. 코딩하는 것을 좋아합니다. 지구상에서 내가 이야기 할 수있는 사람은 거의 없습니다. 그들 중 하나가 되십시오.


4
"코드 스토킹"이라는 말의 의미는 분명합니다.하지만 구글은 전 세계의 범죄 법만을 제의합니다.
제레미

3
"코딩 표준"을 목록에 추가
BЈовић

5
용어를 소개하는 것 같아서 '코드 스토킹'의 어원을 알려 드리겠습니다. 타임 스탬프를 얻기 위해 추상 팩토리를 사용하는 일부 코드를 확인했습니다. 피어 개발자가 병합을 시도하고 (코드 체크인) 체크 아웃 이후 코드 변경 사항을 스크롤했습니다. 그녀는 내 공장을보고 호기심을 느꼈습니다. 그녀는 내가 왜 이런 짓을했는지 확신하지 못했습니다. 그래서 그녀는 걸어서 나에게 물었다. 내가 혼란스러워 보였을 때 그녀는 "오, 난 단지 당신을 스토킹하는 코드였습니다." 페이스 북은 우리의 어휘를 바꾸고 있습니다.
candied_orange

1
참된! " 내가 당신을 볼 수있게함으로써 나 자신의 비전을 강요 할 수있게 해주세요. 우리는 잘 지낼 것입니다. "
페드로 Lobito

@ candied_orange : 나는 전체 "코드 스토킹"에 대해 약간 당황했습니다. 그녀를 펑크하게 했습니까? 대답의 맥락에서, 그녀가 당신을 스토킹하는 코드 인 것처럼 보입니다.
Robert Harvey

23

먼저, 사람들이 작성하지 않은 것을 유지하도록하십시오. 개발자가 익숙한 프레임 워크와 기술을 사용하는 습관을들이는 것은 매우 쉽습니다. 프레임 워크와 방법론 사이를 전환해야 할 필요는 없습니다. 누군가가 코드의 구석 밖으로 이동하여 종종 그것을 경험한다면, 사람들은 무언가에 대해 표준화하고 싶어하는 사람들로 이어질 수있는 불평적이고 희망적 인 생산적 토론을 촉발 할 것입니다.

다음으로 요청 및 코드 검토를 가져옵니다. 코드 검토없이 코드를 기본 지점에 병합하지 마십시오. 누구나 할 수 있습니다. 다시 말하지만, 누군가 자신이 해왔 던 것과 다른 것을 보게되면 토론과 팀워크가 더 나은 해결책을 제시 할 수 있습니다. 또한 모든 사람들이 코드베이스의 관리인이되게하는데, 이는 사람들이 코드베이스와 코드 상태에 대해 관심을 갖도록합니다.

마지막으로 디자인 토론이 있습니다. 공식적이거나 비공식적 일 수 있지만 가지고 있습니다. 참여하고 싶은 사람들이 그렇게하도록하십시오. 사용하려는 프레임 워크, enums vs int 등의 장단점에 대해 토론하고 결정을 내리고 어딘가에 표준 문서와 같이 문서화하십시오. 그런 다음 문제가 발생했을 때 지적해야 할 것이 있습니다. 또한 표준 결정을 다시 방문하는 것을 두려워하지 마십시오. 기술은 (신속하게) 변경되므로 팀 및 회사로서의 요구 사항이 달라질 수 있습니다.

사람들이 내가 보는 것을보고 코드 품질에 대한 이해 관계가있는 것처럼 느끼도록하십시오. 그런 다음 의견의 차이가 생길 때 표준을 찾는 것에 대한 토론을 조심스럽게 진행하십시오.


이 방법의 좋은 점은 관리자가 단순히 자신의 취향을 강요하는 것이 아니라 팀에게 결정의 기회를 제공하고이를 시행 할 권한을 부여한다는 것입니다.
로빈 베넷

6

누군가가 코드를 메인 브랜치 / 트렁크에 병합 할 때마다 코드 검토를 수행하고 코드를 검토 할 때 사람들을 해당 표준으로 유지하십시오.

그리고 당신 만이 코드 검토를 수행해야한다는 것을 의미하지는 않습니다. 모든 사람은 다른 사람의 코드를 검토해야합니다. 이것은 팀 전체의 시스템에 대한 지식을 전파하지만 Carol이 Bob의 코드를 검토하고 "정수를 사용하는 것을 보았습니다. 항상 열거 형을 사용합니다"라는 상황을 만듭니다. 그들은 당신이 본 불일치를 발견하고, 관심이 있다고 가정 할 때, 모든 사람이 같은 페이지에 도착해야한다는 것을 알게 될 것입니다.

인정되고 합의 된 표준이 나타나며,이 시점에서 표준을 문서화하고 사람들이이를 따르도록해야합니다. 여기에는 "DB의 열거 형"등이 포함됩니다. 사용할 프레임 워크 등을 문서화 할 수도 있습니다.


내 질문의 큰 부분은 이와 같은 표준을 기대하는 것이 비현실적이라는 것입니다. 나는 독창성을
방해

3
@Matthew, 나는 일반적으로 당신과 동의하지만, 나는 이것을 역순으로 할 것입니다. 먼저 설계 검토를 수행하고 설계 검토 중에 지침이 나온다. 건축가 / 리드에 모든 것을 미리 작성 해야하는 부담을 가중시키는 것은 개 입자에게 부담을 옮기고 있습니다.
Nick Alexeev

@Deekor : 전투를 선택해야합니다. 발을 밟아야하는 것을 파악하고 문서화하십시오. 모든 것을
Robert Harvey

2
@Deekor, 당신은 "창의력을 자극하지 않고"표준과 일반적인 코딩 관행을 시행 할 수 있습니다. 어쨌든 그것은 가짜 주장입니다. 일반적인 코딩 표준은 유지 관리하기 쉬운 소프트웨어로 이어집니다. 무료 코딩은 악몽으로 이어집니다.
마태 복음

1
@Nick Alexeev, 동의합니다. 편집합니다.
마태 복음

1

가능하면 도구 / 스크립트를 작성하여 프로젝트를 자동으로 분석하고 프로젝트에서 사용중인 표준, 도구 및 접근 방식을 결정할 수 있습니다. CI 빌드의 일부로 사용자 정의 도구를 실행하여이를 수행 할 수 있습니다.

도구의 결과물에 '행성 표'문서 (예 : 단위 별 행 (예 : '응용 프로그램'또는 프로젝트 또는 API 또는 기타)가있는 Google 시트)와 다양한 측정 항목 / 표준에 대한 열이 기록되어 있어야합니다. 이를 통해 사람들은 표준이 무엇인지, 표준이 얼마나 잘 채택되었는지 등을 파악하고 혼란에 질서를 부여 할 수 있습니다.

열을 수동으로 업데이트 할 수도 있지만 최신 정보를 유지하는 것이 좋습니다. : D

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.