Your team has 400 feature flags. You know this because someone finally counted. What you do not know is who owns 60% of them, which ones are still evaluated in production, whether any of them interact in ways that create untested code paths, or how many are safe to remove right now.
This is not a tooling problem. It is a governance problem.
Feature flag governance is the system of policies, processes, and accountability structures that ensure flags are created intentionally, maintained responsibly, and removed predictably. Without governance, flags accumulate at a rate that is directly proportional to your team's shipping velocity -- the faster you ship, the faster you drown in flags.
The pattern is consistent. In our experience, the vast majority of feature flags in codebases without formal governance are never properly removed. Teams with governance frameworks in place carry far fewer stale flags. The difference is not that governed teams use fewer flags -- they often use more. The difference is that governed flags have owners, expiration dates, and retirement paths.
This article provides a complete governance framework that you can adapt and implement incrementally. It covers ownership policies, lifecycle rules, review processes, retirement automation, flag budgets, escalation paths, and a phased rollout plan that does not require slowing down your development velocity to adopt.
What flag governance actually means
Governance is not bureaucracy. Bureaucracy adds process for the sake of process. Governance adds the minimum viable structure to prevent a known failure mode. The failure mode is clear: without governance, flags accumulate until they become an unmanageable source of technical debt, production incidents, and developer frustration.
Governance answers five questions:
| Question | Without Governance | With Governance |
|---|---|---|
| Who owns this flag? | "The team" (nobody) | A specific person, tracked and transferable |
| How long should this flag exist? | Indefinitely, by default | Maximum lifespan by type, enforced by policy |
| Who reviews flag creation and removal? | Nobody, unless someone notices | Defined review process integrated into PRs |
| When should this flag be removed? | "When we get to it" (never) | Scheduled retirement with escalation path |
| How many flags can this team maintain? | No limit (flags compound) | Budget per team with enforcement mechanism |
Good governance is invisible to engineers working at normal pace. It surfaces only when something goes wrong: a flag exceeds its lifespan, an owner leaves without transferring ownership, or a team approaches its flag budget. The rest of the time, it operates in the background through automated checks, dashboards, and lightweight processes.
Pillar 1: Ownership policies
The first and most critical pillar of flag governance is clear ownership. Every flag must have an owner -- a specific individual, not a team, not a channel, not "engineering." When a flag has no owner, it has no one accountable for its lifecycle, and unaccountable flags are flags that never get removed.
The ownership model
| Rule | Details |
|---|---|
| Default owner | The engineer who creates the flag is the default owner |
| Owner format | A specific person identified by username, email, or employee ID |
| Ownership is visible | Owner is recorded in the flag management platform and referenced in code comments |
| Ownership is transferable | When an owner leaves the team, ownership transfers explicitly via a documented handoff |
| Orphan escalation | Flags without a valid owner for 5+ business days escalate to the engineering manager |
| Maximum flags per owner | No individual should own more than 15 active flags at any time |
Ownership transfer protocol
Ownership transfer is the point where most governance frameworks break down. An engineer leaves, their flags become orphans, and orphan flags are effectively immortal -- nobody will remove a flag they did not create and do not understand.
Transfer triggers:
- Engineer leaves the company
- Engineer changes teams
- Engineer goes on extended leave (4+ weeks)
- Engineer's flag count exceeds the per-person maximum
Transfer process:
- The departing engineer generates a list of all flags they own (query the flag management platform by owner)
- For each flag, they identify a new owner from the current team who understands the flag's purpose
- The new owner reviews the flag's documentation, expiration date, and removal plan
- Ownership is updated in the flag management platform
- If no suitable owner is found, the engineering manager assumes temporary ownership and adds the flag to the next sprint for review
During team reorganizations, the engineering managers of both the source and destination teams are jointly responsible for ensuring every flag has a valid owner after the reorg. Flags that fall through the cracks during reorgs are the primary source of long-lived orphans.
Monitoring ownership health
Track these metrics to ensure ownership policies are working:
| Metric | Healthy | Warning | Critical |
|---|---|---|---|
| Flags with a valid owner | 100% | 95-99% | < 95% |
| Orphan flags (no owner for 5+ days) | 0 | 1-3 | > 3 |
| Flags per owner (maximum) | < 10 | 10-15 | > 15 |
| Ownership transfers completed within 5 days of trigger | > 95% | 80-95% | < 80% |
Pillar 2: Lifecycle policies
Every flag type has a natural lifespan. A release flag should not exist for a year. An experiment flag should not outlive its analysis period by six months. Lifecycle policies define the maximum lifespan for each flag type and create accountability when flags exceed their expected duration.
Maximum lifespan by flag type
| Flag Type | Maximum Lifespan | Renewal Allowed | Maximum Renewals | Absolute Maximum |
|---|---|---|---|---|
| Release | 90 days | Yes | 1 (90-day extension) | 180 days |
| Experiment | 45 days | Yes | 1 (30-day extension) | 75 days |
| Operational (kill switch) | No expiration | N/A | N/A | Reviewed annually |
| Permission | 180 days | Yes | Unlimited (90-day each) | No absolute max |
| Migration | 120 days | Yes | 2 (60-day each) | 240 days |
| Hotfix | 30 days | Yes | 1 (30-day extension) | 60 days |
Why absolute maximums matter: Without them, the renewal process becomes an indefinite extension mechanism. A release flag that gets renewed four times is not a release flag -- it is permanent infrastructure masquerading as a temporary mechanism. Absolute maximums force a reclassification conversation: if a flag needs to exist longer than its absolute maximum, it should be reclassified as a different type with appropriate documentation.
Lifecycle state machine
Every flag progresses through a defined set of states. Governance requires that each state transition is intentional and recorded:
Created --> Active --> Stable --> Deprecated --> Removed
| | |
| v v
+--- Expired ---> Escalated ---> Forced Review
| State | Definition | Automatic Transition |
|---|---|---|
| Created | Flag exists in code, not yet enabled | Moves to Active when first enabled |
| Active | Flag is being rolled out or actively used | Moves to Stable when at 100% for 14+ days |
| Stable | Flag is at target state, monitoring complete | Moves to Expired if past expiration date |
| Deprecated | Flag is approved for removal, stakeholders notified | Moves to Removed when cleanup PR merges |
| Removed | Flag is deleted from code and management platform | Terminal state |
| Expired | Flag has passed its maximum lifespan without deprecation | Enters escalation process |
| Escalated | Flag is overdue and has been escalated to management | Resolves via removal, renewal, or reclassification |
Expiration enforcement
When a flag passes its maximum lifespan without being deprecated, the escalation process activates:
Days 1-7 past expiration: Automated notification
- Slack/email notification sent to the flag owner
- Message includes the flag name, type, creation date, and days past expiration
- A cleanup ticket is auto-created in the team's project tracker
Days 8-14 past expiration: Manager escalation
- Notification sent to both the flag owner and their engineering manager
- The cleanup ticket is escalated to high priority
- Flag appears highlighted on the team health dashboard
Days 15-21 past expiration: Sprint insertion
- The engineering manager is responsible for scheduling the cleanup in the current or next sprint
- The flag is added to sprint planning as a mandatory item
- If a renewal is needed, it must be requested with written justification
Day 22+ past expiration: Governance review
- The governance owner (typically a staff engineer or engineering director) schedules a 15-minute review
- The outcome is one of: immediate removal, approved renewal with binding timeline, reclassification to a longer-lived type, or documented exception with review date
- All outcomes are recorded for the quarterly governance review
Pillar 3: Review processes
Governance must be integrated into the workflows engineers already follow. The most natural integration point is the pull request review process, where flags are created and removed.
Flag creation review
Every PR that introduces a new feature flag should include the following, verified by the reviewer:
| Requirement | What the Reviewer Checks |
|---|---|
| Naming convention compliance | Flag name follows {type}_{feature}_{context}_{date} format |
| Owner assignment | Flag owner is recorded in the management platform |
| Expiration date | Expiration date is set based on the flag type's maximum lifespan |
| Documentation | Flag description explains what it controls and why |
| Both code paths tested | Tests cover both the enabled and disabled states |
| Cleanup ticket | A ticket for flag removal is created and linked |
| Removal plan | Brief description of how to remove the flag when the time comes |
This is not a lengthy review process. Verifying these items takes 2-3 minutes during a standard code review. Most of them are visible directly in the PR or the flag management platform. The goal is to ensure that every flag enters the codebase with the metadata needed to manage and eventually remove it.
Flag removal review
Flag removal PRs deserve expedited review because they reduce technical debt. Delays in reviewing cleanup PRs create a disincentive for engineers to submit them.
Removal review SLA: 24 hours maximum from PR creation to first review.
Removal review checklist:
- All code paths referencing the flag are updated or removed
- The "winning" path (typically the enabled state) is preserved as permanent behavior
- The "losing" path (typically the disabled state) is fully removed, including dead imports and unused variables
- Tests are updated to remove flag-variant testing
- The flag is removed from the management platform
- No residual references to the flag name exist in the codebase
Periodic flag reviews
Beyond PR-level reviews, governance requires periodic reviews of the entire flag inventory:
| Review Type | Frequency | Participants | Focus |
|---|---|---|---|
| Team flag review | Monthly | Team lead + engineers | Active flags, approaching expirations, stale flags |
| Cross-team flag review | Quarterly | Engineering managers + staff engineers | Shared flags, cross-service flags, governance compliance |
| Governance review | Quarterly | Governance owner + engineering leadership | Policy effectiveness, metric trends, policy adjustments |
| Kill switch audit | Annually | SRE/Platform team + service owners | Kill switches still functional, runbooks current, tested |
The monthly team flag review is the most important. It takes 15-30 minutes and covers:
- Flag inventory check: How many active flags does the team have? Is the count trending up or down?
- Stale flag identification: Which flags are past their expiration or approaching it?
- Ownership verification: Are all flags owned by current team members?
- Cleanup prioritization: Which flags should be removed this month? Assign owners and set deadlines.
- New flag forecast: Are there flags being created in the upcoming sprint? Do they meet creation requirements?
Pillar 4: Retirement rules
Retirement is the end of a flag's lifecycle. Governance defines when flags must retire, how retirement is executed, and what happens when retirement is blocked.
Automatic retirement triggers
| Trigger | Action |
|---|---|
| Flag at 100% enabled for 30+ days with no incidents | Move to Deprecated state; schedule cleanup |
| Flag at 0% (disabled) for 14+ days | Move to Deprecated state; schedule cleanup |
| Flag past absolute maximum lifespan | Mandatory retirement; override requires governance owner approval |
| Owner left company with no ownership transfer | Move to Escalated state; assign to engineering manager |
| Flag management platform reports zero evaluations for 30+ days | Move to Deprecated state; likely dead code |
Retirement blockers and how to resolve them
| Blocker | Resolution |
|---|---|
| "We might need to roll back" | If 30+ days at 100% with no issues, rollback is not needed. Create a new kill switch if the concern is legitimate. |
| "Another team uses this flag" | Identify the dependency. Coordinate a removal date. One team owns the flag; other teams are notified. |
| "Removing it is too risky" | This is a signal that the flag was not properly documented or tested. Invest in understanding the flag before removing it. |
| "Nobody knows what this flag does" | Assign a "flag archaeologist" to investigate. If the flag cannot be understood after 4 hours of research, it is almost certainly safe to remove (with monitoring). |
| "The cleanup PR is too large" | Break it into smaller PRs. Remove the flag from one service or file at a time. |
| "We don't have time" | This is a prioritization problem, not a technical one. The escalation process exists to ensure cleanup is prioritized. |
Automated retirement assistance
Automated tooling dramatically reduces the effort required for flag retirement. Tools that can parse your codebase, identify all references to a flag, and generate a cleanup PR eliminate the most time-consuming part of the retirement process.
FlagShark, for example, uses tree-sitter AST parsing to detect flag references across 11 programming languages, tracks the lifecycle of each flag from the moment it appears in a PR, and generates cleanup PRs that remove the flag and its dead code paths. This transforms retirement from a multi-hour manual process into a review-and-merge operation.
What to automate:
| Activity | Manual Effort | Automated Effort |
|---|---|---|
| Identify all flag references | 30-60 minutes per flag | Seconds (AST-based search) |
| Determine which code path to keep | 15-30 minutes | Automatic (based on flag state) |
| Generate cleanup PR | 1-4 hours | Automatic |
| Track flag lifecycle | Ongoing manual audits | Continuous, event-driven |
| Send expiration notifications | Manual calendar reminders | Automatic at configured thresholds |
Pillar 5: Flag budgets
A flag budget is an upper limit on the number of active flags a team can maintain at any given time. Budgets prevent unbounded flag accumulation and create a natural pressure to clean up before creating new flags.
Setting initial budgets
Base your initial budgets on team size and the complexity of the services they own:
| Team Size | Recommended Budget | Per-Engineer Guideline | Rationale |
|---|---|---|---|
| 2-5 engineers | 10-20 flags | ~4 flags per engineer | Small teams have less capacity for flag management overhead |
| 6-12 engineers | 20-50 flags | ~4-5 flags per engineer | Mid-size teams can handle more flags with dedicated review processes |
| 13-25 engineers | 40-80 flags | ~3-4 flags per engineer | Large teams need lower per-engineer counts due to coordination costs |
| 25+ engineers | 60-100 flags | ~3 flags per engineer | At scale, flag interactions become the primary risk |
Budget includes all flag types except operational kill switches, which are exempt because they serve an ongoing safety purpose. Kill switches are tracked separately and subject to annual review rather than budget constraints.
Budget enforcement
| Threshold | Response |
|---|---|
| < 70% of budget | Normal operations. No restrictions on flag creation. |
| 70-90% of budget | Warning. Weekly Slack notification to the team showing current count and budget. |
| 90-100% of budget | Alert. Team lead notified. New non-critical flags require cleanup of an existing flag first. |
| > 100% of budget | Hard stop. No new flags until the team is back under budget. Exceptions require engineering manager approval with a documented cleanup timeline. |
Budget adjustments
Budgets are not static. Review and adjust quarterly based on:
- Team size changes: Budget scales with team size
- Service complexity: Teams owning more services may need higher budgets
- Release cadence: Teams shipping more frequently may need more concurrent release flags
- Historical data: If a team consistently operates at 50% of budget, the budget may be too generous (and should be tightened, not celebrated)
Pillar 6: Escalation paths
Escalation is the mechanism that ensures governance is enforced without becoming a bottleneck. Every governance violation has a defined escalation path with clear owners and timelines.
Escalation matrix
| Situation | First Escalation | Second Escalation | Final Escalation |
|---|---|---|---|
| Flag past expiration | Flag owner (Day 1) | Engineering manager (Day 8) | Governance owner (Day 22) |
| Orphaned flag (no owner) | Engineering manager (Day 1) | Team lead (Day 5) | Governance owner (Day 10) |
| Budget exceeded | Team lead (immediate) | Engineering manager (Day 3) | Engineering director (Day 7) |
| Kill switch not tested in 6+ months | SRE team lead (Day 1) | Engineering manager (Day 14) | VP Engineering (Day 30) |
| Flag involved in production incident | Flag owner (immediate) | Engineering manager (same day) | Incident review process |
| Creation requirements not met | PR reviewer (during review) | Team lead (if recurring) | Governance review (if systemic) |
Escalation principles
- Escalation is not punishment. It is a safety net. The tone of all escalation communications should be helpful and solution-oriented, not accusatory.
- Escalation has a resolution. Every escalation must end with one of: removal, renewal, reclassification, or documented exception. "We'll get to it" is not a resolution.
- Escalation data feeds policy improvement. If the same team or flag type is frequently escalated, the policy may need adjustment -- the timelines might be too aggressive, or the team may need additional support.
- Escalation is transparent. All escalation events and resolutions are visible in the governance dashboard. There are no hidden enforcement actions.
Rolling out governance without slowing teams down
The biggest objection to governance is that it slows teams down. This objection is valid if governance is implemented poorly -- as a big-bang rollout with immediate full enforcement. It is invalid if governance is implemented incrementally, with automation absorbing the overhead.
Phase 1: Visibility (Weeks 1-4)
Goal: Establish a baseline. Understand the current state before changing anything.
Actions:
- Conduct a full flag audit: count, categorize, identify owners (or lack thereof)
- Set up a flag health dashboard with the metrics from each pillar
- Share the audit results with the team without judgment -- this is a baseline, not a report card
- Draft the governance framework document (use this article as a starting point)
What NOT to do in Phase 1:
- Do not enforce any new rules yet
- Do not create cleanup tickets for existing stale flags
- Do not set budgets or expiration dates
Expected outcome: The team understands the scope of the problem. Leadership has data to justify the governance investment.
Phase 2: New flag governance (Weeks 5-8)
Goal: Apply governance to all newly created flags. Existing flags are grandfathered temporarily.
Actions:
- Implement naming conventions for new flags
- Require ownership assignment for new flags
- Set expiration dates on new flags based on type
- Add flag creation checklist to PR review process
- Begin tracking new flag compliance metrics
What NOT to do in Phase 2:
- Do not retroactively enforce on existing flags
- Do not set budgets yet
- Do not activate escalation processes
Expected outcome: 100% of new flags meet governance requirements. The process is normalized without disrupting ongoing work.
Phase 3: Existing flag cleanup (Weeks 9-16)
Goal: Bring existing flags into compliance. Start with the easiest wins and work toward the harder cases.
Actions:
- Assign owners to all orphaned flags (engineering manager responsibility)
- Set expiration dates on existing flags based on their type and age
- Run the first cleanup sprint targeting the oldest, most obviously stale flags
- Begin monthly team flag reviews
- Activate expiration notifications (warnings only, no escalation yet)
Expected outcome: Orphaned flags have owners. Stale flags are identified and prioritized. Monthly reviews are habitual.
Phase 4: Full enforcement (Week 17+)
Goal: Activate all governance mechanisms. The framework is fully operational.
Actions:
- Activate the full escalation process
- Set flag budgets per team
- Enable automated retirement triggers
- Begin quarterly governance reviews
- Publish the first quarterly governance report
Expected outcome: Flag inventory is stable or declining. Escalations are rare because the earlier phases caught most issues. Teams operate within their budgets. Governance runs on autopilot with periodic reviews.
The governance framework template
Below is a condensed, ready-to-adopt governance framework. Copy it, customize the bracketed values, and distribute it to your engineering organization.
FEATURE FLAG GOVERNANCE FRAMEWORK
Version: 1.0 Effective Date: [Date] Governance Owner: [Staff Engineer / Engineering Director] Review Cadence: Quarterly Applies To: All engineering teams at [Organization]
1. Ownership
- Every flag has a named individual owner (not a team)
- Default owner: the creating engineer
- Ownership transfers within 5 business days of any trigger event (departure, team change, leave)
- Orphaned flags escalate to the engineering manager on Day 1, team lead on Day 5
- Maximum [15] active flags per individual owner
2. Lifecycle
| Flag Type | Maximum Lifespan | Renewable | Absolute Maximum |
|---|---|---|---|
| Release | [90] days | Once ([90] days) | [180] days |
| Experiment | [45] days | Once ([30] days) | [75] days |
| Operational | No expiration | N/A | Annual review |
| Permission | [180] days | Unlimited ([90] days each) | No maximum |
| Migration | [120] days | Twice ([60] days each) | [240] days |
| Hotfix | [30] days | Once ([30] days) | [60] days |
3. Creation Requirements
Every new flag must have: compliant name, assigned owner, expiration date, description, tests for both states, cleanup ticket, and removal plan. Verified during PR review.
4. Review Cadence
- PR review: Flag creation and removal compliance checked on every PR
- Monthly: Team flag inventory review (15-30 minutes)
- Quarterly: Cross-team flag review and governance policy review
- Annually: Kill switch audit and functionality verification
5. Budgets
| Team Size | Budget |
|---|---|
| 2-5 | [15] flags |
| 6-12 | [35] flags |
| 13-25 | [60] flags |
| 25+ | [80] flags |
Warning at 70%, alert at 90%, hard stop at 100%.
6. Escalation
| Days Past Expiration | Action |
|---|---|
| 1-7 | Owner notified; cleanup ticket created |
| 8-14 | Manager notified; ticket escalated to high priority |
| 15-21 | Mandatory sprint insertion; renewal requires written justification |
| 22+ | Governance owner review; binding resolution within 5 days |
7. Retirement
Flags automatically move to Deprecated when: at 100% for 30+ days, at 0% for 14+ days, or past absolute maximum lifespan. Cleanup PRs reviewed within 24 hours.
8. Exceptions
Exceptions to any policy require written justification, governance owner approval, and a review date. All exceptions are tracked in the governance dashboard and reviewed quarterly.
9. Metrics
| Metric | Target |
|---|---|
| Flags with valid owner | 100% |
| New flags meeting creation requirements | > 95% |
| Flags past expiration | < 5% |
| Average flag age | < [60] days |
| Cleanup velocity ratio (removed/created) | > 0.8 |
| Teams within budget | 100% |
Measuring governance effectiveness
Governance without measurement is theater. Track these metrics to know whether your framework is working -- and adjust when it is not.
Leading indicators
| Metric | What It Predicts | Measurement |
|---|---|---|
| New flag compliance rate | Future governance adoption | Weekly; CI/CD pass rate |
| Flag creation rate | Future cleanup workload | Weekly; per-team count |
| Renewal request rate | Policy fit (high renewal = timelines too short) | Monthly; per-type count |
| Ownership transfer completion rate | Future orphan count | Monthly; per-event tracking |
Lagging indicators
| Metric | What It Confirms | Measurement |
|---|---|---|
| Total active flag count | Overall flag debt trajectory | Monthly; per-team and org-wide |
| Stale flag percentage (past expiration) | Escalation process effectiveness | Monthly; target < 5% |
| Average flag age | Lifecycle policy effectiveness | Monthly; by type |
| Flag-related production incidents | Safety impact of governance | Quarterly; incident reports |
| Developer satisfaction with flag management | Cultural impact | Quarterly; survey |
The quarterly governance report
Every quarter, the governance owner should produce a report covering:
- Flag inventory summary: Total flags org-wide, breakdown by type and team, net change from last quarter
- Compliance metrics: New flag compliance rate, escalation frequency, budget adherence
- Cleanup velocity: Flags removed vs. created, by team and by type
- Escalation analysis: How many flags were escalated, at which stage, and how they were resolved
- Policy adjustments: Any changes to lifespans, budgets, or processes based on the data
- Risk flags: Any flags identified as potential production risks (e.g., untested kill switches, flags with complex cross-service dependencies)
Tools like FlagShark can generate most of this data automatically by tracking flag additions and removals across pull requests and maintaining a real-time inventory of every flag in your codebase. This reduces the quarterly report from a multi-day audit to a dashboard export.
Common objections and how to address them
"This is too much process"
The full framework looks comprehensive on paper. In practice, the daily overhead for an individual engineer is:
- Creating a flag: 3 extra minutes to fill in metadata (name, owner, expiration, description, cleanup ticket)
- Monthly review: 15-30 minutes per team per month
- Removing a flag: No additional overhead (expedited 24-hour review SLA actually makes removal faster)
The 3 minutes at creation prevents the 2-4 hours of archaeology needed to remove an undocumented, ownerless flag a year later. This is not "too much process" -- it is shifting cost from an expensive, frustrating moment (cleanup) to a cheap, routine moment (creation).
"We don't have enough flags to need governance"
If you have more than 20 active flags, you need governance. At 20 flags, an engineer can hold the full inventory in their head. At 50, they cannot. At 100, the inventory is unknowable without tooling. The right time to implement governance is before you need it -- when the flag count is manageable and the policies are easy to adopt.
"Our engineers will resist this"
Engineers resist governance that slows them down. They do not resist governance that removes friction. The governance framework removes friction in three ways:
- Faster flag removal: 24-hour review SLA for cleanup PRs (most teams currently have no SLA)
- Less ambiguity: Clear ownership means you always know who to ask about a flag
- Less archaeological debugging: Named, documented, dated flags are understandable at a glance
Frame governance as a velocity investment, not a compliance burden: "We are implementing this so you spend less time fighting flags and more time shipping features."
"We tried governance before and it didn't stick"
Previous attempts likely failed because they were implemented as a big-bang rollout without automation. The phased approach (visibility, new flags, existing flags, full enforcement) prevents adoption fatigue. Automation (expiration alerts, dashboard, automated cleanup PRs) prevents the framework from depending on individual discipline.
If your previous attempt relied on manual compliance, it was designed to fail. This time, automate the enforcement.
Feature flag governance is the difference between a team that uses flags as precision tools and a team that is buried under flags they created years ago and can no longer understand. The framework in this article is not theoretical -- it is a distillation of patterns that work in practice, across teams of every size, in codebases of every complexity.
Start with visibility. Audit what you have. Then govern what you create. Then clean up what you inherited. The teams that follow this sequence build sustainable flag practices that scale with their organization. The teams that skip governance build flag graveyards and wonder why everything takes so long.
The framework is here. The template is ready. The only remaining question is when you start.