Design SoftWhat?

I want to describe software design with a little story:

Imagine a time when you were a kid and you wanted a Lego castle to play with your imagination and other toys. Then, your dad takes you to a store and you choose one of the popular Legos that was at the time. When you come back to your hose, out open the box and take out all the small bags that contains Lego pieces. There you have different choices: to open all the bags and mix the pieces, to separate the pieces by color or by shape, or to open the bags and wait for the instruction manual to tell you which pieces you will use next. Whatever the decision you made, you will proceed to build your new toy that also have two choices: to follow the steps of the instruction or to try to build without it and just using the image of the box for reference. Finally, you have your new toy, and maybe with the time, pieces will fall apart and you will have to fix it, or maybe you find a bug inside and you will have to clean it, or you will get bored and you will destroy it to build it again or build another thing.

flickr photo by Mark Bridge https://flickr.com/photos/markbridge/4243574647 shared under a Creative Commons (BY-NC-ND) license
flickr photo by Mark Bridge https://flickr.com/photos/markbridge/4243574647 shared under a Creative Commons (BY-NC-ND) license

Did you find out where the software design fit in?

I even described something similar to the software life cycle. If not, I will tell you:

In that story, when you opened the box, whatever what you did, you build the toy that was at the portrait of the box; you followed a design and stick to it to create a product and never created another thing.

In software design, is very

you decide for what purpose you will create software, what you are going to make, how is going to look like and what steps or methodologies you are going to follow. Like I previously said in my post of software life cycle, software design is the second step and is like drawing the blueprints of a house.

The UML is an example of software design (you can see the post about it), there much more with different purposes or that works better with specified programming language, but all of them are for software design.

Software design is really important, you can’t build something without knowing how you is going to look; remember the story of the beginning of this post, imagine that the box doesn’t have an image and it doesn’t contain the instruction manual, you are on your own to build a Lego castle with all those pieces; it will be impossible, you may build something similar but is not going to look like the one that was intended for.