Progress, Not Perfection

I never would have thought of myself as a perfectionist. For most of my high school and collegiate experience I was content giving my earnest best shot or, for certain subjects, delivering work that was merely perfunctory. I'm not exactly sure when, but at some point over the last 12 years of my professional career, that changed.
Strive for Perfection
I had a lacrosse coach in high school that prefaced a film session with the advice:
Strive for perfection. When analyzing ourselves in game film we should hold ourselves to the highest standard possible.
For anybody unfamiliar with the concept of a film session in athletics, it's essentially like a post mortem or post-action report. You watch what happened in the game with the ability to slow down, replay and mark up the film in order to learn from your mistakes with statements like "This player should have been here at this time", or "Our defense should have done x
when their offense did y
". Film review is a fantastic way to not only learn from mistakes, but also to celebrate what went well. One of the most important lessons I learned from conducting my own film sessions as a high school coach was actually just that: you have to celebrate the small wins alongside the mistakes. Pointing out mistakes is the easy part.
The Upside of Perfection as the Standard
It is really important to know what "great" or "perfect" looks like in any given field. When I cook, I try to find Gordon Ramsay, Jacques Pepin, or various other great chef's take on the dish I'm trying to make before I attempt it. I find that they often have specific techniques and attention to details that make what they cook delicious. I don't want to make a crappy meal that doesn't taste good, I want to make something that I'm proud of. I want to make something that I'm happy to put in front of other people and say:
Look what I did. I made this great thing for you.
The same holds true in software development. Throughout my career I've worked with developers or product managers that amaze we with their work and the results they're able to achieve. When faced with difficult tasks I'd ask myself "How would John, Kyle, or Schyler handle this?" or as a manager trying to navigate a moment of disfunction within my team, "What would Michael do here?".
Having an example to strive for is so important to being, what I think is, a good human. Knowing what "great" or "perfect" looks like is a key element to becoming good at anything. I personally try to ask myself at the end of every day where I fell short, whether I was honest with myself and others, what I need to make amends for, and if I truly gave the day my best effort. If we're unable to be honest with ourselves about our shortcomings and have a higher level to reach for, we are not only stagnant and perhaps ignorant, but also probably discourteous to the people around us that have to deal with and clean up our crap. In order to reach a certain level of skill or aptitude within any given field we need to be able to juxtapose where we currently are, with honesty and transparency, to where we want to or feel we should be.
Ultimately as humans, true perfection is an impossible task though. There's a fine line between holding yourself to a high standard and nitpicking yourself into insanity.
The Downside of Perfection as the Standard
Somewhere in my professional career I got some positive feedback that I was "detail-oriented". Despite my development career beginning as a "script kitty" slinging hacky A/B tests, often breaking tracking or functionality I wasn't aware of, I reached a point where I knew better. I knew what great development looked like. I started being able to find little gotcha's during code reviews that would have unintended, feature-breaking consequences. I was known as the "fixer and finisher" on one team because of my ability to match design specs to pixel-perfection (though I'll admit there was a low bar, one of the other devs on the team was legally blind).
As I grew in my career I leaned into this identity. More and more I'd look back on old code I wrote and say:
Who wrote this crap??? Oh... it was me.
I almost shunned my beginnings. I wanted to be great. I wanted to hold myself to the standard of perfection. I was often nervous or fearful to start building a feature without a perfect architectural plan and sign-off from staff engineers. I started sticking more and more to my comfort zone of problems I knew I could solve and not look stupid by asking a dumb question or admitting I didn't know what somebody was talking about. The field of software engineering is rife with ego and fear, and understandably so. Employers pay for expertise in a technical field, and often title and pay come with greater expertise. The higher you go in your career, the bigger a risk it feels like to admit that you don't know.
For me, this trend led to decision paralysis, and constant overthinking. It wasn't just in software - the nitpicking of myself had bled through to projects around the house, parenting, social interactions, you name it. I would ruminate on my mistakes, and became avoidant of even engaging in any endeavor that I could "mess up". I would nitpick others too. I led film reviews for the high school lacrosse team that I helped coach, and though I tried to find positives the sessions became long lists of all the ways we as a team could do better.
Fast forward to spring of 2024, and a lot of things in my life came crashing down in various ways. I won't go into too much detail right now, I know this post is really in the pits at the moment. They key points are this:
- I was laid of from my job of many years
- I had a relationship of many years fall apart
- It was clear that how I was doing things wasn't working
The good news, after so much crumbled, was that I didn't have much to defend anymore. My ego was already in the gutter. Some of my worst fears had already come to pass.
To Err is Human
I've gotten into stoicism in the last year or so, and there's a lot of wisdom in that school of thinking that helps with dealing with fear, anxiety, criticism, etc. One of my favorites is this, from Marcus Aurelius:
Not to feel exasperated, or defeated, or despondent because your days aren't packed with wise and moral actions. But to get back up when you fail, to celebrate behaving like a human - however imperfectly - and fully embrace the pursuit that you've embarked on.
I've come to realize how glorious it is to try and fail at something you've never tried before. I think the lack of fear of failure is what led to me growing so much in my development career early on. I remember being nicknamed "actual path Jack", because I mistakenly called an absolute path to a file the "actual path". I don't think I had the term for relative path straight either, but the point was that I was wrestling with the concepts and not afraid to try to communicate around them despite not being comfortable with them yet. I had a meme made of me (it was a lighthearted jab in good humor) because I wasn't afraid to ask a dumb question during an all hands meeting:

I've been trying over the last year or so to start stepping into the fear of failure or embarrassment again. The fear of the unknown, the fear of being bad at something. If I want to produce something good, I can't be paralyzed by the future mistakes that I will, without a doubt, make. I've realized that growth is uncomfortable, so in order to grow you need to be out of your comfort zone. It's ok and even good to strive for perfection, but nobody is perfect and at the end of the day, good enough gets the job done. I need to be able to accept myself and my work despite my shortcomings, and then earnestly try to do better on the next go.
The Joy of the Grind
One thing I admire about my mom is her ability to dive right in to a project around the house with almost no idea of all the pitfalls and ways that the project could go wrong. She just goes for it. And then keeps going, and then pulls me in to help her once she's stuck or power tools come into play.
The funny part is, despite the mistakes, frustration, and confusion, together we usually get a pretty good result at the end of the project. Things get messy, there are holes in walls that need to be patched, extra runs to the hardware store, apologies for losing patience and snapping at each other, you name it. As long as we don't quit though, things work out. We learn where the pitfalls are, and we're better for it on the next project. We pick up skills and learn about how things work through the struggle. Without diving in, that struggle that we have to grind through wouldn't happen.
Gordon Ramsay didn't start out at the top of his field. In the kitchen, it usually takes me about 5 attempts to get a dish the way I want it. It takes making mistakes with timing and temperature to know how to get the right consistency of a sauce or the right sear on a piece of meat. As Marcus Aurelius said above, that struggle through failure, learning, not quitting, and growing, is at the heart of what makes life as a human. We should celebrate it.
For any other gamers out there I like to compare this phenomenon to grinding at a quest in a game. Eventually you complete the quest, get to a certain level with your character, or reach some sort of goal that you were driving for for a while. Personally, whenever I reach the end point I was working towards for so long there's only a brief sense of achievement, followed by a longing to go back to the point where I was under-leveled and struggling, or grinding to collect the resource to get the achievement. The joy was in the grind, not the achievement itself. I try to remind myself of this on the daily - if I'm struggling and growing, then I'm living... I'm being a human.
This website and blog took me 3 attempts to get to this point and there's still so much to improve. I have no clue whether I can create content worth a damn, if anybody will read these or take anything away from the posts.
But I won't know if I don't try, and if it doesn't work out I'll probably learn something along the way.
So I'll just not think too much and dive in (thanks mom!). And I ain't quitting.
Cheers,
Jack

Written by Jack Amato
Jack Amato is a web developer with over a decade of experience building software, leading teams, and figuring things out on the fly. He spent several years as a Senior Engineer and Engineering Manager at Angi, and holds degrees in Science and Technology Entrepreneurship from Notre Dame. Based in Indianapolis, Jack balances code with coaching high school lacrosse, playing the cello, and chasing after his two daughters.