Designing software

First step in SDLC. Includes translating requirements into something to make programming easier. TutorialsPoint lists 3 levels of results: Architectural (abstract idea on how to solve a problem), High-Level (breaks the system into components or modules and how they communicate), and Detailed (interfaces, logic, details on implementation).

The following are some software design concepts that everyone should know, taken from the same website:

  • Modularization: Divide into independent modules.
  • Concurrency: modules that may be executed in parallel.
  • Cohesion: Dependability of elements inside modules. More is better.
  • Coupling: Dependability between modules. Less is better

As you can see, dividing a project into parts is one of the most important steps in the process. A badly divided project can really make the whole fall apart. On the other hand, a project that has been divided properly won’t become a mess if one of its parts fail.

It seems that one should look to make  a software project look like many small projects where everything works as supposed by itself and whenever it’s needed (concurrency).