RH
Article
(01)

Goodbye to Perfection: How Pragmatism Made Me a Better Developer

Roberto Hernando explains why ditching the quest for perfect code and embracing pragmatism helped him become more productive and happier while coding.

By
380 Views
ProductivityClean CodeWeb DevelopmentPersonal ExperiencePragmatism

The weight of perfection on my shoulders

I remember those nights of cold coffee and bloodshot eyes perfectly, back in my early years as a developer. I was obsessed with the idea that my code had to be a work of art. If a function had a couple more lines than I considered 'elegant,' or if I didn't apply the latest design pattern I'd read in some clean architecture book, I felt like I was failing as a professional. I'd spend hours refactoring code that already worked perfectly, just for the aesthetic pleasure of seeing it 'clean.'


When Clean Code becomes a cage

Don't get me wrong, Clean Code and SOLID principles are wonderful tools, but for a long time, I turned them into my own cage. I’d get frustrated if the business team asked for a quick change to test an idea in production. To me, that quick change 'dirtied' my precious architecture. I was more worried about code purity than the value that code was bringing to the company or the end users.

That mindset led me to a state of constant anxiety. Every time I opened an old repo, I felt a mix of shame and the urge to delete everything and rewrite it 'the right way.' I didn't enjoy the process of creating; I just suffered from not reaching an ideal of perfection that, honestly, only existed in my head and in some theoretical Twitter threads or blogs by gurus who never seem to have deadlines.


The day everything changed: Value vs. Aesthetics

There was a turning point in my career. I was working at a startup where the pace was frantic. We had a critical feature that had to go out in two days to avoid missing an investment round. I wanted to implement a decoupled event system, complete with subscribers, interfaces, and textbook dependency injection. My manager, a guy with way more experience and less technical ego than me, came up and said: 'Roberto, the investor doesn't care if you use the Observer pattern or a simple switch/case. What they care about is that the user can sign up and pay without errors on Monday morning.'

It was like a bucket of cold water, but he was absolutely right. I spent those two days writing functional, robust code, but maybe not 'beautiful' code. And the most surprising thing was that, once launched, nothing bad happened. The system worked, the company got the investment, and I didn't feel like an impostor. On the contrary, I felt useful for the first time in a long while. I had delivered real value in the time it was needed.


Why pragmatism made me better

By letting go of the burden of perfection, I started noticing incredible changes in my work and well-being. First, my productivity skyrocketed. I was no longer stuck for twenty minutes deciding whether a method should be private or protected. I apply the 80/20 rule: 80% of the value usually comes from 20% of the effort.

Plus, my relationship with the team improved. I was no longer the 'code police' in Code Reviews, nitpicking every insignificant detail. I started focusing on what really matters: security, performance, and basic readability. If the code is understandable and it works, it's often enough. Perfect code is the one that gets delivered on time and solves the customer's problem, period.


// An example of what used to keep me up at night
// Before: I wanted a generic abstraction for any type of notification
// Now: I write what I need today, not what I suspect I'll need in two years

function sendNotification(user, message) {
  if (user.preferredMethod === 'email') {
    return emailProvider.send(user.email, message);
  }
  // If tomorrow we add SMS, we'll put it in here.
  // I don't need a NotificationStrategyFactoryInterface right now.
}

What I’ve learned on this journey

I've learned that code has an expiration date. Software is something living and changing. That 'perfect' code you write today will probably be obsolete in six months because requirements will have changed. Therefore, obsessing over a hyper-flexible architecture is usually a waste of time. It’s what we call Over-engineering or 'Gold Plating.'

Nowadays, I prioritize simplicity over technical elegance. I'd rather have code that any teammate can understand in five minutes than one that requires a PhD in design patterns to be modified. I've learned to accept 'technical debt' as a conscious business decision, not a mortal sin. If I know I'm cutting corners to hit a deadline, I document it, own it, and move on.


Final thoughts: Programming for humans

If you're going through that phase of frustration where you feel your code is never good enough, breathe. Nobody writes perfect code. The best developers I know are those who know when to be strict and when to be pragmatic.

At the end of the day, we program for humans: for the user using our app and for the teammate (or our 'future self') who will have to read that code. Being a better developer isn't about memorizing every pattern from the Gang of Four; it's about understanding what problem you're solving and how to do it as simply and effectively as possible. Since I accepted this, I enjoy my day-to-day life much more and, funnily enough, my projects are much more successful. Less ego, more value.

© 2026
Roberto Hernando
|