Design Thinking and Software Development: Architecting for Success


One of the most powerful tools in the hand of today’s innovator is Design Thinking. Gaining popularity as a method of creative problem solving, it has been used successfully in various fields to create significant innovations.  The annals of Design Thinking lore are replete with inspiring examples like how an industrial designer re-imagined MRI scanners to make them kid friendly [1] or how design thinking was used to improve patient experience at Stanford Healthcare [2].  There are many more examples just a web search away that are truly insightful and show how this approach truly keep the user right at the center of the innovation process. 

Therefore, it is no wonder that the tech industry, which thrives on innovations, is the perfect domain for adopting Design Thinking in diverse areas including software development and testing.  In fact, many groups and organizations have made rapid strides in using Design Thinking to aid Software Development.

So… What is Design Thinking

Like every popular concept, Design Thinking has many definitions.  One definition among many that I have liked, is this à 
Design thinking is a non-linear, iterative process that teams use to understand users, challenge assumptions, redefine problems and create innovative solutions to prototype and test. Involving five phases—Empathize, Define, Ideate, Prototype and Test—it is most useful to tackle problems that are ill-defined or unknown. [3]  

The following diagram for d.school at Stanford[4] is often used to depict Design Thinking Process.


As an architect, I find Design Thinking so appealing because it is a methodically, actionable and most importantly an end-user focused approach to evolve a solution concept.  And I say evolve deliberately here, because just like evolution, every iteration reinforces what really resonates while weeding away the weak ideas.  Not just, in my experience, if done right it also gets more than just a regular dev team invested in the solution.  It never hurts to have some of your target users as your promoters.  And, no, it is not magic, but it does take some experience before you start getting it right and can guide your team away from the typical pitfalls. 

A few questions that I have often heard being asked in talks that I have given on this subject or have attended can be paraphrased as follows:
  • How do we use Design Thinking for Software Development?
  • What are the steps involved?
  • Why is Design Thinking even a thing in Software Development

These questions are not much different from those that I challenged myself with when I was first introduced to Design Thinking.  These are deep questions and let me share my perspective on a couple of them, starting with the all-important question  àWhy?

Why Design Thinking matters in Software Development

A few aspects that make Design Thinking an attractive means to conceptualizing solutions are:

User Focused:   A design thinking-based solution is done with the user right in the center of the conceptualization process. Both the empathy analysis and test steps are conducted with complete user involvement to ensure their point of view drives the solution design. Mind you, design thinking is nothing like going with a pen and paper just once in the beginning of the project, asking some questions to users, drawing your conclusions and building something. Here the mode of evolving the solution concept is based on user empathy and proceeds in iterations with rapid prototypes.  These prototypes could be just paper or cardboard models but allows users to get a feel of how the idea is shaping up. 

De-risking of Project:  One of biggest risks in solution development is that you do everything that you thought would really wow the customer, but either during the User Acceptance Tests or worse after you are live, you suddenly get a set of users who are quite unhappy with the results. Doesn’t matter, if you had done a few demos, the result may turn out to be less than desirable.  Design thinking removes these risks because during the prototype review or test phases your users are actually handling your proto and you are getting an immediate feedback of what works versus what doesn’t. 

More Robust Technology Solution:  As the functional aspects of the solution, the boundary conditions and even nonfunctional aspects evolve through the process of design thinking, it allows the underlying engineering aspects to be given more careful consideration.  Not only it allows for a more holistic application architecture, but it technology choice decisions are more grounded on what the actual needs are.

Creating your Promoters:  I have mentioned this earlier as well. The collaboration with your user groups in order to create for them something that they would actually find useful and recommend others, is a tremendous value that accrue out of an well-executed projects that adopts design thinking.

Adopting Design Thinking

The advantages of adopting Design Thinking are obvious from the discussions we just had. But I would be remiss if I didn’t add a note of caution.  The adoption and execution could suffer if the practitioners are less than convinced on the process. As software developers we often have propensity jump to a solution than to go through the iterations, which is counter productive in a design thinking scenario.  The other area to take note of is the appetite of the organization to adopt this paradigm shift in the innovation approach.  A good grounding in Design Thinking theory and practices, proper training and most importantly having some one to get guidance from is of much help.

In the next few weeks and months, we will explore details of some of the key best practices together. Meantime I hope you will explore this concept more and see for yourself how it leads to success.  In fact, there are many resources which can guide you to your initial Design Thinking exercises.

Happy Innovating.


Comments

Popular posts from this blog

Does your Software Architecture tell a Story?