Picking a Process that Matters

I find it hilarious when I’m on a project and we talk about the reasons why a process MUST stay in place and the following phrases are uttered:

  • We’ve had it this way all this time
  • It doesn’t make sense to change when we are doing it (especially when you as an outsider can clearly see that there are problems)
  • It will upset xxxxxxx to change this as it was their process
  • Oh you can change it if you want but I choose not to participate (insert a more politically-stated version here)

My career path for a long time has been focused on listening to a process and understanding how that could fit within new technology (in most cases that would be something in the Salesforce ecosystem). I say this because that part of my job usually results in:

  • Forcing the software to assume the existing processes
  • Forcing the process to work with the software

Secret Option C

Now the real answer to all of this is “Secret Option C”. I use Secret Option C often in discussions because it accurately describes the true answer to everyone’s exceptions above.

Secret Option C is simply the “Why not both?” answer. When all the processes are recognized and the technology is understood, most people realize:

  • Some of the old processes are there for a reason
  • But the goal of newer technology is not necessarily to speed up the same process, especially one that is broken
  • A group of people’s ability to absorb massive change is not great. A single individual sure but a group? To use a great line: “Yeah.. No.”

About Picking a Process

Listed above were the excuses to not change and listed above are the reasons why completely changing a process is rarely the answer. How do we go about picking the process that represents the “best fit” in regards to people AND technology.

If you were hoping for me to tell you all the answers, sorry, that is not happening. Instead however I will give you insights for success.

Please Document It

Document the current process. Use a tool (Lots. Of. Options)or even a piece of paper and write it down.

Start with the actual process itself. Ask:

  • What information must we have to start this step?
  • What information must change to leave this step?
  • Are there decisions in the step?
  • Who/What makes the decisions?
  • Is time a factor here?

Take a moment and sketch and outline and then slowly fill in the details. Better to have this rough and know that there are missing pieces than to toil on one small part and then not be able to “see the forest”.

Talk About Successes and Failures

This is one of my favorites. Ask around about the successes and failures of the current process. People tend to defend a process they are emotionally invested in and find faults with the opposite. Take some time and ask around. But ultimately you are trying to get to the next step.

Big hint here: have these successes and failures linked somehow to your process chart. That way you can visualize how this fits.

Determine the “Why”

When you have the process and reasons, determine the “why?” factor.

  • Why is it successful?
  • Why is it a big failure?
  • Why has it not been changed?
  • Why have past attempts at change fail?

Without understanding the “why” you cannot achieve the next step.

Design a “Best Fit”

The big crock of no-no when talking about this topic is simply that there is a solution. When I started doing this work, I assumed that with the correct mix of tools and process everything would be solved.

HA! The conversation is not that there is a solution but that there is enough compromise from both the technology and the people that the “Best Fit” can be achieved.

I remember a former co-worker’s favorite saying, “Perfect is the enemy of good” when it came to process. If we work so hard to make a process perfect we will rarely arrive at a solution. We need good solutions that represent the best fit to the problems and situations in front of us. Once that is implemented, revisions can happen.

Change is constant.. ugh.

Get Feedback

Once the “Best Fit” is reached, it is important to gather feedback. Not everyone is going to appreciate the final solution but no feedback and buy-in will result in a failed change more times than not.

I am not suggesting that everyone involved gets a say, nor am I suggesting that everyone’s opinion has the same weight. But I am suggesting that allowing people to have their opinion heard and discussed usually turns into acceptance and adhesion.

Implement and Measure

You turn on your new process. Congrats. How are you measuring the impact to your organization? Some organizations create a goal or metric based on process change. Some others “wing” it and ask for opinions.

Depending on the culture, the answer is unique. (all my data-loving friends just cried a little) But ultimately how you measure and report back is critical.

Because the measurements tell you how to adjust and catch missed opportunities or incorrect process. Getting ahead is important.

Why the Process Matters More than the Technology

