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.

Oldest 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
 
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 !

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
 
steveblue profile image
Stephen Belovarich

The internet has become the vernacular. IMHO someone should always be creating in the space that is used by people in everyday life. Art is not just for the artist, art is for the people as well.

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
 
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
 
lysofdev profile image
Esteban Hernández

Unfortunately, the powers that be have no interest in creativity and diversity as they see this contradictory to the idea of economic Darwinism.

Collapse
 
fpuffer profile image
Frank Puffer • Edited

I don't think that these "powers" exist. Software development can never be economically successful without creativity. Software development means solving problems, creating new things, researching, investigating, communicating, all highly creative activities. Projects and companies that ignore this are destined to fail not only humanly and socially but also economically.

Collapse
 
lysofdev profile image
Esteban Hernández

Maybe I've been working in Fintech for too long but there is an absolute refusal by upper management to break the status quo. The way they see it, diversity is unnecessary until it's necessary. Once a unicorn startup proves success through diversity only then can the product of that diversity be adopted. Internally, developers are discouraged from deviating from company standards. I personally feel like any attempt at improving existing functionality receives an absolute no from my supervisors. There simply is no incentive to be creative from within when other companies will do it and either succeed or fail without affecting your profitability. In most large companies, there is no space for creativity that could endanger profit margins.

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
 
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
 
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
 
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.

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
 
samosborn profile image
Sam Osborn

This is wonderful!

I couldn't agree more, and I think you touch on several of the main antagonists of creativity in our modern world: a failing education model, and more generally our post-industrial capitalism.

But, zooming into code and generalization:
One of the wonderful things about specificity is its volume when carrying both explicit and implicit meaning. The right word, in the right place, is what distinguishes poetry from prose. Generalization is convenient, for reasons you mention, but generalization is also the evacuation of meaning and intention from the specific and tangible. More poetically, it is the departure from art and the arrival at utilitarianism.

It seems like if we can say anything about human intelligence, it is a strategic oscillation between the general and specific. We need to generalize and abstract concepts well enough to linguistically categorize them, while at the same time we need to map those abstractions onto the hard and dirty objects we bump up against in the world.

This reconciliation between the linguistically abstracted and the specifically encountered is absolutely what is missing in computer science. I do not think that it is a coincidence that AI research is hitting a hard wall at exactly this point (moving from rote recognition into meaning-making), and I would argue it's partially because computer scientists are bad at balancing between the two extremes of generalization and specificity. We certainly see the costs of that failing on other fronts, not least of all creativity - as you so well describe.

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.