loading...
Cover image for Is generalization killing creativity in the software industry?

Is generalization killing creativity in the software industry?

erikaheidi profile image Erika Heidi ・3 min read

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.

Posted on by:

erikaheidi profile

Erika Heidi

@erikaheidi

Code sorceress and machine enchantress. Passionate about writing and creating technical content for a variety of audiences.

Discussion

pic
Editor guide
 

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.

 

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.

 

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.

 

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.

 

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 !

 

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

 

Why?

You are mixing what is a work/study with a personal life.

Let's say the job is tedious, monotonous and boring. So what?. I worked in a boring job. However, I play electric guitar, I paint (a little) and I love Zbrush. My work and my personal life are unrelated and I'm not alone.

One of my colleagues is a member of a punk band. He dresses formally every working day. Other of my colleague was a painter and others play classical music.

So, if we want creativity then we could look for our own means.

 

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.

 

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.

 

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

There are create jobs and jobs that don't require creativity.

In general, programming is :

  • X problem
  • Y solution.
  • Join X with Y and that's it.

However, let's say that we NEED creativity. Creativity is a hell of expensive, and it could tire everybody.

For example, the so-called "creative wall." It's not rare to find a writer that ran out of creativity; it's simply is not doing anything because he is unable to do. Now, how many programmers are out of creativity for days, weeks, or months and they are unable to work at all?.

Now, we could solve something using a creative solution or solve it by following-by-the-book but again, it's up to us and it is good.

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.

 

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.

 

And they can and again, nobody is stopping to be creative unless it affects others.

Also, there is a difference between creativity and to act on your own volition.

For example, one of my colleagues was "creative". He wrote code like this one:

    pony.price=200;
    pony.discount=24;

where the pony is a variable that means a customer. Why he called it "pony", because he is creative. But it was stupid and it affected the clarity of the code but again, he was creative.

In this case, he wasn't creative but he tried to push his vision!. Anyways, he was forced to rewrite all the code. Teamwork > individuality.

And for another part, I worked with the guys of marketing. Marketing is a creative job and trusts me, it is not fun!. But again, marketing is not about to put your vision but to put something with a specific aesthetic and meaning.

I also find a "creative" guy on marketing, he tried to put his vision and style on some job. He was fired in a week.

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.

 

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.

 

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.

 

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.

 

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.

 

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.

 

It is ironical that once I'd swear about things perceived as "coding axioms" only to find them problematic under certain conditions. In the software engineering process (similar to other engineering types), established methodologies do exist. Their dominion came after they had 'consistently' generated value.

This partially stemmed from the fact that a dev is usually a mere implementor rather than part of the vision. The biggest risk he could potentially take would lose him his job, but nothing else. Nevertheless, he is simultaneously part of something bigger (either that being an IT team or a crowd of consumers). I've been told that in coding one may do whatever he wants; in life not. I think this statement is wrong as things entwine.

Are we doomed then? Is the Industrialisation the end of creativity? Nah, disruption will always be achieved for those ready to partake the extra risks hence I do agree with your stand. It's just that (fortunately or unfortunately) there is no golden rule to achieve greatness. I would personally suffer if my work did not involve creativity but there are fellows out there who when needs be can do it without any problem.

Generalising, modelling processes, even leaving something undecided, imposes a decision on its own. How do we know what to do then? Deciding on being creative or not and to what extend, needs some creativity on its own. Interdisciplinary teams as some have pointed out may be a remedy. Of that I can't be sure yet; still trying to solve it for my own case.

 

I might have misunderstood, but i don't see that generalization.
I do see more an more layers being added on top as programming becomes more verbose.

Au contraire, my impression was we were specializing, not generalizing.

from web developers to frontend, backend, database etc. engineers.
Among that you have language variants, patterns frameworks etc.

And below that several layers of tool makers doing everything from normalizing assembly code from different architectures to writing platforms like browsers, or operating systems.

And those are just the code programming related thing, on top of that you have UX, design, analysts. etc,

I have this poster hanging at home to remind me of how little i know:
flickr.com/photos/95869671@N08/362...

 

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.

 

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.

 

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

 

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.

 

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.

 

200% amen to that. Read Eric Frohm's a man for himself. Developers should be creative in being efficient, not getting tied up in process. To create something great takes huge sacrifice.