I talked in another post how process is important. And look I did all the things. There was even a graphic on the doctorate knowledge expansion model. I’m kinda proud of it.

But. BUT. From experience I know that this is not the end of the topic. I’ve seen too many examples in my career where people look to “smear some nerd” on a problem and hope it improves. OR even worse they listen to the sales person who says that their technology will immediately make them sound smarter, attract others, and increase their height. In other words it solves everything just by purchasing and using the software.

If you’ve been adult long enough you know that NO software instantly fixes everything.

I cannot stress the above enough but let me take a moment and expand.

Since most of this audience will be familiar with Salesforce, I’m going to use this market space. I’ve been fortunate to watch it grow and change through the years and will freely say that the feature set can solve a lot of business issues. However, it will only solve those problems WHEN USED.

Holy moly.. Do a search for user adoption and how many million results are returned?

Salesforce knows that this is an issue. So much that their training arm has a “User Adoption Adoption Service” (apologies for the PDF) that can help you use the tool.

There are multiple whole companies dedicated to effective usage of these tools. I know several of them and love them. They do a great job of helping educate and keep educated the user base.

Ultimately though, all of these services cannot fix:

  • A process that is too cumbersome, complex, or manual
  • Lack of enforcement of better processes and tools
  • General laziness

A new or enhanced tool can only help so much. We’ve seen it too much where the process is not changed and so the problem is still the same just with a different user interface. That does not solve the problem.

Think about these questions for a bit with your current tool set:

  • Could we automate “this” more and remove steps? What are the barriers?
  • What takes our people more time than it should and is overly complicated? (I love to use approvals and time cards as examples here)
  • What slows us down from accepting updating processes (the always wonderful “Well when we tried this before?” and “That is not how we have done it in the past!” excuses)

Stop and rethink. Gather some people. Be open to change. And understand that process matters far far more than the technology since the technology cannot solve a bad process alone.

It’s About the Process

I’ve been an “evil Salesforce Consultant” for around a decade now. Still shocked by that statement. For many of those years, I would work with clients solo or would be training someone on my team to take over the project after the kick-off.

When I started, my questions were typically:

  • What fields are important for you track?
  • When does the notification happen?
  • What information is necessary for a user to approve this record?

This data may seem important. But I admit that this only tells a small percentage of the story. When we as builders do all the work, we have to sweat these details and it IS important that this is correct. However forget to ask:


  • Why is this the process?
  • Why should we continue to support a process if there are faster/easier ways to handle situations?
  • Why are so many people necessary to make decisions?

It is truly the experience and the answering of all these “why’s” that creates the connective tissue of a solution. There will always be projects where we must fit into the mold already built; but not every project. The difference between a consultant and a trusted adviser the ability to ask the “why’s” and be able to connect those dots quickly. A trusted adviser can then appreciate the situation and make solid suggestions that the client will appreciate.

A doctorate degree

I was reminded of this graphic of a doctorate degree. If you think of the sum of human knowledge as a circle and that the size of the circle is the amount of knowledge possessed then the Doctorate thesis is minute bump-out of that knowledge.

A thesis should challenge the status quo and suggest something new in theory. But it is such a small and tiny bump. But that is where lots of people doing lots of research creates lots of bumps. And that’s how we as a people grow.

While the image is about a thesis, us as consultants and thought leaders are doing similar. Our role should not be to simply duplicate what a customer is currently doing in new software but:

  • Appreciate and understand their process
  • Use our experience and knowledge to ascertain if efficiencies and improvements are possible
  • Merge our knowledge of tools and the client’s process to create an ideal outcome

So as you work with clients, co-workers, and others please consider the process. Think about why the process is what it is and could it be better before inserting a tool to address it.

The Calculation Sequence and Price Rules

I am making a bold prediction that this post will receive the most views over time. Especially compared to other technical posts. And here is why, Price Rules to CPQ is both the core and the most misunderstood feature. Most people read the help manual or trailhead and believe they understand how Price Rules work. This is where most fail.

