Thuật Toán Rung Động Trái Tim

Chương 3: Ngôn ngữ Jira và Lời bóng gió

Chương 3: Ngôn ngữ Jira và Lời bóng gió

Ngày thứ mười bốn của Sprint 100.

Không khí tại văn phòng NovaPulse đã chuyển từ trạng thái căng thẳng bùng nổ của những ngày đầu tiên sang một sự vắt kiệt âm ỉ, rền rĩ như tiếng quạt tản nhiệt của một dàn server đang phải chạy quá tải không ngừng nghỉ. Ở cái startup nằm trong khu công nghệ cao giả tưởng Nam Thành này, khái niệm thời gian dường như đã bị bẻ cong. Ban ngày và ban đêm hòa vào nhau thành một dải màu xám xịt của code, cà phê và những đôi mắt vằn tia máu.

Hai giờ chiều. Xuân ngồi co một chân lên chiếc ghế Aeron, tay cầm ly trà đá đã tan hết một phần ba, đôi mắt lờ đờ nhưng vẫn dán chặt vào màn hình ngang ba mươi tư inch cong vút. Trên màn hình là một bản Product Requirements Document (PRD - Tài liệu Yêu cầu Sản phẩm) dài đến mười lăm trang A4 trên hệ thống Confluence, đính kèm với hàng chục ticket Jira lằng nhằng.

Người viết: Trần Hoàng Đức. Tiêu đề: [Sprint 100 - Epic 2] Tái cấu trúc luồng thanh toán phân tán.

Đọc PRD của Đức luôn là một trải nghiệm mang tính tra tấn nhưng cũng đầy kích thích trí tuệ đối với Xuân. Hắn không giống những tay PM ăn tục nói phét khác. Hắn viết tài liệu mượt mà, logic, chặt chẽ và kín kẽ như một bản hợp đồng pháp lý của những tập đoàn đa quốc gia. Mọi edge case (trường hợp ngoại lệ) dù là nhỏ nhất đều được tính đến, mọi luồng user journey (hành trình người dùng) đều được vạch sẵn một cách khoa học.

Tuy nhiên, hôm nay, khi lướt qua những đoạn văn bản dài ngoằng, giữa những dòng chữ khô khan về API, timeout (thời gian chờ), và payload (tải trọng dữ liệu), Xuân bắt đầu nhận ra một thứ "ngôn ngữ thứ hai" đang được mã hóa một cách cực kỳ khéo léo.

Ở mục Acceptance Criteria (Tiêu chí Nghiệm thu) số 4.2, Đức viết: "Hệ thống phải đảm bảo thời gian phản hồi dưới 200ms ngay cả khi traffic tăng đột biến 300%. Tuy nhiên, nếu Tech Lead đánh giá tài nguyên hiện tại của cụm server staging không đủ khả năng để gánh vác, Product team sẽ chủ động hạ yêu cầu xuống mức 500ms. Việc cố tình ép xung hệ thống phần cứng là không cần thiết, nó cũng vô nghĩa và nguy hiểm tương tự như việc ép một kỹ sư thức trắng đêm thứ tư liên tiếp chỉ để tối ưu 0.1 giây xử lý. Hiệu suất dài hạn quan trọng hơn tốc độ ngắn hạn. Kiến trúc vững chắc cần một bộ não tỉnh táo để vận hành."

Xuân nhướng mày, khóe môi hơi giật giật.

Tiếp tục cuộn con lăn chuột xuống phần Risk Mitigation (Giảm thiểu Rủi ro) ở trang số 12, cô lại bắt gặp một đoạn chú thích in nghiêng nằm lọt thỏm giữa các biểu đồ sequence: "Lưu ý: Quá trình migrate data (chuyển đổi dữ liệu) từ SQL sang NoSQL dự kiến kéo dài 6 tiếng. Quá trình này hoàn toàn có thể thiết lập cron-job chạy ngầm tự động vào lúc hai giờ sáng để con người không phải trực máy. Máy móc sinh ra để phục vụ con người, không phải để con người thức canh chúng như canh một nồi bánh chưng đêm giao thừa. Ưu tiên cao nhất trong giai đoạn này: Bảo toàn sức khỏe thể chất và tinh thần của đội ngũ Core Tech."

