DEV Community

Leena Malhotra
Leena Malhotra

Posted on

The Pull Request I Almost Didn't Submit

Three months ago, I stared at a diff that would save our team maybe two hours a week. The code was clean. The tests passed. The implementation solved a real problem we'd been griping about in standups for months.

I closed my laptop without submitting it.

Not because the code was wrong, but because I'd convinced myself it wasn't good enough. Not because it would break anything, but because I couldn't shake the feeling that someone else would have done it better. Not because it didn't work, but because I was terrified of the conversation that might happen in the comments.

That pull request sat in my local branch for three weeks while I "refined" it. Which really meant I rewrote perfectly functional code because I was paralyzed by the possibility of imperfection.

The Perfectionism Tax

Here's what nobody talks about in our industry: the hidden tax we pay for perfectionism. Not just the obvious costs like delayed features or missed deadlines, but the deeper cost of training ourselves to be afraid of our own contributions.

We've created a development culture where the fear of submitting imperfect code outweighs the value of solving actual problems. Where the possibility of critique in a pull request review feels more dangerous than leaving broken workflows in place. Where we'd rather endure inefficiency than risk the vulnerability of putting our work up for scrutiny.

I've watched senior developers rewrite working solutions five times before submitting them. I've seen brilliant engineers avoid contributing to open source projects because their code "isn't polished enough." I've participated in teams where people would rather suffer through manual processes than suggest automation that might not be architecturally perfect.

This isn't quality control. This is quality paralysis.

The Impostor Code Review

The conversation in my head before submitting that pull request went something like this:

"What if there's a more elegant solution I haven't thought of? What if I'm missing an edge case? What if the senior dev sees this and realizes I don't actually understand the codebase as well as they think I do? What if this breaks something in a way I can't predict? What if there's already a library that does this better? What if I'm solving a problem that doesn't actually need solving?"

Every developer reading this recognizes that internal monologue because we've all had it. That voice that turns code review into psychological warfare, that transforms collaborative development into a performance of competence we're terrified we can't maintain.

But here's the thing about that voice: it's not protecting you from failure. It's protecting you from learning. Every pull request you don't submit because it's not perfect is a conversation about your code you'll never have, feedback you'll never receive, and improvement you'll never make.

The AI Crutch Dilemma

The rise of AI coding assistants has made this perfectionism tax even more expensive. Now we don't just have to worry about whether our code is good enough—we have to worry about whether it's "too AI-assisted" or "not AI-assisted enough."

I've seen developers spend longer editing AI-generated code to make it look more "human" than it would have taken to write it from scratch. I've watched teams debate whether using an AI script writer for automation scripts somehow diminishes the authenticity of their contribution.

We're caught in a weird liminal space where we're simultaneously afraid that AI will replace us and afraid that using AI makes us replaceable. So we either avoid it entirely (and fall behind) or use it secretly (and feel like frauds).

Neither approach solves the actual problem: building software that works and serves people who need it to work.

The Code That Ships vs. The Code That's Perfect

The pull request I almost didn't submit eventually became one of the most-referenced pieces of automation in our codebase. Not because it was architecturally brilliant, but because it solved a real problem that people were experiencing every day.

The function was maybe 50 lines of Python. Nothing fancy. It automated a manual data validation process that was eating up everyone's Friday afternoons. The kind of script you could write in your sleep, but somehow I'd convinced myself it needed to be enterprise-grade before it was worth sharing.

Three months later, six different developers had built on top of it. Not because the initial implementation was perfect, but because it was there. Because it worked. Because someone had been willing to submit functional over flawless.

The most valuable code isn't the most elegant code. It's the code that exists.

The Collaboration We're Avoiding

Code review isn't just about catching bugs—it's about distributed learning. When you submit a pull request, you're not just asking for feedback on your solution. You're starting a conversation about the problem itself. You're inviting other perspectives on approaches you might not have considered. You're contributing to the collective intelligence of your team.

But we've transformed this collaborative process into a performance anxiety nightmare. Instead of "Here's my approach to this problem, what do you think?" it becomes "Please validate that I'm worthy of being here."

The AI debate bot can generate perfect arguments for any technical decision, but it can't replace the messy, human process of working through problems together with people who see different angles than you do.

The Pull Request Philosophy

Submit code like you submit ideas in conversation—not because they're perfect, but because they're worth discussing.

Your pull request doesn't need to be the final solution. It needs to be a good enough solution that moves the conversation forward. It needs to work well enough that people can build on it, critique it, or replace it with something better.

The worst pull request isn't the one with imperfect code. It's the one that never gets submitted because someone was waiting for perfect code.

The Compound Interest of Imperfection

Every pull request you submit, regardless of how imperfect, teaches you something about your codebase, your team, and your own blind spots. Every piece of feedback you receive makes your next contribution better. Every conversation in the comments expands your understanding of the problem space.

But this compound learning only happens if you're willing to be imperfect in public. If you're willing to submit code that works but might not be optimal. If you're willing to start conversations about solutions that aren't fully baked.

The developers who grow fastest aren't the ones who submit perfect code. They're the ones who submit working code and then incorporate feedback to make it better.

The Framework for Functional Courage

Here's how to break the perfectionism cycle:

Start with "Good Enough, Ship It" Logic: If your code solves the problem and passes basic tests, submit it. Don't let perfect become the enemy of functional.

Treat Reviews as Learning, Not Judgment: Code review is education, not evaluation. Every comment is data about how to improve, not evidence of inadequacy.

Use AI as a Research Assistant, Not a Crutch: Let AI help you explore approaches and catch obvious errors, but don't let it replace your own thinking or problem-solving process.

Focus on Problem-Solution Fit: Ask whether your code addresses the actual problem, not whether it's the most elegant possible implementation.

The Meta Pull Request

The deeper issue isn't just about submitting code. It's about submitting yourself—your ideas, your approaches, your attempts at solving problems—to collaborative improvement.

We've built careers on the assumption that competence means having all the answers, when the reality is that competence means being willing to work through problems with other people who might see solutions you missed.

The pull request you're afraid to submit isn't really about the code. It's about the conversation. It's about being willing to say "I think this might help" instead of waiting until you're certain it's perfect.

The Diff That Matters

The most important pull request you'll ever submit is the one where you decide that contributing imperfectly is more valuable than not contributing at all.

Your code doesn't need to be perfect. It needs to be present. Your solutions don't need to be optimal. They need to be honest attempts at making things better.

The best developers aren't the ones who never submit bad code. They're the ones who submit working code and then collaborate to make it great.

Stop waiting for perfect. Start shipping functional.

The pull request you're afraid to submit might be exactly what your team needs to move forward.

-Leena:)

Top comments (0)