Why? Simply put, most admins write far too many price rules or don’t appreciate how one price rule influences another. I’ve done it quite a bit and so I speak from experience. Let me help ya…

The Order of Things

We have 4 times that rules are considered when CPQ starts and does a calculation cycle. During each event, the Calculation Sequence runs and there are variations in the sequence depending on the event. But for most situations, the differences do not influence us heavily. We need to have each rule be assigned to at least one event and have an order.

All events are run every time a calculation is asked for EXCEPT for “on initialization” which is only run once when you “Edit Lines” and enter the CPQ Visualforce pages. Be careful with this event. Typically the best use for this event is to clear any fields that hold Summary data since the rules will refactor those values.

What CPQ doesn’t tell you in the documentation clearly enough is that for each event, CPQ queries the Price Rule object for all rules that will apply to the Quote and Quote Lines. This means that if I have two price rules on the same event, what I can’t do is have the effect of one price rule be the condition for the second rule. Take a moment and re-read that sentence. How about an example:

  • Price Rule 1 – If the quote is based in Canada then set the Country field to Canada
  • Price Rule 2 – If the Country field = Canada then update the text field Sport to “The New York Rangers are bozos”

The problem with the above, besides taking the hockey team debate out of the equation, is that the first price rule’s action is trying to influence the second price rule on the same event. CPQ will NOT process both of these rules during the same Calculation cycle.

The only way for a user to see this working correctly is to press the “Calculate” button twice so that the values are available. We call this a “Double Calculate” problem and everyone who has ever worked in CPQ has created this problem.

You need a function like this to work? Then the two rules need to be on different Calculation Events. This is described in this Salesforce article about halfway down.

When two price rules share an evaluation event, the earliest-firing price action’s target field value isn’t usable in the other rule’s price condition. Salesforce CPQ evaluates all an evaluation event’s conditions simultaneously. Actions then fire sequentially for rules whose conditions have been met. An action from one rule in an evaluation event can’t influence the conditions of another rule in the same evaluation event. 

(now you know why the hockey reference was used.. that’s a bit heavy.)

Not All is Lost with Evaluation Events

HOWEVER while evaluation order is super most helpful, if we want to use the RESULTS of one Price Rule in another within the same Event. Totally cool and encouraged.

An example from a prior project:

  • Query for the correct interest rate based on business line, date, and dollar amount being financed. Set that value on the Interest Rate field on the quote line
  • Use that value in a formula calculation for Scheduled Payment on the same quote line

All in the same event. No worries. Works like a champ. The value of the Interest Rate is not being used in the criteria. Instead it’s usage is in the Price Action. CPQ loves that.


How does all of this tie to my comments above? Well most new CPQ admins:

  • Create a price rule for every possible combination
  • Try to put every price rule on the event “On Calculate” because of the name
  • Or they put every price rule in all the events. (why do this?! Just consuming resources for no good reason)
  • Run into Double Calculate issues

A well managed CPQ instance may not necessarily need a lot of Price Rules to be effective. In fact most of our implementations find that there are more Price Rules used for Document Generation than for actual pricing. Yeah, it is crazy. The Salesforce governor limits are pushed to the max when there are lots of Price Rules. So efficiency is important.

Also with lots of rules, troubleshooting issues becomes a HUGE headache. I see that often when auditing other CPQ implementations. And I’m not going to start on the Dynamic Bundle/Product Rule conundrum because that is a different post all together and one that I loathe to write.

I like to take a moment and truly consider what needs to be factored to generate a price.

  • Could I use a lookup table to solve the pricing problem?
  • Could a Discount Schedule or Tiered Pricing be used instead?
  • How often is pricing changing? Would an admin need to adjust the rules with new price changes?

I then factor that in and write down the process of price rules on a spreadsheet. Doesn’t have to be too technical. Write what you believe are the steps necessary at first and assign an event(s) and an order. Test it out with some examples. Add more detail to each row. Plan! Test! Then put it in CPQ.

