As programmers we may feel stuck at times, unsure where to go next, not knowing where to direct our energies. We may get the sense of “been-there-done-that”, feel like we’ve been making all-too-similar programs for our clients and perhaps feel as if the field of software engineering itself has lost its luster amid the voodoo of VC economics and a sea of interminable to-do-list apps. Maybe we are feeling paralyzed because we can’t quite visualize what we want our end product to look like and don’t have a perfect elevator pitch and MVP figured out.
To get unstuck at times like these, we must get back in touch with and embrace that most sacred of human qualities: Ignorance.
In 2012 I read a lovely little book by Stuart Firestein entitled Ignorance: How it Drives Science. Firestein argues rather convincingly that the process of inquiry and discovery is like looking for a black cat in a pitch dark room, all the while not even knowing if there is a cat in the room to begin with. But Firestein is aware that even this metaphor for the unknown falls short. In the actual pursuit of knowledge, answers beget more questions. It’s as if the pitch black room kept eternally expanding.
There was a point in my journey into programming when I realized just how much I didn’t know: a friggin’ LOT. The most motivated (and insane) among us may at that moment simultaneously order 10 more textbooks on Amazon (or raywenderlich.com), sign up for an obscure Coursera technical track, put every Udemy coding course on their wishlist, sign up on HackerRank and promise do a few exercises daily, and start diving into 2 or 3 other programming languages in an effort to stay afloat. This gung-ho salad bar approach can be fun for a while but is ultimately unsustainable in the long term. The rate at which your brain learns has limits and it favors focus and repetition over multitasking and toe-dipping. If you continue trying to fill in all the gaps at once you will likely feel the weight of inadequacy and strain. There are only so many hours in the day and only so many days in your life.
The saner path is to treasure the unknown and realize that you will never know everything. The upside is that you’ll never be bored. Questions are the fuel for discovery and on a human level, collecting knowledge is not the point — even our server farms can barely keep up with that. The point is that we enjoy the process of our growth and make it interesting for US.
The tech industry engages in quite a bit of religiosity and myth-making. “Steve Jobs / Elon Musk / [fill-in-the-blank], was born a genius, knows all the answers to questions we don’t even know we have— he is an oracle.” This is patent bullshit. They are people who know how to ask interesting questions. Invention starts with “What if?”, not with “I know.” Sure there’s more to it than that — one still has to do the hard work to get to AN answer. But if you’re stuck, chances are you’re a victim of a couple of pitfalls:
1 — You’ve stopped asking yourself questions out loud.
2 — You ask good questions but get so caught up in the process of mentally visualizing the perfect answer that it’s keeping you from getting started in the real world.
- OR -
3 — You’re armed with so many questions you don’t know which to address.
I’ll address scenario 1 here and leave the rest for another time. If you’ve stopped asking yourself questions aloud (or in writing), or simply feel you have a dearth of good questions, first do yourself a favor and spend some time contemplating what is important to you, not in terms of things, people, or even goals, but rather in terms of VALUES. Values are things like liberty, wealth, curiosity — principles which existed before you and will be around after you die. They can help you orient yourself, in the same way that a compass can help you orient yourself toward magnetic North. If you have never stopped to think about this, or haven’t thought about it in a while, here’s some clarification and a quick exercise from my friend James Fitzsimmons (he hangs around carnies, ninjas and magicians so he knows a bit about this stuff):
Values in this context means those core principles that you desire to see manifest in yourself and in the world. By taking the time to investigate what your values are, to take the simple action of writing them out by hand and then ranking them from those that are most important to you and identifying the three key values from which your other values develop from you will be better armed to take action in life than nearly 99% of everyone you ever meet.
Here is the most basic exercise for developing your sense of your values.
- Set a timer for 15 minutes.- On a sheet of paper write at the top the question “What are my values?”
- For the next 15 minutes write. Do not take the time to evaluate what you are writing, Simply keep listing the things that you value in life. What do you value in your profession? What do you value in your personal relationships? What do you value in your physical experience? Just keep writing until the time has run out.
- Leave the paper for a time and step away from your writing area. Have a cup of water. Do a simple chore. Get yourself into a different mind set.
- Come back to your list. Read over your entries and see if any values are repeated. Then start to notice which values are of your highest priority and which values are the result of those primary values. You can rank them by numbers if you want, with 1 being most important and 5 being least.
- Keep winnowing down your list until you have a core set of values between three and five items. If you want a particularly powerful technique identify one core value for each of the areas previously mentioned: Professional, Personal and Physical.
- Once you have this core list identified re-write these values on a new sheet of paper an commit them clearly to memory.
Now that you better understand what your values are, or have reconnected with them, do you have a better idea of how to get unstuck? In which ways does the current tech landscape reflect your values? In which ways does it NOT reflect your values? Can you use your technical skill as an avenue to manifest your values in the world? What would the first steps look like?
Now approach the unknown with a barrage of questions. Here are some questions I use to help me get unstuck. Some are loosely adapted from Dr. Firestein, others are my own:
- Is there something I’d like to work on but can’t? Why? Is it due to technical limitations? Money? Humanpower?
- What am I curious about? How can I satisfy my curiosity?
- Surveying the tech landscape, is there a way I can think of to expand its borders? In what respects?
- What is a bit of technology I use everyday that makes me angry? Why? Can I fix it? Can I offer an alternative?
- Is there an app I’d like to recreate? What do I hope to discover by making another version myself?
- What were some of my old assumptions about technology 10 yrs ago or 20 yrs ago? In which ways did things turn out differently? In which ways did they turn out the same? Why don’t we have flying cars yet?
- Where exactly am I currently stuck? What’s keeping me stuck? Project constraints? Self-imposed constraints? Is there a way constraints can be useful to my creative process? How?
- Is there a small problem which I think is solvable but I haven’t tackled? Why haven’t I tackled it? Is it not worth my time? Why?
- Is there a large problem I’d like to solve but seems intractable? Why? What would the first steps look like?
- If I’m interested in a problem that seems massive, is there a way to approach it using a smaller model? Could an app with ten users help me approach a problem millions of people have? Could an app that uses data from my neighborhood be used as a starting point for approaching a global issue?
- Would I like to work on a question that leads to a pretty conclusive and isolated answer (an app that solves a problem robustly without much room for further exploration or refinement), or would I rather work on a question that leads to creating something that’s more open ended and leaves the door open to further questions?
- Is there something no one is measuring yet? Something no one is recording? Something no one is keeping track of? Can I do it? What could I do with that data?
At this point, after embracing your ignorance, assessing your values, and spending time asking some thoughtful questions of yourself, hopefully you and your creative process have become unstuck and you have come up with some interesting first steps to get you going. Or, it is also entirely possible you realized throughout this process that coding is not for you, or is not the best use of your time and passions, and that’s perfectly okay too. At least, now you know yourself a bit better and can focus on what really moves you.
This has been pretty much a pep talk for myself, but if it proves valuable to others as well, then all the better. Comments, critiques, hate mail are welcome.
Happy travels, and thread-safe coding!