I've been freelancing for three years. Full stack work, mostly. iOS apps, web stuff, backend systems. I charge good rates. Clients come back. Projects ship on time.
And I still can't shake the feeling that I got lucky.
Not lucky like "right place, right time" lucky. More like, I keep waiting for someone to notice I don't actually know what I'm doing. That the work that feels obvious to me is somehow not real work. That I'm coasting on confidence and good timing instead of skill.
The thing is, I can't tell which parts are luck and which parts are skill. They're tangled up.
The first client
My first freelance gig came through a friend. I didn't apply anywhere, didn't build a portfolio site, didn't cold email startups. Someone needed help with a React app, I said yes, it worked out. That's luck, right?
But I also delivered. The app launched, the client was happy, they referred me to someone else. I didn't fumble the opportunity. That's skill, right?
Or is it? Maybe I just got lucky that the project was simple. Maybe I got lucky that the client wasn't demanding. Maybe I got lucky that I didn't hit any weird edge cases I couldn't solve.
I can't untangle it.
The pattern repeats
Three years later, it's still happening. A client asks for something I've never built before. I say yes anyway, figure it out as I go, ship it. They pay, they're happy, they come back.
Every time, I feel like I barely made it. Every time, I'm sure the next project will be the one where I get exposed. Every time, it works out.
Is that skill? Experience? Or am I just getting lucky over and over?
The rational part of my brain says it's skill. You don't accidentally ship working software for three years straight. You don't accidentally build a freelance business that pays the bills. At some point, luck runs out.
But the other part, the louder part, says I'm just one bad project away from proving I never knew what I was doing.
The impostor syndrome trap
I know what this is. Impostor syndrome. Classic. I've read the articles, I know the symptoms, I know I'm supposed to recognize my achievements and internalize success.
But here's the thing: what if impostor syndrome is actually useful?
What if the feeling that I might be faking it is exactly what keeps me from getting complacent? What if the anxiety that I'm not good enough is what makes me double-check my work, learn new things, stay sharp?
I've met developers who are 100% confident in their abilities. They're often wrong. They ship broken code, they don't test edge cases, they assume they know better than the user. Confidence without doubt is dangerous.
Maybe the trick isn't to eliminate the doubt. Maybe it's to use it.
What I've learned to do with it
I can't tell if I'm lucky or skilled, so I stopped trying. Instead, I treat every project like I might be lucky, and act like I need skill to back it up.
That means: I overestimate how hard things will be. I test more than I think I need to. I ask clarifying questions even when I think I understand. I assume I'm missing something, so I look for it.
If I'm actually skilled, this makes my work better. If I'm actually lucky, this keeps me from running out of luck.
Either way, I ship.
The uncomfortable truth
I think most developers feel this way. The good ones, at least. The ones who care about their work, who want to get better, who worry about letting people down.
We all feel like we're faking it. We all wonder if we got lucky. We all have moments where we look at our work and think, "I can't believe they're paying me for this."
And maybe that's fine. Maybe the feeling never goes away, and maybe it's not supposed to.
Maybe the point isn't to feel like an expert. Maybe the point is to keep showing up, keep shipping, keep learning, and trust that the results speak louder than the doubt.
Three years in, I still don't know if I'm lucky or skilled. But I know I'm still here, still working, still getting better. And maybe that's the only answer that matters.