Finally my suggestion is that you please read the help article a few times and the examples above. Understand how Price Rules truly operate before you dive head first.

Summary Variables Versus Roll-up Summary

There is a concept called the “Law of the Instrument”. It basically says that if you are familiar with a tool, you are more than likely to use said tool over a better alternative.

For Salesforce Admins this happens all-the-time. “I don’t trust Flows so I use Workflow” could be the most stated comment from the old guard I’ve ever heard. Gonna let you in on a secret. These old stuff at times DOES work but is it scalable and now you create a troubleshooting mess to go to so many different places to figure out how Salesforce processed your records.

The same is true with Roll-up Summary fields. Too many CPQ configurations we audit use RUS fields over Summary Variables it is truly frightening. If I am a new CPQ admin I do not appreciate why this is a problem and that’s ok. I get it. Really I do. Let me help.


Hopefully by now, you appreciate that Salesforce has limits. Limits in terms of the number of fields, type of fields, CPU time, and number of queries. In fact there are so many limits, Salesforce has a whole article dedicated to limits. There is a quick guide webpage also but these are just the highlights.

So Salesforce has a limit of the number of RUS fields on the object. You also find that doing a good CPQ implementation requires roll-ups not just to process a quote and for reporting but also for document needs. Because of all this, you WILL hit the limit.

<<Quick aside.. This is the same reasoning I use to why Price Rules/Price Actions rule over the use of formula fields. Please don’t ask Salesforce to raise the limits. You’re just “kicking the can” down the road instead of solving the problem. CPQ configurations become MORE complicated over time not less>>

So while you CAN use RUS fields it is HIGHLY recommended that you instead go through the initial pain of using Summary Variables.

Usage of Summary Variables

Now I could in theory end the post here. But let’s not. How about some best practice guidance.

Price Rules fire under multiple events and so it’s useful to leverage those events. For example, I typically have a price rule that fires “On Initialization” that sets NULL or Zero any field on quote that stores summary data. I want the system to recalculate and factor in any changes that occur in the cycle.

I may also put some summary variable results during “Before Calculate” because I need to use the summary data in formulas for pricing calculations or for a lookup table query.

Finally I do all my quote summary work on “After Calculate” and typically make it the last rule that fires so that all the changes in my Price Rule work is factored.

Should probably say here, the more Summary Variables used, the more CPU time is consumed. Keep an eye on your limits during the calculation cycle.

Quote Documents vs Conga Quote Generation

I’m fortunate to have been in the Salesforce ecosystem for a LONG time. And so my exposure to tools like Conga and Drawloop for document creation is fairly routine. A typical Salesforce admin has some experience with these tools and what they can and more importantly what they cannot do easily.

So when I moved to spend more time on CPQ and less on Sales Cloud, I was challenged by Quote Documents. It is not the same experience. And now with CPQ, there is Conga Quote Generation which is a simplified version that solves many of the challenges. And if you are already familiar with Conga then then barrier to entry is easier since you are not learning a new tool:

Quote Documents:

  • HTML-heavy
  • Uses Salesforce records to determine what is shown on the page and in what order
  • Typically requires lots of checkbox fields and a few price rules to create the dynamic features of a Document
  • If you want to use Quote Terms, you MUST use Quote Documents

Conga Quote Generation

  • Has many of the features of the “Full-flavored” version of Conga but not all
  • Uses a word template and tags in Word to control the dynamic features of a document
  • An admin must create the necessary actions in Salesforce to create the document (CPQ’s “Generate Document” button is useless here)
  • Conga Queries are typically used to gather the necessary information to show on the page
  • Quote Terms is NOT available in Conga. We asked.

It is important to recognize that Conga does NOT directly support this tool. As an admin you must log cases with Salesforce for any issues or questions. While Conga’s help system is good for usage questions, Conga Quote Generation is run by Salesforce.

