AUTOMATED COLLABORATION ANALYTICS

A computer-implemented method for improving intercommunication and software quality among a geographically distributed team is disclosed. The method comprises automatically determining a location of each member of the team; automatically obtaining one or more objective measures of contributions by each member of the team to a collaborative project; based at least in part on the automatically determined locations and automatically obtained objective measures, calculating for each member of the team a normalized collaboration score, and based on values of collaboration scores calculated for each member of the team, generating an electronic message for delivery to a computing device to cause the computing device to act in accordance with an instruction contained within the electronic message.

FIELD OF INVENTION

This application relates to systems for and methods of automated analysis of received electronic documents, and more specifically, to systems that monitor uploads by software developers or other individuals to a repository and that track and respond to collaborative efforts by those individuals as they work on collective projects.

BACKGROUND

As organizations grow, they tend to establish more complicated hierarchies and departments, to work on projects in increasing number and with narrower scope and specialization, and to establish offices in varied locations. In response to these natural effects of the organization's growth, there is a tendency that members, employees, or affiliates of the organization will establish a niche (or be assigned a niche) and rarely venture outside that niche in their work for the organization. Although this specialized division of labor is generally more efficient for an organization, it is possible that certain assumptions, habits, practices, mindsets, etc. may become entrenched in a particular department, office, or project, and that there would be a benefit to fresh thinking being injected by participation of new individuals, or cross-disciplinary work being enabled by improved collaboration and communication.

In order to promote collaboration, communication, and cross-disciplinary work, an organization may wish to incentivize and promote collaboration between individuals who would not normally communicate or collaborate, track when such collaboration begins occurring, track the quality of the collaboration and of the results of the collaboration, and reward the collaboration.

However, present systems for tracking or rewarding collaboration are generally limited to gathering information from secondary human participants, such as receiving a personnel review uploaded by a collaborator's manager that verifies the collaborator's work in a non-standardized and non-objective format that makes comparison among individuals more difficult, and makes automation of responses to the information more difficult as well.

Thus, there would be an advantage for any organization to have a system that could automatically review collaborative work, provide objective tracking and measurement of the collaboration to enable a positive response by an organization, and automatically implement the desired positive response.

BRIEF SUMMARY OF THE INVENTION

A system for improving intercommunication and software quality among a geographically distributed team is disclosed. The system comprises one or more processors and non-transitory memory storing instructions. The instructions, when executed by the one or more processors, cause the one or more processors to automatically determine a location of each member of the team; automatically obtain one or more objective measures of contributions by each member of the team to a collaborative project; based at least in part on the automatically determined locations and automatically obtained objective measures, calculate for each member of the team a normalized collaboration score, and based on values of collaboration scores calculated for each member of the team, generate an electronic message for delivery to a computing device to cause the computing device to act in accordance with an instruction contained within the electronic message.

Similarly, a computer-implemented method for improving intercommunication and software quality among a geographically distributed team is disclosed. The method comprises, among other features, automatically determining a location of each member of the team; automatically obtaining one or more objective measures of contributions by each member of the team to a collaborative project; based at least in part on the automatically determined locations and automatically obtained objective measures, calculating for each member of the team a normalized collaboration score, and based on values of collaboration scores calculated for each member of the team, generating an electronic message for delivery to a computing device to cause the computing device to act in accordance with an instruction contained within the electronic message.

DETAILED DESCRIPTION

In order to address the issues described further above with respect to prior systems, a system is provided to enable automatic collection of data from a variety of sources concerning a collaborator's projects and contributions, and to both provide useful derived data about the collaboration to other members of the organization and have the organization's automated systems act on that data within particular contexts.

In contrast to previous systems, the presently-described system is capable of interacting with a variety of application programming interfaces (APIs) of systems internal to the organization and of external services used by the organization to gather information, and process it to form objective assessments that can be used in the future, without the need to consult human evaluators of the collaboration, or the drawbacks of relying on human-generated information.

FIG.1depicts a network of computing devices to be used in a system for improving intercommunication and software quality among a geographically distributed team.

An example organization, that could benefit from encouraging collaboration might have three offices100a-100cspread across two continents105aand105b,with a number of software developers110a-110hworking in the various offices100a-100c.Each software developer110operates a personal computer115to download communications and files from a central server cluster120; to write code, generate additional documents, or create communications for receipt by other software developers; and to transmit any code, documents, or communications back to the central server cluster120for distribution or making available to the other software developers of the organization.

