A coworker and I have been working crazy hours since March on a huge new product feature - him on Android and myself on iOS. Quite frankly, it's maybe the best work we've done in our careers. And work I, at least, wasn't sure we were even skilled enough to pull off. When we first pitched it to the client, we asked for eight weeks of uninterrupted dev time to build an MVP. They gave us five.
But we did it. And since then, it's been layering on more complex interactions, polishing, and performance improvements.
Yesterday we were wrapping up code review of a bunch of new math in my office. He was surprised when I mentioned that on my todo list was to go back and update some earlier code to use the formulas we had just gone over. He thought I had always been using this more performant method.
I told him:
I cheated back in April when I first wrote this. I was too scared of the math to try and do it the right way.
I didn't know enough about it to be scared.
It was a throwaway comment - more of a joke, I think. But it struck me and stuck with me the rest of the day, and now I'm writing this post.
Is this what the old cliché "ignorance is bliss" means?
I don't know, but it made me think back to past projects I've built. Some that succeeded and others that failed spectacularly.
For many of the successful ones, I think his observation was spot-on. I don't know if I would even have attempted the work if I had had enough experience to know what lay ahead.
On the other side, I might have avoided some of the lowest points in my life if I had been more attuned to knowing what I didn't know.
Reports that say that something hasn't happened are always interesting to me, because as we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we do not know. But there are also unknown unknowns—the ones we don't know we don't know. And if one looks throughout the history of our country and other free countries, it is the latter category that tend to be the difficult ones.
When we started on this project months ago, there were plenty of known unknowns we knew we'd have to face, and we've worked with the design and product teams ever since to resolve.
But there have also been many staggering unknown unknowns that we never considered. Some we've gotten past, while others have morphed from tickets, to sprints, to their own epics.
If he and I had predicted these challenges upfront, I'm not sure if we would have pitched the work at all. But we missed them. And now I think that's a good thing. Because, as I said above, unfinished loose ends or not, we now find ourselves mere weeks from shipping the best work we've ever done. (We called our feature work this Summer "pure resumé fodder.")
So now, I see the two sides as a balancing act.
Early in my career (and even before I had a career), I'd jump into a new project without any hesitation or thought given to how big of a challenge it might be. Or if I was even capable of doing it.
That's a good thing, right? Challenging yourself is the best way to grow. And how many incredible leaps forward in our industry would never have happened if everyone let self-doubt and worries block them from even starting?
But now that I'm into the middle(?) of my career and leading a team of (mostly) younger developers, I find myself looking at the new features and challenges on our roadmap differently than I did before. Am I more cautious? Timid? Wary of wasting time?
Whatever the reasons, as I wrote about in Fear and Light, I need to remind myself to get out of my head, out of my own way, and look to my coworkers to remind me to hold onto that optimistic approach to difficult problems where anything is possible.