Home > Our Services > Software Architecture

What Is Software Architecture And Why Is It Crucial?

Architecture of any system boils down to formulating a breakdown of the system's concept into its comprising components and their interaction with each other.
Many software systems lack architecture design altogether, but even when software architecture is performed, it, more often than not, delivers only the static design of the software. Proper software architecture should also define how the different components should interact at run-time.
Identification of the composing components of a software system is called system decomposition.

Desingning the software architecture is quick and inexpensive compared to developing and testing the system. Getting the architecture right is critical because once the system is built it is extremely expensive to introduce into it modifications that the architecture was not designed to contain. Incorrectly designed architecture is expenssive to maintain or to extend and this gets worse as the system ages.
However, although designing properly sounds logical, many systems turn out to have defective architecture, or architecture which does not cater for the end user's needs. In most cases these faults are detected only after most of the code is fully or almost fully developped and tested. Correcting it by redesign is unthinkable because of high cost in time and money investment already made but maintaining and extending the faultly architected software system shall prove to be even way more expenssive and painful over time.

That is why it is crucial to get the architecture right before coding stats.

The Main Problems of the Software Industry

Low to non existent fast response to market ever changing requirements and uncontrollable rise in maintenance costs

Changes in software tend to become slower and slower as the software ages. The reason for that is that each modification in the software erodes its resilience and its robustness, thereby increasing the time required for modification with similar complexity in the future.

The increase in cost and the decay of customer responsiveness usually follow an exponential pattern as illustrated by the attached graph.

Implemeting our designs yields dramatic cost savings because it shortens the time required for changes from weeks and months to days and because it substantially prolongs the life cycle of the software.

Low Quality Software

The word "software" is almost a synonym of the word "bugs".
Vast majority of developers in the software industry have never had produced a defect-free product, regardless of their experience.
It is a common practice in the industry that an attempt to fix a defect increases the number of defects rather than decreasing it.

These and many more yeild low quality products which are QAed by the customer. No other industry would have tolerated this. On very extreme and rare cases the customers act on it, after having spent a fortune, as in the case of Hertz-Accenture Lawsuit .

Rate of success to deliver on time and on budgest

Various reports indicate the following success/failure distribution for software development projects:

  • Less than one third of them do succeed to be delivered on time and on budget to the cliet
  • 44% of them exceeded by far the budget and time initially allocated for them. It is very probable that many projects categorized in this category did actually fail but were still categorized as delivered to the customers for organization internal politics reasons. Therefore although delivered to the customer, these products are failures thereby they are either not used at all, or do not meet most of the customer’s requirements
  • The last 24% failed and were not delivered to the end users at all

Many projects that do get to be used by the customer for whom they were developed very often suffer from one or more of following problems:

  • Time required to introduce modifications and new features to the software becomes longer and longer as the system ages. At first these delays are measured by days, later by weeks then by months and even by years in extreme cases. This impairs more and more severely the marketing requirements to keep up with new demands arising from the market and to be able to respond to them as soon as possible
  • Maintenance cost of these projects increases dramatically over time
  • Exceeding by far the time and budget frames that were initially estimated and allocated for development
  • Most delivered projects require vast cross-project modifications immediately following their initial deployments
  • Reaching their end of life within a decade or two. They have to be re-written, thereby writing-off the vast investment for developing and maintaining them, that had already been invested in them. This becomes a necessity because the cost and time required to introduce changes to that software have increased to unexeptable magnitudes. Rewriting the software, also referred to as the clean slate syndrome, incures businesswize extremely high expenses and very high risk.
    In some cases such projects can be rescued but that also is a very expenssive venture

The extent of the problems is well documented on the web.

For more information ---

What Causes It

In most cases the reason for these problems is either flawed architecture design for the project or lack of it all together.

Even when design had been meticulously performed in the traditional way it is almost certainly guaranteed to run into the same problems because the architecture structure is determined by functional decomposition of the system.
Functional decomposition seems to be logical but it yeilds incorrect and rigid architecture. In fact functional decomposition is the core reason for many well known problems.

However, this is not enough. Flawed project conduct design or the lack of it extends these problems because poor project conduct may derail the project in spite of a good architecture design.

And last, but definitely not least, flawed detaild design or the lack of it may destroy a well designed architecture and well designed project because well designed architecture and project may be derailed and butchered by sloppy implementation.

Avoiding the Problem by Acting Differently

