Abstract:
A method for measuring frustration experienced by a user of a system, which method comprises: (a) requiring the user to initiate the method; (b) after a delay time, requesting the user to provide a frustration number representative of the frustration caused by the delay time; and (c) recording the frustration number provided for that delay time such that it is relateable to that delay time, wherein the frustration number is stored in conjunction with the delay time.

Description:
FIELD OF THE INVENTION  
       [0001]     The present invention relates to a method for testing a system to determine the likely frustration that will be experienced by users of a system, and percentage of users likely to abandon the system. The invention relates in particular to computer or software systems that can be used simultaneously by many users, and to frustration caused by delay times between the request and delivery of information in such systems.  
       BACKGROUND OF THE INVENTION  
       [0002]     In computer systems that can be used simultaneously by many users, it is often desirable to be able to test and monitor the performance of the systems. Such systems are known as “transactional servers” and common examples are web sites, web applications, telephone applications and web services. In such systems devices such as computers, mobile phones, telephones and mobile devices connect over a network to a transactional server where they can access information or applications on the transactional server.  
         [0003]     There are advantages to the user of a transactional server if the server does not exhibit long delays during the downloading of pages or servicing of requests. Users typically become frustrated if they are made to wait many seconds, for example for a page to download, and may eventually abandon a transactional server. This can be very costly for the owners of the transactional server in terms of lost business and lost customers. Many transactional server owners and operators therefore wish to test the performance of their transactional servers to ensure that a typical user will not be made to wait long periods of time during their time connected to it. Following initial testing, the transactional server can then be modified and re-tested to ensure that the performance is satisfactory to the owner or operator.  
         [0004]     There exists a wide variety of commercially available software tools, known as load testing or monitoring tools, for testing and monitoring the performance of transactional servers such as web sites or web services. Examples of such tools are the Advanced .NET Testing System® product of Red Gate Software Ltd, LoadRunner® by Mercury Interactive Inc, Silk Performer® by Segue Inc, and ACT® and Homer® by Microsoft Inc. These tools are typically used on transactional servers that are not yet deployed or launched. Testing will often be done to ensure that a transactional server will be able to support the number of users anticipated to be using it once it is launched.  
         [0005]     Load testing tools are designed to predict how well a transactional server will perform when it is in use by a number of users. Information that can be produced by load tests of systems such as web sites is generally of the form of a measurement indicating the average page download time for X concurrent simulated users. The average page download time is generally given as Y seconds.  
         [0006]     In use, a load testing tool will simulate a number of users using a transactional server. A tool may measure any or all of the following: the time taken for information to be transferred from the server to the users; the quantity of data transferred to users; whether or not information requested by a user has been delivered correctly.  
         [0007]     The results of load tests can be enhanced by the use of statistical processing and used to generate histograms, averages, graphs and charts for displaying to the test users. A large amount of data can be obtained from a load test and consequently it can be a daunting task for a test user to attempt to analyse the results and interpret them in the context of the transactional server tested. What is important to a person viewing the results of a load test is usually the simple question of how the server&#39;s performance will be perceived by its users. However, it is a disadvantage of current systems that the person will be supplied with a series of figures or graphs, and will not easily be able to conclude whether or not the server&#39;s performance is adequate. For example, it may be calculated that a system being used by 300 simulated users concurrently produces an average download time of 3.2 seconds with a standard deviation of 1.3 seconds. It is very subjective to conclude from this data whether the performance of the system is good or poor, or how the system would be perceived by users.  
         [0008]     The capacity of other systems such as telephone systems can be measured by a well understood theory commonly known as ‘Queuing Theory’. The key elements of this work were conducted by a Danish Mathematician A. K. Erlang who first published work on this is  1909  and which has been extended since then. Queuing Theory addresses the questions of how much capacity should be built into a system which is composed of discrete units of capacity. It is commonly used to predict how much capacity is required for some transactional servers such as telephone systems, typing pools, call centres, bank customer points and other analogous systems. Queuing Theory&#39;s main unit is the ‘Erlang’ which is a measure of the probability that a user will be able to use a system immediately when they try to access the system (an example of this is the probability that the telephone is engaged when you try to call your bank).  
         [0009]     There is an extension to queuing theory that touches on the nature of the present invention which is sometimes known as the Erlang C problem. This relates to a probabilistic calculation of the length of time someone will be made to wait for a system with a given number of erlangs (and some other information). (An example of this is the situation when a person calls a bank and an automated voice tells him that no one can take his call at the moment but please hold and someone will be with you as soon as possible—the Erlang C problem is about probabalistically calculating an average wait time).  
         [0010]     Embodiments of the present invention tie into the Erlang C problem by determining what an acceptable wait would be by measuring the frustration and abandonment of real users in a similar system and predicting what the likely frustration and abandonment characteristics would be. 
        http://www.users.cloud9.net/˜stark/ctappd.pdf—provides a good overview of Queueing Theory and discusses the Erlang C problem.        
 
         [0012]     Once a transactional server has been deployed and is in use by a number of users, it is often desirable to monitor the performance of the server to ensure that it is capable of supporting the number of users wishing to access it. Monitoring will often be carried out regularly and frequently. Examples of software tools and services for monitoring performances of transactional servers are Uptime® and AppMonitor®, and companies such as Alertsite.com Inc, Spyn and Webmaster solutions offer transactional server monitoring services. Monitoring tools typically work by simulating one user making many thousands of uses of a system on an regular or continuous basis.  
         [0013]     An example of a benchmark often used in transaction server monitoring is the average download time of a page of information or file of html from a web site. This is sometimes called a page download time. Although this is interesting information, it has two important disadvantages. Firstly, it doesn&#39;t provide an idea of business impact. Secondly, a distribution of results with a large standard deviation cannot be distinguished from a distribution with a small standard deviation.  
         [0014]     Another benchmark often used in monitoring is the average availability of a live site. This is useful to know, but it doesn&#39;t give any information about the satisfaction of users using the site. For example, a site may be available but many users may be leaving due to frustration at the slow response times.  
         [0015]     The above-mentioned problems with presenting load test and load monitoring data to users exist partly because of the lack of reliable research to determine the length of delay that transactional server users are typically willing to tolerate. It is not known how frustrating an average user would find a particular page download time. In view of this, it becomes difficult for the owner of a web site to determine from results of a load test whether the web site&#39;s performance is acceptable, and if so, just how good or bad it will be perceived to be by a user.  
         [0016]     Some research has been carried out in this respect. In a particular study, described at http://psychology.wichita.edu/surl/usabilitynews/1s/time_delay.htm, users were asked to rate on a scale from 1 to 5 their frustration at using an unfamiliar application running on a transactional server. The results were then averaged for different download times (see  FIG. 1 ). The survey was trying to measure usability of the application concurrently with frustration and the results are unclear as to whether users were frustrated by poor application design or delays. The specific criteria are: “Frustration &amp; Task Difficulty are on a 5-point scale with 1=no frustration and very easy and 5=lots of frustration and very difficult” The mixing up of these two criteria at the point of entry by the study subjects makes the separate criteria hard to quantify individually.  
         [0017]     Furthermore, this study suffers from the fact that the users taking part in the survey had been informed about the study and were therefore anticipating delays. This would create a false, unrealistic environment. The users were not simply “surfing the net” or searching for particular information, but were participating in a study and may therefore be less likely to be frustrated by delays or to give realistic ratings of their frustration. Indeed, the results of this survey are in general contrary to what would be expected. For example, users were measured as being more frustrated by small delay times than by larger ones. The results would therefore seem to be invalid. Additionally, we know that in reality people abandon applications that perform poorly but this result is never seen in these experiments as the experiments provide no way of simulating users abandoning a system.  
         [0018]     Other research includes tests in which participants were given financial rewards for taking part. Again, this is unlikely to provide reliable results since the participants were in an unrealistic environment and would be less likely to be frustrated by delays due to the fact that they would receive a reward for taking part. In other tests, participants were required to complete complex tasks on transactional servers and rate their frustration. Once again, this produces an unrealistic situation in which a participant is aware that he is being tested and the study is unlikely to yield useful results due to the concurrent testing of usability and download delay frustration.  
         [0019]     Results of such research are more accurate and more valid if a large number of people are involved in the research such that a large amount of data can be obtained and analysed. Thus far, there has been no large-scale survey or research attempted.  
         [0020]     It is a problem of existing research in this field that account has not been taken of the type of data that a user is waiting for when being tested for frustration levels. Web site users may be willing to wait for longer periods for certain types of data such as street maps or flight availability details than for other types such as news reports. If research is carried out on a particular web site providing only a type of information that users are generally willing to wait for, this may influence a user&#39;s expectations, and therefore may affect how frustrated a user feels at being made to wait for pages to download.  
         [0021]     There do not appear to have been any studies conducted which aim to link frustration at using a transactional server with likelihood of abandonment of the server.  
         [0022]     It is an object of the present invention to overcome the above-stated problems associated with the prior art methods and in particular with the presentation of load test and monitoring results.  
         [0023]     It is also an aim of embodiments of the present invention to allow providers of transactional servers to improve or tailor their servers by providing an improved method for correlating download times or request servicing times with user frustration and with abandonment probabilities. It is a further aim of embodiments of the invention to link frustration measurements with abandonment measurements, thereby producing meaningful test data which can be used by providers of transactional servers in improving their systems.  
       SUMMARY OF THE INVENTION  
       [0024]     According to a first aspect of the present invention there is provided a method for measuring frustration experienced by a user of a system, which method comprises: (a) requiring the user to initiate the method; (b) after a delay time, requesting the user to provide a frustration number representative of the frustration caused by the delay time; and (c) recording the frustration number provided for that delay time such that it is relateable to that delay time, wherein the frustration number is stored in conjunction with the delay time.  
         [0025]     In embodiments of the invention, the delay times could suitably be predetermined or random.  
         [0026]     The method can suitably be used in the context of web sites such that a web page is displayed to the user requesting the user to press a button or follow a link to initiate the method, and after a delay time a further web page is displayed to the user requesting the user to enter a frustration number representing the user&#39;s frustration caused by the delay time.  
         [0027]     According to a second aspect of the present invention there is provided a method for providing a series of weighting factors, which weighting factors relate to delay times experienced by users of a system, which method comprises: (a) defining a series of delay time intervals; (b) calculating a single frustration number for each delay time interval, from recorded frustration numbers representative of frustration experienced by a user of a system due to delay times exhibited by the system; (c) optionally normalising each single frustration number to produce a single normalised frustration number for each delay time interval; (d) defining a weighting factor for each delay time interval as the single frustration number for that interval, or the single normalised frustration number for that interval.  
         [0028]     This method advantageously produces weighting factors that accurately represent user frustration for any given delay time interval based on data correlating delay times and frustration experienced by users.  
         [0029]     According to a third aspect of the present invention there is provided a method for determining a frustration coefficient (the Red Gate Frustration Coefficient™) for a system prone to one or more delay times, which frustration coefficient is representative of the frustration caused to a user by the delay times in the system, which method comprises: (a) testing the system to determine one or more delay times to which the system is prone; (b) determining the number of delay times exhibited by the system within each one of a series of pre-defined delay time intervals; (c) for each delay time interval, multiplying the number of delay times exhibited by the system in that interval by a weighting factor associated with that interval, to produce a frustration coefficient for each interval; and (d) calculating a frustration coefficient for the system from the frustration coefficients of the delay time intervals.  
         [0030]     This method is preferably used in conjunction with transactional server tests or monitoring. The results of a measurement are combined according to the method with weighting factors to produce a frustration coefficient for a transactional server. The frustration coefficient is advantageously a single number that represents how frustrating a typical user would find the server to use. This frustration coefficient is very easily interpreted and indicates clearly the performance of the transactional server.  
         [0031]     According to a fourth aspect of the present invention there is provided a method for determining a frustration coefficient for a system prone to one or more delay times, which frustration coefficient is representative of the frustration caused to a user by the delay times in the system, which method comprises: (a) recording a series of frustration numbers representative of frustration experienced by a user of a system due to delay times exhibited by the system; (b) providing a weighting factor for each of a series of pre-defined delay time intervals, based upon the recorded frustration numbers; (c) testing a system to determine one or more delay times to which the system is prone; and (d) determining a frustration coefficient for the system based upon the weighting factors and the number of delay times exhibited by the system in each of the pre-defined delay time intervals.  
         [0032]     Preferably, the determined frustration coefficient takes into account any users who abandoned the system in that or any previous intervals by ascribing to them a frustration value representing a maximum level of frustration.  
         [0033]     According to a fifth aspect of the present invention there is provided a method for measuring an abandonment profile of a system, which method comprises: (a) requiring the user to initiate the method; (b) after a delay time, requesting the user to provide an indication relevant to the delay time; and (c) recording the indication provided for that delay time such that the indication is relateable to the delay time, wherein if the user abandons the system during that delay time, the indication is an abandonment indication.  
         [0034]     According to a sixth aspect of the present invention there is provided a method for providing a series of ratios, which ratios relate to an abandonment profile of a system, which method comprises: (a) defining a series of delay time intervals; and (b) calculating a ratio for each delay time interval, from pre-recorded indications representative of an abandonment profile of the system, which ratio is represented by the total number of abandonment indications recorded for each delay time interval to the total number of indications recorded for that interval.  
         [0035]     Preferably, the method according to the sixth aspect of the invention allows abandonment to be taken into account if it occurred prior to a given delay time interval. This results in an accurate abandonment profile.  
         [0036]     According to a seventh aspect of the present invention there is provided a method for determining an abandonment coefficient (the Red Gate Abandonment Coefficient™) for a system prone to one or more delay times, which abandonment coefficient is representative of the likelihood of a user abandoning the system, which method comprises: (a) testing the system to determine one or more delay times to which the system is prone; (b) determining the number of delay times exhibited by the system within each one of a series of pre-defined delay time intervals; (c) for each delay time interval, multiplying the number of delay times exhibited by the system in that interval by an abandonment percentage associated with that interval, to produce an abandonment coefficient for each interval; and (d) calculating an abandonment coefficient for the system from the abandonment coefficients™ of the delay time intervals.  
         [0037]     According to an eight aspect of the present invention there is provided a method for determining an abandonment coefficient for a system prone to one or more delay times, which abandonment coefficient is representative of the likelihood of a user abandoning the system during one of the delay times, which method comprises: (a) recording a series of indications representative of an abandonment profile of the system; (b) providing an abandonment percentage for each of a series of pre-defined delay time intervals, based upon the recorded indications; (c) testing a system to determine one or more delay times to which the system is prone; and (d) determining an abandonment coefficient for the system based upon the abandonment percentages and the number of delay times exhibited by the system in each of the pre-defined delay time intervals.  
         [0038]     Preferably, test data acquired in accordance with embodiments of the present invention can be used to enable efficient modification of a transactional server system so that the delay times associated with the system can be improved.  
         [0039]     Advantageously, the methods in accordance with embodiments of the present invention allow frustration data to be obtained in a way that does not prejudice a user before the user is required to submit a rating of his or her frustration. Minimal information is given to the user before the method is initiated to ensure that the user&#39;s evaluation of his frustration is not tainted by prior knowledge of the nature of the method. In this way, realistic and reliable information can be achieved correlating delay times with user frustration. This information can then be used in the improvement of systems. The causes of the delay times can be investigated, and the system can be modified to give delay times that correspond to satisfactory system performance. Modified versions of the system can be re-tested in accordance with embodiments of the invention so that the effects of modifications can be measured to simulate the system&#39;s performance as seen by simulated users.  
     
    
     BRIEF DESCRIPTION OF DRAWINGS  
       [0040]     The invention will now be described with reference to the accompanying drawings, in which:  
         [0041]      FIG. 1  is an example of prior art frustration research results;  
         [0042]      FIG. 2  shows a method for measuring frustration;  
         [0043]      FIG. 3  illustrates the steps of a method for determining a frustration coefficient of a system;  
         [0044]      FIG. 4  shows a sample of results analysed in accordance with the present invention; and  
         [0045]      FIG. 5  shows examples of web sites analysed in accordance with the present invention. 
     
    
     DETAILED DESCRIPTION OF THE INVENTION  
       [0046]     The invention is described herein with reference to a particular non-limiting embodiment. According to one particularly preferred embodiment, a survey is carried out on a web site. The survey is intended to produce a series of data correlating page download delay times with users&#39; evaluations of the frustration caused to them by the delays. The survey is described below with reference to  FIG. 2 .  
         [0047]     On following a link to a particular web page  1  of the web site, a user will be invited to take part in a survey. The page  1  contains a link  2 . When the user follows the link  2 , the user will experience a delay before a further web page  4  is displayed. The length of this delay is pre-determined by software controlling the web site. The delay is randomly generated and is known by the software. In the present embodiment, the delay time is between 0 and 30 seconds. During the delay, the user will do one of three things: abandon the web site; click a “refresh” button in an attempt to speed up the download of the further page; or wait until the further page  4  appears without clicking any links or buttons.  
         [0048]     In the event that the user abandons the web site during the delay, the time taken for the user to abandon after following the link  2  is preferably recorded by the software running the web site. It can reasonably be assumed that the user was very frustrated by the delay, and a frustration number representing a maximum level of frustration will be assigned to this user and recorded.  
         [0049]     In the event that the user clicks a refresh button during the delay, an indication that the user refreshed is recorded such that it can be related to the delay time. A refresh indication can give useful information about the length of time a user is willing to wait before he or she starts to become sufficiently frustrated to click “refresh”.  
         [0050]     Optionally, a frustration number supplied by a person who has refreshed can be omitted from the collected test data, and a separate indication can instead be provided to indicate that the delay time experienced by that person was unacceptably long.  
         [0051]     After refreshing, the page  4  will be shown immediately to the user. Page  4  displays an invitation to the user to enter a number (5) on a scale of 1 to 10 representing the level of frustration caused by the delay, with 1 representing no frustration (i.e. a short time) and 10 representing a high level of frustration (i.e. a very long time, as perceived by the user). The user will then respond to the invitation, and the frustration number given will be recorded.  
         [0052]     In the event that a user waits for the page  4  to download without abandoning or refreshing, the frustration number (5) provided by the user may be stored in a frustration database  3  in such a way that it can be related to the predetermined delay time.  
         [0053]     In a case of abandonment the information recorded is typically stored in the frustration database  3  in such a way that the frustration number can be related to the length of the pre-determined delay time, and an indication that the user abandoned the web site can be related to the delay time.  
         [0054]     In a case where a user refreshes, the frustration number  5  is stored in the frustration database  3  in such a way that it can be related to the time before the refresh button was clicked (that is, the time taken for the page  4  to download).  
         [0055]     After the process illustrated in  FIG. 2  has been repeated a number of times (shown as step  10  in  FIG. 3 ) using a number of delay times and preferably a number of users, the data stored in the frustration database  3  is then analysed (step  11  in  FIG. 3 ).  
         [0056]     A suitable technique for analysing the results of the research  10  is as follows.  
         [0057]     The pre-determined delay times between 0 and 30 seconds are split into a series of intervals. The intervals selected are not especially limited and should in general be determined according to the range of delays typically found in the type of system under investigation. Generally the time delays represented in the highest interval should be comparable with the maximum delay that the user was subjected to after following link  2 . In the present embodiment the intervals are preferably: 0-0.5 seconds; 0.5-1 second; 1-5 seconds; 5-10 seconds; 10-15 seconds and &gt;15 seconds (shown as  20  in  FIG. 4 ) since these intervals are particularly appropriate when testing a web site, since delays experienced by web users are generally of comparable lengths to these intervals.  
         [0058]     For each interval, the frustration numbers related to delay times within that interval are averaged to produce a single frustration number for the interval. In this example, this will produce six single frustration numbers, each one associated with a delay time interval.  
         [0059]     As alternatives to averaging the frustration numbers, an algorithm or formula could be derived and used to determine single frustration numbers, or the frustration numbers could be fitted to a curve of frustration number against delay time and this could be used to determine the single frustration numbers.  
         [0060]     The single frustration numbers are then optionally normalised. A preferred way of normalising the single frustration numbers is multiplying by  10  and rounding to the nearest integer. This produces a series of six weighting factors ( 12  in  FIG. 4 ) between 0 and 100, each one associated with a delay time interval  20 .  
         [0061]     In a similar way, abandonment coefficients™ are calculated. For each defined delay time interval  20 , the number of users abandoning the web site within that time interval is calculated as a proportion of the total number of delay times falling within that interval. In this example, this produces six abandonment ratios. The abandonment ratios are then optionally normalised. In a preferred embodiment, the ratios are expressed as percentages  13  which represent a likelihood for a given time interval that a user will abandon a web site if a page has a download time in that interval.  
         [0062]     The abandonment coefficients™ and weighting factors for frustration obtained as described above can be applied to results of standard load tests  14 . In this manner, the  FIGS. 15 and 16  can be derived to describe the performance of a web site in a meaningful way.  
         [0063]     As mentioned in relation to prior art load testing tools, when a load test is carried out, much data  14  is produced describing how a tested transactional server performed when in use by a number of simulated concurrent users. An example of the information that can be obtained is the time taken for each of a number of pages to load. Using a series of time intervals  20  as defined above, the number of pages having loading times in each of the intervals  20  can be determined  14 .  
         [0064]     From the example load test results shown at  14  in  FIG. 4 , it can be seen that during the simulation, 24 pages took between 0 and 0.5 seconds to load; 25 pages took between 0.5 and 1 second to load, and so on.  
         [0065]     The number  14  in each interval  20  can now be multiplied by the weighting factors  12  calculated in step  11  of  FIG. 3 . The weighting factors take into account the relative frustration felt by users made to wait different times for pages to load. By multiplying the weighting factors  12  with the results  14 , a series of coefficients  24  are derived. The sum of these coefficients represents the total frustration experienced by all simulated users of the transactional server during the load test. In this example, the total figure is  3115 . This figure is translated into a frustration coefficient  15  on a scale between 0 and 100 by dividing it by the total number of simulated page downloads during the test, in this example 100. The frustration coefficient for this load test is therefore  31  (rounded to the nearest integer).  
         [0066]     Similarly, a coefficient can be produced from the basic load test results to represent how likely an average user would be to abandon the server.  
         [0067]     For this, the results  14  are multiplied by the abandonment percentages  13  to produce a series of  FIGS. 25 . These FIGS.  25  are then summed to give a total of 8.75. This represents how likely a user would be to abandon the transactional server if it performed as it did during the load test. The total can be rounded to the nearest integer. In this example, the final abandonment coefficient  15  is 9%, that is, roughly one in ten users would abandon the server.  
         [0068]     A person analysing the results of the load test can see at a glance how well the transactional server performed during the load test. A frustration coefficient of  31  represents a fairly poor performance. Zero would mean that every user was perfectly satisfied with the server and was never subjected to delays, and  100  would mean an unacceptable performance with users being so frustrated that they will abandon the system.  
         [0069]     The person analysing the results would probably wish to refine the transactional server&#39;s performance in order to achieve an improved frustration coefficient  15  and abandonment coefficient  16 . After making various adaptations to the server, the person may wish to carry out a further load test. Simple software could then produce a further frustration coefficient  15  and abandonment coefficient  16  to inform the person clearly as to whether the adaptations were effective in improving the server&#39;s performance.  
         [0070]     A preferred technique for analysing the frustration test data is to convert it to a function of the form F=F(t), where F is the average measure frustration, F(t) is a polynomial, and t is the delay time.  
         [0071]     Similarly, a preferred technique for analysing the abandonment test data is to convert it to a probability density function A=A(t), where A is the percentage of users who would have abandoned for a given delay time t. A(t) is a polynomial function of t.  
         [0072]     The above formulae can be combined to provide a true prediction of user frustration F c (t). F c (t)=(1−A(t))×F(t)+A(t)×F max , where F max  is the maximum assignable level of frustration (e.g.  10  in the embodiment shown in  FIG. 2 ).  
         [0073]     Data analysis of the kind described above is well known to those skilled in the arts of system measurement and load testing.  
       EXAMPLES  
       [0074]      FIG. 5  shows the results obtained when four web sites were tested and then analysed in accordance with the present invention. Web sites A, B, C and D have 6, 9, 5 and 13 pages respectively. Download times were measured for each of these pages and are shown in the tables of  FIG. 5 . The results were then combined with the weighting factors calculated according to the present invention. A frustration coefficient was determined for each web site by the steps shown in the tables. It should be noted that although in this example web page download times have been used, the present invention is equally applicable to web services having delay times due to requests being serviced.  
         [0075]     The results in  FIG. 5  show that web sites A and B, although having different distributions of download times, have very similar frustration coefficients™ ( 20  and  21 ) meaning that the two web sites perform reasonably equally in terms of delay times.  
         [0076]     Web site C has only 5 pages, but the download times were fairly long and therefore a high frustration coefficient ( 60 ) was obtained. Web site D performed well during the testing, with only 3 of the 13 web pages taking longer than a second to download. The frustration coefficient of this web site is 8, indicating that potential users of the web site would not experience lesser frustration in using the web site.