Ship features safely with progressive rollouts, feature flags, and canary deployments. Use when deploying risky features or when you need gradual rollouts.
Ship features safely with progressive rollouts.
Phase 1 - Internal (Day 1):
- 100% to internal team
- Test thoroughly
- Fix critical bugs
Phase 2 - Beta (Day 2-3):
- 5% to beta users
- Monitor errors/performance
- Collect feedback
Phase 3 - Gradual (Day 4-7):
- 25% of users
- Watch metrics closely
- 50% of users if good
- 100% if still good
Phase 4 - Full Release:
- 100% of users
- Remove feature flag
- Announce publicly
// Feature flag implementation
const featureFlags = {
newDashboard: {
enabled: true,
rollout: 0.25, // 25% of users
userGroups: ['beta-testers'], // Always on for beta
}
}
function isFeatureEnabled(feature, user) {
const flag = featureFlags[feature]
// Check user group
if (user.groups.some(g => flag.userGroups.includes(g))) {
return true
}
// Check rollout percentage
const hash = hashUserId(user.id)
return (hash % 100) < (flag.rollout * 100)
}
// Usage
{isFeatureEnabled('newDashboard', user) ? (
<NewDashboard />
) : (
<OldDashboard />
)}
Process: 1. Deploy to "green" environment
2. Test green thoroughly
3. Switch traffic to green
4. Keep blue as rollback
Pros: Instant rollback
Cons: 2x infrastructure cost
Process: 1. Deploy to 5% of servers
2. Monitor for 1 hour
3. If good, deploy to 25%
4. Monitor for 1 hour
5. If good, deploy to 100%
Pros: Gradual, safe
Cons: Slower rollout
Criteria for Rollback:
- Error rate > 1%
- Performance degradation > 20%
- Critical bug discovered
- Negative user feedback
Rollback Process: 1. Disable feature flag immediately
2. Notify team
3. Investigate issue
4. Fix and redeploy
Key Metrics During Release:
- Error rate
- Response time p95
- CPU/memory usage
- User-reported issues
Alerts:
- Error rate > 1% → Pause rollout
- Response time > 2s → Investigate
- Memory spike > 90% → Rollback
Internal:
- Slack announcement
- Deploy log updated
- Engineering team notified
External:
- Changelog updated
- Email to power users (if major)
- Blog post (if significant)
Safe releases:
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer