In this blogpost, we list a few principles the best designers use through their day-to-day work.
Who is an expert software designer? Some say that an expert has the experience and innate ability, but this seems not enough. Experts have a specific mindset, approach, and habits, they reuse during their work. Some of those habits can be easily put into practice, others don’t. Some habits can be learned easily and some require a long time to master. The important point that unites all the experts is that they are aware of the best practices and draw on them when it is required.
The book “Software Design Decoded” features 66 of those habits, some of which are presented below. These habits have been confirmed by Software Designers using them every day in the field. These days software is becoming more and more complex, due to the fact that it is no longer limited by technology. The growth of the complexity of the products is followed by the growth of the demands on software designers, these demands can only be met by achieving sustained excellence in design. We hope this article can play a small part.
1. Involve the user
Expert Software Designers are always aware of users. They understand that users should be involved in many steps of Software Design. Experts study the users, talk to them, test designs with them, and constantly ask questions.
On the other hand, experts don’t take everything users to say at face value. It is important to realize that potential limitations from the user’s perspective are biased by the user’s current experiences. Thus, experts look beyond the user’s words, to what users really need.
2. Focus on the heart of the problem
Every problem has a core point, that has to be understood to solve the problem successfully. Changes in the core idea drastically alter all the decisions. Experts first focus on the essence and delay expending effort designing on the periphery.
Often you get confronted with problems, from say a client or through user feedback, which doesn’t amount to much more than “wishes” – with no clear and/or conflicting solutions. A good developer is able to distill the problem down to its core, finds out the true nature of the issue, can communicate that back, while also offering solutions.
3. Strive for simplicity
Simplicity is everything in software design and should be your priority. Conversely, you must actively avoid complexity, and when part of a system is starting to feel complex, take a step back and rethink the approach. Sometimes systems must include complexity, try to contain this all into a tightly constrained area of the system.
4. Notice what is around
This is what architects, designers, painters do. Gather the inspiration, examine the designs and collect the experience of other people in the field. The expert software designers do this regularly. Experts check the designs of other products to “understand how they did it”. They don’t do it for the ongoing project only, they also look around for possible design solutions to use in the future.
5. Error or opportunity?
Mistakes follow us everywhere, we misunderstand, do wrong, have random issues. Rather than fearing the mistakes, Software Design experts see those errors as opportunities. They take their time and explore the mistake and its context. Understanding the problem often reveals many insights both about the mistake and about the solutions. It helps to make assumptions, fix misconceptions and find emergent properties.
It’s obvious, but all those points can not be learned in a discrete manner but they work as a whole and grow on you during the journey. Reading is where important, not only Medium and internet blogs, but big “essence” ideas that you do not get usually on day-to-day tasks, and mold the perception of problems and solutions. People who read have a fundamentally broader vision of problems and their solutions.
This article was inspired with the original post and a hackernews discussion, we took some ideas from the HN users comments. Thank you!