This article is relevant if you are looking to model and build NetSuite Sales Orders practices in a manner that allows you to scale your business operations. While these concepts are applicable to NetSuite Opportunities and Estimates (Quotes), the ideas presented are meaningful any place where you need to increase your transaction throughput while maintaining management control.
Background
More than any other business record across my client base, the NetSuite Sales Order gets the most attention. It’s without wonder: the sales order represents the best place to capture the commitment to deliver products and services between my client business operations and their customers. To earn and hold trust, getting clear about our commitments is fundamental to being able to consistently deliver on what we promise.
As the number of orders increase, we can be overwhelmed by the sheer number of transactions that need attention in a short period of time. Thus, in my Advanced Growth client organizations that seek to stay on top of their commitments, they need help. The NetSuite Sales Order, by itself, is insufficient to communicate what is necessary to act with high velocity; and here is why.
NetSuite Sales Order Approval Status is Insufficient Alone
Since NetSuite is a powerful, yet general purpose ERP solution, the Sales Order Approval Status is a simple state machine designed to accommodate two very basic situations:
- Prevent Fulfillment: If an order is not approved, the item fulfillment transaction can not begin. Meaning, don’t release the order to shipping.
- Prevent Item Commitment: See my related NetSuite Back Order article so that inventory does not get tied up and allocated to other orders.
To make the operation more scalable, NetSuite offers some built-in bulk tools to allow you to move Sales Orders from the Pending Approval to Pending Fulfillment state. NetSuite’s general thinking on this order approval domain is to use the platform to build custom logic and the built-in state machine to help determine which orders are ready to be fulfilled.
Qualifying Orders to Meet Management Criteria
Standing back from the situation, the first order of business to build scalable sales order operations is to qualify orders to meet management criteria. To do this effectively takes contemplation and planning. In my article, Learn how to Manage any NetSuite Record by Exception, I offered 18 different transaction situations for which are often considered by my clients as they qualify an order before they release it for fulfillment. No doubt, you will be concerned by some of these and other considerations not stated.
Different Business Lines Demand Different Status Criteria
While contemplating the pattern, it is important to highlight that a different business line will have varied order criteria. For example, an eCommerce sales channel may need to know that credit card payments are not on anti-fraud check hold. Whereas the Wholesale operations channel needs to make sure that a customer’s new order does not exceed their available credit terms. Finally, the Manufacturing operations needs to know they have sufficient raw materials to deliver on a new production work order. The point is that we may have multiple business lines naturally have different and overlapping business concerns.
Scalable Business Operations Demand Exception Management
The key to scalable business operations is to move to transaction exception management. Yet, the only way to work in an exception management mentality is to know what constitutes the desired set of transaction outcomes so that we can build a high throughput, yet low cost standard business practice so we can indeed act in a high velocity fashion. Thus, we must be able to do the following if we are going to succeed:
- Determine Possible States: we need to be able to specify the possible transaction state. NetSuite’s “Pending Approval” and “Pending Fulfillment” may simply be too generalized — yet we can organize around the basic rule.
- Specify Criteria or Rules: we need to know what we care about under all anticipated situations. I like to call these the transaction rules. Sometimes, we simply do not have enough information as we are crafting an order; no worries, our rules can be designed to anticipate this.
- Inspect Transaction State: we need to be able to look at a transaction and compare it to each and every matter or situation we care about.
- Identify Pass / Fail Status: we need to see if the transaction passes or fails our rules. If it fails, provide an informative message as to why.
- Move to Next State: If the transaction passes the rules we specify, we should be able to move it to the next desired state. If needed, we can nest this automatic inspect and move operation on behalf of our users — let the computer do work and preserve valuable human energy.
- Trigger Other Transactions: If a record meets a desired business state, it may be natural to create another transaction. For example, why not automatically create an item fulfillment record if the sales order meets all management criteria? We should not have to ask the user to “push any buttons”. Thus, why can’t we can go all the way from order to cash if we have gathered all the information needed to do so?
- Summarize and Queue: Since we are going to be working with a large number of transactions, we need to be able to summarize information in a meaningful manner so that we can design for high energy demand situations — or we can relax because we have sufficient capacity to act.
Where NetSuite’s Workflow Obscures What is Needed
At this point, experienced NetSuite individuals are saying “Obviously, use NetSuite Workflows to build transaction exception management”. While NetSuite Workflow is the “standard offer” to help address transaction state, as a framework, it is challenging to use in a scalable implementation:
- Reach: The NetSuite workflow engine, while improving with subsequent releases, does not give you all the tools you need to reach into the application environment for inspection. In due course, as all NetSuite Administrators learn, you will need to create Workflow Action Scripts to use native SuiteScript to extend your logic reach.
- Sequencing: The workflow engine can not sequence itself relative to other workflows. Workflows also run after SuiteScripts. Thus, to ensure an exact sequence means you can only use one workflow. This design pattern becomes quite difficult to maintain as the number of states and inspection points grow.
- Visibility: When looking from the transaction perspective, there is very little available to the business user to quickly see rules that have passed or failed and for what reason. Have you ever reviewed the information within the Active Workflows and Workflow History tabs to make it actionable?
- Overrides: Sometimes, situations demand assessment that are not codified. Some rules are too complex and may need management to override. The NetSuite Workflow engine requires this concern to be addressed as yet another state versus what is really needed: we allow the rule to pass because a specific member of a specific NetSuite role overrode the custom management rule.
- Maintenance Complexity: simply because workflows were not meant to handle anything as elaborate as what will inevitably be needed as management refines and tunes its business operations, the one single workflow will become hard to maintain and test. Let’s call this risk avoidable if we can anticipate upcoming complexity.
Assessing NetSuite’s Business Event Framework
At the time of this writing, NetSuite appears to be preparing to address the concerns this article brings forth. In the little known Business Event Framework, NetSuite is providing a mechanism to look for a transaction event and continue processing in an asynchronous manner. This processing model is only available to customers who purchase the Advanced Order Management module — and it currently is not extensible for you to craft your own rules. We should keep our eyes on this and perhaps this article will influence its evolution.
Implementing a Scalable NetSuite Transaction Management Framework
For our existing clients, we have solved for this scalable business problem. Many new clients come to us with a disjointed array of custom fields, variables, transaction states and cumbersome business processes. The first order of business is to help make order out of the chaos: we must be able to categorize situations into meaningful states so that all business actors understand what is happening and what must be done to move transactions to the next step. We then consider what we can do to drive the desired business process as hands-free as possible. Everywhere we have to stop, think and “push a button” is not scalable.
We first addressed this pattern two years ago during a major Netsuite reimplementation project. In that client’s situation, with their global customer operation, they produced over 1,000 orders via both web and telephone orders originating in North America, Europe and Australia. At the time, we called the solution pattern “Transaction Approval Manager”. Some of the images presented in this article borrow from that article to help make important points.
After contemplating other client situations, a more generalized pattern emerged. We understood that any record in the NetSuite environment could be managed in a scalable exception management framework. Subsequently, we evolved the software and called it “Record State Manager” or “RSM”. In this article, “Learn how to Manage any NetSuite Record by Exception”, I offered a common list of transaction rules that our clients would like to manage and a video demonstration (12:51) of the framework.
Leveraging the Record State Manager Framework
It seems that every client that explores this framework “gets it” and sees the value in organizing their transaction in this manner. Many of our clients have NetSuite technical talent with existing rules and algorithms they have previously built. We help those clients learn how they use their previous work so they can help themselves. Since we don’t charge a license fee for this framework, our real offer is our capacity to think and act in a manner that drives lower operating cost leading to increased profit. If you sense that your NetSuite situation will be significantly improved by this line of thinking, let’s have a conversation.
See Related Articles
- Unlocking Efficient Order Management in NetSuite: The Power of Rules and State Automation
- Using NetSuite to Drive ROI via Centralized Business Systems Architecture
- Planning for NetSuite Driven Accounts Receivable Controls
- Navigating NetSuite Infrastructure Upgrades and Optimizing for Return on Investment
- Demystifying NetSuite Inventory Numbers, Details and Bin Complexities
- Streamlining NetSuite Item Generation and Proposal Development
- Learn the Best Practices for NetSuite Managed Split Tender Gift Certificate Programs
- NetSuite Customer Facing HTML Based Order Viewer Demonstration
- Help Facilitate NetSuite Close Practices
- Learn How To Markup NetSuite Shipping Costs by Percentage
- Drive NetSuite Fulfillment Requests for Warehouse Automation
- Drive NetSuite Business Rules by Uploaded File Type
- Learn How To Create Additional NetSuite Statuses to Produce Transaction Control
- Learn How to Gain Control over NetSuite Inventory Allocation Challenges
- How to Drive NetSuite Credit Card Acceptance against a Sales Order
- Simplifying NetSuite Transaction Entry Interfaces
- NetSuite Video Demonstration: Accept Credit Cards
- Learn how to Reliably Measure NetSuite Gross Profit and Margin