Importance of Software design
Tags: design, productivity, aws, tutorial
Published: 2022-10-15 07:47:00

> A good design will solve your current problems, a great design will solve problems throughout your system’s lifecycle.


Software design is one of the first steps towards a solution for a given problem, there are various important factors which contribute to a design decision such as Purpose, efficiency, cost, security, aesthetic etc., but is it good enough ? Does the system accommodate change ? Does it cause more problems if a new feature is to be added ? Does it always demand work-arounds for new requirements ?.

A design should not be focused totally around its first iteration, it should compliment best practices and principles, it should make problem solving easier and enjoyable.

##An example of how a great design makes problem solving easier

**Problem statement:** Setup ready to use AWS Cloud accounts for team A and team B to host applications.

**Solution:**

Initial Design Approach

![Initial approach](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n2naxq6zpt7ie17n1dsu.PNG)

Now both of the above approaches solve the current problem and provide a solution, let’s add something to it.

**Problem 2:** Send bill reports of AWS services to appropriate team

**Solution:**

![New requirement design update](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5d3gt1w8ulplqs0xvyl0.PNG)

Notice how beautifully approach 2 solves the problem when there is a new requirement without having to make any changes to existing system or coming up with work arounds.

Let’s add some more changes

**Problem 3:** Team A should not have access to Team B resources and vice versa.

**Solution:**


![Security constraint requirement](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcpb8t4l5xklrnx0kj74.PNG)

Clearly Approach 2 is way easier and requires almost no extra work, the design solves the problems. This example distinguishes a good design which solves the current problem at hand and a great design which compliments the system to solve all problems in an elegant way.

##How to create Great Design

###Understand the problem

There can be many fancy ways to solve a problem, there can be various solutions to solve a problem, its important to understand the problem domain and create a solution in the problem domain.

###Identify the goal

Try to understand the vision and purpose of the system, if you do, you can create a wonderful image of what the system’s lifecycle and roadmap will be, that is more than enough to design a beautiful system.

###Challenge the theories

Explore the possibilities, try to do a proof of concept on theories, do not make assumptions, understand data and make decisions based on knowledge derived from data, not mere data.

###Design Thinking

*   Be innovative and think creatively
*   Change perspectives and connect with your users
*   Question the problem and do not restrict your thinking.

Read more about [Design thinking](https://www.interaction-design.org/literature/article/what-is-design-thinking-and-why-is-it-so-popular)

###Follow best practices and principles

The best practices are standards which have been built based on experience and practice, try to stick to the best practices as much as possible, they have proven to be of great value in a longer run.