Design as a company


This concept of think of software as a company or a real world metaphor seems really cool to me, it encapsulate a bunch of important topics in software development, and I can connect different lectures , let me explain.


Before we start to write some code for our application I like the idea to thing about the design of our software as a real-word metaphor, think of it as a factory or a team composed with different people and roles, each one with only one responsibility and working together as a whole. That is how you should look up at your software not about the classes, method and other technical stuff, you have to abstract as more as you can, because abstraction is the most important concept in programming.


Abstraction seems to be a bullet point in programming, I have read about it so many times and more when we talk about design. We live in a world full of details, a good abstraction can clarify the essence of the app. A good design let you introduce changes as if the program was crafted in anticipation of it and how easily it accommodates changes, you want to minimize coupling and maximize cohesion between your components. A good abstraction let you clarify the responsibility of that piece of software letting you know if it make sense or not.


One you have a great abstraction of the modules of your app, the responsibility thinking them as people of a team it is really easy to you to create a general structure of componentes into software layers. Layering you app let you introduce more clarearse in the responsibilities such as Configuration, Display, Communication, Storage , Logic, and others.


Abstraction let you avoid another bad thing in software development that is to predict the future, only representing the main idea in your component let you avoid thinking of future features. Maybe you are really lucky and you guest it right, but in real world it mostly do not happens and that try to predict the future adding features, fields or whatever to your components cost you the most valuable resource in software, time.


Predicting the future is hard and costly even more if you guest wrong, if you add features in advance of what you might think is coming , you might also broke the modularity of your application and you ended up with more code to maintain and that my friend is more development time to pay off and as I said before it is the most expensive resource. I will like to talk more about predicting the future in programming, but for now finish here.


In a nutshell, before start the development cycle think of your application as a real company with people with single responsibility, this let you visualize the real propose of each one and how their relationate with each other. Improving the abstraction in your application.

References