In fact Conga shows this chart (as of late 2019) that dictates the difference between Conga Quote Generation (on the left) versus Conga Document Generation

If your organization is new to CPQ and already has experience with Conga then it may be a good alternative and you can install the app through the AppExchange here. (yes I know this page will take you to Conga, trust me this is a good thing)

However, Quote Documents has a place. Having HTML-level control of a document and all those dynamic content features controlled by a checkbox field may give you as a builder more control over what is shown to a customer. We’ve also discovered along the way that a single Quote Document can appear wildly different due to these content pieces and so the number of documents that need selected and maintained is reduced. For us it has always been the language selected that dictated a unique template and that is just how life goes.

So if you are a Conga Champion, it may be worth a brief exploration of Quote Documents before you go back to what is familiar based on your document needs.

Add-on Opportunities with CPQ

Most of our client work and my experience has focused on Contracts and using the Amend function on the Contract. But I learned a little something about this “add-on” opportunity function within CPQ that could be interesting.

Let’s say that I have an active contract on an account and they call to want to add more assets or subscriptions. Now I COULD create an amendment but what:

  • If you don’t need that much amendment functionality?
  • Or you are adding to a contract only and not adjusting an existing bundle.

For this, CPQ has a function in the Classic UI called an “Add-on” opportunity. If you look at the CPQ-specific Account fields, there is a field called “Co-termination Event”. One of the options is “Add-on”. The other is “Renewal” which is a different discussion. And what we’re finding is that a lot of these fields really only matter if you’re using the Classic interface. Lightning breaks a lot of these fields and you have to custom roll a solution.

Speaking of – Add-on opportunities is an example where lightning (as of Spring ’20) does NOT work in Lightning the way it works in Classic. In Classic, when I go to a quote and mark this opportunity as an “add-on” the system will show you active contracts on a screen and the user easily selects the contract they want to add new items.

Nope, in Lightning you have to help CPQ. Now the super simple way to do this is:

  • Have the user fill in the lookup field on Quote labeled “Master Contract”
  • Use a little automation behind the scenes that sets the quote’s end date to match the contract’s end date so that proration works

Again that’s the “in theory when I’m building a POC” version. In reality the Master Contract field will only accept the contract number. How many of our users are really gonna know the contract number by heart. So for a true Lightning implementation, it is probably better to create a flow off of Opportunity that shows the active contracts against that account. Then create the quote with all of your necessary fields populated so that user can go straight to “Edit Lines”.

So why all the work? Well, CPQ will auto-prorate your items against the contract and when the opportunity is ordered and contracted the subscriptions and assets are correctly aligned to the contract AND the renewal is up to date. It skips a lot of steps and if you have spent time with Amendments, you know how long it takes CPQ to create an amendment opportunity.

For those of us who can take advantage of this functionality, it may allow us to speed up the process and make life easier for our users.

Large Quote Experience May be Default Soon

Large Quote Experience (LQE) in Salesforce CPQ seems to be heading to be enabled by default which for many uses is a good thing! We’ve had lots of clients where their quotes were routinely hitting governor limits. Which is exactly what LQE solves.

So what does LQE actually do? CPQ simply processes all the product and price rules in batches. As an admin you control the batch size which is good. Running a batch size of 1 would make CPQ C-R-A-W-L so maybe not do that. Instead it makes sense to play with the settings to find a good happy medium of numbers between number of quote line rows considered and load times.

More later

Nested and Collapsible Bundles

A new feature in the latest release of CPQ is the ability to collapse a bundle to rescue screen real estate. This is a great feature since so many bundles have lots of quote lines and not necessary to see all the details every time.

This is Salesforce help article that describes it.

What’s interesting about this article however is that Large Quote Experience (LQE) must be on for this feature to work. Lots of configurations are not using this feature and it may crash yours. Look at your validation product rules and see if they use Summary Variables. You may need to rethink these as LQE borks those rules….

Still — a useful UI feature.