The definition of the word metric is a “standard of measurement”. Software metrics refer to countable entities that measure software. But what do we measure in software and why? The answer is straightforward.
The software development industry is a dynamic industry driven by the continuously changing requirements of end-users who always seek for nothing less than perfection. As a result, in the context of the constantly increasing demands, a software product needs to incorporate new features fast, while at the same time improving usability and performance. And of course, staying on time and on budget.
These demands are opposed to the triangle of project management, widely known as “The Triple Constraint in Project Management: Time, Scope & Cost”. According to the triple constraint, the success of any project relies on the timeframe (Time), the set of features and characteristics of the final product (Scope), and the estimated budget (Cost). Anyone can trade between the constraints of each attribute; however, changing one automatically affects the others. So, in the landscape of software development, does the triple constraint mean that we stand no chance at achieving what customers need?
To my perspective, the answer to this question relies on managing the tradeoff between time, scope and cost. And there comes the power of Metrics!
The definition of the word metric is a “standard of measurement”. As a result, the term software metrics refers to countable entities that measure software. But what do we measure in software and why? The answer to this question is straightforward. Practically everything. The reason? The more information we have, the better we assess and evaluate what our next design choice should be.
Based on their scope, software metrics can be distinguished in three main categories, each targeting a different aspect of the software development process:
Product Metrics: Product metrics refer to the source code itself and quantify specific properties such as complexity, coupling, cohesion, degree of inheritance, and level of documentation. They constitute the information basis upon quantifying several characteristics which are integral for defining the quality of the software project, such as maintainability, reusability, security, performance etc.
Process Metrics: We always have to keep in mind two things. First, a software product does not only involve its source code. Second, its progress and success are two inseparable aspects of the software development process. Thus, process metrics quantify attributes that refer to the processes involved while developing software. Such attributes are time to incorporate new features, time to resolve bugs, the effort required to reach particular quality goals, customer satisfaction based on identified defects etc.
Project Metrics: Similar to any procedure, software development is driven by people. As a result, project metrics aim at quantifying attributes that refer to the development team. Such attributes are the workload of each person, the deviation of the estimated schedule, productivity etc.
Now, having said what we can measure using metrics, it is time to think about how we can benefit from such measurements.
Metrics enable us to know the pains of our product anytime, along with the severity of each one. As a result, we can use them to identify areas that require improvement and effectively prioritize each upgrade towards minimizing the impact of the change in scope on time and cost. (Remember the triple constraint ;)). Of course, increasing the effectiveness of design choices lead to a better product and thus positively affects customer satisfaction.
Quantifying the software development process, not only from a code perspective, but also from a team perspective enables better management of the workload and thus facilitates better team productivity and developer satisfaction. On top of that, monitoring the software development process allows the early identification of bottlenecks and issues that arise. Thus it leads you to act preventively, not reactively.
In the next to come,