In the illustrated example, developer110aworks on the same floor of office100awith developer110b.They work in a same business unit or other subdivision of the organization, working on projects with a common theme and supervisor. For example, developers110aand110bmight both work on writing software that automates the routing of messages through a network of routers to achieve ultra-low latency transmission of time-critical messages.

Additional developers110cand110dwork on a different floor of the same office100a.Although they share the same location, they are assigned to a different business unit from that of developers110aand110b,have a different supervisor, and may work on projects for a completely different aspect of the organization's products. For example, developers110cand110dmight work on systems for automatically reviewing written source code to search for possible software vulnerabilities, and for automatically determining an objective measure of how ready code is for final publication. Although they would be unlikely to work directly on a collaborative project with developers100aand100bunder normal circumstances, due to the very different niche fields of expertise, the software each group writes would at least interact with the other's, and each might have valuable insights to share with the other. Networking developers might have advice for updating automated code review to reduce false positives in detected errors, while code analysis developers might have advice for approving the efficiency of code written for the routing system.

Two more developers110eand110fwork in a separate office100bof the organization on the same continent105a.Naturally, they are likely to have a different supervisor from any of the other developers (although, with the increasing use of telework and distributed teams, this is by no means a certainty), and they may or may not be part of yet another business unit or department of the organization.

Two more developers110gand110hwork in a third office100con a second continent105b.They are even more remote from all the previously mentioned developers than any of those developers were from each other, and may or may not be part of yet another business unit or department of the organization. In an example described further below inFIG.4, one developer110gis part of the same business unit as the developers110aand110b,while the other developer110his not.

When code is uploaded to the central server cluster120, a number of external services210, described further below, may be provided access to the code for various analysis and execution tasks. Other external services210may track when developers110are contributing to various software projects within the corporation and when they solve software issues or complete features.

FIG.2depicts an exemplary configuration of devices and software modules in communication to facilitate the intercommunication and improvement of software quality.

In a preferred embodiment, a data retrieval application programming interface (API)205is used to draw data from five separate data sources210a-210e.The data retrieval API205may be hosted on a particular computing device200in the central server cluster120. In other embodiments, the computing device200may he remote from the central server cluster120—for example, if the organization uses multiple computing clusters for receiving and publishing code, and only needs one of them to actually host the project for analyzing collaboration—and use the API205to communicate with computers in the cluster120.

In virtually any embodiment, the data retrieval API205will download data from a user profile database210a.The user profile database stores the basic information about a human participant necessary to determine that a collaboration is actually occurring across departments, offices, disciplines, or other divisions, and link that collaboration to the human participant. For example, the user profile database may store each participant's name, department, office location, assigned teams, assigned projects, usernames used in various computing systems, other identifiers by which the participant may be known in other contexts, and other information related to the participant's work with the organization. In some embodiments, rather than location being an immutable attribute of the participant's employment, location may be updated based on a current location of the participant, as determined by a GPS or other location determining device in a computing device used by the participant, or as determined by an IP address or network to which the participant connects during collaboration.

In some embodiments the data retrieval API205will also download data from a feedback database210b.The feedback database may store various information generated by other users directly regarding a human participant or indirectly regarding the participant by concerning work product of the human participant or projects on which the human participant worked. This information may include performance evaluations, code reviews, past disciplinary actions, or any other form of evaluation of an individual and his or her work.

In most embodiments, the user profile and feedback databases210aand210bwould be stored locally with respect to the computing device200and would be accessed by an intranet215administered by the organization. In other embodiments, the user profile and feedback databases210aand210bcould be located remotely with respect to the computing device200, or cloud storage could be used to store this information in a location remote to and unknown by the computing device200, with the Internet220more generally being used to access information from those data sources.

In some embodiments, the data retrieval API205will also download data from a Jira database210cor other service for tracking software project issues and completion of software project sub-tasks. For example, the API205may obtain a set of support tickets, tasks, and/or story points associated with a software project, as well as which developer is assigned the ticket/task/point, or which developer has already addressed the ticket/task/point. The API is able to link software issues that have been experienced in production with a particular developer who introduced the issue or has not yet fixed the issue.

