DEV Community

Cover image for Is generalization killing creativity in the software industry?
Erika Heidi
Erika Heidi

Posted on

Is generalization killing creativity in the software industry?

Cover Photo by Tianyi Ma on Unsplash

As software gets more and more integrated into our lives, the industrialization of its crafting process becomes inevitable. We see the Software Industry seeking more productivity at lower costs, for products that can be applied in many different scenarios and use-cases, as a "one-size-fits-all" kind of software.

Industrialization targets efficiency, normally by providing ways of automating processes or making them more efficient, so they can be executed in batches. As programmers, we know automation well. Loops are a simple example of a more efficient way of repeating a series of instructions. Automation requires generalization:  you need to define exactly how the process is going to happen, leaving just enough room for reusing that automation on different procedures. The more use cases a software is designed to cover, the more complex it becomes.

But generalization can be dangerous.  It is impossible to cover all use cases. Unfortunately, generalization is forced into everything, from the clothing industry to our educational system.

People are diverse, and motivated by different things. Not everybody learns in the same way. A standardized educational system that treats everyone identically is fundamentally broken, as people can't have a custom learning experience with this model. It doesn't change much when we go to college;  even though we can choose a graduation that seems more compatible with our aspirations, we are still required to comply with a standardized curriculum that just won't fit our expectations.

Don't get me wrong: software engineering theory is important for anyone who wants to program professionally, because it will provide a set of predefined solutions and terminology that will make a team more efficient while communicating and writing code. But computer science theory in general is only a portion of what a programmer needs in order to excel in this art. Programming requires a lot of creativity, and this is something we won't find in a formal computer science education. Au contraire, creativity is crushed by formal education.

The fear of failure is the killer of creativity, and in the industrial world, failures are not well accepted. That's how we are educated out of creativity, as Ken Robinson brilliantly explains in his TED talk "Do schools kill creativity?".

"If you aren't experiencing failure, then you are making a far worse mistake: You are being driven by the desire to avoid it." - Ed Catmull (Creativity, Inc.)

Our industry needs more people willing to take risks, people who aren't afraid of failure. These are usually the people who will come up with the unusual solutions, the disruptive ideas, the groundbreaking discoveries. Specially considering how artificial intelligence might eventually take over our very own programming jobs, it's more important than ever to cultivate our inner creativity.

I think the most important questions to ask now are: how do we make our industry more attractive to creatives? how do we change established preconceptions around coding being a strictly non-creative profession? how can we avoid losing creatives to other industries?

At the end of the day, creativity is still our most valuable resource, and nothing extraordinary can be created without it. If that's how we're gonna secure our "human jobs" as developers, so be it. Let's foster a creative environment and be cautious with the over-generalization that seems to take over our industry.

That's the future I want to see :  diverse, inclusive, where programming can be used as an artistic expression or simply a tool, by anyone who wants it.

Top comments (24)

Collapse
 
ben profile image
Ben Halpern

Oh! This is a really interesting topic!

My comment is a bit tangential:

A few years ago when I was thinking through ideas around dev.to and its place in the world relative to Medium, Twitter, and other very popular publishing/social which have similar features and very broad reach. I started having the realization that the software community was never going to be more than an edge case for them, as entirely generalized platforms.

The theme I came drawn to was that the center of this project's universe was the needs of the user, not the functionality of the platform. Medium centralizes around publishing, and has an inherently hard time delivering value and aligning interest with the software community.

As technology evolves, generalization sometimes becomes the best scenario. Personal computers becoming generalized in the 70s/80s/90s instead of strictly programming devices was a tide that rose all boats, but over-generalizing is indeed inhibitory. This touches creativity, as you have mentioned, and other facets of our interaction with the technology.

Collapse
 
silvestricodes profile image
Jonathan Silvestri

My mother hammered the "no failure" mentality into my head at a young age. It definitely made my transition into software engineering a lot harder, because I was so damn afraid to fail.

I still suffer from this from time to time, and I definitely have issues coming up with my own ideas, whether at work or if I want to do some casual coding.

Collapse
 
gypsydave5 profile image
David Wickes • Edited

Don't get me wrong: software engineering theory is important for anyone who wants to program professionally ... creativity is crushed by formal education.