Xuân bật cười thành tiếng, một âm thanh giòn giã, lạ lẫm hiếm hoi vang lên giữa "Vùng Đất Chết". Mấy cậu junior dev ngồi cách đó vài bàn tò mò ngoái cổ lại nhìn, ánh mắt đầy hoang mang tưởng sếp mình cuối cùng cũng đã hóa điên vì áp lực công việc.

Gã PM máu lạnh này đang làm cái quái gì vậy? Hắn đang dùng tài liệu kỹ thuật cấp công ty, thứ sẽ được lưu trữ vĩnh viễn trên hệ thống, để... quan tâm cô sao? Một sự quan tâm ngầm, được ngụy trang tinh vi dưới những lớp từ ngữ kỹ thuật khô khốc, chỉ để nhắc nhở cô đừng làm việc bạt mạng đến mức đột tử bên bàn phím. Cái cách hắn dùng từ "ép xung hệ thống" để ám chỉ sự gắng gượng của cô, hay "cron-job" để ép cô đi ngủ, quả thực là một thủ đoạn thao túng tâm lý vừa đáng ghét, vừa buồn cười, lại vừa... đáng yêu một cách kỳ quái.

Nhưng Xuân là ai cơ chứ? Cô là Tech Lead, là chúa tể của sự bắt bẻ logic, là người bảo vệ sự trong sáng của kiến trúc hệ thống. Cô không thể để gã PM đó tự đắc rằng mình đã đánh trúng đòn tâm lý và kiểm soát được tình hình.

Cô mở tab bình luận trên Jira, kéo thẳng xuống dưới cùng của cái Epic, bẻ khớp tay kêu răng rắc và bắt đầu gõ phím. Những ngón tay thon dài bay lượn trên bàn phím cơ Alice, tạo ra những tiếng "lách cách" đanh thép, dứt khoát và giòn giã như một bản giao hưởng của sự phản công.

Cô quyết định sẽ vạch lá tìm sâu, "review" cái PRD này một cách không thương tiếc, lột trần mọi sơ hở để chứng minh cho hắn thấy bộ não của cô dù có thiếu ngủ ba đêm vẫn dư sức đè bẹp những suy luận kinh doanh có vẻ như hoàn hảo của hắn.

Mười lăm phút sau, một thông báo notification màu xanh dương hiện lên trên góc phải màn hình của Đức ở đầu kia văn phòng.

[Jira] Xuân Lê đã thêm một bình luận vào EPIC-204: Tái cấu trúc luồng thanh toán phân tán.

Đức đang nhấp một ngụm cà phê đen, tay kia đẩy gọng kính kim loại, thong thả click chuột mở bình luận. Anh đã lường trước việc cô sẽ phản pháo, đó là bản tính hiếu thắng của cô, nhưng độ dài của bình luận vẫn khiến anh hơi nhướng mày ngạc nhiên.