The proper way to architect software is infact counter-intuitive. We conduct software project design in three sequential steps. Each step lays the foundations for the next layer of the full design, based on what had been designed in the previous steps as follows:

  • High level Architecture design based is not based on the requirements list. We base it on the business domain's analysis as this is a stable environment unlike the requirements list. We initially define the system's Core Use Cases which are not the use cases defined in the requirements list. We also extract the volatilities list. Each such volatility is a software area bound to be broken when modifications are performed. The building blocks we design both encapsulate allocated volatilities and they also cover all business domain's aspects.
    We actually design a software framework that acts as "production line" for any feature the business domain may require. We then validate the architecture design by proving that this framework's architecture can satisfy 100% of the currently requested use cases. However, introduction of any new use case (i.e., feature) in the future simply means adding small functionality to existing software framework items in this "production line". Therefore, introduction of new a feature to the software does not change its architecture as it merely is an additional new integration of these building blocks
  • Based solely on the assets created by the first step, a meticulous project design base on Cricical Path Analysis is performed yeilding one or more options for the project's stake holders. This is where we provide accurate
  • Detailed project conduct design starts only after the high level architecture had been approved by the customer. That is the time we know, in detail, what software modules should be developed and how they should interact in order to provide the required software solution. At the end of this step we also know, in detail, how to perform the development, when to add team members to the team and when to dismiss them to receive maximum efficiency.
    This step can yeild more than one option of time/budget/risk combination. It is usually useful to present to our client's management more than one development option so they can decide which combination best fits the business needs of the organization. That also strengthens management commitment to the selected option
  • Detailed design seals the design process. Detailed Design phase always exposes issues that were not addressed during the high level architecture design. It runs hand in hand with code production. The system architect first sketches into one vertical slice of the system all the implementation details the developers must follow. The architect then is constantly reviewing the development of each module. The reason for that is a twofold: first to make sure that the implementation is conducted according to the design and the developers do not ruin the design by fusing everything together under the hood, and second to collect all the questions and dilemmas that arise during the actual implementation and bring them again to the relevant function in the business environment to get them to solve the dilemma rather than let the developer decide

We have developed computerized tools, for internal use only, that support these processes and make the information we supply in the design documents very coherent.

Software Project Architecture

We conduct project High Level and Architecture design to provide our clients with the following tangibles:

  • Preliminary analysis of the required design work. This short phase provides our customer with the full scope of the required design work and aligns the expectations
  • We begin by cunducting detailed survey for understanding issues such as:
    • The business knowledge and logic required for performing this design
    • Past experience of the client pertaining to software modification
    • User operations the software must best serve
    This survey is the foundation for high-level static design and dynamic design of the software. We initially provide this high level design in the format of power point presentation because design is better understood in graphical form rather than verbal form. This power point presentation is then formally reviewed by the customer in a Design Review [DR] to recieve the customer's approval for the design
  • Architecture and High Level Design document that defines the exact structure of the software. This is the blue-print for the project. It defines each software module so that its developer gets a written description of what the module must do
This phase ends up with the detailed design of what has to be developed and of how the different parts should be wired together.

Software Project Management

We conduct project management design, that implements the design captured in the High Level and Architecture design document, using a sound methodology that yields the development sequence for the project.
That well established methodology is Critical Path Method which was initially developed for the Manhatten project in the 1940s.
It was later used for the U.S. Navy in the 1950s with the Polaris submarine missile project.
Later in the 1960s, NASA used the critical path method as the principal planning tool for catching up and winning the race to the moon.
The critical path method literraly salvaged the much delayed Sydney Opera House project, which was completed in 1973.
It also ensured the rapid construction of the World Trade Center in New York City that was completed in 1973.

We conduct this design by the following steps:

  • We identify all the activities required for full completion of the software development in compliance with the High Level Design and Architecture document
  • We select one combination of resources (such as programmers, testing professionals, development, testing facilities availability etc.) to be allocated for the development of that project
  • We use old school engineering to determine the project's critical path. Based on that we design which development tasks should be conducted in parallel to the critical path's development, in what order, by what developer and what should the integration points between these tasks and the critical path. Then we optimize this initial design
  • From the optimized design we then derive the exact cost, time and risk factor ivolved in the development of the the software under the selected combination of resources
  • Actions described in the peceding three steps above may be re-itterated selecting different resources combination for each such itteration. That enables us to present to the decission makers of our client more than one alternative based on meticulous design
  • After management makes its choice, selecting their favorite alternative, coding may start and we conclude and submit the Project Development Design document

This methodology also makes it possible to monitor the project development in details to the extent that it makes it possible for us to detect any deviation from the plan almost immediately, thereby allowing minimum waste of time and means before getting back to track. We use for that special metric of the project's progress based on data collected constantly during the development phase.

Software Detailed Design

This is also when actual development starts. The architect makes sure that the design is implemented as intended and that it abides to development best practices.
The architect is responsible for:
  • Providing the full folder structure in the actual development environment that will accomodate the solution
  • Select one vertical slice and sketch in it the required elements in each item so that developers can have an example to follow
  • Provide a weekly track of the project, with comparison to the designed plan, to the project's stake holders. Early tracking of deviation from the plan require mild measures to get back on track, while late discovery of such deviation require much harsher measures
  • Participation in set of design reviews conducted for every development work item of the plan, including integration with other parts of the system until and including the system delivery

The Bottom Line

We utilize modern and seldom-used methodology that transforms software development into a more controlled process similar to old-school engineering. That yields the following benefits:

  • Dramatic reduction of the time required for introduction of changes into the software during its whole life-cycle (including during development) resulting in dramatic reductions of maintenance costs
  • Further dramatic cost reduction is gained because we prolong the life-cycle of the software significantly. The effect of doubling or tripling software's life-cycle on the cost needs no explanation
  • Reception of very accurate estimations of the required time, budget and risks involved before coding starts. An estimation calculated that way is far more accurate than standard estimations received by methods used by most of the software industry today