Featured Post

Thursday, July 2, 2020

The Theory of Software Stability

Copyright © Thought Rising 2020 All rights reserved.

Abstract



Software Stability is a software engineering theory advanced by Dr. Mohamed Fayad in 2001; however, the term "stability" in the realm of software has only recently been used by a few technology companies such as Amazon.com, While not with the same methods as Dr. Fayad has documented.  Nonetheless, The notion of Stability has entered the language of corporate America through a philosophy that urges all corporations to be good corporate citizens.  When confronted with the economic benefits both in cost savings and public perception of a commitment to stability and sustainability with respect to concerns including environmental footprint/carbon footprint, the notion arises that the concept of stability might also find a foothold in software economics.  Thus we conclude that Software Stability Theory now must be examined carefully within the the academic literature pertaining to Software Engineering.  Similarly, Dr. Fayad's notion of Software Stability deserves a proper treatment and must be taught and shared with other Software Engineers for the betterment of all software engineers.

Software Stability in a Nutshell

  1. Simplicity and Elegance of Software Architecture, Design and Coding

Software Stability theory targets a renaissance in software engineering and a return to the guiding principles of simplicity and elegance in Architecture, design and coding.  Thus, we start with the mandate that simplicity and elegance of software is a desirable characteristic, which yields superior outcomes.

In a nutshell, Software stability is both a scientific theory for rapid software engineering and it is the only software engineering practice that fully embodies the desired objectives of Agile.  It achieves this objective by emphasizing simplicity and elegance of architecture, design and coding.

The core Principle of this theory of  Software Stability is that Patterns are at the core of any software that is built.  It can also be said that anti-patterns are at the core of any software that is built.    This does not mean that software is necessarily bad if it employs one or more anti-patterns.  What it does mean is that all software can be improved and should be improved as much as possible.  To wit, this is central to the agile concept of iterative development; however Software Stability takes the notion of software improvement to another level.  The objective of a software product must be that it is architected, designed and developed with the understanding that software must be maintained and improved iteratively.

As patterns are at the core of software improvement and software innovation, Software Stability targets solutions that employ stable and reusable patterns throughout the software engineering lifecycle.  By employing optimal patterns (Software Stability Patterns) within a software architecture, design and development efforts, you can greatly improve the economics of any software product.

This point is key: Every software engineer has had the experience of discovering a powerful and new approach to modeling a specific software solution and observed the following benefits:

1) Simplified and streamlined software maintenance
2) refinement of the support model for a software product.

Software stability mandates that we employ this approach holistically thereby creating simplicity and elegance of architecture, design and coding throughout all facets of software engineering.

2. Complexity is not a Friend

Software stability stands in firm opposition to the notion that a software solution must necessarily be complex and that complexity itself is inevitable.  In fact  it is central to software stability that complexity is an anti-pattern and that you must simplify relentlessly in order to build innovative software that yields high quality and remains cost effective over time.

3. Agile is not a Silver Bullet

Agile has received a great deal of hype among all technology companies.  Yet, the fact remains that Agile has failed in software engineering organizations with the same frequency that these teams have failed in non-Agile regimes.  An exhaustive analysis of project success within Agile and Non-Agile software engineering teams would reveal few insights about what exactly has gone wrong, but it  would likely fail to raise the most important point:  Namely, that Agile Methods, such as Scrum, Kanban, Lean, and XP are not software engineering methodologies.  Rather, these are Project Management Methods.  None of these approaches prescribes how software should be engineered.  This is where Software Stability is an important software engineering approach for achieving  true and reliable Agile results.  In fact, Software Stability is the only software engineering approach that embodies the same principles detailed in the Agile Manifesto.






No comments:

Post a Comment