In some embodiments, the data retrieval API205will also download data from a TeamCity database210dor other service for build management and continuous integration. For example, the TeamCity database may provide information to the API205concerning the current ability of software in a project to be compiled and run, including numbers of compile-time errors, compile-time warnings, and any missing software dependencies or existing code that is no longer used by the project.

In some embodiments, the data retrieval API205will also download data from a SonarCloud database210eor other service for automated analysis of code quality. Services like SonarCloud may provide real time tinting (i.e., static code analysis) of code checked in by various developers and may provide counts of software errors, identification of anti-patterns and software “smells” (i.e., sections of code that are structured in such a way as to indicate a poor design lacking robustness), identification of potential vulnerabilities, lack of unit test coverage, or other indicators within source code itself that indicate a potential problem unforeseen by a developer could occur at runtime.

In most embodiments, the Internet220would he used to access the cloud-based data sources210c,210d,and210e.However, since these services could have a “roll your own” local implementation, or be replaced by software developed by the organization to provide similar functionality, there is no reason why external Internet access would intrinsically be needed, and that the API205might not connect to these data sources210c210d,and210evia a local intranet215administered by the organization.

In other embodiments, additional data sources may be consulted to the extent that they provide any additional information regarding an individual participant, that participant's communications with others, that participant's work product shared with others, or any other way in the participant might affect other members of the organization or the organization's projects more broadly.

When raw data is received from each of the data sources210a-210e,a scoring interpreter225is used to perform any necessary parsing, redacting, or other data conversion to make the raw data usable by other elements of the system. For example, if a response received by the API205is in an XML format and only a particular value is actually needed, the scoring interpreter may strip out unnecessary XML tags and pass on only the required value. If the response includes a JavaScript Object Notation (JSON) object or other object having a variety of attributes and values of those attributes, the scoring interpreter may store whatever logic is necessary to traverse the object and extract those data values that are relevant.

One or more scoring databases230store information gathered by the scoring interpreter225until all data has been gathered and is ready for incorporation into a total overall assessment of collaboration for each of the developers or other participants110a-110h.

A scoring engine235software module retrieves data concerning collaboration from the scoring database230and converts it into a more concise metric—ideally in the form of a numerical rating, such as a value from 0 to 10, though conceivably being expressed in a variety of alternative formats—according to a method described further below in relation toFIG.3and example output of which is described further below in relation toFIG.4.

A server240may be used to generate and serve in response to client requests a webpage or other user interface (UI)245to display information concerning the metrics determined by the scoring engine235. In a preferred embodiment, the UI245is interactive and allows functionality described in greater detail below in relation toFIG.5. An interactive UI245may be provided in the form of a hypertext markup language (HTML) webpage with client-side scripting to update the in response to the user selecting a particular individual, department, project, or other attribute in order to “drill down” and see more information related to the selected individual or entity. Alternative interactive UIs may be provided in the form of an HTML webpage that is static but has hyperlinks to additional static pages generated server-side in response to user queries; a mobile app for displaying generated data; an executable desktop application for displaying generated data; a potentially interactive document format such as a portable document format (PDF) or Excel document having scripts or macros to provide interactive functionality; or any other means of updating the display of a computing device to display more specific information to a user compared to a default data presentation, in response to the user's request to drill down. In other embodiments, information may be presented in the form of a non-interactive UI245. Non-interactive UIs may include, for example, written reports in Word, Excel, PDF, extensible markup language (XML), or other static document formats without macros or scripting; a static HTML wen page that displays similar information in a browser window; in an email, text, instant message, or other communications protocol delivering static messages; in a document sent to a printer for automatic printing and archiving in paper format; or in any other static form for the presentation of data to a human user.

The server240may store any generated UIs245until requested for download by a human user, or may preemptively push an updated UI to some other computing device that a human user expects to use to access the UI245. The server240may also work in conjunction with a credentialing server or other manager of permissions to determine which users have full access to view data concerning collaboration scores and, for other users, to provide only selectively redacted data or to prevent access to the data entirely.

In some embodiments, an action module250may further act upon the output from the scoring engine. The action module250may be connected to one or more computing devices255by a software API, by some sort of messaging queue that can process requests from the action module250, or by a data bus that transmits signals via a wired connection to said computing devices. Examples of actions the action module250might undertake may be found in discussion further below of Step335inFIG.3.

