The Creative Act of Software Development
Recently, my friend @radekmie released a blog post. It described his attempt to improve his problem-solving skills by documenting his dreams. This inspired me to take a different take on the topic and talk about creativity and how our minds work in general.
If this was a YouTube video, the title would probably have to be something like: “The number ONE method to solve ALL problems with just this ONE method!”. However, unfortunately, the human mind is not so simple.
This post does not contain any revolutionary problem-solving methods. Despite this, having a better understanding of how your mind works may just let you know best how to use it in the long term. So if you’re curious, keep on reading!
# What is creativity?
Disregarding programming for a moment, let’s focus on the definition of creativity. According to Wikipedia:
Creativity is a characteristic of someone (or some process) that forms something novel and valuable. The created item may be intangible (such as an idea, a scientific theory, a musical composition, or a joke) or a physical object (such as an invention, a printed literary work, or a painting). Creativity enables people to solve problems in new or innovative ways.
From an artist’s perspective, as described by the legend of the music industry, Rick Rubin in his book “The Creative Act”:
Creativity is not a rare ability. It is not difficult to access. Creativity is a fundamental aspect of being human. It’s our birthright. And it’s for all of us.
And to expand upon it, he says:
Creativity is a way of moving through the world, every minute, every day. Once you acquiesce to the demands of the creative life, it becomes a part of you. Even in the midst of a project, you still look for new ideas each day. At any moment, you’re prepared to stop what you’re doing to make a note or a drawing, or capture a fleeting thought. It becomes second nature. And we’re always in it, every hour of the day. Staying in it means a commitment to remain open to what’s around you. Paying attention and listening. Looking for connections and relationships in the outside world. Searching for beauty. Seeking stories. Noticing what you find interesting, what makes you lean forward. And knowing all of this is available to use next time you sit down to work, where the raw data gets put into form. There is no telling where that next great story, painting, recipe, or business idea is going to come from. Just as a surfer can’t control the waves, artists are at the mercy of the creative rhythms of nature. This is why it’s of such great importance to remain aware and present at all times. Watching and waiting.
# Creativity at work
How can we use this ephemeral definition of creativity to our advantage? How is it that people can consistently be creative? I mean, some professions, especially musicians, are expected to create art on a deadline. Their livelihood depends on this vaguely understood creativity. Can we be creative on demand?
Well, I don’t know, but all the facts point to the answer - yes. One of the best-documented methods of being creative of demand is probably the MacGyver method. The author’s process for writing the ingenious show consisted of the following:
- Write down the problem in detail on a piece of paper.
- Stop thinking actively about the problem and let your mind rest.
- Come back and start writing the solution. Your inner MacGyver will solve the problem for you!
And it’s not just a fluke. In the author’s book, “The MacGyver Secret”, he brings up more examples of people that used the method to their advantage.
There is one crucial thing to understand here. The part of our minds that is best at solving complex problems is the subconscious, not the conscious.
As a developer, have you ever felt stuck on a problem that you couldn’t solve for hours? And the moment you go take a shower and stop thinking about it the solution suddenly appears in your head? That’s your subconscious at work.
# Is the bathroom the optimal workstation?
Perhaps we should just work sitting on our toilets and reap the infinite creativity it brings? Unfortunately, it’s not the place itself that’s magical, but what we do in it. We tend to allow our conscious mind to rest and let our subconscious take over. It’s especially important because both parts of our mind very rarely work at the same time.
Our brain can be compared to a big intertwined network of things. Every piece of memory, knowledge, and experience that we’ve accumulated, lives somewhere in our minds. So what is the subconscious exactly (not to be mistaken with the unconscious)? Unfortunately, it still cannot be fully explained by science. There are 3 important things we know for sure though that I would like to focus on:
- It cannot be easily “summoned” at will by everyone.
- It has better access to the data in our minds.
- It is much better at solving complex problems than our conscious.
Whenever you are not occupying your brain consciously by actively thinking, your subconscious takes the lead and starts making connections in the networks of your mind. If you have enough information in your network, it may just be able to create a connection that allows you to solve the problem at hand.
The more data you have in your network and the better you are at leveraging your subconscious, the better you can get at problem-solving. This is why it is crucial, to be learning systematically. Especially for us, developers.
# Expanding your network
There is one important thing about this that tends to get overlooked. It is branching out into different domains. Some of the most interesting ideas appear when you use your knowledge from different domains.
You should try to pick the ones you are interested in and passionate about. This way, it’s extra effective because it also serves as a motivator since you’re learning while hopefully having fun.
As a fun exercise, try writing down 5-10 things that you are genuinely curious about. They do not need to be related at all and can be as small or as big as you want, just be specific. According to “The Art of Impossible” by Steven Kotler, intersections of these things are domains where your passions truly lie. These places are the most likely to motivate you the most and best leverage your knowledge and skills!
There is a multitude of examples where applying this so-called peripheral knowledge has led to breakthrough innovations. One of the most outlandish ones I’ve heard is Reebok. They created the pump basketball shoe by combining conventional shoe design techniques with medical device technologies, including inflatable splints and intravenous bags.
Another one is Miles Lowell Edwards, who was an engineer who worked at a pump company. He later applied all his engineering knowledge to invent … the artificial heart valve. He reasoned that the heart was basically a pump so he pursued his train of thought that later revolutionized cardiac surgery.
And to further get my point across, a quote from Rick Rubin:
To vary your inspiration, consider varying your inputs. Turn the sound off to watch a film, listen to the same song on repeat, read only the first word of each sentence in a short story, arrange stones by size or color, learn to lucid dream. Break habits. Look for differences. Notice connections.
# The creative side of writing code
Is programming a job that requires creativity or not? Well on a surface level, you may say that it isn’t. For the most part, it requires a lot of technical and scientific knowledge. However, this gets more interesting the higher up the seniority ladder we look.
Have you ever been stuck on a problem that no amount of Googling or research could solve? A problem so similar to the one all the other people are having but just a little bit different enough to not be solvable by all the solutions you can find on the internet.
This is where higher seniority developers are expected to somehow solve them or propose an alternative despite that fact. Whether it be by a clever workaround, a hack, diving deeper into the cause of the problem, etc. No I do not approve of lazy hacks instead of proper solutions . The possibilities are endless, which is where creativity comes into play. Different problems may require vastly different solutions. Not necessarily only code-related problems. Sometimes you may have issues on the process level, or the management level.
- Planning running too long and people complaining?
- Retrospectives having disappointing engagement?
- Developers not feeling like they have enough autonomy?
- Marketing strategy not bringing the results you expected?
- Sprint goals constantly not being completed?
These times too you may need to get creative to figure out what works best for your project. Being able to come up with some kind of solution no matter the situation is where you can notice the creative people at work the most.
Apologies if you’re bored by all the quotes, but here is the last one to cement what I’m trying to convey to you. Steve Jobs on creativity:
Creativity is just connecting things. When you ask creative people how they did something, they feel a little guilty because they didn’t really do it, they just saw something. It seemed obvious to them after a while. That’s because they were able to connect experiences they’ve had and synthesize new things. And the reason they were able to do that was that they’ve had more experiences or they have thought more about their experiences than other people. Unfortunately, that’s too rare a commodity. A lot of people in our industry haven’t had very diverse experiences. So they don’t have enough dots to connect, and they end up with very linear solutions without a broad perspective on the problem. The broader one’s understanding of the human experience, the better design we will have.
# Getting unstuck
Now that we more or less know how our subconscious works, how can we use it to our advantage? Fortunately, it’s not rocket science. Unfortunately, it’s rarely common practice. Sometimes impossible to apply during a typical workday too (although “The MacGyver Secret” also gives some workarounds for that too).
It boils down to this: whenever you’re stuck on a problem for too long, take a break. Take a shower, have a walk, have a nap. What’s crucial here is to stop thinking about the problem. Activities that include some kind of physical aspect work the best. You need to stop occupying your mind with your conscious. Do whatever helps your brain to relax and “turn off”.
As a last resort, you could also work on something else and come back to the issue the next day. If you’d like, you could also try applying the MacGyver method. Write down your problem on a piece of paper and start writing the answer after you rest.
# Getting creative
Thinking outside the box is boring. Thinking inside the box and being able to solve your problems with constraints is where it gets interesting. In commercial projects, the constraint is most often either time or money, or both. This is unfortunately often accompanied by stress. However, if you’re able to fight it back, times like these are where you can really shine as a developer.
Having an infinite amount of time to deliver something is easy—simple trial and error. Having a time constraint though is where you will need to start thinking about how to do it. Consider tradeoffs. For example:
- Cost vs performance.
- Reliability vs scalability.
- Security vs flexibility.
Implement something in a way that does not become a bad tech debt for your project.
# Getting creativer
Other than broadening your knowledge and learning how to better control your subconscious, try to expose yourself to the thoughts, challenges, and methods of others! For example:
- Read the source code of repositories for tools that you use or you are curious about.
- Read issues/pull requests/discussions on those repositories. Try to understand what kind of challenges people are met with.
- Get in touch and talk with other people about different topics.
- Work on open-source projects.
- Start a new side project and never finish it and use new tools.
- Browse social media in moderation and see what other developers are working on.
Another fun way to strengthen your creativity muscles could be playing CodinGame. A lot of the puzzles there require unconventional thinking due to the imposed constraints. This, combined with the fact that you will be able to see solutions from other people and in other programming languages, makes it a great platform to spark your curiosity!
And remember, all this work is to help you grow long-term. Try to remember all the times when a random piece of information you learned years ago popped into your mind and helped solve a problem. That is the subconscious at work, being creative, making connections in your mind. Every new experience, piece of content that you absorb, every person you meet, and every problem you solve is valuable even if you never consciously notice this.
# Conclusion
So to sum up, there are a few actionable things I would recommend to, well, everyone. But since this post is primarily targeted towards developers, I’m going to say that.
- Take care of your mind. Sleep a healthy amount. Practice mindfulness.
- Cultivate your knowledge and experience.
- Take a break if you’re stuck on a problem for too long.
With this post, I’ve only scratched the surface of the iceberg that is creativity and productivity. I hope I’ve managed to plant a few seeds of curiosity in your subconscious to pursue this knowledge more in-depth on your own.
And now back to you - if you know of any breakthrough innovations, creative minds, or applying peripheral knowledge and creative problem-solving in practice in the world of programming and web development - I’d be curious to know!
And to any employers out there, the optimal work schedule for developers may just be 4 hours before and after sleep. I hope I’m not going to revolutionize anything by accident here.
# Further reading
- 📝 The original post by @radekmie that inspired this post.
- 📗 “The Creative Act: A Way of Being” by Rick Rubin. Great book if you’re interested in the artistic side of creativity.
- 📗 “The Art of Impossible: A Peak Performance Primer” by Steven Kotler. The book focuses on productivity but has plenty of information about how to use our minds to achieve great things. Focuses on scientific and proven methods.
- 📗 “The MacGyver Secret: Connect to Your Inner MacGyver and Solve Anything” by Lee David Zlotoff. If you’re interested in how to apply the MacGyver method.