Creativity in Software

I recently listened to an excellent talk by Jordan Peterson titled Exploring the Psychology of Creativity, and it got me thinking about how it applies to software development.

I came to the conclusion that software development is inherently creative. I think this is quite obvious when building a new project or writing new code, however even the maintenance of existing software has some room for creativity. Arguably less so, but there is room none the less.

The reason working with computers requires creativity is because of all the challenges associated with computing. There are endless problems and complexity to overcome in order to create, that you have to think creatively. Software developers transform the chaos of nothingness into structure and order. Or the chaos of spaghetti code into structured systems. Or the chaos of live systems into more stable and resilient systems.

As an aside, I would argue that hacking is the most creative domain in computing because the majority of hacking is working with even stronger constraints, and solutions exist completely outside of the “computing box.”

It’s important to distinguish artificial constraints, however, that require non-creative solutions to problems. Compliance, for example, is not a field of computing that requires creativity. As you might expect, different areas of software development allow for different amounts of creativity.

For example, I worked in three teams during my time at IBM. I was very fortunate to join my first team working on the optimization and resiliency of the organizations’ services, because we had the freedom to think creatively and solve challenging problems. My second team was mostly maintaining an existing service. The team was very structured and filled with extremely talented and kind people, but it was soul-crushing work for me. My third team was formed to create a new service from scratch, so that was fortunately much more fulfilling.

Reflecting on my experience, it’s safe to say I am a very creative person. I enjoy creating things so much that the domain doesn’t matter to me (computing happens to be low barrier and far reaching that I have tended to focus on that). I thrive in positions that require creativity, and perhaps that’s why I enjoy being a generalist programmer. I draw from all of my experiences to solve challenging problems.

There are other factors that play into software development, of course. It would be foolish to say that you will enjoy programming if you’re a creative person because at the end of the day, the entirety of software development exists in a box. And as Peterson explains in his talk, creative people are always thinking outside the box, so I don’t think creativity is the sole driver. Unfortunately, I don’t know what the other factors are, but the best I can do is share my own experiences in hopes of uncovering a deeper understanding.

To conclude, it’s no surprise to say that creating software is a creative process. Knowing what type of person you are, though, may help in choosing the types of projects you work on in your career. I enjoyed listening to Peterson’s reasoning and saw many similarities to the software world, and I would highly recommend listening to his talk yourself.