Do you know what is analysis paralysis?
When being presented by a variety of options to choose from, some people tend to overthink what is the correct one and compare each extensively, often to the detriment of time waste and without considering that choosing a bad option would be lesser than not choosing at all due to this.
I have had this problem several times. Often you don’t know what to choose and are afraid of being wrong.
When a problem is so big, the best way to tackle it is to break it down to smaller pieces and then work on those one by one instead of everything simultaneously.
Where do we start?
Book defines architecting as:
Architecture is your design structure, and highlights the most important parts of your app, and the relationships between those parts.
What is most important functionality of the system? The core, the essence? That thing that makes the gears spin.
On a small note, this example I actually liked, instead of being silly dog doors, it’s a rather familiar and common item. Board games. What makes a board game, a board game? I would say the definition of the rules and the specifics to declare a winner or loser. Anything besides that is extra stuff.
Next concept on our list is Risk. What is Risk? Not the board game of course.
These Are Not the Risks You Are Looking For photo by Ged Carroll via Flickr
Risk is the possibility of something going wrong with our system. We should strive to minimize the most possible risk. Reducing risk can be achieves by working only on features that serve our main objective.
It should be without mention, that a great deal of risk is reduced with good project planning before beginning to code. Good design will always reduce risk.
Another excellent point mentioned in the book, is that customers pay for great software, not great code. The way I understand it is that great code is code that could have been well written, clear, following languages’ conventions and works. Great software on the other hand, is well planned, well executed, meets the customer needs and is well designed. It involves more on the management side than purely the technical one.