Ready, set, FAIL

I was honored with an invite to the most recent Demo Day for the exiting Front End engineering class at The Iron Yard in Greenville today. It was great to be able to go in and experience vicariously that excitement of having your work publicly appreciated for the first time. Grads beamed and lovingly tilted their laptop screens so guests could see their fancy transitions better. Recruiters and startup C-levels meandered table to table to size up the newly-minted grads (weighed, measured and definitely NOT found wanting). Snacks and beers moved quickly, and aspirations even faster.

I had some really great conversations with people who I've known through TIY today that made me reflect on my own experiences. One conversation about different types of stress really resonated with me, and I'd to share a particular insight from my transition as hobbyist to a day-to-day developer. I'd have considered this a "dirty secret" a while back, but I don't think that's a fair descriptor - I think this is something that people come to understand and forget it's not obvious.

It's still unfathomable to me that I'm in such a different place now compared to December of 2014. I'm still progressing, and not nearly where I want to be, but I'm well on the way. In the past month, I've written hundreds of lines of code. I've deployed everything from single-character bug fixes to massive new features, to fanfare and (literal) international appreciation. I've gotten to work from home - literally, to throw on shorts and a tee shirt and sit in my big comfy gaming chair with my playlist blasting, shouting my favorite lyrics while I sling Ruby, AND GET PAID. I've contributed in meaningful ways to a small handful of open-source projects, written some custom apps of my own, and even got my first official freelance project payout.

And here's the reveal: tonight, basking in the afterglow of a great evening with new and old friends, after all the amazing things I've been able to do over the short span of a few months...

I feel like a failure.

Aaand fail.

Here's the "dirty secret": Failure is what drives us as developers. Every impetus for our existence comes from a failure of some sort: a failure to communicate leads to chat clients, a failure of provision leads to disruptive new services, a failure of availability leads to websites (open 24/7 for your needs, no staffing required). Even programming itself is fraught with fail. If everything worked all the time, we wouldn't be needed - IDE's would gather dust, Javascript frameworks would fold in on themselves like rotting hulks of ancient ships on the seafloor, and software engineers would sleep 8+ hours a night (haha to that last one most of all).

Instead, everything around us is constantly failing. And when the call goes out for failure to be addressed, we're able to step forward to help. That means we work constantly in a state of distress - "This is broken and I am fixing it." There's no shame in that - it's a badge of pride! But it's a unique feeling for someone expecting to enter a job where there's a sense of constant relief. We don't earn the right to sit in comfy chairs in our shorts with loud music by doing nothing. We earn that right by existing at all times underneath an overwhelming cloud of failure, waiting to be filtered and fixed, molecule by molecule.

It's important - CRITICAL - at all times to remember that this failure is part of the game. It's tough initially, and it can be head-banging, finger-breaking madness to try and breach the initial failures you experience, but it gets easier. It gets fun. That failure becomes not a blockade to your process but a challenge to overcome.

One of the best pieces of advice I've ever gotten was, I think, not intended to be so profound. Near the end of my time at the Iron Yard we had a short guest lecture on software testing by Joel Taddei, a dad/developer/instructor/all-around decent human person. Midway through the lecture a test failed unexpectedly, and Joel paused for a second. He looked up, laughed, and said "Hooray, we've got a failing test! That's good - it means we're making progress." The idea is that anything functioning successfully for any extended period of time is either failing silently or simply not active. Either way, long-term success is bad news. It means you're not trying, not advancing, not experiencing "the new". I've latched on to that concept and applied it everywhere I can, and it's served me well when I hit these phases where I fear everything will burst apart at the seams.

The key is to remember that, like a test failure, a feeling of failure is just an indication that it's time to refactor. You hold at all times the ability to "go green", with patience and attention and whatever changes you may need. Of course, there's another failure waiting just after that - but if you never saw the red, the green wouldn't feel so good.

New devs, whether you're legitimate newbies or just impostors-in-training, learn to accept the feeling of failure. Sit with it, breathe deeply, and learn to separate "failing to succeed" from "being unsuccessful". Be comfortable with the stress, and spend some time reflecting on how that stress actually prepares you for greatness. And when all else fails, keep this quote in mind:

Even The Machine Fails