이번에 어느 분께 문제 해결방안에 대해서 이야기를 한 적이 있었습니다.
[문제]
한 기업은 고객에게 상품을 배송하기 위해 여러 단계를 거치는 물류 시스템을 운영하고 있다. 상품은 1차 창고에서 출발하여 2차 창고, 3차 창고를 거쳐 고객에게 도착한다. 각 구간의 운송 시간은 1차 창고에서 2차 창고까지 1시간, 2차 창고에서 3차 창고까지 2시간 30분, 3차 창고에서 고객까지 2시간이 소요된다. 또한 각 단계에서 상하차 시간이 추가로 소요되며, 1차 창고에서 상하차 시간은 30분, 2차 창고에서 상하차 시간은 1시간, 3차 창고에서 상하차 시간은 1시간이다. 운송 과정에서 각 구간별로 비용이 발생하며 1차 창고에서 2차 창고까지의 운송 비용은 100만 원, 2차 창고에서 3차 창고까지의 운송 비용은 50만 원, 3차 창고에서 고객까지의 운송 비용은 10만 원이다. 이 시스템에는 몇 가지 제약 조건이 있는데, 상품은 반드시 오전 7시까지 고객에게 도착해야 하며 배송은 매일 00시에 시작한다. 운송 시간과 상하차 시간을 모두 고려해야 한다. 이 기업의 물류 규모는 1차 창고가 1개, 2차 창고가 도시별로 20개, 3차 창고가 마을별로 50 곱하기 20개로 총 1000개이며 고객은 100 곱하기 50 곱하기 20명으로 총 10만 명이다.
이 문제에서 고객에게 상품을 오전 7시까지 배송하기 위해 필요한 모든 단계를 시간 순서대로 계산하고 주어진 조건에서 추가적인 비용 투자 없이 시간을 단축할 수 있는 방안을 제안하며 물류 비용을 최소화하면서 효율적으로 상품을 배송하기 위한 방안을 설명하시오.
억지 스러운 문제입니다. 정답이 없어요
그런데 또 현실 입니다. 기업들은 시간이 없는데 돈도 없어요
문제를 다시 정리해 볼게요
문제 분석
주어진 조건
- 분배 경로와 시간
- 1차 -> 2차: 1시간
- 2차 -> 3차: 2시간 30분
- 3차 -> 고객: 2시간
- 상하차 시간
- 1차 상하차: 30분
- 2차 상하차: 1시간
- 3차 상하차: 1시간
- 비용
- 1차 -> 2차: 100만 원
- 2차 -> 3차: 50만 원
- 3차 -> 고객: 10만 원
- 제약 조건
- 고객에게 오전 7시까지 도착해야 함.
- 운송 시간 외 상하차 시간이 포함됨.
- 물류 규모
- 1차 창고: 1개
- 2차 창고: 도시별 20개
- 3차 창고: 마을별 50 * 20개
- 고객: 100 * 50 * 20명
시간 계산
- 고객까지 도착하는 총 소요 시간:
- 운송 시간: 1+2.5+2=5.5시간1 + 2.5 + 2 = 5.5
- 상하차 시간: 0.5+1+1=2.5시간0.5 + 1 + 1 = 2.5시간
- 총: 5.5+2.5=8시간5.5 + 2.5 = 8시간
조건
1. 무조건 00시에 출발해야 한다
2. 이미 최적화된 거리 계산이다
3. 이미 적자이기 때문에 투자도 어렵다
이건 해결하라고 만든 것이 아니에요
분명 기업에서는 다른 투자나 시간대를 변경하거나 다른 상황을 만들어 내겠지만
저는 1:1로 대화하면서 해결?을 그것도 개발자에게? 개발적으로 동선을 생각하라는 건가?
알고리즘 문제인가? 한참을 고민하다가
상하차 시간을 줄이는 것 뿐이라고 이야기를 했어요
- 그런데 그 분도 답은 뭐다 라고 하지도 않고요
완전 억까였죠 이건 뭐지? 그냥 그렇게 끝났어요
그냥 나보고 해결 능력도 없고 창의성도 없데요 아니 뭐지?
그런데 이건 그냥 해결에서 볼때였고
다른 의도가 있었을 것 같아 또 정리를 해 보았습니다.
- 비판적 사고: 문제의 비현실적인 측면을 인지하고, 이를 논리적으로 설명하는 능력.
- 현실적인 한계의 인지: 자원이 부족하고 제약 조건이 많은 상황에서 가능한 대안을 제시하는 능력.
- 압박 테스트: 말도 안 되는 상황에서도 논리적으로 대응하고, 협조적인 태도를 유지하는 태도.
이렇게 생각을 했어요
다시 문제를 바꿔서 개발자 적으로
- End day는 짧다
- 인원은 한정적이다
- 시작은 이미 지났다
이때 어떻게 일정을 관리하고 개발을 진행을 하겠나요?
"그럼 면접을 볼때라면 이렇겠죠 야근을 해서라도 하겠습니다!"
그런데 위 시간이 야근을 포함해서 준 시간이다 라고 하면요?
말이 안되지만 또 이런 일이 많으니까요
그럼 이 일을 어떻게 해결하시겠나요? 뭐라고 대답하는 것이 더 좋을 까요?
저는 이일을 이렇게 생각하고 정리해 봅니다.
[개발자적인 접근 방식]
문제를 개발자 관점에서 바라보면, 다음과 같은 조건들이 주어질 수 있습니다:
- End day는 짧다.
- 인원은 한정적이다.
- 시작은 이미 지났다.
야근을 포함해서도 시간이 부족하다면 어떻게 해야 할까요?
저는 다음과 같은 과정을 통해 해결책을 제시할 수 있다고 생각합니다:
1. 비현실적인 조건을 인지시키기
"이 문제는 주어진 시간 내에 모든 요구 사항을 만족시키는 것이 현실적으로 어렵습니다." 문제를 요청한 대상에게 비현실적인 조건임을 논리적으로 전달해야 합니다. 이를 통해 문제의 범위를 재조정하거나, 최소한의 목표를 명확히 할 수 있습니다.
2. 우선순위 설정
"모든 작업이 중요하다고 하지만, 반드시 처리해야 하는 핵심 작업부터 진행해야 합니다."
우선순위를 명확히 하고, 뒤로 미룰 수 있는 작업은 과감히 제외하거나 축소합니다. 예를 들어, 고객에게 상품이 도착하기 위해 반드시 필요한 단계(MVP)를 정의하고, 부수적인 작업은 후순위로 둡니다.
3. 팀 내 효율적인 분배
"남은 시간 동안 팀원들과 역할을 명확히 나누고, 각자가 맡은 부분을 빠르게 처리할 수 있도록 합니다."
회의는 간결하게 진행하며, 작업을 최대한 분산시켜 병렬적으로 처리합니다. 효율성을 높이기 위해 중복 작업이나 불필요한 과정을 제거합니다.
4. 생산성을 극대화
"코드 리뷰나 반복 작업은 생략하거나 간소화하고, 가능한 빠르게 배포 가능한 상태로 만듭니다."
기술적 부채를 감수하더라도, 지금 당장 필요한 작업에 집중합니다. 배포 후에 보완할 수 있는 부분은 다음 단계로 미룹니다.
면접관이 일부러 말이 안 되는 상황을 제시했을 경우,
현실적 한계와 대안을 논리적으로 설명하면서도 협조적인 태도를 보여주는 것이 중요하다고 생각이 듭니다.
[결론]
이와 같은 문제는 현실에서도 종종 발생합니다. 기업은 시간도 없고,
돈도 없으면서도 최대한 빠르고 효율적인 결과를 요구합니다.
이런 상황에서 중요한 것은 문제의 본질을 파악하고,
비현실적인 조건을 논리적으로 설명하며,
제한된 조건 내에서 최선의 결과를 도출하려는 태도입니다.
'개발 > 개발 필기' 카테고리의 다른 글
네이버 오픈 API 사용 개선 경험 공유 (5) | 2024.12.06 |
---|---|
웹 페이지 최적화 과정: 크롬 Lighthouse 사용 경험 공유 (0) | 2024.12.05 |
tmux 사용 (0) | 2024.12.04 |
마케팅 회사에서 개발자로 일하며 얻은 성장과 경험 (4) | 2024.12.03 |
Recoil을 사용한 상태 관리 경험: 왜 우리는 Recoil을 선택했을까? (1) | 2024.12.03 |