"PRD viết khá chi tiết về mặt requirement (yêu cầu), nhưng về mặt logic luồng thì vẫn đầy rẫy lỗ hổng chết người. Dưới đây là 12 lỗi logic chí mạng tôi tìm thấy chỉ trong 10 phút lướt qua lúc đang uống dở ly trà: 1. Mục 2.1: Deadlock tiềm năng. Nếu user mất kiên nhẫn và double-click liên tục vào nút thanh toán trong khi API gateway đang bị rate limit, hệ thống sẽ sinh ra rác session. Giải pháp ngây thơ của anh sẽ làm database kẹt cứng. 2. Mục 2.4: Rollback mechanism (Cơ chế hoàn tác) khi mất kết nối mạng ở giây thứ 3 không được định nghĩa rõ ràng. Tiền của khách đã trừ ở ngân hàng nhưng webhook chưa trả về thì treo ở đâu? Lơ lửng trong không trung à? 3. Mục 3.1: Không có phương án dự phòng (fallback) nếu cụm Redis cache bị sập. Anh định bắt Master Database gánh toàn bộ lượt truy vấn đọc (read-heavy)? Trái tim hệ thống sẽ sập trong vòng chưa tới 5 giây. ... 11. Mục 5.5: Tính toán throughput (thông lượng) tối đa dựa trên giả định mạng luôn ở trạng thái lý tưởng là một sự ngây thơ mang đậm tính học thuật hàn lâm. Cần cộng thêm ít nhất 20% network latency (độ trễ mạng) vào công thức tính toán của anh."

Đức đọc chậm rãi từng dòng, khóe môi vô thức cong lên thành một nụ cười tán thưởng hiếm hoi. Trái tim của một gã làm sản phẩm luôn đập nhanh hơn một chút khi tìm được một người có thể phản biện mình một cách sắc bén và xác đáng đến vậy. Mười một lỗi đầu tiên cô chỉ ra đều là những edge case (trường hợp góc) cực kỳ phức tạp về mặt hạ tầng mà anh, dù đã cẩn thận suy xét, vẫn bị bỏ sót dưới góc độ kiến trúc sâu. Cô không chỉ giỏi, cô thực sự là một con quái vật đáng gờm trong lĩnh vực của mình.

Nhưng khi ánh mắt Đức lướt đến gạch đầu dòng cuối cùng, nụ cười của anh bỗng chững lại một nhịp, rồi ngay sau đó vỡ òa thành một tiếng cười nhẹ khẽ rung cả bờ vai.

"12. Lỗi thứ mười hai - Non-technical dependency (Phụ thuộc phi kỹ thuật): Người viết tài liệu này đang trong trạng thái thiếu ngủ trầm trọng đến mức não bộ bắt đầu sinh ra rác. Bằng chứng rành rành: Lỗi typo từ 'transaction' thành 'transection' ở các dòng 45, 87, và một vòng lặp logic (logic loop) giải thích vô nghĩa ở mục 3.2. Đề nghị PM tạm dừng việc sản xuất requirement, đứng dậy đi rót một cốc nước ấm và nhắm mắt lại ít nhất 30 phút trước khi đọc lại đám comment này. Đừng để bug của não bộ cá nhân lây lan sang tư duy thiết kế hệ thống chung."

Đức tựa lưng vào ghế, ngón tay cái nhẹ nhàng miết lên viền cạnh bằng kim loại lạnh lẽo của con chuột. Anh hoàn toàn có thể hình dung ra vẻ mặt nhếch mép kiêu ngạo, đầy vẻ đắc thắng của cô lúc gõ ra những dòng phản biện này. Cô đã đọc hiểu toàn bộ những thông điệp ngầm mà anh dày công cài cắm, và cô chọn cách đáp trả bằng chính thứ ngôn ngữ mã hóa đó. Một sự quan tâm đảo ngược, được bọc trong một lớp vỏ bọc châm chọc gai góc thường ngày.

Một sự ganh đua chuyên môn đầy thú vị, mang đầy hàm ý cá nhân. Lần đầu tiên kể từ khi cái Sprint 100 chết tiệt này bắt đầu khởi động, Đức cảm thấy bầu không khí ngột ngạt của dự án dường như giãn ra một chút. Anh đặt hai tay lên bàn phím, gõ một dòng phản hồi ngắn gọn nhưng chất chứa sự thấu hiểu:

"Acknowledged (Đã tiếp nhận toàn bộ). Sẽ họp bàn phương án kỹ thuật cho 11 lỗi đầu tiên vào lúc 4h chiều. Riêng Lỗi số 12: Đang tiến hành triển khai bản vá (hot-fix) bằng 250ml nước ấm. Cảm ơn sự review khắt khe của Tech Lead."

