개발자가 불필요하거나 유해한 기능에 반대해야합니까? 일종의 Java를 개발하고 있다고

새로운 기능, 즉 중요하지 않은 / 질문이 아닌 기능을 논의 할 때 개발자의 좋은 태도는 무엇입니까?

언어와 같은 일종의 Java를 개발하고 있다고 상사가 말한다. “우리는 개발자가 객체 메모리를 직접 조작 할 수 있도록 포인터가 필요합니다!”

개발자가 상상할 수없는 복잡성과 보안 취약점을 추가하여 아이디어를 중단해야합니까? 아니면 요청을해야합니까?

이것은 좋은 예는 아니지만 워크 플로를 중단하거나 프로그램의 내부 구조에 영향을주는 버튼을 추가하는 등 회색 영역에 더 많은 것은 어떻습니까?

정규 프로그래머를위한 최적의 “할 수있는”배포와 “할 수없는”배포는 무엇입니까?

편집 : 문제는 나쁜 상사에 관한 것이 아닙니다. : D

나는 사람들이 눈에 띄는 양의 문제를 추가하면서도 소박하게 유용 할 수있는 새로운 문제에 어떻게 접근하는지에 더 관심이있었습니다.

일반적인 태도는 다음과 같습니다.

  1. 그래 우리는 할거야, 복잡성을 망쳐
  2. 아마도
  3. 아니요, 일반적인 재 작업 및 시사점은 변화를 정당화하지 않습니다

좋은 개발자의 반응은 무엇입니까?



답변

가장 좋은 점은 회의를 갖고 장단점 을 그룹으로 세우고 이를 바탕으로 최상의 해결책을 논의하는 것입니다. 팀이있는 경우 솔루션에 동의하도록하십시오. 팀이 무언가에 동의하면 관리자와 “보스”가 솔루션을 찾는 경향이 있습니다.

만약 당신의 상사가 여전히 동의하지 않는다면, 당신은 당신이 할 수있는 모든 일을 다 한 것입니다 : 당신은 당신의 팀과 매니저를 함께 가지고 장단점을 커버했고, 상사가 잠재적으로 열등한 해결책을 선택 했음에도 불구하고.

이것의 핵심은 그룹으로서의 장단점을 논의하는 것입니다. 그렇게함으로써 당신은 당신의 팀과 함께 최고의 솔루션이 무엇인지 논의하고 동시에 사람들이 당신의 상사 결정을 생각하는 이유를 사람들에게 말한 후 정치적 반발없이 상사의 결정을 지적합니다. 잘못되었습니다.

이것은 노동 정치와 관련된 부드러운 상황이지만, 우호적으로 다룰 수 있습니다.


답변

만약 당신의 상사가 어리석은 일을하도록 지시한다면, 어리석은 이유를 (친절하게) 설명해야합니다.

그 사람이 요점을 얻지 못하면 어리석은 일을해야합니다. 그게 다야. 그는 보스입니다. 그러한 경우, 그 사람이하는 말을하거나 상사와 대화하거나 직업을 바꿀 수 있습니다.


답변

사장에게 기술적으로는 가능하지만 분석, 디자인, 기존 코드 재 작성, 테스트, 회귀 테스트 등을 위해 노력하는 데 소요되는 X 시간과 비용이 소요될 것이라고 보스에게 알릴 수 있습니다. . 때때로 대답은 “그렇습니다! 우리는 이것을 가져야합니다!”가 될 것입니다. 때로는 “아니요, 그렇지 않습니다”가 될 것입니다.

요청한 기능이 응용 프로그램의 핵심 원칙 (예 : “파란색 버튼 추가!”)을 고객의 요청에 따라 빨간색 버튼 만 갖도록 지정되고 설계된 UI에 위반하는 경우 정상이라고 생각합니다. 왜 “왜?” 미리 설정된 디자인에 반대한다고 언급합니다.

