“규모가 커지면 버그에도 사용자가 생김”이라는 말이 떠오름
첫 직장에서 로드타임을 5분에서 30초로 줄였을 때, 고객들이 불만을 터뜨렸던 일화가 있었음
예전엔 컴퓨터 켜놓고 커피 마시며 잡담하던 시간이 사라졌기 때문임
이 이야기의 교훈은 단순히 개선하지 말라는 게 아니라, 소프트웨어는 실제 사람들의 습관과 상호작용 속에 존재함을 잊지 말라는 것임
엔지니어의 일은 티켓을 처리하는 게 아니라, 진짜 사용자 문제를 해결하는 것임
나도 창고 자동화 프로젝트를 맡았을 때 비슷한 경험을 했음
효율을 높일수록 직원들이 더 많은 육체노동을 해야 해서 오히려 불만이 생겼음
결국 나는 ‘좋은 시스템을 망친 사람’으로 보였음
이 개념은 Hyrum’s Law에서도 잘 설명됨
“충분히 많은 사용자가 있다면, 시스템의 모든 관찰 가능한 동작은 누군가에게 의존 대상이 됨”이라는 말이 있음
내 비즈니스도 한때 Microsoft와 Netscape의 공통 버그에 의존했음
매번 “이번엔 고치겠지”라 생각했지만, 10년 동안 고쳐지지 않아 오히려 사업이 유지됐음
Lehman은 개발자–소프트웨어–사용자 삼각 관계를 이야기했음
세 주체는 문제를 서로 다르게 이해함
코드의 의미는 의도나 희망으로 바뀌지 않으며, 현실 세계의 제약 속에서만 작동함
관련 글: Laws of Software Evolution
“티켓을 처리하는 게 아니라 문제를 해결하는 게 일”이라는 말에 공감함
하지만 모든 회사가 그렇게 생각하지 않음 면접 때 기대치를 명확히 파악하는 게 중요함
Addy Osmani가 쓴 글을 보고 약간의 위선을 느꼈음
예전에 내 코드를 표절했고, 나중에 사과문을 올렸지만 SNS에는 공유하지 않았음
진심 어린 사과라면 팔로워들에게도 공개해야 한다고 생각함
실제 사과문 자체는 잘 써졌다고 봄
“그냥 잊자”는 반응도 있었음. “그게 그렇게 큰 일은 아니지 않냐”는 식으로 말함
처음 세 가지 교훈이 특히 와닿았음
최고의 엔지니어는 사용자 문제 해결에 집착함
교육 과정에서 언어와 프레임워크만 배우고 문제 자체를 배우지 않는 게 문제임
옳음은 싸게 얻을 수 있지만, 함께 옳아지는 과정이 진짜 일임
합의는 창의적 과정에서 쌓이고, 권력은 위기 때 쓰여야 함
행동 편향. 일단 Ship해야 함
실패를 두려워해 논쟁만 하다 시간 낭비하는 경우가 많음
“Boring Technology” 에세이에서 ‘혁신 토큰’ 개념을 처음 배웠음 boringtechnology.club 글인데, 여전히 내가 가장 좋아하는 아키텍처 글 중 하나임
“추상화는 복잡성을 제거하지 않고, 단지 당신이 온콜일 때로 옮긴다”는 말은 Joel Spolsky의 Law of Leaky Abstractions을 떠올리게 함
리더십 15년 동안 대형 리테일 기업에서 수십억 달러 규모의 시스템을 운영했음
하지만 결국 중요한 건 정치와 인간관계였음
더 똑똑한 사람들도 정치 못 해서 승진 못함
아이들에게 “정치와 아부를 배워라”고 가르쳐야 한다는 씁쓸한 결론임
어떤 이는 “차라리 그런 세상에서 벗어나 의미 있는 일을 하라”고 함
또 다른 이는 “정치인을 불신하고 스스로 강해져라”고 조언함
다른 사람은 “그건 단순히 인간관계 기술임”이라며, 영향력을 배우는 게 중요하다고 말함
반면 “그런 게임 자체를 거부한다”는 의견도 있었음
“Clarity is seniority”라는 말에 깊이 공감함
명확함이 유지보수성과 확장성의 핵심임
나는 이를 가르치는 책 Elements of Code를 썼음
추상화는 나쁜 게 아니라 목적의 명확성이 문제임
지형을 보지 않고 창고 안에서 다리를 짓는 토목기사와 같음
추상화 자체를 탓할 게 아니라, 무엇을 모델링하려는지 이해해야 함
나도 추상화의 위험성에 동의함
잘못된 추상화는 오히려 명확성을 해치며, 불필요한 복잡성을 낳음
차라리 부족한 추상화가 낫다고 생각함
이런 리스트의 진짜 가치는 직접 써보는 것임
읽는 것만으로는 금세 잊히고, 스스로 커리어를 돌아보며 정리해야 의미가 생김
이 글은 Google의 공식 가치가 아니라, Google에서 일하며 배운 개인적 교훈임
조직이 가르친 게 아니라, 경험 속에서 스스로 깨달은 것들임
대기업에서도 여전히 어려운 부분들이라는 점이 핵심임
“규모가 커지면 버그에도 사용자가 생긴다”는 건 ossification(경직화) 현상과 같음
네트워크 프로토콜뿐 아니라 모든 시스템에 적용됨
HTTP/3와 QUIC의 암호화 설계 이유도 중간 장치가 잘못된 가정을 하지 못하게 하기 위함임
API도 마찬가지로 내부 상태를 노출하지 말아야 함
이는 Hyrum’s Law와 유사한 개념임
“Bias towards action” 문장이 인상 깊었음
아무리 좋은 조언도 빈 페이지에는 도움이 안 됨
일단 뭔가 만들어야 피드백을 받을 수 있음
나도 그 문장을 좋아함
첫 글자를 입력하는 순간, 예상치 못한 문제들이 드러남
거대한 조직일수록 이런 보이지 않는 병목이 많음
하지만 Google은 품질과 성능에도 더 편향됐으면 좋겠음
“Ship fast”가 “엉성하게 내보내라”는 뜻은 아님
완성도 높은 최소 기능 제품이 오히려 낫다고 생각함
여러 회사에서 “행동 편향”을 내세웠지만, 실제로는 야근과 불량 릴리스로 이어졌음
현실과 이상 사이의 간극이 크며, 글쓴이는 “Kool Aid가 맛있었다”고 풍자함
내 버전은 “존재 자체가 가장 중요한 기능”임
하지만 팀 전체가 같은 마인드여야 함
그렇지 않으면 “날림”으로 오해받고, 문제 생기면 희생양이 됨
Hacker News 의견들
“규모가 커지면 버그에도 사용자가 생김”이라는 말이 떠오름
첫 직장에서 로드타임을 5분에서 30초로 줄였을 때, 고객들이 불만을 터뜨렸던 일화가 있었음
예전엔 컴퓨터 켜놓고 커피 마시며 잡담하던 시간이 사라졌기 때문임
이 이야기의 교훈은 단순히 개선하지 말라는 게 아니라, 소프트웨어는 실제 사람들의 습관과 상호작용 속에 존재함을 잊지 말라는 것임
엔지니어의 일은 티켓을 처리하는 게 아니라, 진짜 사용자 문제를 해결하는 것임
효율을 높일수록 직원들이 더 많은 육체노동을 해야 해서 오히려 불만이 생겼음
결국 나는 ‘좋은 시스템을 망친 사람’으로 보였음
“충분히 많은 사용자가 있다면, 시스템의 모든 관찰 가능한 동작은 누군가에게 의존 대상이 됨”이라는 말이 있음
매번 “이번엔 고치겠지”라 생각했지만, 10년 동안 고쳐지지 않아 오히려 사업이 유지됐음
세 주체는 문제를 서로 다르게 이해함
코드의 의미는 의도나 희망으로 바뀌지 않으며, 현실 세계의 제약 속에서만 작동함
관련 글: Laws of Software Evolution
하지만 모든 회사가 그렇게 생각하지 않음
면접 때 기대치를 명확히 파악하는 게 중요함
Addy Osmani가 쓴 글을 보고 약간의 위선을 느꼈음
예전에 내 코드를 표절했고, 나중에 사과문을 올렸지만 SNS에는 공유하지 않았음
진심 어린 사과라면 팔로워들에게도 공개해야 한다고 생각함
처음 세 가지 교훈이 특히 와닿았음
교육 과정에서 언어와 프레임워크만 배우고 문제 자체를 배우지 않는 게 문제임
합의는 창의적 과정에서 쌓이고, 권력은 위기 때 쓰여야 함
실패를 두려워해 논쟁만 하다 시간 낭비하는 경우가 많음
“Boring Technology” 에세이에서 ‘혁신 토큰’ 개념을 처음 배웠음
boringtechnology.club 글인데, 여전히 내가 가장 좋아하는 아키텍처 글 중 하나임
“추상화는 복잡성을 제거하지 않고, 단지 당신이 온콜일 때로 옮긴다”는 말은 Joel Spolsky의 Law of Leaky Abstractions을 떠올리게 함
리더십 15년 동안 대형 리테일 기업에서 수십억 달러 규모의 시스템을 운영했음
하지만 결국 중요한 건 정치와 인간관계였음
더 똑똑한 사람들도 정치 못 해서 승진 못함
아이들에게 “정치와 아부를 배워라”고 가르쳐야 한다는 씁쓸한 결론임
“Clarity is seniority”라는 말에 깊이 공감함
명확함이 유지보수성과 확장성의 핵심임
나는 이를 가르치는 책 Elements of Code를 썼음
추상화는 나쁜 게 아니라 목적의 명확성이 문제임
지형을 보지 않고 창고 안에서 다리를 짓는 토목기사와 같음
추상화 자체를 탓할 게 아니라, 무엇을 모델링하려는지 이해해야 함
잘못된 추상화는 오히려 명확성을 해치며, 불필요한 복잡성을 낳음
차라리 부족한 추상화가 낫다고 생각함
이런 리스트의 진짜 가치는 직접 써보는 것임
읽는 것만으로는 금세 잊히고, 스스로 커리어를 돌아보며 정리해야 의미가 생김
이 글은 Google의 공식 가치가 아니라, Google에서 일하며 배운 개인적 교훈임
조직이 가르친 게 아니라, 경험 속에서 스스로 깨달은 것들임
대기업에서도 여전히 어려운 부분들이라는 점이 핵심임
“규모가 커지면 버그에도 사용자가 생긴다”는 건 ossification(경직화) 현상과 같음
네트워크 프로토콜뿐 아니라 모든 시스템에 적용됨
HTTP/3와 QUIC의 암호화 설계 이유도 중간 장치가 잘못된 가정을 하지 못하게 하기 위함임
API도 마찬가지로 내부 상태를 노출하지 말아야 함
“Bias towards action” 문장이 인상 깊었음
아무리 좋은 조언도 빈 페이지에는 도움이 안 됨
일단 뭔가 만들어야 피드백을 받을 수 있음
첫 글자를 입력하는 순간, 예상치 못한 문제들이 드러남
거대한 조직일수록 이런 보이지 않는 병목이 많음
“Ship fast”가 “엉성하게 내보내라”는 뜻은 아님
완성도 높은 최소 기능 제품이 오히려 낫다고 생각함
현실과 이상 사이의 간극이 크며, 글쓴이는 “Kool Aid가 맛있었다”고 풍자함
그렇지 않으면 “날림”으로 오해받고, 문제 생기면 희생양이 됨