거리에서 음식을 팔고 있는 여자가 있습니다. 두 해가 지났습니다. 그녀는 재고를 채우고 공급자에게 돈을 치르며 자녀들을 먹이고 다음 날에 나타납니다. 부유하지도 궁핍하지도 않습니다. 움직이고 있습니다.
누군가는 그녀에게 올바른 시스템이 필요하다고 말했습니다. 재고 추적. 수요 예측. 충성 고객 프로그램. 그녀의 친구들이 그렇게 하고 있습니다. 그녀는 학교에서 그것에 대해 배웠습니다. 진지한 비즈니스는 이렇게 합니다. 그래서 그녀는 그것을 설정했습니다. 시간과 돈을 쏟아부으면서 올바르게 만듭니다.
여섯 달이 지난 지금도 그녀는 여전히 거리에 있습니다. 시스템은 그녀의 휴대폰에 있지만, 건드리지 않았습니다. 초기 설정 비용 때문에 그녀의 마진은 더 얇아졌습니다. 충성 고객 프로그램으로 유지해야 했던 고객들이 스마트폰을 가지고 있지 않습니다.
그녀는 조심스럽지 않기 때문에 실패하지 않았습니다. 아직 존재하지 않는 그녀의 비즈니스 버전을 위해 만들었고, 실제로 존재하는 비즈니스를 거의 망쳤습니다.
이 함정에 대해 경고하지 않는 이유는 그것이 함정처럼 보이지 않기 때문입니다. 그것은 포부처럼 보이고, 올바르게 일하는 것처럼 보입니다.
그녀는 결코 그것들이 지금 그녀에게 유익한지 여부를 묻지 않았습니다. 표준은 중요한 사업이 이렇게 함을 말했고, 그녀의 친구들은 그렇게 했고, 그녀는 그것을 따랐습니다. 조언은 추상적으로는 잘못되지 않았습니다. 그녀에게는 오늘, 그녀가 가진 것과 함께 잘못되었습니다.
그녀가 결코 질문하지 않은 질문은:
이것이 현재 존재하는 비즈니스를 위해 서비스하는 것인가, 아니면 아직 도래하지 않은 버전을 위해인가요?
그녀의 비즈니스에는 재고 추적이 완전히 논리적인 버전이 있습니다. 스물 명의 공급업체, 세 곳의 위치, 올바른 공급망. 그 버전은 시스템이 필요합니다.
그 버전은 아직 현실이 아닙니다.
현재는 오늘 무엇이 팔렸는지, 내일 재고를 어떻게 해야 하는지, 이번 주에 얼마를 벌었는지 알아야 했다. 노트북이 그 문제를 해결해 준다. 그녀는 시스템이 필요하지 않았다. 오직 한동안 버티기 위해 시스템이 필요한 날까지 살아남아야만 했다.
소프트웨어는 다른 옷을 입은 동일한 문제다.
프로젝트, 마감일, 고객을 받는다. 줄 하나 써기 전에 이미 아키텍처, 표준, 전문적인 모습이 무엇인지에 대해 결정을 내리고 있다. 그중 많은 결정은 자동으로 이루어지며, 당신이 배운 것과 동료들이 하는 일을 기반으로 한다.
DRY. SOLID. 전체 테스트 커버리지. 때로는 정확히 그렇다.
하지만 때로는 30일, 한 개발자, 그리고 클라이언트가 이의 90%를 끝까지 작동하도록 필요로 할 때가 있습니다. 그리고 당신은 세 명의 사람이 당신의 서버를 쳐다볼 때 중요할 수 있는 추상화에 5시간을 들여갑니다. 당신은 300명의 사용자가 있습니다. 그중 절반은 당신의 팀입니다.
그 다섯 시간은 나쁜 코드 때문에 낭비되지 않았습니다. 그들은 아직 존재하지 않는 문제에 소요되었습니다.
이것은 표준에 대한 논거가 아닙니다.
일부 표준은 출시 당일부터 부담을 지는 것입니다. 돈과 관련된 모든 것을 구축하거나, 규제 준수 요구 사항이 있는 모든 것, 잘못된 번호로 인해 누군가의 임대료가 지급되지 않는 모든 것 - 테스트, 감사, 올바른 오류 처리는 선택 사항이 아닙니다. 당신은 특정 시스템에서의 실패 비용 때문에 그들을 따르고, 교과서에 그렇다고 적혀 있기 때문이 아닙니다.
그것이 차이점입니다. 일부 표준은 그것을 뒷받침합니다. 다른 것들은 아직 존재하지 않는 시스템 버전용입니다.
첫 번째 범주는 마감일에 관계없이 움직이지 않습니다. 두 번째는 백로그에 남아 그것에 대해 솔직해야 합니다.
공급업체의 실수는 미래를 고려하지 않았기 때문이 아니라, 현재가 안정되기 전에 그것을 위해 구축했기 때문입니다.
여기서는 연산 순서가 중요합니다.
오늘 이것이 작동할 수 있을까요? 돈을 벌 수 있을까요, 가치를 제공할 수 있을까요, 현재 이것이 지닌 무게를 견디어낼 수 있을까요.
그 다음에는, 다음 버전의 자신을 생존하기 위해 무엇이 필요할까요?
대부분의 사람들은 이렇게 반대합니다. 그들은 버전 1에 실제 사용자가 한 명도 없을 때 버전 3을 설계합니다. 제품은 만든 버전과 나타난 버전 사이의 간극 어딘가에서 죽습니다.
지금 어떤 일을 시작하기 전에 두 가지 질문이 있습니다.
오늘 작동해야 하는 것은 무엇입니까? 규모는 아닙니다. 6개월도 아닙니다. 오늘, 이 사용자들과 이 마감일, 이 팀과 함께.
여기서 실수는 정말로 어떤 비용을 가지는 걸까요? 잘못된 번호 하나가 누군가의 재정과 신뢰를 파괴하는 시스템인 걸까요? 아니면 다음 푸시에서 버그가 수정되고 아무도 잠을 설치지 않는 시스템인 걸까요?
그 답들은 오늘 어떤 기준이 협상할 수 없고 어떤 기준이 연기될 것인지를 나에게 알려줍니다. 연기되는 것이지, 무시되는 것이 아닙니다. 무시하는 것은 잊어버린 것을 의미합니다. 연기하는 것은 의도적으로 결정을 내리고 나중에 그 비용을 알고 있는 것을 의미합니다.
코드는 단순히 현실이 된 답들입니다.
그녀는 여전히 거리에 있습니다. 시스템은 여전히 그녀의 전화기에 있습니다. 어딘가 개발자가 300명의 사용자와 함께 마감일이 불가능해 보이는 코드베이스의 추상화에 6시간을 쏟고 있습니다.
동일한 문제. 잘못된 버전입니다.
저는 백엔드 엔지니어 Damola입니다. 이 시리즈의 나머지 부분은 GitHub에서 찾을 수 있습니다.를 따라주세요. 다음 게시물을 위해 Dev.to을 따라주세요.












