Quantify Software Characteristics

To measure to to know that increases the odd of being success

Motivation

  • Architect’s is largely to help the system have these desired qualities (fast, responsive, extensive), and to balance the inevitable conflicts and inconsistencies between them. 
  • Without objective criteria, architects are at the mercy of capricious users (“no, I won’t accept it, still not fast enough”) and of obsessive programmers (‘no, I won’t release it, still not fast enough”)
  • If these are not quantified, then there is no basis for acceptance of the system by its users, value guidance is stolen from its builders as they work, and the vision is blurred for whom architecting it. 

How to questions

  • How many ? In what period ? How often ? How soon ? Increasing or decreasing ? At what rate ? 
  • Answers of those questions should be in the business case for the system. If they are not, then the job of architect is to go to get it from the business owner. 
  • Next time if someone tell you that a system needs to be “scalable”, ask that person where new users are going to come from and why. Ask how many and by when? Reject “lots” and “soon” as answers. 

Techniques

  • Uncertain quantitative criteria must be given a range: at least, the nominal and the most
    • If the range cannot be given, then required behavior is not understood. 
    • Finding these range and checking again them is a time-consuming and expensive business.
    • If no one cares enough to pay for performance trials, then more likely performance doesn’t matter. You should be free to focus your architecture efforts on aspects of the system that are worth paying for.
  • As the architecture unfolds, it can be checked against these criteria to see if it is still in tolerance. As the performance against some criteria drifts over time, valuable feedback is obtained. 
  • Example of a good requirement: 
    • “Must response to user input in no more than 1,500 ms. Under normal load (defined    as …), the avg response time must be between 750 and 1,250 ms. Response times less than 500 ms can’t be distinguished by the user, so we won’t pay to go below that