DEV Community

Cover image for Perfection Is the Enemy of the Good

Perfection Is the Enemy of the Good

simonlegg profile image Simon ・5 min read

Cover photo by Jonathan Hoxmark on Unsplash

Just over a year ago Dan Abramov wrote an excellent post about all the things he didn’t know and, along with many others, I thought it was incredible. Seeing such high profile person in our industry being so open about this stuff was incredibly refreshing. Unbeknownst to him I had submitted a couple of conference proposals a few months before that, where the aim was essentially the same: “I’m a developer, here are the things I don’t know.” I like that. I always liked hearing from more senior people that they were mere mortals, they were just regular people who know some things and don’t know other things. I’ve always tried to be very open about when I don’t know things, and as I became more senior and more influential in the company I felt it was important to show others that it’s fine. I tended to be the person who would interrupt a meeting (politely) to ask for clarification.

Only yesterday one of my friends reminded me of the time when we both happened to be going to an Elm meetup in London full of very experienced and very clever Functional Programming people and every now and then put my hand up and say “Sorry, I didn’t understand what you meant when you said xyz a second ago” and they would explain it differently and others got involved and it turned into a really great discussion about Elm and FP, everyone was so helpful. When we left my friend said to me, “How do you do that? Just ask questions like that?” I think I was a little taken aback at the time, I went there to learn something and if I hadn’t I wouldn’t have learnt anything.

I’m employed as a “senior” developer, I’ve been a JavaScript developer for coming up for 5 years now and although I’m definitely not the best JS developer around I like to think I’m reasonably competent. So when my sister approached me towards the end of last year to build something for her, I thought “Yeah. I’m not currently flexing my JavaScript muscles in my new job. I’d like to get stuck into a bit of code, and most importantly, I like the idea. So yes.”

The project was essentially a CRUD app, something that, 3 months ago, I almost would’ve argued was the bread and butter of what professional web developers should be able to do. I sort of learnt how to do it with Ruby on Rails when I was learning web development in a bootcamp. At the time I remember thinking I was almost unstoppable after learning it for a week (so some kudos to the people behind Rails). So here I was, a web developer of ~4 years, and I was lost!

I didn’t know what to do. I kind of knew I needed a database at some point but where to start?! I don’t really know about databases, apart from a couple of weeks wrangling Postgres at work and another week back in the bootcamp, I just don’t work with them (Fun sidenote: a production database at my last job is, to my knowledge, still called ”simon-test.” In fact even naming that database was probably one of those weeks. Seriously! I don’t know about databases!) I had all these feelings of inadequacy, I should know about databases, how am I “senior” and I don’t know this? I lightheartedly tweeted about this and over the course of about 3 hours and ~70 tweets Laurie Voss gave me an impromptu database crash course. This was great, I learnt so much and he probably won’t ever know how grateful I am for his help (unless he reads this). I would also urge everyone to go and read it all.

I came out of this knowing a little bit more but I couldn’t shake this nagging feeling of all of the other things I needed to do: Authentication, Performance, Accessibility, Progressive Enhancement. I take a lot of pride in my work, I hate cutting corners and I want to do a good job, I think every site should be secure, fast, accessible, and resilient. To me that’s the bare minimum. And because of all these things, I just found myself getting lost in this world of tech that I’ve often taken for granted. I’ve always had the help and support of ~200 other engineers in my company tackling some of those things. I was trying to run before I could walk; I was learning about Docker, about session tokens and JWTs, I was going to have this amazing serverless architecture that’ll cost me pennies just in case this thing explodes overnight and I end up with thousands or millions (or thousands of millions) of users. I was spending time trying to work out what the most optimal deployment strategy should be so I could just focus on the features!

Eventually it just hit me, “I can’t do this.” I was devastated. This sudden realisation that I can’t do the thing that I would expect was the bare minimum for a lot of developers. That’s not to mention that I had promised my sister; I felt awful!
Since starting my new job I’ve been having pretty major imposter syndrome at the moment and this was simply the nadir, in fact it was one of the reasons why I wanted to do it. I knew JavaScript and so I wanted to write it to prove to myself that I do actually know some things, I needed a win (to tell you the truth, I still do). One day, overwhelmed by this realisation, I actually just sat on my sofa and cried. I was in such an awful place thinking about this failure that had happened when a failure was the last thing I needed. I phoned up my friend because I needed to talk to someone, and they told me everything that I rationally knew; keep it simple, “why do you need a database? put it in a spreadsheet”, “this thing is for you and your sister. Why do you need user auth right now?”. And they’re absolutely right! I knew it as soon as they were telling me. And do you know what my sister and I have right now because of it? Nothing. Because to me, it needed to be “perfect.”

Or at least almost perfect. Who knows, if I get back to it maybe I’ll name the database “simon-test.”


Editor guide
codingmindfully profile image
Daragh Byrne

100%. Just build something as simply as you can. It's the optimal solution for most cases. Pick a web frawework (Laravel, Rails, whatever) and maybe a front end framework and just build it to deploy locally. Don't worry about optimisation, serverless etc and deploy by hand. In a proper team that's well funded that stuff makes sense, but trust me, you'll add it when you need it.

I'm a professional and know how to do all that stuff for my actual job, but I don't have time to run my side projects "perfectly", but they still hum along and nobody dies!

You might be interested to read this:

simonlegg profile image
Simon Author

That’s a fantastic post! Thank you