Recently I have been very fortunate to meet people who are getting started in software development or seriously considering it. Some have just graduated, others are in their first job, others are still going through a boot camp. I love hearing about their experiences and how they intend to utilize their skills. Maybe the deck is stacked because of the people I network with, but none of these starting software developers say “it’s just a job.” They all have dreams, and I love connecting with people who take their dreams and summon the creative power to make them real.
As we talk, different issues frequently come up — and I thought I would compile (haha) these ideas into several posts: Tales From The Cache.
I have been developing full time for over ten years, and I have had a lot of good and bad experiences that have crafted my perspective. My perspective is not confined to software development, it captures ideas that echo across the rest of my life too. Let me know if you think these hold true in your own experience.
Tales From The Cache: Not Quitting
I used to work for a startup at Rev1 Ventures, a great facility and venture capital firm that hosts a number of startups and independent contractors. I loved the kindred spirit and energy we all shared, each of us working on something with hopes of what it would someday be. Whenever I needed a break I took a walk around the building, passing the windows of the other startups. One of them had a sign posted on their wall from Walt Disney:
“The difference between winning and losing is most often not quitting.”
I love that quote. While it seems so simple, it’s only simple in thought. In actual practice, it is profoundly difficult. “Don’t give up” sounds like uninspired advice, but when I’m in the middle of a shit storm it turns into the Nicene Creed.
For example, one night I was driving back to Columbus from my grandmother’s, and I found myself in a terrible snow storm. She lives in Cleveland, so the lake effect can create really treacherous conditions. I wanted to pull over in a driveway or ditch, but I knew I would be stuck. The worse the storm got, the less control I felt over my car, and the more I fully expected to end up in a ditch or accident anyway. I was certain that I was not making it home that night, and I wanted to pull over just to end the anxiety. But I kept telling the part of my mind that was screaming — “focus on the next ten meters. If I go off the road — which I fully expect — then I go off the road. But don’t make it happen. Don’t choose it. Focus on the next ten meters.”
Four hours later I was home. I made it, taking ten meters at a time.
And that’s what I find the best developers do. They don’t necessarily know more than other developers, but for sure they don’t give up. They don’t pull over. They strap themselves in for the ride and keep driving, ten meters at a time. When faced with not knowing what to do, they don’t respond with “then I can’t do anything” but instead “then I’ll try anything.” Little by little, they figure things out until they’ve gone the distance. Everyone regards them as the experts, but most often they are just the most tenacious. They understand the difference between knowing how to solve a specific problem versus knowing how to problem solve. These are my role models, the developers I respect the hell out of and inspire me to keep taking the next ten meters.
I’ve been working on a side project that at multiple times has had me at my lowest. I’ve burnt entire evenings trying to get simple things to work, and they simply wouldn’t. Despite reading the documentation and all the blogs I could find, I began to seriously believe “oh my god, this is it. This is really my limit. I’m not capable enough to finish this.” And despite my despair, after hours and hours, I kept trying one more thing and it suddenly worked. Sometimes it’s intentional, other times it is not.
For instance, I was trying to implement a plugin for third party authentication within a mobile app using a relatively new framework. I spent a week beating my head against the wall getting the same error over and over. I could recite it verbatim from memory. Finally, I decided I would try directly reaching out to the author of the plugin. Preparing to load it to GitHub to share it with him, I transferred my code over to a new project, gutted out my proprietary logic, and then compiled. Because it was a brand new project, it pulled down a fresh version of the plugin and built from scratch.
And suddenly, it worked.
So I went to my original project, deleted the plugin, re-downloaded it, and had the whole project rebuild from scratch.
It worked again.
Something had gone wrong in the initial installation. Something was corrupted. After the flood of elation and subsequent celebration, I realized that this was a situation where I didn’t necessarily need to learn more or have more experience. The only thing that got me through was not giving up, and in trying something new by reaching out to the other developer, I accidentally fixed what was wrong.
I also realized that digging into the guts of the code and configs, reading blogs and documentation, teaches a lot in and of itself — even if it doesn’t solve the original problem. It expands the breadth of my knowledge and experience and leaves me with a toolbox of things to try next time.
As I write this, I realize I make it sound like it is a pleasant jaunt through the land of mischievous errors. Make no mistake, this is all hindsight. When I am in the middle of encountering error after error, I am in Dante’s innermost circle of hell. When I find myself there, the best thing I can do is take a walk. Or any kind of break. Anything that puts my mind somewhere else and lets it back out of the ruts it has been spinning its tires in. Then I start fresh with a new idea, or a new way to find a new idea. I take what I can get. Ten meters.
I have a range, a window of capability. On one side of the window are things that are easy for me, and on the other side are things that are hard for me, and everything I do falls somewhere in this window. It’s my opening to the rest of the world. My view to it. My access to it.
My goal for myself is to always keep widening this window, so that things that used to be hard become easy, and the new things I find hard to do used to seem impossible. As I widen the window, I see more of the world and can interact with more in the world. As a developer and as a person overall, there will never be a day when I or anyone else should ever say “everything is easy.”
I think that if I only opted to do easy things, then it would work the opposite. My window would get smaller, and then easy things would get harder, and hard things would become impossible. Doing only easy things would cause me to atrophy.
So it’s very important to me to keep challenging myself. Every time I feel nausea, dread, or anxiety as I stare into the next obstacle — I force myself to keep going ten more meters.
But it’s hard, and there is an ever present thought to quit.
The thought doesn’t always come dressed wearing a sash that has the title “quitter” emblazoned across it. It dresses itself up. Sometimes it acts all relatable and understanding. “You need to wait for the right time, and this just isn’t the right time.” “You gave it a good try, no one can blame you.” “You’ve earned a Netflix binge,” and then peppers the buzzword “self-care” in there somewhere. Other times the thought dresses up in full SWAT gear trying to find that piece of me that believed I could do it. “I’m going to take that son of a bitch out. He’s a dreamer, and dangerous. He’s going to get us hurt.”
But I have to hold my breath and let the thought pass. Mastery comes after a myriad of mistakes. Even the world heavy-weight champion in boxing steps out of the ring bloodied. Life is not a victory march. I like how Hemingway put it: “A man can be destroyed but not defeated.”
Just ten more meters.
As I have become more resourceful and developed my own strengths, I compare myself against other developers less and less. I still learn from people all the time, but there is less insecurity about my own place. It reminds me how Stephen King in “On Writing” talks about how young writers initially copy their favorite authors — and he acknowledges that’s necessary to eventually find your own voice.You just keep going at it, and soon you find that you’ve made your own way.
The side project I mentioned earlier has matured to the point where I have it deployed to the Google Play Store in a private testing state. It calls out to a backend server hosted on AWS, utilizing a technology stack that was new to me this time last year. It’s not done yet, but it’s closer and closer. The ten meters are adding up, and I am really excited. For as low as some moments are, there are others of pure triumph.
So, stick with it. Whatever you’re fighting through — programming or anything. If it’s important to you, if it’s the dream — go the next ten meters. There is nothing wrong with you just because the road is difficult. You can’t build muscles without first damaging them — so when you feel sore, strength is coming. When foresight fails and you don’t know what to do, hindsight is your best friend. Try everything, then see what worked.
Go the next ten meters, and be surprised how far you go.
Like Persius said: he who endures, conquers.