For a large duration of the time I spent in Software Engineering, I never learned design formally. Hence, when I was tasked with approaching design problems, a large proportion of my process was merely trial and error. As my boss at that point had pointed out, “just throw all the pasta at the wall and see what sticks.”
However, as I started to enter my senior year of college, I started becoming very uncomfortable with that notion. As a person I am very methodical, to the point where if I find a bug in a product, I will spend hours trying to understand how it works. Therefore, being expected to simply accept that the design process has no system to it disturbed me to great lengths, to the point I believed I needed to go back to the drawing board and look at my entire process from scratch.
One of the first ideas that I began to implement into my thinking was a core philosophy which revolved around everything that I did when it came to designing things. I tried to incorporate this philosophy not only in my life as a programmer buy my every day life outside the classroom and the office as well. What transpired is a total shift in my psyche and for me to start realizing how deeply I enjoy designing things and finding issues with the way things are built.
I have finally decided to codify these principles that I try to live by on a daily basis into words so that the world can see!

Be Flexible and open to change
One of my biggest weaknesses that I could quickly identify was a certain rigidity in accepting new ideas and trying out new things. From a young age, I was programmed to look for tautologies in every avenue of life, and additionally go against the grain in terms of my thinking and perspective in terms of societal norms. This was somewhat always reflected in my design thinking as well, as I always tried to play it safe, and often if certain minor elements were tweaked the entire world fell apart on my shoulder.
One of the first tweaks in my mindset that had paid dividends for me was training myself to understand that things do not always fall perfectly into place. Additionally, both in terms of my everyday life and in terms of approach to design problems, I embraced challenges, learnt to take risks, and most importantly learnt to react appropriately to changes. With this mindset you are bound to make mistakes, but the idea is you will learn to catch those mistakes before anyone else will, as you will be as open to breaking the product that you just worked on more than ever before, and subsequently what will follow is a better version of yourself that will carry over to your design thinking.
Now do keep in mind that this mindset will not work in all cases, for example in medical applications or airplane design, you have to be a meticulous as possible, as the consequence for not being so, is simply too large to humanity. I mean just ask the guys below!

Users first, everyone else later
Designers are often held to standards that performers or athletes are usually accounted to. I mean sure it is easy to satisfy yourself with your design or your performance in a football game. Yet, the place where the true designers earn the big bucks is when they design for everyone else but themselves. True good design in my mind comes in accessibility of design, something that can be used by everyone with little or no adjustment to accommodate towards one group. In my mind, as weird as it sounds, the best example comes in the form of disabled toilets throughout the world. Everywhere I have gone disabled toilets are genially designed to allow the highest level of comfort to every use that walks in. A private sink, a coat hanger, the flush right above your hands, and I could go on forever. Did I mention how spacious it is as well! Such ingenious design comes from listening to your user group and then empathizing with them as if you were just one of them. I mean just look at it! I have seen apartments in New York that are smaller.

My introduction to the importance of putting the user first came at a huge cost. During my freshman year of college, I had cofounded a start up along with two friends in London. Our goal was to ask 35 personality related questions to the user to find them another friend in the vicinity that shared similar beliefs and values. Now, as you may have thought 35 questions were a lot. However, when we were testing the system, we thought we hit the golden value, and we thought people would fly past them. Now fast forward to two months when we had scaled to around 10,000 downloads on iOS and Android, we only had 800 or so sign ups. What was worse is we decided to still stick to our guns and take out only 10 or so questions. Well, as you can guess, our company did not make it past the end of the year. Where did we go wrong? That is a very easy question to answer. By designing for ourselves as opposed to our users, we turned the biggest value proposition of the app into in fact its biggest detriment. I was very close to sharing the picture of the exact screen on this post, but I do not think that will be fair to any of my coworkers.
Now user testing poses its own problems as well. In many circumstances, finding a group representative of your exact target group poses a ginormous challenge. As part of one of our class assignments, we were asked to design for a group of senior citizens. Our user testing failed gloriously in two ways. I mean it is pretty clear that we did not find a group at all of senior citizens willing to test, but the representative group that we used were so disparate from our target user group that it made for very interesting reading when we asked who exactly our target user group was to our testing group. The results showed that only 2% of our target group could accurately guess this was for an elderly audience, with some even guessing kids.
No Idea is a Bad Idea
As we have discussed before one of the key areas of my design principle, which had stuck from my early days trial and error is that no idea is a bad one. I believe that like design iterating over ideas make them better.
As part of the same mobile application development company, we had developed a routine where we had a company-wide chat every morning to talk about new features to implement into the product. At first, I was apprehensive, about how a psychology major marketing person, would have any input into what features may we design and build. However, I was proven completely wrong. They had in fact suggested the large proportion of features that we had subsequently implemented.
Since that day one of my core design philosophies has become embracing all ideas, no matter how far-fetched. However, facilitating this is as not simple as it may sound. Some modalities that you are programming for are often easily imaginable or visualizable. Hence, what I have seen work extremely well is things like mood boards. They allow ideas to flow freely, and to create genuine impact.
During my academic career one of the best use brain storming came when we had to come up with an idea of an interactive bot. It was an area all of us were weak in. However, the most amazing thing is the ideas that we had completely dismissed had somehow joined together in creating what we thought was the best project.

Iterate, Iterate, and Iterate
You are unlikely to get things right on the first try. This does not apply only to design but a myriad of other things that we do on a daily basis. The idea on iterating is that getting better in small increments, until a product that is ready to be pushed into production is finally available.
However, while in software making small changes for each iteration is relatively simple as all it entails is chaning a few lines of code, it is often far more difficult when the product involves a physical iteration. For instance, in one of my design courses, I was tasked with creating a prototype smart glasses. With little experience in 3D printing our first design ended up collapsing on its on in the final stage. In the next run, the 3D printed glasses ended up sticking to the frame. It was only in the final run that we had reached anywhere near satisfiability. In all together the failed runs took an entire 12 hour window of just watching the model print. We had no room for making any further iterations according to our user input. Hence, when working with mechanical or electro-mechanical systems, the margin or room of error is much smaller. Hence, it is extremely important that each iteration achieves some sense of satisfiability.
Take Inspiration from Successful Designs
This is something that I feel all designers whether they are designing a fidget spinner or a sky scraper in the heart of Manhattan should do. Look at the successes of the designs that have set the world alight. By this I mean not just looking at the success of the final product, but the process it took to get there. Uncover the hard work that had yielded the results and look at every fine detail.
When I first got into the field of computer science, the man that I looked for inspiration did not have anything remotely to do with computers, in fact he made vacuum cleaners. In fact, the source of my inspiration is Sir James Dyson, the man who had invented the world’s first bagless vacuum cleaner. He took an entire 5 years and around 5000 or so prototypes. This helps pump me up before any big design sprint, and reminds me that if you do persevere dividends do await you.
In conclusion, this is the design manifesto that has worked the best for me and allowed me to become a better version of myself. However, it is not guaranteed that this exact process will work for you. What I would tell you to do is think hard on the areas that make you tick and appreciate good design. It is only then you will make real progress.