Learning from Google's Research into Creativity in Software Engineers[Storytime Saturdays]
Exploring the relationship between creativity and developer productivity
Hey, it’s your favorite cult leader here
On Saturdays, I will cover stories/writeups covering various people’s experiences 📚📚. These stories will help you learn from the mistakes and successes of others. These stories will cover various topics like Leadership, Productivity, and Personal/Professional Development. Use these to zoom ahead on your goals 🚀🚀
To get access to all my articles and support my crippling chocolate milk addiction, consider subscribing if you haven’t already!
p.s. you can learn more about the paid plan here.
Developer creativity is a criminally understudied field.
However, to unlock peak performance in your teams, higher creativity is a must. Better creativity in software engineering can help you solve difficult problems, redefine problems to cut costs, reconstruct existing solutions to make them more readable, reduce employee turnover by helping work feel less monotonous, and much more. For today’s article, we will be reviewing “Creativity in Software Engineering”, written by Google’s Engineering Productivity Research team. This paper shares findings from their study exploring how software developers define creativity. We will cover its most striking findings and build upon them with a discussion of how tech teams can foster an environment to encourage creativity.
With the recent changes in the ways we work, from new hybrid models to the rise of artificial intelligence (AI), there is an increased attention on creativity in the workplace. As software engineering continues to evolve, it is essential that we consider creativity as a core aspect of the developer experience and ensure that we are building tooling and processes to support it.
The goal here is not the creation/identification of individually creative individuals (which is what most research on creativity focuses on), but a study of how we can design our processes/developer experiences to institute a culture of creativity throughout the company. If you are looking for a more individualized perspective on how software engineers and how you can become great software engineer, you would love our writeup on Microsoft’s excellent research, “What Distinguishes Great Software Engineers?”
PS: We have started customized group discounts for companies looking to thrive in the tech industry. You can purchase group discounts for your entire team/organization at significant savings to you (up to 80% off). Reach out to me to discuss the next steps
Understanding Creativity for Software Engineering
To build systems that encourage developer creativity, it is important to first understand how developers define creativity. The researchers conducted various interviews to get an understanding of this topic. Here is what they learned, “At a high level, our analysis of the diary study and follow-up interviews identified three key themes.
Collaboration and brainstorming foster creativity among developers.
Regardless of working individually or in a group, problem-solving by exploring a solution space through learning and exploration sets the stage for creativity.
Ultimately, clever reuse and recombination of existing code in useful ways are the primary attributes of creativity in software engineering.
Based on these findings, we consider creativity in software engineering to include problem-solving that emphasizes reusability and usefulness over originality.”
The last line is pretty interesting, b/c it goes against how most of us weigh novelty highly in how we define creativity. However, keep in mind software engineering is primarily a team sport, and we build solutions that will be used and modified by other people (the aforementioned MS paper stresses accounting for the future very highly). Novel solutions can get in the way of this collaboration since they make your work harder to understand and modify. As the saying goes, “Clever code is bad code”. Somewhat counter-intuitively, “clean code is code written in a way that other developers (even those with minimal context) have an easy time reading through the code base and extracting the key ideas from it.” Novelty, especially when it leads to a complicated solution, directly goes against this.
Adjusting behaviors to account for future value and costs- Good developers are able to create solutions that maximize the current value of their work, in a way that is able to account for the future. Remember how I always talk about how developers need to understand economics to be amazing? This paper also mentions understanding economic concepts like Risk and Return.
That’s not to say that all originality is bad. There is one particular kind of original thinking, that developers really prize. And that is the linchpin of developer creativity: creative developers combine familiar ideas in new ways. As opposed to building something radical, a highly creative developer would prioritize taking a step back to reframe the problem in simpler terms. All of what we’ve discussed is encapsulated by the following quote from the paper-
“Overall, developers emphasize the importance of future usage of their designs when asked about creative moments in their day. Thus, while novelty plays into developers’ definitions of creativity, novel or clever reuse is more critical. This includes reuse by team members or envisioned downstream usage of their software products. This aspect of reuse in a developer community is a specific justification that developers give for not considering themselves to be “creative” according to more mainstream definitions that emphasize novelty. Many developers we interviewed differentiated their work from artists in that they—unlike artists—were not focused on being novel or original. On the contrary, overemphasizing clever designs or originality in code was seen as a negative, sometimes referred to as snowflake code.”
This is one of the reasons why having a strong foundation of the basics is so important. Deep, specialized knowledge is important but it can form a strong barrier to entry that limits how easily someone can modify/interact with your work. Basics generalize better and are easier to explain. Engineering blogs are a great example of this. Once you’ve read a lot of them, you will see that there are a lot of recurring tools/techniques that solve recurring challenges. There’s a strong 80-20 nature to software engineering- where 80% of the problems you come across can be solved by 20% of the techniques.
“I think the creative part in the development stage is when you hit snags that you’re maybe unaware of when you’re first designing the project. And then you have to figure out ways to resolve those within the framework that you’ve already set.”
-One engineer explaining when they feel creative
So how can we develop an environment of creativity for software engineers? To discuss that, we first need to understand what drives developer creativity. Let’s discuss that next.
The 2 most important variables for developer creativity
Developer Creativity lives and dies on 2 important hills- collaboration and learning. Firstly, creativity is helped through brain-storming sessions. As one engineer put it, “All of the discussion happens on chat now, rather than in meetings or just bantering in the office. This has caused a lot more cross-pollination in this brainstorming phase because if it’s in chat, despite being an ocean apart, we’re all talking about the same problem.” Chat brings 3 distinct advantages over traditional communication protocols:
Asynchronous- Allows people to engage with the topic when they want.
Concise: A blessing and a curse of speech is that it is much easier to ramble on (as someone who is both a writer and YouTuber, people are a lot less forgiving of fluff in written format). Writing is much more concise, which makes it easier to learn what’s happening.
Searchable: It’s very easy to search through text to find what you’re looking for.
Of course, the more interactive and meandering style of speech has its own place (socialization, ideation, more exploration), so it’s unwise to eliminate that. The best is to have a time and place for both. However, in my experience, teams more often than not have underutilized the strengths of asynchronous communication.
The other pillar for fostering creativity is to have an environment that encourages learning. This can be done by budgeting a certain percentage of your employee hours as a free learning assignment, where they have to explore their interests and share what they learn regularly. This doesn't even have to be tech-related (there is a lot of value in broadening perspectives by learning about different fields). This can have the added benefit of helping you get a deeper understanding of your developers in terms of their strengths, what makes them tick, and their inclinations.
Knowing that, how can we improve our developer experience to encourage creativity? Let’s delve into some actionable steps.
Building more Creative Developer Teams
Here's how you can improve developer creativity in your teams:
1. Encourage Knowledge Sharing
Knowledge is the foundation of clever reuse (can’t reuse something effectively, if you don’t know about it). Foster a culture where developers readily share successful code snippets, design patterns, and their insights into the team's codebase. This will enable better peer-peer learning, which has the added benefits of improving team cohesion. Consider investing into:
Internal code libraries: A well-maintained repository of reusable modules and functions. This is a great motivation for people to get in on the knowledge-sharing action.
Knowledge-sharing sessions: Encourage presentations of "lessons learned" on projects. How were existing components leveraged creatively?
Documentation emphasis: Reward clear coding practices and commenting. This makes existing work more understandable for future adaptation. If you’re looking to improve your documentation, check out our guide to better documentation here.
2. Cultivate a 'Remix' Mentality
This one synergizes well with Google’s findings about developer creativity. Instead of building things from scratch, emphasize how existing solutions can be creatively adapted to meet new challenges. Frame challenges as:
"How might we adapt this pattern/component for this new use case?" This focuses the team on finding clever solutions within established building blocks.
Recognize successful reuse: Celebrate when a team member successfully adapts existing work to solve a problem. Let their work become a new knowledge-sharing opportunity. A kind word and social recognition are both extremely powerful motivators.
3. Emphasize Experimentation (and Embrace Smart Failure)
Finding clever ways to reuse components often means trying different combinations and approaches. Create a safe space for experimentation where failures are seen as stepping stones to solutions:
Time for tinkering: Dedicate time for exploring different libraries, frameworks, and existing code, fostering a deeper understanding of available tools.
"Fail-fast" attitude: Acknowledge upfront that some adaptations will not work out. The goal is to rapidly learn what doesn't work to get closer to what does.
Blameless culture: Make sure your developers know that they will not be punished for failure. People are naturally risk-averse (many software engineers even more so, although that is anecdotal). A price for failure will cause them to play it safe, and not push the boundaries. Taking away their fear is key to boosting creativity.
This was done very well by Amazon. One of the Amazon managers I spoke to told me that in Amazon, they don’t punish failure as long as the developer gives a detailed analysis on what went wrong, how this error can be avoided in the future, and documents this publically so that it can be avoided in the future.
4. Prioritize Diversity within Teams
Just as a diverse ecosystem is more resilient, teams with a range of backgrounds bring a broader set of experiences and perspectives to creative problem-solving. Including more kinds of voices is also good practice for stakeholder management, since your clients and users are likely to be very diverse.
Don't just look for duplicates: Avoid hiring only people who perfectly fit your existing team's skillset. Complementary skills encourage unique approaches to recombination.
Seek out cross-functional knowledge: Include team members with backgrounds in design, UX, or adjacent fields to add new viewpoints to solution-finding.
5. Relax on the productivity obsession
A lot of developer performance evaluations tend to overemphasize productivity. This can hinder creativity, since creativity requires burning through a lot of time experimenting on things that don’t work. A blameless culture and lots of knowledge sharing can be a good way to turn even those failures into productive wins, but ultimately it’s important for teams to not be super obsessive about creativity. Creativity often comes in dead-time and odd moments, and an overemphasis on productivity can take away the mental/cognitive space to make these things happen. To quote the paper-
Finally, we argue that creativity could be at risk if we overoptimize for productivity and efficiency. Some factors that might be a hindrance to productivity in the short term could enable creativity in the long term. In our interviews, when developers moved past the expectation that creativity meant novelty, they noted that their own work was most creative when implementing code, refactoring, and collaborating with colleagues to solve a problem. Not all of these activities are when developers are typically considered at their most productive. For example, refactoring is not without controversy,18,19 and the coordination challenges that come with collaboration are well known.20 This suggests perhaps a different temporality to creativity than there is for productivity. To what extent does optimizing for creativity hinder productivity and vice versa? What are the tradeoffs involved?
This is worth thinking about.
Combining all of this of these tips will enable you to build a culture of creativity. What would you add to the list? What are your experiences with developer productivity? Let me know in the comments below/reaching out.
If you like this article, please consider sharing it with someone who might benefit from it.
Loved the post? Hate it? Want to talk to me about your crypto portfolio? Get my predictions on the UCL or MMA PPVs? Want an in-depth analysis of the best chocolate milk brands? Reach out to me by replying to this email, in the comments, or using the links below.
Stay Woke.
Go kill all,
Devansh <3
Reach out to me on:
Instagram: https://www.instagram.com/iseethings404/
Message me on Twitter: https://twitter.com/Machine01776819
My LinkedIn: https://www.linkedin.com/in/devansh-devansh-516004168/
My content:
Read my articles: https://rb.gy/zn1aiu
My YouTube: https://rb.gy/88iwdd