Design Thinking For Software Developers
Before explaining what is actually “Design Thinking” means, I would like to point very important thing about Software Development.
I’m software developer more than 12 years, and I love it! And the reason that I’m super exited about coding and building software is that I’m actually building something new using my brain and creativity in coding.
Which means that for me Software Development is also part of a Creator mindset or in other words it is some sort of a Design :)
Where “Design Thinking” comes from?
Design Thinking starts being popular word over a decade, and it is not only used for explaining IT products or services, it is also popular in Architecture, Manufacturing etc…
In 19th century when world started business production revolution and massive product development, nobody cares about more comfortable usability of a product or better color. At that time businesses just gave core value and customers just didn’t know what to ask from them.
But now days customers care about design, comfortable usability and every little detail could attract or disappoint them. And that’s where came out “Design Thinking” term, which generally mean thinking creatively, but at the same time make product more useful, nice looking and exposing core value from that.
In most cases Design Thinking is not about bringing super creative solutions, instead now product owner need to monitor and track a lot of data in order to understand how design his product for being better than his competitors.
Here is the great talk about Design thinking.
As you can see “Design Thinking” is more about giving more comfortable solution to an existing problem, or making better existing solution.
You might think “Ok, but how it is related to software development?”.
I would say you can’t make a scalable software without designing every aspect of that software, and because software requirements are always changing you need to design it infinite pluggable!
Let me explain it with an example.
Imagine you want to build simple Web application with usual Frontend, Backend and Database components. So if we implement design thinking for this software architecture first of all we need to ask “How we going to scale from single server to multiple servers?” or “How we going to build our frontend layout for making later changes match easier?”.
So the thing is that with Design Thinking we are not building software to make a required task today, we are thinking how to build existing task that we can make a changes easier later.
It is true that for startups or hobby projects it’s not the right methodology, because we will spend more time than we have. But in general for building long term projects/software, without well designed architecture and components, the all process of development would be delayed and software quality would be super low.
Because of the Design Thinking, modern software architectures not Monolithic at all, they are all Microservice based, which mean that you have a lot of little pieces running independently and communicating with each other over networking or other way. Which is giving great abstraction over software design and super scalable parts that you can scale up and down separately.
Design thinking is something that in most cases you need to come up sometime and then realize that “oh that’s the design thinking!”, because it could be completely different usecase of environment. Some people instead of “Design Thinking” saying “Thinking out of the Box”, you can choose whatever you want :)