I have studied design software for many years, and for many years have changed his mind about software design. Had, several times, understanding that seemed right at the time and that proved totally wrong over time, but also had understandings that keep today as possibly correct.
The great motivation for all this study and research was trying to understand what effectively is a software design – after all, I believe, there is no way to do something well if they do not understand what that something is. . This will describe now is my current understanding of software design
My current understanding of software design lists three participants:
- Supplier
- Product
- Customer
I see these three participants as high-level participants, which can be seen at any level software development. The main software – product – is the one developed by anyone or any team – supplier – and to be used by . a user – consumer
This relationship supplier, product and consumer is also perceived at lower levels of the software, for example: Library X – product – is developed by the Developer Y – supplier – and used by Developer Z – consumer . Even if I am part of a team that is developing software, all code – product – where I – supplier -. write, you consumed by rest of the team
When I realized the existence of these three participants, my view of software design has changed completely because I, as a supplier, I have so much more careful with my product and a huge respect for my customers. As a supplier, I want to offer the best experience possible to solve a problem and that delivers a great value for my customer, even if the consumer eventually will be myself.
Standards, principles and methodologies are for software design, as well as typography and the color palette are for graphic design.
For many years I thought meet a lot of design patterns, design principles, refactoring techniques and methodology development were sufficient to obtain a good design. But finally I realized that there are not enough. Standards, principles and methodologies are for software design, as well as typography and the color palette are for graphic design. Are only elements that can make the design or destroy the part.
Software Design, is that software to be consumed by the end user or one that will be consumed by the rest of the staff and integrated into the main software, is thinking in software as a product. This product should solve a problem and deliver a value to the consumer. Think about how the consumer will relate to the whole and how to make the offer to all consumers that the best resolution of your problem.
All design decisions should be measured their consequences and all absolutely all design decisions should aim to offer a value for the consumer. Because it is precisely the value delivered to the consumer of the product that defines the design. My code can have design standards n and n following design principles and still have a bad design. And you can be a bad design if I use these individual elements without thinking of the final product.
The consequences of the use of these individual elements without thinking about the final product tend to cause serious problems of design. Design problems cause problems for the product, the consumer causing problems. If the software should have the function to solve a consumer problem, and we are causing you problems, then we are not developing software, we are developing problems.
Currently I use a mental framework that is guided by questions. It’s like I was using a Socratic method myself. Whatever the design decisions that need to take the following questions always ask myself:
- What is my intention with this decision
- What is my motivation for this decision ?
- What are the consequences of that decision
Intent – What is my purpose with this
It is necessary that the intention of a decision is very clear, but that is totally focused on the product. If my intention does not have its purpose focused on the product but focused on myself, so it’s possible that this is not a good design decision.
It took me several times close to making a design decision to leave my beautiful and elegant code. The problem is that, perhaps, beautiful and elegant is my perception of my own code. Perhaps this beautiful and elegant bring maintenance issues in the future and, as stated before, problems in software cause problems for consumers
Motivation -. Why do want to do it
The whys ! This is where we realize if we are really thinking about the product and our consumers, or if we are taming random design decisions. If by questioning me about why a decision, I answer something like, “because it’s cool,” “because it is beautiful,” “because it is fashionable” or “because John Doe uses and said that’s good,” so I may have missed focus and is no longer thinking about the product
The motivation of a design decision should always be, absolutely always, add a value to the product
Consequences -.. The benefits outweigh the harm?
Having clear the intentions and motivations for a design decision, one needs to study the consequences of that decision. Are beneficial or harmful, they do exist and need to be known.
As good as my intentions and fair my motivations, do the harm caused by that decision not overcome in the future the benefits it may come to cause to be applied? And if the harm come to be higher in the future, will these evils will not corrupt the motivations, however fair they seem to be now?
I have not come to a conclusive definition of software design. It is very likely that I will change again standpoint in the future. But it is also likely that even if I change my point of view in the future, I keep my mind on the three high-level design elements and continue seeing me as a supplier of a product to be consumed. And I’ll probably keep this understanding because when I think of my code as a product, I look better product and deliver more value to my client. I realize making more responsible decisions, more mature and have caused fewer problems for my customers.
the advertiser Message :
The Mundipagg launches innovative REST API, ensuring flexibility and simplified integration. Check out our features.
No comments:
Post a Comment