Nhưng ngay khi ngón tay Đức vừa chạm vào phím Enter để gửi bình luận, bầu không khí tĩnh lặng xen lẫn tiếng gõ phím của văn phòng đột ngột bị xé toạc một cách bạo lực.

"Peeep! Peeep! Peeeeeeeep!"

Đây không phải là tiếng chuông báo động kiểm toán quen thuộc vang lên vào buổi sáng hôm đó. Đây là một âm thanh điện tử sắc nhọn, dồn dập, gắt gỏng như tiếng thét, được phát ra từ hệ thống loa trung tâm nối trực tiếp với công cụ giám sát máy chủ Datadog.

Đồng loạt, toàn bộ bốn chiếc màn hình TV 65-inch treo ở vị trí trung tâm văn phòng – nơi thường hiển thị các dashboard xanh mướt về doanh thu và số lượng user online theo thời gian thực – nháy chớp và chuyển sang màu đỏ rực như máu. Một dòng chữ trắng khổng lồ hiện lên, đập thẳng vào đồng tử của tất cả mọi người như một cú đấm tàn nhẫn:

[P0 BUG] FATAL ERROR - PRODUCTION DATABASE DEADLOCK. TIME ELAPSED: 00:00:15 STATUS: ALL PAYMENT GATEWAYS DOWN. IMPACT: CRITICAL.

Cả văn phòng NovaPulse như bị rút cạn oxy trong tích tắc. Tiếng xì xầm im bặt. P0 Bug – Cấp độ lỗi cao nhất, nghiêm trọng nhất trong thang đo thảm họa phần mềm. Toàn bộ cổng thanh toán trên ứng dụng đang chạy thật (production) đã sập toàn diện. Mỗi một giây trôi qua hiển thị trên màn hình, công ty đang đánh rơi hàng trăm ngàn đơn hàng, mất đi dòng tiền sống còn và đốt cháy chút niềm tin cuối cùng của khách hàng đang sử dụng app.

Nụ cười trên môi Đức đông cứng lại ngay lập tức. Đôi mắt anh đanh lại, chế độ PM máu lạnh và xử lý khủng hoảng được kích hoạt trong vỏn vẹn nửa giây. Anh đứng phắt dậy, đẩy mạnh ghế ra sau tạo thành tiếng rít chói tai trên mặt sàn gỗ, vớ lấy chiếc máy tính xách tay và lao thẳng ra khỏi phòng kính.

Cùng lúc đó, tại khu vực "Vùng Đất Chết", sự cợt nhả, vẻ đắc ý trên mặt Xuân đã bốc hơi không còn một dấu vết. Ánh mắt cô trở nên sắc lẹm, đôi tay ngay lập tức bay lượn trên bàn phím với tốc độ khủng khiếp, nhấn những tổ hợp phím tắt để mở liên tiếp bốn terminal SSH chằng chịt chữ xanh đỏ, cắm thẳng quyền root vào cụm server đang bốc cháy.

"Toàn bộ team Backend, dừng gõ! Bỏ mọi task hiện tại! Log vào ngay kênh War Room trên Slack!" Xuân hét lớn, giọng nói vang dội, uy lực đến mức át cả tiếng chuông cảnh báo đang réo rắt. "Thằng nào đang giữ session write của Database 1? Báo cáo tình trạng query lock ngay lập tức!"

Đức chạy đến sát bàn làm việc của Xuân, khoảng cách không gian cá nhân bị phá vỡ hoàn toàn nhưng cả hai đều không còn bận tâm đến điều đó. Anh chống một tay lên bàn, cúi người nhìn chăm chăm vào những dòng log lỗi đang trôi tuột như thác đổ trên màn hình đen ngòm của cô.

