Software design patterns is worth pursuing when you want your software to be: scalable without headache, stabilize growth and flexibility, and facilitate mechanism to reduce misunderstanding.
Before we start, we should understand that a practical software lifetime is always following these 6 stages of life:
This stage is all about proof-of-concepts. You got a business idea/model and you want to prove something is working. This is the point where you hack and smash every available components to produce a prototype quickly without considering much. At this point in time, a lot of in-detailed development efforts can be skipped such as unit-testing, etc.
The objectives here are:
Things to consider:
Talent to Look Out For:
Exposure:
This stage is to properly design the first version of the product based on the data gathered from prototyping stage. Based on experience and a lot of skunk works observations, it is best to discard the prototype at all and start from scratch. The reason being not to inherit any underlying hidden mistakes created during the rapid development of the prototype.
Depending on the complexity, system designer can start considering software design patterns OR proceed to create the new product.
The objectives here are:
Things to consider:
Good indicator for release:
Talent to Look Out For:
Exposure:
This stage is to grow the product based incrementally based on the defined development process in "Reborn" stage. Anything can change overtime as long as the user consumption pattern data are agreed accordingly. This is where all forms of continuous integrations, continuous development, release strategies are applied here. Software design is subjected to change accordingly as well.
The objectives here are:
Talent to Look Out For:
Exposure:
The stage is the indicator where the product has grown close/achieved the design vision. It does not need further design complexity and is considered stable. The only developments in this stage are mostly environment fitting (e.g. OS integrations, security patches, etc).
The objectives here are:
Talent to Look Out For:
Exposure:
This stage is the indicator that the product is entering its support discontinuation/deprecation process. Usually, the product is substituted by a greater product. The only development efforts in this stage are mostly communications to all users to use the alternative solution before the deadline.
The objectives here are:
Talent to Look Out For:
Exposure:
This stage is about removing the software from its existence and its life supports. At this stage, the owner can either archive it or delete it to recover its resources for other usage.
The objectives here are:
Talent to Look Out For:
Exposure:
You can consider software design patterns as early as Rapid Prototyping stage. However, starting there might introduces a significant risk of resources wastage if the prototype turned out to be a failure.
From experience, it is at best and practical to consider the design patterns in Reborn stage when the entire product is re-designed from scratch based on the prototype.
Almost all the software products since 2000 are using this product lifetime, like the way Fuchsia OS, Go programming language, Gmail, etc did in the past.
Also, it is very common to see a lot of software did not reach maturity or substituted. Just look at Google Graveyards (or its official site). Example of death products are:
Notice that all of their dead products were using this product lifetime stages.
Normally, these are the pain points that triggers one to consider a software design patterns for needs:
Normally, when you consider software design patterns, you consider to get the following values:
The main differences between software design pattern vs naive development is:
Hence, designing a good software pattern needs principles and patterns.
That's all for the basic of software design patterns. Feel free to proceed to.next chapter.