Comment about "Software Architecture: Laying the Foundations of Software Design"

This week I'm going to talk about the foundations of software design which is essential for creating a software architecture. These are my comments after reading the Chapter 14 of the book "Code Craft: The Practice of Writing Excellent Code" by Pete Goodliffe’s.



First of all, after understanding the requirements of scope, time and cost of a project, the software team has to decide the design of the system. The things that have to be decided are, the key software modules and which component talks with one and the other. This will help to identify at a high level how the software has to work and how it can be divided so that every team player can work at the same time. As a programmer, one of the best things that we can receive is a clear explanation of the software design. This allows us to just work in the implementation of it. Sometimes the software can be just pushed to a virtual machine in the cloud but there are some others like an embedded system, on which there are different rules on the design.

Great architecture design can impact in the future whenever a change has to be done. Maybe your boss asked you to add a new module or an error occurred. Whatever it happened, the software architecture will be difference between taking 2 mins to make the change or days, even weeks or months! Also, it is important for everyone in the team to know about the architecture or everyone will start to code the way each one of them "thinks" the program should look like and this at the end can create modules that cannot connect between them and wasted effort.

So in just a few words, software architecture validates that the requirements can be accomplished, it communicates to all parties about the design, and it discriminates the need of a certain component like a database or an API, and its costs. Depending on the system, the software architecture can be no architecture at all (which can doom development before it starts), Layered Architecture (like the OSI Model), Pipe and Filter Architecture (each step/pipe process some information and gives a result which will be processed by another pipe), Client/Server Architecture (a website), Component-Based Architecture (APIs connections), Frameworks (Node, React, Django, etc.).

After reading the chapter, the best recommendation I can give as a software developer is to write a well documented README.md. This document has to have key concepts as what the system is, what is working and what is not (using tools like Travis CI), how it can be deployed and some other key features. You have to think on the next person that will read about the project.

References

G. Pete (2006). Code Craft: The Practice of Writing Excellent Code. No Starch Press, 2006.

Comentarios

Entradas populares de este blog

Metaprogramming (Comment)

Microservices (Comment)

Is Design Dead? - Comment