"Thiệt hại ước tính hiện tại là bao nhiêu? Bao nhiêu user bị văng?" Xuân hỏi mà không thèm quay mặt lại, ngón tay vẫn gõ không ngừng nghỉ những dòng lệnh truy vấn trạng thái.

"Khoảng năm ngàn user đang bị kẹt tiền trong trạng thái pending (chờ xử lý)," Đức đáp nhanh, giọng đanh lại, bộ não kinh doanh của anh tính toán thiệt hại với tốc độ ánh sáng. "Và con số đang tăng theo cấp số nhân mỗi giây. Nếu trong mười lăm phút nữa không clear được cái deadlock này, dòng tiền sẽ bị fail toàn bộ, luồng đối soát với ngân hàng sẽ rối tung lên. Tỷ lệ churn rate (người dùng từ bỏ ứng dụng) sẽ phá vỡ ngưỡng an toàn của Sprint 100. Kế hoạch cứu vãn công ty sẽ chết trước khi chúng ta kịp hoàn thành phần lõi."

Xuân cắn chặt môi dưới, mạnh đến mức rỉ ra một tia máu nhạt. "Khốn kiếp. Cái deadlock này không tự nhiên sinh ra. Có một truy vấn rác từ cái hệ thống legacy (hệ thống cũ) nào đó đang bóp nghẹt table lịch sử giao dịch thanh toán."

Cô ngước lên nhìn thẳng vào Đức, ánh mắt hai người giao nhau tóe lửa. Không còn không gian cho những lời đùa cợt ẩn ý trên Jira, không còn chỗ cho những cốc cà phê thả thính hay những ly nước ấm quan tâm. Đây là chiến trường thực sự tàn khốc, nơi mà sự sống còn của cả một công ty và công sức của hàng chục con người đang đếm ngược từng giây trên cái màn hình đỏ rực kia.

"Anh cho tôi mười phút," Xuân gằn giọng, sát khí bừng bừng trong đáy mắt. "Hãy dùng cái quyền Giám đốc Sản phẩm của anh lên group với bọn CS (Chăm sóc khách hàng), bắt chúng nó treo biển bảo trì, chặn mọi khiếu nại đẩy xuống team dev. Không một ai được phép làm phiền tôi lúc này. Nếu sau mười phút tôi không gỡ được..."

"Cô sẽ gỡ được," Đức ngắt lời, giọng nói chắc nịch, trầm ổn, không mang theo một mảy may nghi ngờ nào. Bàn tay anh khẽ đặt lên lưng ghế của cô, một điểm tựa vững chãi, một sự bảo chứng mù quáng nhưng kiên định giữa cơn bão. "Tôi sẽ giữ chân thế giới bên ngoài. Cô cứ lo tiêu diệt con bug bên dưới."

Xuân gật đầu cái rụp. Âm thanh lạch cạch của chiếc bàn phím cơ Alice lại vang lên liên hồi, chói tai, hòa cùng tiếng thở dốc căng thẳng của cả văn phòng. Sự lãng mạn ngầm vừa chớm nở đã bị vùi lấp tàn nhẫn bởi sức ép sinh tử của thế giới khởi nghiệp, nhưng kỳ lạ thay, chính trong cái khoảnh khắc cận kề cái chết của hệ thống này, khi họ cùng đứng chung một chiến hào, sợi dây liên kết vô hình giữa gã PM và cô Tech Lead lại càng trở nên siết chặt hơn bao giờ hết.

Đánh giá Chương 3
5.0 / 5.0
Chưa có đánh giá nào từ độc giảChạm vào sao để đánh giá

Bình luận độc giả0

Chia sẻ cảm nhận và thảo luận về chương truyện này

Đang tải bình luận...
18px

Mục Lục Chương

Thuật Toán Rung Động Trái Tim (50 chương)

Lịch Sử Đọc Truyện

Bạn chưa đọc truyện nào gần đây.

Lịch sử sẽ tự động lưu khi bạn đọc chương truyện.