DEV Community

Lawrie Ella
Lawrie Ella

Posted on

I Built a Feature Flag Tool (Here's What I Learned)

The Problem I Was Solving

As a developer, I was frustrated with existing feature flag tools. For small teams the costs were over the roof, and open-source solutions require self-hosting and complex setup.

I wanted something that:

  • Takes 30 seconds to set up (literally)
  • Costs $0 to start
  • Works with React and Node.js out of the box
  • Doesn't require reading 50 pages of documentation

So I built FlagSwift.

What Makes FlagSwift Different?

1. 30-Second Setup (Literally)

Most feature flag tools require config files, complex SDKs, and reading docs for hours.

FlagSwift is literally:

npm install @flagswift/react-client
Enter fullscreen mode Exit fullscreen mode
import { FlagProvider, FlagClient, useFlag } from '@flagswift/react-client'

const client = new FlagClient({
  apiKey: process.env.NEXT_PUBLIC_FLAGSWIFT_API_KEY,
  environment: 'production'
})

function App() {
  return (
    <FlagProvider client={client}>
      <YourApp />
    </FlagProvider>
  )
}

function Feature() {
  const enabled = useFlag('my-new-feature')
  return enabled ? <NewUI /> : <OldUI />
}
Enter fullscreen mode Exit fullscreen mode

That's it. Feature flags working in production or any environment you set it to.

2. 2-Second Rollbacks (No Deployment)

When something breaks at 3 AM, you don't want to:

  • Revert git commits
  • Wait for CI/CD (10-15 minutes)
  • Hope the deployment doesn't fail

With FlagSwift:

  1. Open dashboard
  2. Click toggle
  3. Feature disabled globally immediately

No deployment. No waiting. Just instant control.

3. User Targeting That Actually Makes Sense

Want to enable a feature for specific users?

// Client-side
const client = new FlagClient({
  apiKey: 'your-key',
  userIdentifier: currentUser.email
})

// Server-side
const enabled = client.isEnabled('beta-feature', {
  identifier: req.user.email
})
Enter fullscreen mode Exit fullscreen mode

Add the email to your target list in the dashboard. Done.

No complicated segment rules. No user attribute schemas. Just email addresses or whatever you want to track your specific user.


Mistakes I Made Building This

1. Setup Time Is Everything

The #1 question was: "How long does setup take?"

If the answer is more than 5 minutes, developers, teams or orgs won't even try it.

I obsessed over this:

  • No config files
  • No environment variables required (optional)
  • Works out of the box with Next.js, Vite, CRA

Result: FlagSwift's setup became our biggest advantage.

Lesson: Developer tools live or die on time-to-first-value.

2. Pricing Kills Adoption

I made FlagSwift free to start:

  • Unlimited flags
  • Unlimited environments

You only pay when you scale to high request volumes.

Result: 10x more signups vs. my initial paid-only model.

Lesson: For developer tools, free tier = trust. Let people try before they buy.

Why FlagSwift Won't Slow Down Your App

Fast by Design

  • Dashboard changes propagate in ~2 seconds globally
  • No CDN delays, no cache invalidation issues
  • Environment isolation built-in

Client Performance

Your app checks flags instantly with zero network overhead per check. Flags are fetched once on load and cached.

Server Performance

Aggressive caching means your server makes ~99% fewer API calls while staying up-to-date.

The result? Your app stays fast even with 50+ feature flags running.

Current Status

  • React SDK: ✅ Live on npm
  • Node.js SDK: ✅ Live on npm
  • Dashboard: ✅ Live at flagswift.com
  • Pricing: Free to start, scales with usage

What's Next?

I'm actively building other SDK:

  • Python SDK (for Django/Flask apps)
  • Go SDK (for backend services)
  • Analytics dashboard (see which flags are actually used)
  • Slack notifications for flag changes

Try It Out

If you're tired of complex feature flag tools, give FlagSwift a shot:

🔗 https://flagswift.com

  • Free to start
  • 30-second setup
  • Rollback any feature immediately

Questions? Feedback? Drop a comment!.


Enter fullscreen mode Exit fullscreen mode

Top comments (0)