This is sad to hear. I have no formal education in computer science or engineering; I have two degrees in the highly practical discipline of European Philosophy. What I would point out is that 'engineering' has the same linguistic route as 'ingenuity'; if your engineering degree isn't teaching you how to solve problems creatively then it's failing you.

Industrialization targets efficiency, normally by providing ways of automating processes or making them more efficient, so they can be executed in batches.

This analysis is correct, but I think your pivot to targeting 'formal education' is a misstep.

Automation requires generalization

If you were to ask me for examples of generalization in software development that stifle creativity...

  • Java
  • Angular
  • React
  • Spring
  • Material Design

'Enterprise' frameworks and languages. When a business invests heavily in one or more of these technologies they're ensuring that very little actual engineering will go on; all solutions will be worked on within these technologies, eventually all problems will be seen through their prism. Developers will become fungible - one Spring developer is pretty much the same as the next Spring developer for a certain class of business. Consistency is achieved both in terms of product and in the way it's produced.

That consistency is prized above simplicity and innovation.

Simplicity goes out of the window when SPAs are regarded as necessary in situations where serving up plain HTML would be enough.

And woe betide anyone who would try and solve a problem without using a standardised framework, you're going against "best practice", "nobody will understand your code", "you're just going to end up writing your own framework"... all from developers who are all, dare I say, perhaps suffering from Stockholm syndrome having worked within a framework for too long?

Is full of examples in the comments.

Collapse
 
fpuffer profile image
Frank Puffer

I am not sure if framworks stifle creativity.

Creativity does not mean doing whatever you want. You always need an outer frame that you normally do not leave but inside of which there is room for creativity.

Think of music. Most of it adheres to very strict rules of harmony, rhythm, form and so on. Still, composing and even performing music is undoubtedly a creative activity.

Collapse
 
steveblue profile image
Stephen Belovarich • Edited

Thank you Erika for the thoughtful article!

From a design perspective I think this is very interesting considering the switch from Photoshop (open ended tool) to Sketch (specialized tool). Sketch and applications that proceed it like InVision have toolkits that make it easy to duplicate Material Design components. I heard the same argument over and over again from designers that Photoshop wasn't intended for web design, it's a multitool that is mostly useful for photography. So here comes a tool tailored for the process of designing software. In Sketch the workflow is based on symbols, objects the designer stamps throughout the layout. This has the effect of creating consistency throughout the implementation of the design system, but it also allows designers to easily pick up symbols from existing design systems like Material Design and reuse them. In a sense, web design is having a "Helvetica" moment where UI is becoming easily readable, clean and minimal. On the other hand everything looks the same and we loose that creative edge that once defined each web site you visited, however crude it may have been in the Web 1.0 days.

P.S. I'll volunteer and take some risks ✋.

Collapse
 
jamesmh profile image
James Hickey

Love it!

I was listening dev.to/erikaheidito a phenomenal talk by Randy Shoup about building fast-moving teams/organizations.

One of the main points he makes in speaking about cross-functional teams is the fact that other disciples don't teach critical problem-solving skills as engineering does. Thus, engineers/developers become critical in helping think through business problems, questions solutions, understand complex ideas, etc.

And if we happen to use code to solve those problems, fine... 👍

Good stuff @erikaheidi !

 
steveblue profile image
Stephen Belovarich

We can agree on one thing. There is a clear difference between someone being creative and someone being an egotistical jackass. They don't have to be one in the same. A creative person can still be a "team player".

I don't think this is a prime example of creativity in our industry. In any case, creativity pushes the boundaries and does illicit reactions. You can certainly have an opinion one way or another. Take Apple for example. They have pushed creative designs for hardware again and again. Love 'em or hate 'em. Some people have even commented the computers look like they "belong in a museum". Mac computers are also highly useable for the vast majority. Hell, they even invented an entire market segment with the iPhone. Apple doesn't seem to be hurting because of this, they have money in the bank to spare. Taking a risk can return huge rewards.

Collapse
 
erikaheidi profile image
Erika Heidi

What if you could have fun in your job? Some people can't tolerate working boring jobs for their dear life. Everybody is different, and we still need creativity in all industries.

Collapse
 
flrnd profile image
Florian Rand

Let's talk about creativity and web design. But first, let me show some examples:

Apple web site (early ages and today)

screenshot of apple website

Early days ebay (one of my favorites)