Although a particular division of functions between devices is described in the system above, other configurations are possible in which functions are divided among devices differently. For example, all of the functions of the databases210a-210e,computing device200, and cluster120may be performed by a single device with multiple threads executing different software modules simultaneously. Similarly, devices might be grouped by functionality, such that databases210a-210eare all databases stored by a single database server which is inaccessible to users, and the computing device200and its various modules are in a single server that is accessible to users and acts as the interface for obtaining; inserting, or manipulating data from the database. Alternatively, each system ear device may in fact be a cluster of computing devices sharing functionality for concurrent processing. The specific number of computing devices and whether communication between them is network transmission between separate computing devices or accessing a local memory of a single computing device is not so important as the functionality that each part has in the overall scheme.

Further, although various computing elements120,200, and210a-210eare described as if they are one computing device or cluster each, a cloud-based solution with multiple access points to similar systems that synchronize their data and are all available as backups to one another is preferable to a unique set of computing devices all stored at one location.

As is suggested by the functionality and arrangement of modules inFIG.2, a streamlined method is routinely to be used to automatically obtain collaboration data from members of a team for analysis.FIG.3depicts this method in simplified form.

First, the API205is used to request data from one or more external resources210(Step300). The request(s) for data may be asynchronously made in parallel, or alternatively may be made sequentially if there are limits on networking bandwidth or computing power that for some reason make asynchronous requests less preferable.

Next, the API waits until all responses are received to the request(s) (Step305). If no response is received within a predetermined window of time, the request(s) may be re-sent in case a network disruption or error at the recipient caused the request or its response not to be fully transmitted.

Once received, the response(s) to the request(s) are passed to the scoring interpreter for conversion or reformatting of data (Step310) to the extent necessary for storage in the one or more databases230(Step315).

If all necessary data has not yet been received and processed (Step320), for example, if the requests were sequential instead of asynchronous, the process returns to step300and selects a different external resource to query.

If all necessary data has been received, the scoring engine235generates a score (Step325) based on weighting the collected input data.

In a preferred embodiment tracking the collaboration by software developers working on a shared project, each developer associated with the shared project is assigned a numeric score between 0 and 10 according to the following metrics:If the developer is based in a different location from the project, the developer is awarded one point; if in the same location, no point is awarded. Depending on the embodiment, “location” may be defined at varying levels of stringency, ranging from “in the same building” to “on the same continent,” depending on what kind of collaborative work the organization wants to encourage. In some organizations, international collaboration and diversity may be specifically desired, while in others, perhaps collaboration between workers at different locations in a same city would be just as valuable to the organization. In some embodiments, partial points may be awarded for differing levels of remote cooperation, such as a full point for international collaboration, half a point for collaboration from a different region of a same country, and a quarter point for collaboration from a different location in a same city.If the developer is a member of a different business unit, division, or department of an organization from the one managing the project, the developer is awarded one point; if from the same entity, no point is awarded. Similar to the “location” attribute, an organization may set different point values for differing intra-organizational relationships, the structures of which will naturally be unique to that organization.The proportion of unit test coverage of the developer's is determined by SonarCloud's linter or other analysis gleaned by the data source210e,with two points being awarded for 100% coverage, one point being awarded for incomplete coverage greater than or equal to 75%, and no point being awarded if coverage is less than 75%. Organizations may wish to modify these values and cutoffs depending on the desired incentives to quality or risk tolerances.Compliance with one or more coding standards may be determined by the same linter or other analysis gleaned by the data source210e.If all expected standards are met and the code lacks any detected anti-patterns or policy violations, the developer is awarded a point; otherwise, no point is awarded.The same linter/data source210eprovides information on software defects or vulnerabilities that are present in the code, and TeamCity or the other build management service210dprovides information concerning whether the project can currently build successfully, or if instead there is a compiling error, missing dependency, or other issue that prevents the project from successfully building. If there are no detected defects and the project builds successfully, the developer is awarded a point; otherwise, no point or possibly half a point may be awarded, depending on the number and nature of detected defects.Jira or the other task tracking data source210cprovides information regarding the number of task story points that have been completed by the developer, and the number is scaled down to a predetermined range of possible points to award. For example, 21 or more story points could correspond to 3 points awarded, 15-20 story points to 2.5 points awarded, 8-14 story points to 2 points awarded, 5-7 story points to 1.5 points awarded, 3-4 story points to 1 point awarded, and 1-2 story points to half a point awarded.Finally, the timestamp(s) of the developer's contribution(s) are compared to when the developer was first added to the project. If the developer helped to deliver a code check-in with improved features within two weeks of joining, the developer is awarded a bonus point, and if the developer delivered code within a month, the developer is awarded a half point.In some embodiments, additional feedback data generated by the developer's manager, a manager of the collaborative project, or other members of the team and retrieved from the data source210bmay be used to adjust the score upward or downward based on subjective factors that are not fully captured by the objective automated systems such as Jira, TeamCity, and SonarCloud.

As a result of the above-described scoring system, an optimal contribution (cross-location and -business unit, extensive, prompt, and error free) could receive a score of 10 points, with a somewhat lower score being more typical. Examples of applying this scoring system can be found further below in the description ofFIG.4. In other embodiments, similar numerical ratings with finer scales may be used, such as systems that generate a score between 0 and 100 or 0 and 1000. In some embodiments, a more differentiable scale may be achieved by a scale with no specific maximum rating and that permit developers to pursue a “high score” that is limited only by a developer's willingness to perform actions that are associated with an increase in score. For example, if a collaboration score were to increase by ono point for every check-in of new code, developers would be incentivized to collaborate to a greater extent than if they received a score for their first check-in with no changes after subsequent check-ins.

In still other embodiments, non-numerical scores might be generated, or allocated based on a previously generated numerical score. For example, developers might receive a letter grade from “A” to “F” based on their numerical collaboration score (“A” representing a collaboration score of 9-10 out of 10, “B” representing a collaboration score of 8-9 out of 10, etc.), or might receive a color designation (along a spectrum of blue, green, yellow, orange, red, etc.) visually indicating a level of collaboration with others and similarly derived from a corresponding range of numerical values.

After the score is generated, a UI is also generated by the server240to display the score and information associated with it (Step330), which is described further below in relation toFIG.5.

In some embodiments, an additional final step involving automated action (Step335) is performed. While collaboration data is most naturally useful to inform a human manager of a participant that the collaboration occurred and to assist the manager in making future personnel and management decisions, there may be additional technical effects that are desirable to immediately accomplish without human involvement and without waiting for a human to review output of the scoring system.

For example, positive collaboration on a particular project may lead to elevated privileges for a particular user. A user could have credentials updated to allow access to or modification of files that would normally be locked for another user without as high a collaboration score. This could be accomplished by the action module250tying into a filesystem or credentialing system to automatically associate the user as privileged with respect to one or more files.

In systems where the decision whether to publish software is based on a scoring system or other fuzzy logic applied to the code under consideration, the collaboration score of the code's author could be considered as a factor in the decision, such that a higher collaboration score could cause software authored to be automatically promoted from a development environment to a production environment without requiring further human review.

After determination of a collaboration score, the system could trigger automatic download of files relevant to the collaboration to a participant's computing device, such as files created by other participants in the collaboration.

In an environment with limited resources, such as a poor network connection between two nodes in the organization's intranet, participants with higher collaboration scores could be automatically prioritized during the routing of network traffic, in comparison to traffic associated with others who generally do not collaborate or have lower-quality contributions to collaborative projects.

After determination of a collaboration score, the participant could be automatically added to a group email list or another interactive communication channel with other participants, to which the participant would not normally be invited or have access.

Other automated actions could be directed to human users, but not involve generation of or updates to the UI245. For example, an email could be automatically generated and sent to other participants in the project to notify them of the participant's collaboration and invite them to congratulate the participant and continue communicating with him or her. Similarly, text messages (SMS), instant messages, mobile computing device notifications, and other means of notifying a human user of a participant's collaboration may be generated.

FIG.4depicts sample generated scorings for members of a hypothetical team according to an embodiment described herein, in Step325ofFIG.3.

Referring back toFIG.1, a particular project might be handled by a department based in office100awith participation by developers110a,110c.and110g,who each receive scores400a,400b,and400c,respectively, determined by the scoring engine235.

Since the first developer110ais located in the same office as the project is based, he receives no points as a location score405. In contrast, the other two developers110cand110gare based in different offices and receive one point each.

Since the first developer100ais also assigned to the project as normally being part of his business unit, he receives no points for a business division score410, either. Developer110cis from a different business unit, and accordingly receives a point for his division score. Developer110g,is a member of the same business unit despite being remote from the Alice100a,and does not receive a point on that basis.

Developer110acompletes 14 story points415by adding new features and recording those additions in Jira's records of the project. In contrast, developer110ecompletes 12 story points and developer110gcompletes 10 story points. As a result, developer110areceives 2.5 points and developers110cand110geach receive 2 points.

All three developers submit code without defects420or policy violations425and thereby earn two points.

Developer110achecks in his code after three weeks430, while developer110cchecks in code after five weeks and developer110gchecks in code after two weeks. As a result, they receive half a point, no point, and one point, respectively.

As a result of these sub-calculations, the developers110receive final scores435of 5, 6, and 6, respectively.

FIG.5depicts a sample user interface for display of and facilitating action based upon calculated collaboration scores.

An interactive user interface245might be organized to display a series of projects500, such that clicking, tapping, or otherwise interacting with any project name causes the participants505associated with that project to be displayed. Associated with each participant may be any number of statistics related to collaboration scores, such as the last collaboration score calculated, the average of all collaboration scores calculated, the median of all collaboration scores calculated, an average of past collaboration scores weighted by recency to favor more recent scores, or a sum total of all collaboration scores calculated for the participant.

Selecting a participant may cause various graphs or tables510to be displayed with data concerning the participant. Examples may include a graph515showing collaboration scores over a window of time, a timeline520showing past code check-ins or other contributions to the project by the participant, a comparison showing how the participant's collaboration scores compare to other members of the project, or a list of past software issues obtained from Jira or the similar data source210cand solved by or introduced by the participant's contributions.

Various visual indicators may be included throughout the interactive user interface245to dray attention to or give context to data. For example, collaboration scores may be rendered in a font color that changes based on the value of the score in an absolute sense, or compared to other members of a team or generally. Projects may similarly be displayed with particular colors or other font effects to indicate a particularly high or low level of collaboration occurring Within that project.

A search bar525may also be used to quickly filter out information unrelated to a particular project or participant of interest entered by a user into the search bar.

AlthoughFIGS.1and2depict a preferred configuration of computing devices and software modules to accomplish the software-implemented methods described above, those methods do not inherently rely on the use of any particular specialized computing devices, as opposed to standard desktop computers and/or web servers. For the purpose of illustrating possible such computing devices,FIG.6is a high-level block diagram of a representative computing device that may be utilized for each of the computing devices and/or systems to implement various features and processes described herein. The computing device may be described in the general context of computer system-executable instructions, such as program modules, being executed by a computer system. Generally, program modules may include routines, programs, objects, components, logic, data structures, and so on that perform particular tasks or implement particular abstract data types.

As shown inFIG.6, the components of the computing device may include (but are not limited to) one or more processors or processing units600, a system memory610, and a bus615that couples various system components including memory610to processor600.

Processing unit(s)600may execute computer programs stored in memory610. Any suitable programming language can be used to implement the routines of particular embodiments including C, C++, Java, assembly language, etc. Different programming techniques can be employed such as procedural or object oriented. The routines can execute on a single computing device or multiple computing devices. Further, multiple processors600may be used.

The computing device typically includes a variety of computer system readable media. Such media may be any available media that is accessible by the computing device, and it includes both volatile and non-volatile media, removable and non-removable media.

Program/utility650, having a set (at least one) of program modules655, may he stored in memory610by way of example, and not limitation, as well as an operating system, one or more application software, other program modules, and program data. Each of the operating system, one or more application programs, other program modules, and program data or some combination thereof, may include an implementation of a networking environment.

The computing device may also communicate with one or more external devices670such as a keyboard, a pointing device, a display, etc.; one or more devices that enable a user to interact with the computing device; and/or any devices (e.g., network card, modem, etc.) that enable the computing device to communicate with one or more other computing devices. Such communication can occur via Input/Output (I/O) interface(s)660.

In addition, as described above, the computing device can communicate with one or more networks, such as a local area network (LAN), a general wide area network (WAN) and/or a public network (e.g., the Internet) via network adaptor680. As depicted, network adaptor680communicates with other components of the computing device via bus615. It should be understood that although not shown, other hardware and/or software components could be used in conjunction with the computing device. Examples include (but are not limited to) microcode, device drivers, redundant processing units, external disk drive arrays, RAID systems, tape drives, and data archival storage systems, etc.