결국 거의 모든 것이 “할 수있는”것입니다 ( 기술적 인 관점에서 파란색 전용 UI에 빨간색 버튼을 추가하는 것이 어렵지 않을 수도 있음 ). “해야 할 일”이 더 중요합니다.


수정 된 질문에 답변하려면 추가 조사 및 분석이 진행되는 동안 답변이 # 2, “아마도”라고 생각합니다.

주어진 기간 내에 제공 할 수없는 무언가에 대한 약속을 고수 할 수 있기 때문에 # 1 “무조건적으로”라고 대답하고 싶지 않습니다.

당신은 비협조적이고 불필요하게 어려운 것처럼 보이기 때문에 # 3 “아니오, 너무 많은 일입니다”라고 대답하고 싶지 않습니다.


답변

개발자의 관점에서 : 청구서를 지불하는 사람에게 자신이 원하는 것을 가질 수 없다고 말하지 마십시오. 대신, 당신은 그들이 그 가격으로 그것을 가질 수 없거나, 그들이 원래 생각했던 것과 정확히 그것을 가질 수 없다고 말할 수 있습니다.

“포인터”예; 관리 코드 환경 인 .NET에는 포인터가 있습니다. 관리되지 않는 코드와의 많은 상호 운용성을 위해서는 반드시 필요합니다. 그러나 “안전한”사용은 엄격하게 규제되며 “안전하지 않은”코드에서 사용되는 경우 해당 코드는 런타임에서 더 높은 보안 권한이 필요합니다. 포인터를 통한 직접 메모리 액세스가 필요한 관리되는 언어를 개발하는 경우 자동 마샬링 할 수없는 읽기 전용 관리 포인터를 사용하고 ” true “는 코드베이스의 가장 신뢰할 수있는 영역에서만 포인터입니다.

GUI 예제 : 새로운 기능이 현재 코드 흐름을 “중단”한다는 것을 알고 있다면,이를 테스트하고 워크 플로우에서 수행 한 이전 작업을 롤백하기 위해 더욱 강력하게 개발할 수 있습니다. 당신의 클라이언트, 때로는 당신의 매니저조차도 대개 프로그램 구조에 대한 단서 나 관심이 없습니다. 프로그램을 구성하는 방식으로 인해 원하는 것이 어려운 경우, 정의에 따라 클라이언트가 원하는 것을 수행 할 수 없기 때문에 구조가 잘못되었습니다.

모든 경우에이 새로운 기능은 고객이 생각했던 것 이상으로 필요한 작업 범위를 증가시킬 수 있습니다. 그것은 일정 연장, 더 많은 돈, 및 / 또는 다른 계획된 작업의 감소를 요구할 것입니다.

그러나 더 쉽고 논리적으로 동일한 기본 결과를 얻는 방법을 알고 있다면 클라이언트에게 제안 할 수 있습니다. 분명히 존재하지만, 운 좋게도 개발자의 의견을 듣지 않기로 한 클라이언트를 보지 못했습니다. 특히 “제품 소유자”가있는 애자일 환경에서 다음과 같은 다양한 세부 사항에 대한 개발에 대한 책임이 있습니다. 이들.


답변

수년 동안 대규모 응용 프로그램을 프로그래밍하는 데 시간을 투자하고 그에 따라 비판적으로 생각한다면 기능이 유용성을 능가하는 문제를 일으키는시기에 대한 미세 조정 된 감각을 개발하게됩니다. 이것에 대한 또 다른 단어는 지혜 이며, 다른 종류의 지혜와 마찬가지로 지혜가없는 사람들이 그 가치를 보지 못하게 만드는 것은 어려울 수 있습니다.

다른 포스터는 문제가있는 기능에 의해 도입 될 문제의 비용을 수량화하려고 노력해야한다고 주장했으며, 가능할 때는 좋은 생각이지만 일반적으로는 그렇지 않습니다. 일반적으로 즉각적인 구현 비용 만 추정 할 수 있습니다. 더 큰 기능의 경우에는 종종 어려움이 있습니다. 미래 비용에 관해서는, 당신은 어려운 위치에 있습니다. 어떤 다른 기능이 필요한지 또는 제품의 유지 보수 기간을 확실하게 알 수 없습니다. 비용은 일반적으로 어려운 사실에 근거한 추정치로 백업 할 수있는 것보다 훨씬 높습니다.

과거에 입증 된 역량이 많을수록 기능에 나쁜 아이디어를 선언해야 할 여지가 많습니다. 그것은 시간과 성공의 입증 된 기록과 함께 올 수 있습니다. 즉, 고객이 원하는 것이기 때문에 요청을 이행하기 위해 항상 열심을 표현해야합니다. 경험을 바탕으로 예약을 표시해야하며, 일단 문제가 발생하면 90 %의 사례에서 문제가되지 않습니다. 문제의 근본이되는 대화를 시작하기 때문입니다. 이 기능은 처음에? 이 시점에서 대안을 제공하거나 요청 된 기능에 문제가 발생하더라도 여전히 필요하다는 데 동의 할 수 있습니다.

물론 당신이 잘못되었을 수도 있습니다. 소프트웨어 엔지니어링이 재미 있지 않습니까?


답변

질문이 꽤 모호하기 때문에 나는 내 대답으로 조금 일반화 할 것입니다.

항상 그들에게 질문하지만 그들의 추론에 귀를 기울이십시오. 때로는 사람들은 기능의 실용성 또는 프로그래밍 시간이 얼마나 오래 걸리는지 잊어 버립니다. 반면에, 우리는 때때로 효율적이거나 프릴이없는 등의 프로그래머 정신에 갇히게되고, 프로젝트에 필수적이지 않은 것으로 간주하는 것이 실제로는 클라이언트에게 해당되지 않는다는 것을 잊어 버립니다.

그들이 정당한 이유가 있다면, 프로그램을 작성하는 데 걸리는 시간과 구현하는 동안 발생할 수있는 모든 충돌을 알려주고 계속 진행할 것인지 확인하십시오. 그렇지 않다면, 그것이 좋은 생각이라고 생각하지 않는 이유를 설명하고 그들의 반응이 무엇인지보십시오. 헹구고 반복하십시오.


답변

대부분은 이미 언급되었지만 현재 작업 환경에서 강조해야 할 것이 있습니다. 나는 다른 회사의 계약자 인 회사에서 일하고 있으며 응용 프로그램은 비즈니스 프로세스와 관련이 있습니다 (판매 및 고객 커뮤니케이션을 공정하게 유도합니다).

함께 제공되는 제품과 함께 비즈니스 프로세스는 (적어도 회사가 충분히 큰 경우) 매우 복잡 할 수 있습니다. 어느 정도 복잡한 것을 모델링하는 경우 결과 응용 프로그램에는 관련 복잡성이 있습니다. 대부분의 비즈니스 직원은 프로세스의 일부만 볼 수 있기 때문에 전체 응용 프로그램 / 프로세스는 한 명의 사용자 만 볼 수있는 것보다 훨씬 더 복잡합니다.

필자의 요점은 새로운 비즈니스 요구 사항이 발생하면 복잡성을 훨씬 높이 지 않지만 전체 시스템에 더 큰 영향을 줄 수 있기 때문에 비즈니스 사람들에게 효과적이라고 생각합니다. 제 생각에는 이것이 그 변화에 반대하는 이유는 아닙니다. 노력과 비용을 고객과 논의하는 것이 올바른 시점입니다. 고객이 해당 기능을 구축하는 것을 막을 수는 없지만 시간이지나면서 애플리케이션에 대한 느낌과 “어, 너무 비싸다!” 덜 까다로울 것입니다.

나는 당신이 비교 가능한 상황에 있는지 알지 못하지만 이해 관계자의 상황이 IT 시스템의 개발자와 건축가가 직면하는 상황과 똑같이 복잡성이 높아지는 것은 아니라는 것을 알게되었습니다. 그러한 상황에서 의사 소통은 양쪽에 도움이됩니다.