Is software development for the creative? What skills and characteristics are considered to be a creative software engineer? As a programmer, how can I improve my creativity? As a leader, how can we encourage and instil creativity in software development teams?
I was recently chatting to a colleague who had just carried out an online presentation on creativity and software development. I personally have made a conscious effort over the years to improve my own creativity skills (and assist others at the same time by including creativity as part of the soft skills evaluated in software development education). In addition, I have been reading many books such as Creative Confidence: Unleashing the Creative Potential Within Us All by Tom and David Kelley and making a conscious effort to apply these methods, tools and techniques in my everyday programming practices. While there is not a lot of research and studies on the topic of creativity specific to software development sector, this article attempts to answer the above questions based on recent research carried out by Groeneveld et al. in their paper “Exploring the Role of Creativity in Software Engineering” in 2021.
A firm grasp of the basic programming commands and structures is required before creativity can take place.
Think of the last time you started to learn a new framework or programming language. Were you able to develop creative solutions before having a basic grasp of the commands? I got involved in PySpark on a big data platform a few years ago. At the very beginning, I was focused on learning the basics of the language, comparing and contrasting it to experiences I previously had with Pandas, SQL and NoSQL. Although during this “learning” phase, many creative ideas crossed my mind, I was not able to implement them for a couple of months, after I had mastered the nuances of the language.
Open-ended questions were cited by Groeneveld as triggering that “spark” in creative persons. Personally, I like to add to this technique all the opportunities we have as software developers to be involved in communicative moments, including code-reviews, pair-programming, sprint reviews and general feedback. These moments present opportunities to learn and improve a software developer’s technical and soft skills, including creativity.
Groeneveld compare legacy code to working on new projects. Surprisingly, some participants in the focus groups for their study mentioned that legacy projects provided more opportunities to develop creative solutions, as the s/w engineer has to battle many limitations and constraints, requiring more creative solutions. Think of memory limitations, limited data structures, less learning resources available, etc, just to name a few.
A developer who needs a resource cannot just execute a RESTful call to extract data from an online API, as it would result in a security and policy breach. These types of constraints require out-of-the-box thinking.
What about when s/w engineers are working on bugs or defects — Would you consider this to be creative or provide opportunities to be creative? Throughout our careers, we don’t always have the luxury to work on greenfield projects, where we can write code from scratch, and end up spending our time or sprints on fixing defects, often created by other developers. Creativity in these bug-fixing contexts is obviously constrained, nevertheless these moments allow us to problem solve and look for creative solutions.
State of Mind
Safe, flexible and interactive environments foster creativity. In Google’s quest to build the perfect team, they found out that:
“In a team with high psychological safety, teammates feel safe to take risks around their team members.”
What time of the day are you most creative? Where are you most inspired? With whom do you interact with when you have an inspirational moment? These are the types of questions that focus on our environment — time, spaces, colleagues, sense of well-being and productivity tools that enhance our creativity.
“People will be most creative when they feel motivated primarily by the interest, satisfaction, and challenge of the work itself — not by external pressures.”
Leaders do have at their disposition a great tool to intrinsically motivate employees called transformational leadership.
Another way to disect curiosity is to measure your willingness to get out of your comfort zone. How often do you turn to the “already-done” when solving a problem, rather than looking at new, different ways.
When was the last time you learnt a new programming language or framework? I recently played around with an esoteric language called LOLCODE.
Tools and techniques are methods that help us foster creativity, both individually and as a team. These traditionally include brainstorming, 6 thinking hats, nominal group technique, mind-mapping and Delphi technique, to name a few.
Online tools nowadays improve productivity and collaboration when carrying out creativity techniques. Think of a remote team, trying to come up with ideas for new features of a website.
Although not directly related to software development, some of my favourite books on creativity processes and techniques include Creative Confidence: Unleashing the Creative Potential Within Us All by Tom and David Kelley, The Right-Brain Workout by Alex Wadelton and Russel Howcroft, and of course, The Design Thinking Toolbox by Michael Lewrick.
I like the comparison of critical thinking and creativity expostulated by James Taylor:
Critical thinking is the ability to clearly and logically consider information that is presented to us. Creative thinking is about generating new, novel, or useful ideas.