early days ebay screenshot

Standardization and generalization is not a bad thing. Those examples were the "creativity" of those days, and would you agree with me that general approach of web design is a lot better now?

Yes, it kills creativity, but creativity sometimes needs to be killed and that's why Design systems exists, to establish some rules to follow and avoid more early ages of ebay.

Collapse
 
anwar_nairi profile image
Anwar • Edited

Tough question, for me creativity does not born in a closed, generalized, and structured environnement.

So to fix this, we could do more and more initiatives like :

  • wednesday: free for all (to code whatever they want)
  • auditing multiple techs to solve a problem
  • taking advantage of a new project to explore new APIs, softwares, IDEs, ...
  • Personal side projects (so important IMO)

Organizations should also play a role in this by pushing employees to allocate a time for these activities. If you think about it, an active person might spend more time at his job than with their family and friends, or with themselves.

Allowing people to have some spare times will improve creativity because they will not feel caged at work for sure.

Collapse
 
_hs_ profile image
HS

Had the same thought today. As a matter of a fact I came to conclusion that since would "die out" (exaggeratedly) if everything went down "industry style". Also considered writing blog about it but you got there first. So PATTERNS one main evil and also extremely useful thing. It speeds up development sooo much like frameworks. Also it limits developer a lot sometimes. However I tend to think that - "Clean Architecture" and TDD - alike got us here. Reason is that it complies with a lot of rules and helps a lot industry in certain cases that it actually does kill creativity in a way that people stop thinking for themselves and start just trusting books and others. It's done huge damage so far to the industry I would say. But it also separates people willing to go extra mile, or, their own mile I would say, from those careerist who are in IT because of money or job security or such. These guys start new companies with new ideas and set another standard.

Look at the industry now, microservices with netflix OSS in them running on Google stuff (K8s) using Python or functional things like Elixir with Kafka in the middle, hatting Java, screaming Agile is dead while loving TDD without any specific (personal) reason. Anddddd having AI or at least ML somewhere for their data.

This happens always and industry will never be the place for actual science or innovation. They do stuff for themselves to earn more money or just keep customers. Or just to offer new things. Most loved company for "inovation" was Apple and it took a lot of project rejected by Xerox or others. So innovative thing was making them approachable for customers.

Of course industry offers a lot in terms of new and useful. But those are discovered mainly while working on a product to sell and usually are byproducts by accident like C programming language.

I may get a lot of heat on this one but... I just thought could be useful to discuss.

Collapse
 
fpuffer profile image
Frank Puffer • Edited

I don't think that this is the main point of the article. There are jobs where creativity is a hindrance. (Although there is some evidence that this type of job is slowly disappearing.)

But software development is essentially a creative activity. Even if you don't create new products but for example do maintenance of legacy code, it is creative problem solving.

If you have a developer job that does not allow and require creativity, there must be something going massively wrong.

Aside from that, separating work and private life is fine to a certain extent. But there are limits. I personally appreciate being myself at the job and not faking anything.

 
fpuffer profile image
Frank Puffer • Edited

Okay, I am probably using the term creativity in a broader sense than you are. Even if solution Y already exists for problem X, it typically requires some creativity to find it.

In my point of view, creativity is nothing mystical. It is the ability of our brain to generate more or less random ideas and then quickly rate them to find the better ones. Just like biological evolution but much faster.

Collapse
 
steelwolf180 profile image
Max Ong Zong Bao

I feel that as years go by our industry has created jobs we had never thought of 5 - 10 years ago.

As we progress, there will definitely be a emphasises on creativity for software developers.

To learn through failure, blending diverse knowledge to create value by delivering product & services that comprise of this to solve hard problems.

Collapse
 
maumay profile image
Thomas Ball • Edited

Are you really saying that creativity is not trained in a degree program which contains an extensive amount of problem solving? Although I did not study computer science I feel that my creativity has been improved immensely by my formal education.

Collapse
 
jeklah profile image
Jeklah

There is good reason for the acronym K.I.S.S; keep it simple silly!

Also this is the same reason Linux was designed the way it is and why people programming on Linux tend to stick to the way of thinking of "Make something to do one thing only, and do it well."

Lots of tools that are good at doing thier one job well is better than a jack of all trades tool. This doesnt mean things cant be automated this way either it just takes a bit more planning.