Feature flags: bật/tắt tính năng không cần deploy
// File: feature-flag.ts
// Cách đơn giản nhất: dùng database
const flags = await db.featureFlags.findAll()
// Trong component
function PricingPage() {
const showNewPricing = flags["new_pricing_v2"]
return showNewPricing
? <NewPricingTable />
: <OldPricingTable />
}
// Rollout dần: bật cho % user
function isEnabled(flagName: string, userId: string) {
const flag = flags[flagName]
if (!flag.enabled) return false
// Hash userId → số 0-100 → so sánh với rollout %
const hash = hashCode(userId) % 100
return hash < flag.rolloutPercent
}
A/B testing: dữ liệu quyết định, không phải cảm tính
Bạn nghĩ nút CTA màu xanh đẹp hơn đỏ? Đừng đoán — test. A/B testing chia user thành 2 nhóm, mỗi nhóm thấy phiên bản khác nhau, đo conversion rate. Con số nói lên tất cả.
| Công cụ | Free tier | Ưu điểm |
|---|---|---|
| PostHog | 1M events/tháng | Open-source, tự host được, feature flags + A/B + analytics all-in-one |
| LaunchDarkly | Limited | Enterprise-grade, SDK đầy đủ |
| GrowthBook | Free self-host | Open-source, tập trung A/B testing |
💡 Đừng A/B test mọi thứ
A/B testing cần đủ traffic (>1000 users/variant) để có kết quả đáng tin. Startup nhỏ: dùng feature flags để rollout an toàn, qualitative feedback từ user thay vì A/B testing quá sớm.
❓ Feature flag giải quyết vấn đề gì?
- Implement feature flag đơn giản (database-based)
- Rollout dần theo phần trăm user
- Biết khi nào A/B testing có ý nghĩa thống kê
- Setup PostHog feature flags