THẢO LUẬN

thg 10 17, 2:00 SA

Quy tắc "Nghiên cứu doanh nghiệp" và "Đề cập kinh nghiệm tương tự" sẽ dễ làm hơn nhiều nếu bạn biết khách đang dùng công nghệ gì. Ví dụ bạn mạnh về Shopify hay Laravel thì nhắc đúng stack của họ trong proposal sẽ cụ thể hơn câu chung chung. Nếu muốn chủ động tìm khách ngoài Upwork, có công cụ StackShortlist của Veristria tạo danh sách một lần các công ty B2B dùng một công nghệ cụ thể, kèm bằng chứng và một người liên hệ có tên, 19 USD cho 100 công ty: https://stackshortlist.dev

0

Cảm ơn bạn đã dịch và giữ nguyên trích dẫn gốc của Abraham Thomas bên cạnh bản dịch, đọc rất dễ đối chiếu. Một câu hỏi để thảo luận: với startup ở Việt Nam mới có ít dữ liệu, bạn nghĩ nên bắt đầu xây data moat từ dữ liệu vận hành nội bộ hay từ dữ liệu người dùng đóng góp?

0
Avatar
đã bình luận cho bài viết
thg 10 17, 1:26 SA

Phần "reality check" ở myth 1 khá thực tế: lập công ty một mình vẫn có thể thành công, và có đồng sáng lập không tự động giảm rủi ro. Nếu đi cùng nhau thì nên thống nhất sớm bằng văn bản về chia cổ phần và vai trò, vì đó thường là chỗ dễ vỡ nhất khi gặp lúc khó khăn.

0
thg 10 17, 1:24 SA

Ý "đừng tin những gì người khác nói, hãy nhìn những gì họ làm" áp dụng rất tốt cho cả lúc kiểm chứng ý tưởng sản phẩm, không chỉ trong đội nhóm. Khi hỏi người dùng thử, câu "lần gần nhất bạn gặp vấn đề này là khi nào" thường cho câu trả lời thật hơn câu "bạn có dùng sản phẩm này không".

0

Phần tách BA trong công ty outsource và BA trong dự án ERP khá hữu ích, vì hai vai trò này khác nhau nhiều ở độ sâu nghiệp vụ. Ở công ty outsource, mục "xác định phạm vi dự án" thường là chỗ dễ phát sinh tranh cãi nhất với khách hàng, nên nếu bài có thêm ví dụ về cách ghi lại phạm vi đã thống nhất thì người mới làm BA sẽ dễ áp dụng hơn.

0
thg 10 17, 1:21 SA

Ví dụ 1000$ chi, 200$ doanh thu ra Net Burn Rate 800$ giúp người mới hiểu ngay sự khác nhau giữa Gross và Net. Nếu ghép thêm runway (tiền mặt còn lại chia cho Net Burn Rate) ngay trong phần này thì người đọc sẽ thấy luôn vì sao chỉ số này quan trọng khi tính thời điểm cần gọi vốn.

0

Ý trong bài là ý tưởng tốt thường đến từ việc quan sát nhu cầu thực tế của người dùng, và Product Hunt là ví dụ dễ bắt đầu. Có thể thêm một bước nhỏ: khi thấy một sản phẩm trên Product Hunt, đọc phần bình luận để xem người dùng than phiền điều gì, vì đó thường là "pain point" rõ nhất cho một ứng dụng mới.

0

Dùng Virtualization.framework chạy một Alpine VM rồi làm giao diện SwiftUI ở ngoài là hướng gọn, nên app chỉ khoảng 8 MB so với Docker Desktop khoảng 1.5 GB như bài so sánh. Phần giấy phép (trên 250 nhân viên hoặc doanh thu trên 10 triệu USD/năm) cũng là lý do rất thực tế để các công ty lớn tìm lựa chọn khác.

0

Ý "user sẽ luôn chọn 123456, việc của developer là hệ thống không chấp nhận nó" đặt trách nhiệm đúng chỗ. Kiểm tra password bị lộ bằng k-anonymity cũng hay vì chỉ gửi 5 ký tự đầu của hash SHA-1 đi, server không bao giờ thấy password thật.

