When Your Softwares Check Engine Light Is On: Identifying Design Problems that Impact Software Failure

In the fast-moving world of Agile and DevSecOps, neglecting fundamental maintenance activities will likely hinder delivery of value in the long run. Although the cost of system maintenance represents a large proportion of the budget of most organizations that use software systems, insufficient maintenance may lead to various problems, including

a reduction in software quality as errors are inadvertently introduced during the development processthe inability to deliver customer value if a repair or enhancement cannot be delivered on time

Insufficient maintenance can cause a software system’s code and its underlying design to decay over time. This decay can make system maintenance cumbersome or render a system that cannot adapt to new business needs. Fortunately, there are proven approaches to identify and understand design problems and improve software performance. Just as even the most reliable car needs a routine oil change and tune-up to keep running efficiently, software development processes, design, and architecture should be routinely revisited and optimized to remain effective.

The “squeaky parts” that we are looking to detect are design problems that may potentially decrease performance or hinder maintenance. This blog post summarizes an effective roadmap for detecting design problems that can be used to improve software development and performance.

What Is a Design Problem?

A design problem results from one or more inappropriate design decisions that negatively impact quality attributes. The development and maintenance of software systems require developers to pay special attention to non-functional requirements such as maintainability, extensibility, availability, and performance. Design decisions affect each non-functional requirement in a positive or negative manner. Moreover, the existence of design problems may necessitate re-engineering or discontinuing the system.

Fundamental Design Principles

Foundational to this discussion is the premise that high performing applications follow established design principles. Let’s discuss two such principles: design rule theory and design rule hierarchy. 

Software should be structured by design rules and independent modules. In a software system, design rules are often manifested as the important

This article is purposely trimmed, please visit the source to read the full article.

The post When Your Softwares Check Engine Light Is On: Identifying Design Problems that Impact Software Failure appeared first on Carnegie Mellon University's Software Engineering Institute Blog.

This post was originally published on this site