Team Product Phản Công
Bảng KPI, 7 giờ sáng thứ Hai, tuần 12.
An Hạ: #1.
Tôi: #2.
Gap: 3.2%.
Lần đầu tiên trong 12 tuần, tên tôi không ở đầu bảng. Lần đầu tiên, tôi nhìn tên Lâm An Hạ nằm trên tên mình và cảm thấy...
...cảm thấy gì?
Tức? Không hẳn. Nếu ai đó khác vượt tôi, Kiến Phong chẳng hạn, tôi sẽ tức. Nhưng An Hạ? Cô vượt bằng campaign 2.1 triệu views, bằng chiến lược SME, bằng 10 nghìn sign-ups mỗi ngày. Cô vượt bằng năng lực thật.
Tôi không tức. Tôi bị thách thức.
Và khi Trần Kha Minh bị thách thức, Trần Kha Minh code.
Tôi đóng bảng KPI. Mở terminal. Mở Jira. Tạo epic mới: "SaigonBank AI Recommendation Engine, Sprint 1 Week."
1 tuần. Feature này bình thường cần 1 tháng. Nhưng bình thường tôi không bị người ta vượt KPI.
9 giờ sáng. Product Lab, tầng 20.
Product Lab, phòng lớn nhất tầng 20, 6 bàn kê hình chữ U, 4 bảng trắng treo tường, 2 TV hiển thị production metrics thời gian thực. Trên tường có dòng chữ anh Hải viết bằng bút marker đỏ từ ngày đầu: "SHIP IT OR SHUT IT." Cái motto mà cả team đọc mỗi sáng như đọc kinh.
Team product ngồi đủ: anh Hải, Minh Tú, Hoàng Dũng (backend), Ngọc Anh (designer), và 3 junior devs. 8 người. Nhỏ hơn team Sales 3 lần. Nhưng output gấp đôi. Vì team này không họp, team này code.
– SaigonBank muốn AI recommendation engine. – Tôi đứng trước bảng trắng, vẽ architecture diagram. – Hệ thống phân tích hành vi khách hàng, dự đoán sản phẩm tài chính phù hợp, đề xuất real-time qua chatbot. CTO Hoàng Việt Anh đã approve scope tuần trước. Deadline: thứ Sáu.
Anh Hải nhìn tôi. Nhìn bảng. Nhìn lại tôi.
– Thứ Sáu. Tuần này.
– Thứ Sáu tuần này.
– Anh Minh, bình thường cái này cần 4 tuần. Sprint nhanh nhất cũng 2 tuần.
– Tôi biết. Vì vậy chúng ta sẽ làm trong 1 tuần.
Im lặng. Kiểu im lặng của 8 người đang đánh giá xem sếp mình điên hay thiên tài. Ranh giới giữa hai thứ đó mỏng hơn người ta nghĩ.
– MVP. – Tôi nói. – Không phải full feature. Recommendation engine v0.1, 3 use cases: đề xuất gói vay, đề xuất thẻ tín dụng, đề xuất bảo hiểm. Dựa trên 3 signals: thu nhập, hành vi giao dịch, và lịch sử tương tác chatbot. Model đơn giản, collaborative filtering, không cần deep learning ở v0.1.
Minh Tú gật. Cậu ấy hiểu, data scientist giỏi biết khi nào nên dùng model đơn giản và khi nào cần phức tạp.
– Phân chia: Hải và Dũng backend API. Ngọc Anh dashboard cho SaigonBank. Minh Tú build model. Tôi, integration layer và code review. Junior devs, test, test, test.
– Giờ làm? – Anh Hải hỏi.
– 9 đến 9. Overtime voluntary, không bắt buộc. Ai kiệt sức thì nghỉ, không ai đánh giá. Tôi ở đến khi nào xong, nhưng team không cần ở cùng.
Bài học từ tuần trước, Minh Tú nói đúng: push team quá mạnh sẽ giết chất lượng. Sprint 1 tuần nhưng với working hours hợp lý. Tôi code 14 tiếng/ngày, nhưng team code 12 tiếng rồi về nghỉ.
Leadership không phải kéo người ta đi theo mình. Leadership là chạy trước, rồi đảm bảo đường không quá xa để người ta đuổi kịp.
Anh Hải gật. Minh Tú gật. Cả team gật.
– Ship it. – Anh Hải nói, chỉ lên dòng chữ trên tường.
– Or shut it. – Cả team đồng thanh.
Đây là lý do tôi từ chối Google DeepMind. Không phải vì tiền, không phải vì CEO. Vì team này. Vì cảm giác này.
Thứ Ba. Thứ Tư. Thứ Năm.
3 ngày. Sprint.
Tôi code 14 tiếng mỗi ngày. Sáng 9 giờ bắt đầu, tối 11 giờ nghỉ. Ăn trưa ở bàn, cơm hộp GrabFood, 45 nghìn, combo gà chiên nước mắm. Ăn tối cũng ở bàn, mì gói Hảo Hảo, loại cay, pha bằng ấm siêu tốc phòng pantry.
3 ngày ăn cơm hộp và mì gói. Tổng chi tiêu ăn uống: 270 nghìn. Bằng 1 ly cocktail ở Chill Skybar. Nhưng mì gói lúc 10 giờ đêm có vị riêng, vị hạn chót.
Thứ Ba tối, 9 giờ. Minh Tú đứng cạnh bàn tôi, ly cà phê cầm tay, mặt ngần ngại.
– Anh Minh, em nói thật nha.
– Nói.
– Team kiệt sức. Dũng commit 3 lần sáng nay mà đều fail test. Ngọc Anh vừa merge branch sai. Mấy bạn junior thì code chạy nhưng mắt ngủ gật.
Cậu ấy đúng. Tôi biết. Tôi thấy, Dũng rung chân liên tục, Ngọc Anh uống cà phê ly thứ 6, junior devs tab ra tab vào giữa code và YouTube.
– Anh đang push quá mạnh. – Minh Tú nói, giọng nhẹ nhưng thẳng. – 1 tuần sprint là khả thi, nhưng nếu team burn out ngày thứ 3 thì ngày thứ 4 và 5 sẽ toàn bug. Anh muốn ship fast hay ship broken?
Im lặng. 5 giây.
Minh Tú 26 tuổi. Mới join team 3 tuần. Và cậu ấy vừa nói thẳng với Head of Product rằng sếp đang làm sai.
Dũng cảm. Hoặc data scientist giỏi biết rằng model nào cũng cần validation, kể cả model quản lý.
– Tốt. – Tôi nói. – Redistribute. Dũng nghỉ sáng mai, chiều vào. Ngọc Anh finish design tối nay rồi off ngày mai full. Junior devs về 7 giờ tối, không ở thêm. Tôi và anh Hải cover đêm.
Minh Tú gật. Rồi hỏi:
– Còn anh?
– Tôi ổn.
– Anh nói "tôi ổn" giống chị An Hạ nói "tôi ok" — đều là nói dối.
Cậu ấy vừa so sánh tôi với An Hạ. Cả team đang thấy quy luật. Cả team đang đọc dữ liệu, giống data scientist đọc: raw, unfiltered, đúng.
– Tôi sẽ nghỉ khi ship xong. – Tôi nói. – Bây giờ, code.
Minh Tú quay đi. Nhưng trước khi ngồi, cậu ấy để chai nước khoáng lên bàn tôi.
Chai nước. Giống An Hạ để chai nước cạnh tôi ở hẻm cà phê hôm NexaVN bán 15 triệu đô. Giống cách cô đắp chăn cho tôi tối thứ Bảy.
Mọi người trong đời tôi bắt đầu chăm sóc tôi bằng những thứ nhỏ, chai nước, cái chăn, tô mì bỏ hành. Và tôi bắt đầu nhận ra: những thứ nhỏ đó nặng hơn bất kỳ dòng code nào tôi từng viết.
Thứ Tư. Team hoạt động tốt hơn sau khi phân bổ lại. Dũng nghỉ sáng, chiều vào fresh, fix 3 bug backend trong 2 giờ, nhanh hơn cả ngày hôm trước. Ngọc Anh gửi final design từ nhà, clean, pixel-perfect. Junior devs viết test coverage 92%.
Minh Tú đúng. Push quá mạnh = diminishing returns. Nghỉ rồi code = code tốt hơn. Giống model, overfit trên training data thì test data sẽ fail.
Bài học management từ machine learning. Tôi nên viết blog.
Minh Tú build model nhanh hơn tôi nghĩ. Collaborative filtering trên dataset SaigonBank (anonymized) — 72 giờ training, accuracy 78%. Chưa cao, nhưng MVP.
– 78% là đủ để demo. – Minh Tú nói, mắt đỏ vì thiếu ngủ nhưng giọng sáng. – Nếu SaigonBank thấy kết quả, họ sẽ cho data nhiều hơn, model sẽ improve lên 90%+ trong 2 tháng.
– Đúng. Đây là foot-in-the-door.
– Anh Minh, em hỏi thật. – Minh Tú nhìn tôi, giọng nhẹ hơn. – Anh sprint thế này vì SaigonBank hay vì KPI?
Câu hỏi hay. Câu hỏi mà tôi tự hỏi mỗi tối khi nhìn bảng KPI.
– Cả hai. – Tôi nói thật. – SaigonBank cần feature này. Nhưng đúng, tôi cũng cần lấy lại #1.
– Vì An Hạ vượt à?
Minh Tú. 26 tuổi. Data scientist. Hỏi sếp vì sao sprint giết team. Dũng cảm hoặc ngu, ranh giới mỏng như model accuracy 78%.
– Vì... tôi không thích thua.
– Anh không thua. Anh #2. Cách 3.2%.
– 3.2% là khoảng cách giữa #1 và #2. Trong startup, #2 không tồn tại.
Minh Tú cười, kiểu cười của người hiểu sếp mình bị ám ảnh, nhưng cũng hiểu ám ảnh đó là nhiên liệu.
– Vậy em code tiếp. – Cậu ấy quay lại laptop.
Minh Tú không nói thêm. Nhưng câu hỏi của cậu ấy ở lại trong đầu tôi: "Vì SaigonBank hay vì KPI?"
Sự thật, phần tôi không nói: vì An Hạ. Cô vượt tôi, và tôi muốn vượt lại. Không phải vì ghét thua. Mà vì khi cô ở #1, tôi cảm thấy... thiếu. Thiếu thứ gì đó. Như laptop thiếu charger, vẫn chạy, nhưng biết sẽ hết pin.
Cạnh tranh với An Hạ là cách tôi gần cô mà không phải thừa nhận tôi muốn gần.
Thú nhận đó. Trong đầu. Không ai nghe. Nhưng thú nhận rồi.
Thứ Sáu. 10 giờ sáng.
Feature launch. Demo cho CEO và team SaigonBank qua video call.
AI recommendation engine chạy: nhập hồ sơ khách hàng giả lập (thu nhập 25 triệu, nhân viên văn phòng, 28 tuổi, giao dịch đều qua mobile banking), model đề xuất 3 sản phẩm: thẻ tín dụng cashback 2%, gói vay mua xe lãi 6.5%, bảo hiểm nhân thọ unit-linked. Thời gian response: 0.3 giây.
CTO SaigonBank, ông Hoàng Việt Anh, MIT, người mà gật đầu 1 cái bằng 10 lời khen, gật. 2 lần.
2 cái gật. Kỷ lục. Lần đầu 2 cái gật là demo chatbot lúc pitch. Bây giờ 2 cái gật nữa. Tổng: 4 cái gật từ CTO MIT. Tôi nên viết vào CV.
CEO HyperMind:
– Kết quả ban đầu?
– 40% improvement in customer engagement so với control group. – Minh Tú trả lời, data trên màn. – Recommendation click-through rate: 12%. Benchmark ngành: 3-5%.
12%. Gấp 3 lần benchmark. Từ model 78% accuracy, chạy MVP, dựng trong 1 tuần.
CEO gật. Không nói "tốt lắm." Nhưng gật kiểu "tôi ghi nhận." Với CEO HyperMind, gật là gold.
Bảng KPI cập nhật chiều thứ Sáu:
Kha Minh: #1. An Hạ: #2. Gap: 2.1%.
Quay lại #1. Nhưng gap chỉ 2.1%. An Hạ vẫn ngay sau lưng. Cô không lùi.
6 giờ tối. Tầng 20. Sprint xong.
Team product mệt. Anh Hải đặt hàng pizza Domino's, 3 hộp, thêm gà rán. Team ngồi quanh bàn, ăn pizza, uống Coca-Cola lon, cười vì sống sót.
Tôi ngồi riêng, nhìn bảng KPI.
#1: Kha Minh. #2: An Hạ. 2.1%.
Tôi thắng. Tôi lại #1.
Nhưng...
Nhưng lần đầu tiên, thắng An Hạ không khiến tôi vui.
Thắng Kiến Phong, vui. Thắng target KPI, thỏa mãn. Thắng investor demo, nhẹ nhõm.
Thắng An Hạ? Phức tạp.
Vì mỗi khi tôi lên #1, cô ở #2. Và #2 nghĩa là cô đang cố. Đang thức khuya. Đang chạy campaign. Đang mất ngủ. Đang refresh bảng KPI lúc 3 giờ sáng, giống tôi.
Tôi muốn thắng. Nhưng tôi cũng muốn cô thắng. Hai thứ đó mâu thuẫn. Và mâu thuẫn đó, cảm giác muốn cả hai cùng thắng trong cuộc chơi chỉ có một người thắng, là thứ logic không giải quyết được.
Đây là lần đầu tiên tôi gặp bài toán mà logic không có đáp án.
Mở nhật ký. Gõ:
Sprint thành công. SaigonBank recommendation engine v0.1. Accuracy 78%, CTR 12%. Team performance: excellent. Minh Tú, đánh dấu để đề xuất thăng chức.
KPI: #1. Gap 2.1%.
Dừng. Nhìn con số. 2.1%.
Gõ thêm:
"Đừng để tôi thắng em dễ quá." — tôi nói câu đó tuần 6 trên Nguyễn Huệ. Bây giờ tuần 12. Cô đang không để. 2.1% gap, sát nhất từ trước đến nay.
Và tôi ghét phải thừa nhận: điều đó khiến tôi thích cô hơn.
Thích. Tôi viết "thích." Lần đầu tiên viết "thích" trong nhật ký kỹ thuật.
Nhật ký kỹ thuật không dành cho từ "thích." Nhật ký kỹ thuật dành cho latency, accuracy, throughput. Không phải "thích."
Nhưng tôi viết rồi. Và tôi không xóa.
Không xóa nữa.
Đóng laptop. Đứng lên. Cầm miếng pizza cuối cùng, pepperoni, nguội, nhưng vẫn ngon kiểu pizza nguội lúc 6 giờ tối sau 5 ngày sprint.
Điện thoại rung. Slack. An Hạ.
"Nghe nói feature mới SaigonBank chạy tốt. Chúc mừng."
Cô chúc mừng người vừa vượt cô. Giống tôi chúc mừng cô khi campaign viral. Giống cách chúng tôi giơ ly cà phê cheers qua cửa kính ngày draft.
Chúng tôi chúc mừng nhau khi đối phương thắng. Đó là thứ tôi chưa từng làm với ai trước An Hạ.
Tôi gõ: "Cảm ơn. 2.1%."
An Hạ: "Tuần sau sẽ là 1%."
Tôi: "Tuần sau sẽ là 0%."
An Hạ: "Hẹn gặp ở đỉnh."
"Hẹn gặp ở đỉnh." Cô nói kiểu runner, không chửi đối thủ, chỉ hẹn gặp ở finish line.
Và tôi muốn gặp cô ở đó. Đỉnh. Cùng nhau. Dù chỉ có 1 ghế CPO.
Nhìn ra cửa kính. Tầng 19, An Hạ vẫn ngồi ở bàn. Tóc xổ, dép lê, giờ hết giờ làm, cô bỏ giày búp bê. Màn hình laptop sáng, tay gõ nhanh. Campaign mới? Strategy mới? Cô cũng đang chuẩn bị đáp trả.
2.1%. Cô sẽ rút ngắn. Tôi biết cô sẽ rút ngắn.
Và tôi mong cô rút ngắn.
Vì cuộc đua này, với cô, là cuộc đua tôi không muốn kết thúc.