3 stages of design in software

I got my first Apple computer in 2005. It was a white MacBook from my aunt after she heard I was an Apple fan. I was an Apple fanboy in every sense of the word. I remember a friend asking me if I would go gay for Steve Jobs and without skipping a beat I responded "Wait... let me think about it" 😂. I could feel the spirit of the company, the style of the company and I resonated with their message. There was just this thing about Apple, once you understood their mission, everything they did made sense. They truly had a cult following and my theory is that they were the first tech company that took design seriously, in the true sense of the word. Steve has a famous quote "Design is not just what it looks like and feels like. Design is how it works". That quote resonated with me for years and over a decade later it influences a lot of my work today.

"Design is not just what it looks like and feels like. Design is how it works" ~ Steve Jobs

I can talk for hours about the importance of design in software but I will save that for a different day. This post is about the importance of design in order to successfully deliver software. Traditionally the media and some influencers sell software development like it is a thing about passion and inspiration. From Zuck solving algorithms on his dorm room window in the Social Network or the way the characters from Halt and Catch Fire produce one fire product after another... you know they just have sleepless nights banging their heads on the wall and boom the answer appears. Anyone who has created more than two software applications in their life can tell you this is not a consistent or sustainable way to successfully create software and that brings me to the three stages of design needed to successfully deliver software.

  1. Design how the software will work: On a high level you have to talk through or scribble in a notebook how the application will work and ensure that the process it follows to function at the end solves effectively what the original problem was. For example, Instagram was originally designed with the intention to make all of us feel like great photographers with the phones in our pockets. We had these cellphones we took many pictures but they went nowhere because those pictures where whack and you can see from the very first version of Instagram filters was a thing. The way it worked remained true to the problem it was trying to solve. Designing the experience of this, the act of making people photographers with their cellphone camera is a task in itself. I cannot imagine all the temptations of all the features they could add, but having a clear design of how your app solves an issue is critical to keeping those requirements (MVP) tight and focused. It also determines how solid your architecture will be going forward.

  2. Design the look and feel: This is typically what we think about when someone says they are designing an application. We worry about if the app looks, modern and trendy and has cool animations. I would like to argue that of the 3 stages of design this is probably the least important of them all. It is important for sure but clearly back in 2011 when Bootstrap was released we saw that having an original look is not critical to have a popular product on the internet.That being said, aligning the branding of your application to the issue it is trying to solve, triggers the right emotions in your intended audience and guides them into using the app intuitively.

  3. Design the process of creating the project: This is often the most neglected design phase by the passionate software developer, but it is the most critical to delivering successfully. Once you figure out how the software application will work and how it will look, the next phase is to decide how you are gonna get there. Breaking the app into phases, modules or parts and deciding how each one will be executed is Engineering. Are you building your own map system or are using google maps, are you building the comment section first or last? What language and framework are best for this project? Developers always make these decisions but not many do it deliberately, acknowledging how their choices increase or decrease the chances of a successful project completion. Look at it like a recipe, if this part is well designed any competent developer can start and finish this product successfully.

These three stages of design, how it works, how it looks and how it should be built are the cornerstone to successfully completing a software project. I would argue that it is 70% of the way to successfully completing a project, whether your project becomes a success or not, that is a different discussion entirely 😅.