It feels like a very common opinion that software engineering is a very logical and math-based field. To some extent it is - there are certain underlying rules that govern every programming language and how code is executed inside a CPU. But, I’ve never felt like that’s the full picture. If this was the case, building software would be a precise science almost like physics. Instead, we’re faced with bugs everywhere and systems that feel like a house of cards or some complex contraption made of sticks and duct tape… If you were to ask me for a visual representation of what we call software ‘architecture’ compared to how building architects create buildings, this meme would be perfect:
I think many devs don’t realise how much creativity is involved in writing software. I believe that’s the reason things become so messy sometimes. We try to create a digital model that describes a part of the real world. Take for example a concept like a user who has a bank card. We write classes with properties that describe said concepts and then store them in a database. So far so good, but what happens when you start implementing business logic?
We literally start creating concepts that don’t exist in the real-world domain. Abstractions like Singleton, microservices, an Outbox or something very specific to the context we’re working in. Those are often not things things that exist in the real-world domain of the product but something completely new. We imagine new concepts and abstractions in order to build those products. Going back to the building architect comparison - someone designing a building would know exactly how much weight they can put on a steel beam. Do you know when someone’s user input will break your code? I don’t, so I would likely create some XyzValidator class to be my bodyguard against Little Bobby Tables…
I think creativity is an inherent part of being human. Every software engineer is faced with many of these questions daily and dealing with a chaotic combination of limited domain knowledge plus vagueness of the JIRA tickets in your backlog requires nothing short of a creative mind. It takes a lot of imagination to navigate and solve unique problems and guard against as many edge case scenarios as possible. I think creativity is a spectrum but in my opinion software engineers tend to be very creative people and some don’t realise that. I’ve actually met more musicians in tech than any other field like law or psychology (there’s probably some sample bias here due to me working in software though). I’m not one of the people who claim software development is an art because at the end of the day the point isn’t self-expression but some meaningful utility for others.
I don’t really have some profound call to action with this. I just wanted to look at software devs from the point of view of creativity and perhaps encourage you to explore this creativity in other ways as well. Wether that’s painting, music or starting a business (yes, I think business is also a creative endeavour). Same goes for anyone who wants to switch to tech from another field! Let me know what you think. Do you agree/disagree with any of this? Do you do any other creative work outside of programming? Feel free to connect with me on Twitter here!