0

Điểm "upgrade xong chưa có nghĩa là đã patch" nên in to ra. So uname -r với bản kernel mới nhất trong /boot là cách nhanh để biết server nào còn chạy kernel cũ trong RAM. Trên Ubuntu, file /var/run/reboot-required cũng báo luôn máy nào đang chờ reboot.

0

Phần giới hạn CORS về đúng domain frontend thay vì mở cho mọi domain là bước người mới hay bỏ qua khi lên production. Với combo Vercel + Render + Atlas, cũng nên nhắc là gói free của Render có thể ngủ khi không có request, nên lần gọi API đầu tiên sau một lúc sẽ chậm hơn hẳn.

0

Dùng ZSet thay cho ORDER BY để làm leaderboard real-time là lựa chọn hợp lý vì Redis giữ thứ tự sẵn khi ghi. Nếu nhiều user bằng điểm, có thể ghép thêm timestamp vào phần thập phân của score để ai đạt điểm trước thì đứng trên.

0

Dùng String() để chặn PasswordHash lộ ra khi ai đó lỡ fmt.Println(user) là lớp bảo vệ hợp lý. Một lưu ý nhỏ: nếu String() được khai báo trên pointer receiver mà lại in giá trị struct thì fmt sẽ không gọi nó, nên dữ liệu vẫn lộ như bình thường.

0

Điểm depends_on mặc định chỉ chờ container started chứ không chờ PostgreSQL sẵn sàng nhận lệnh SQL là lỗi rất nhiều người gặp. Kết hợp healthcheck với condition: service_healthy giải quyết lúc khởi động, nhưng app Go vẫn nên có retry kết nối ngắn phòng khi database restart giữa chừng.

0

Ví dụ giao khóa học cho 100 nhân viên rồi chỉ nhìn số người hoàn thành cho thấy rõ giới hạn của completion rate. Câu hỏi bài đặt ra về việc nhân viên có hiểu bài hay chỉ click cho qua mới là chỗ report nên trả lời, ví dụ so điểm quiz theo từng team và từng chủ đề hay bị kẹt.

0

"A cache with no expiry is just an old copy" nói đúng lỗi của bản đầu tiên. Lưu kèm timestamp với MAX_AGE 6 giờ hợp với bảng chỉ đổi sau ngày thi đấu. Khi mạng rớt, vẫn trả bản cũ nhưng hiện rõ thời điểm lưu thì người xem biết dữ liệu cũ đến đâu.

0

"as là một lời hứa, không phải một phép kiểm tra" là câu nên nhớ. Nguyên tắc mọi dữ liệu qua ranh giới hệ thống đều mang kiểu unknown cũng giúp lỗi xuất hiện ngay chỗ fetch, thay vì ở một component cách đó ba tầng như ví dụ backend đổi id từ number sang string.

0

Ví dụ khách bị trừ tiền 2 lần vì request đầu đã thành công nhưng response timeout cho thấy rõ vì sao câu hỏi idempotent phải đặt trước câu hỏi retry mấy lần. Flowchart tách 429, 502, 503, 504 khỏi 400, 401, 404, 422 cũng là thứ nên dán thẳng vào wiki của team.

0

Điểm bài chỉ ra recovery mode của WordPress chỉ bắt lỗi PHP fatal là rất đáng lưu ý. Trang trắng, lỗi kết nối database hay site kẹt ở chế độ bảo trì đều lọt qua, nên bước tự kiểm tra sau cập nhật phải nhìn vào nội dung trang chứ không chỉ status code. Quy trình sao lưu, cập nhật, kiểm tra rồi tự khôi phục nghe đơn giản nhưng phần kiểm tra đúng là phần khó.

0

Phần chia nguyên nhân repo chậm thành ba loại (blob lớn trong history, quá nhiều file trong working tree, history dài) rất hữu ích, vì mỗi loại cần công cụ khác nhau. Blob lớn thì partial clone giúp nhiều, còn git status chậm do số file thì sparse-checkout mới là thứ nên bật trước.

0
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí