Revenue recognition. We derive revenue from the sale of products (i.e., software, third party hardware and operating systems), support, maintenance and subscription services and professional services. For the fiscal years 2020, 2019 and 2018, revenue from international operations was 9%, 9% and 8%, respectively of total revenue. Our customer base is highly fragmented. On April 1, 2018, we adopted ASU No. 2014-09, Revenue from Contracts with Customers (Topic 606), using the modified retrospective method applied to those contracts that were not completed as of the adoption date. Results for reporting periods beginning after the adoption date are presented under Topic 606, while prior period amounts are not adjusted and continue to be reported in accordance with our historic accounting under prior guidance. Revenue recognition under Topic 606 Our customary business practice is to enter into legally enforceable written contracts with our customers. The majority of our contracts are governed by a master service agreement between us and the customer, which sets forth the general terms and conditions of any individual contract between the parties, which is then supplemented by a customer order to specify the different goods and services, the associated prices, and any additional terms for an individual contract. Performance obligations specific to each individual contract are defined within the terms of each order. Each performance obligation is identified based on the goods and services that will be transferred to our customer that are both capable of being distinct and are distinct within the context of the contract. The transaction price is determined based on the consideration to which we will be entitled and expect to receive in exchange for transferring goods or services to the customer. Typically, our contracts do not provide our customer with any right of return or refund; we do not constrain the contract price as it is probable that there will not be a significant revenue reversal due to a return or refund. Typically, our customer contracts contain one or more of the following goods or services which constitute performance obligations. Our software licenses typically provide for a perpetual right to use our software. Generally, our contracts do not provide significant services of integration and customization and installation services are not required to be purchased directly from us. The software is delivered before related services are provided and is functional without professional services, updates and technical support. We have concluded that the software license is distinct as the customer can benefit from the software on its own. Software revenue is typically recognized when the software is delivered or made available for download to the customer. Revenue for hardware sales is recognized when the product is shipped to the customer and when obligations that affect the customer's final acceptance of the arrangement have been fulfilled. Hardware is purchased from suppliers and provided to the end-user customers via drop-ship or from inventory. We are responsible for negotiating price both with the supplier and the customer, payment to the supplier, establishing payment terms and product returns with the customer, and we bear the credit risk if the customer does not pay for the goods. As the principal contact with the customer, we recognize revenue and cost of goods sold when we ship or are notified by the supplier that the product has been shipped. In certain limited instances, as shipping terms dictate, revenue is recognized upon receipt at the point of destination or upon installation at the customer site. Support and maintenance revenue is derived from providing telephone and on-line technical support services, bug fixes, and unspecified software updates and upgrades to customers on a when-and-if-available basis. These services represent a stand-ready obligation that is concurrently delivered and has the same pattern of transfer to the customer; we account for these support and maintenance services as a single performance obligation recognized over the term of the maintenance agreement. Our subscription service revenue is comprised of fees for contracts that provide customers a right to access our software for a subscribed period. We do not provide the customer the contractual right to license the software at any time outside of the subscription period under these contracts. The customer can only benefit from the software and software maintenance when provided the right to access the software. Accordingly, each of the rights to access the software, the maintenance services, and any hosting services is not considered a distinct performance obligation in the context of the contract and should be combined into a single performance obligation to be recognized over the contract period. The Company recognizes subscription revenue over a one-month period based on the typical monthly invoicing and renewal cycle in accordance with our customer agreement terms. Professional services revenues primarily consist of fees for consulting, installation, integration and training and are generally recognized over time as the customer simultaneously receives and consumes the benefits of the professional services as the services are being performed. Professional services can be provided by internal or external providers, do not significantly affect the customer's ability to access or use other provided goods or services, and provide a measure of benefit beyond that of other promised goods or services in the contract. As a result, professional services are considered distinct in the context of the contract and represent a separate performance obligation. Professional services that are billed on a time and materials basis are recognized over time as the services are performed. For contracts billed on a fixed price basis, revenue is recognized over time using an input method based on labor hours expended to date relative to the total labor hours expected to be required to satisfy the related performance obligation. We use the market approach to derive standalone selling price ("SSP") by maximizing observable data points (in the form of recently executed customer contracts) to determine the price customers are willing to pay for the goods and services transferred. If the contract contains a single performance obligation, the entire transaction price is allocated to that performance obligation. Contracts that contain multiple performance obligations require an allocation of the transaction price to each performance obligation based on a relative SSP basis. Shipping and handling fees billed to customers are recognized as revenue and the related costs are recognized in cost of goods sold. Revenue is recorded net of any applicable taxes collected and remitted to governmental agencies.