An alternative method for hourly billing

Let’s review yesterday’s scenario, in which my role was Solution Architect, and my responsibilities were:

  • Meet with the client and understand their requirements
  • Translate them into technical specifications and document them
  • Communicate with the internal team
  • Support as needed

For this work, I billed by the hour, up to an agreed upon maximum of 20 hours per week.… Read the rest

Hourly billing really sucks

About 6 months ago, I chose to work with a Salesforce agency that billed by the hour. At the time, I needed the opportunity and it was a fun project, so I accepted a reasonable hourly rate.

Fast forward to today, and it turns out I’m not compatible with hourly billing anymore, and the agency let me go.… Read the rest

AI-first products?

While at DreamOle last week, a term was used that I’ve never heard before. To paraphrase, the person said, “Product owners want AI-first products”.

There are several prominent “first” terms.

For example, the term “mobile-first products” is familiar to most. If not, at a certain moment in the past, there was a big shift to ensure all new websites and applications were responsive.… Read the rest

Flow formulas are cool

Formulas in Salesforce flows are really cool. They are a unique type of variable, one that has multiple purposes.

Here’s one of my favorite methods to show just how cool they are: formulas are only evaluated at the moment they are used.… Read the rest

DreamOle 2025 Overview

Here are my takeaways from this year’s Dream Ole in Zaragoza, Spain.

It’s all about Agentforce
Apparently you cannot escape it. It’s not just prevalent in North America, but in Europe too. The opening keynote speaker was a product manager of Agentforce and we had a chance to chat after her presentation.… Read the rest

Attending DreamOle 2025

It’s a little late to mention, but I’m attending DreamOle in Zaragoza, Spain tomorrow.

If you’re also attending, look out for me and I’ll be happy to meet you.

Here are the sessions in my agenda:

  • Opening keynote
  • Salesforce enhanced messaging and WhatsApp
  • Customising record level security
  • Demo battle
  • Key architecture anti-patterns
  • Closing keynote
  • After party

They are offering an Agentforce Certification Bootcamp, in which you can obtain an Agentforce cert, but that hasn’t piqued my interest.… Read the rest

External Id vs Unique field attributes

When creating custom fields, there are two settings most people ignore: External Id and Unique. When used properly, these boolean settings can be useful.

By setting a field as an External Id, you’re telling Salesforce that this field represents an Id field from a system outside of Salesforce.… Read the rest

The buck stops with you

As a Salesforce consultant, sometimes you play the role of architect. That is to say, not only are you implementing the project, you’re also designing it.

The moment you shift into this role, your role increases dramatically.

The main one being, whatever you design, you are responsible for.… Read the rest

Adding contingencies to projects

There probably isn’t a single Salesforce project that has ever gone perfectly to plan.

Just like the sayings, “If you don’t make any mistakes, you’re probably don’t make anything”, and Mike Tyson’s popular one, “Everyone has a plan until you get punched in the face”.… Read the rest

Differences between passing an id vs the entire record

Let’s say you have a record-triggered flow that calls a subflow. Sometimes you need to pass variables to the subflow.
If you need to pass a record to the subflow, you have two options:

  1. Pass the just Id as a text variable
  2. Pass the entire record

While both get the job done, I usually recommend option 1.… Read the rest

Don’t hardcode URLs in flows

A LinkedIn article was published yesterday about hardcoding URLs in flows. The author is trying to solve a problem involving URLs that change depending on the environment.

For example, let’s say you have a screen flow that creates an account, and you want to display a link to the newly created account in the last step.… Read the rest

Object prefixes

Every once in a while, when debugging flows, you may come across an error such as “Unable to obtain exclusive access to this record or 1 records: 003OL00000EMzT8YAL”

At face value, this error message doesn’t seem to tell you very much.… Read the rest

How to lock a record and why you’d want to

Record locking is when you inform Salesforce you want to lock a record for a certain period of time. Your process becomes the only one that can access that record. Any other processes that attempt to access it at the same time receive an error.… Read the rest

How to prevent automatic flow bulkification

How that we’ve covered flow bulkification and flow interviews, we can tie things together. As mentioned, sometimes Salesforce automagically bulkifies flow interviews.

Most of the time, this is a good thing. Sometimes it’s not so good.

For example, imagine a flow that gets and updates a custom setting.… Read the rest

What are flow interviews?

In Salesforce, there are two flow parts: the building part and the execution part. Here are some interesting things to know about the latter.

Each time a flow executes, Salesforce creates an instance of the flow. The instance is a standalone unique copy of the flow, running within a specific context.… Read the rest

What is flow bulkification?

Most good Salesforce consultants are already familiar with good flow practices. Things like

  • Don’t create/update/delete records (DML operations) within loops
  • Don’t do multiple gets of the same record or related records
  • Don’t update the triggering record in an after-save flow
  • Etc.
Read the rest

Salesforce’s Q4 2025 observations

Every once in a while, it’s interesting to see how our parent company is doing. You know, the big one that we all depend on for our livelihood.

This income chart was recently released:

It’s interesting to notice a few things:

  1. Service income is greater than Sales.
Read the rest

UI vs. object: When to require fields

When creating required fields on a standard or custom object, you have two options:

  1. Make them required at the object-level
  2. Make them required at the UI-level

In most cases, the latter is a better option. Why?

When fields are required at an object level, they are *always* required, regardless of the source.… Read the rest

Formula field considerations

In addition to the spanning relationship limit, there are some other important considerations when using formula fields. There are 3 more:

1. Character limit
Formula fields can have a maximum of 3,900 characters. This includes spaces, carriage returns, and comments.

You can easily solve this limit by reducing spaces, or by splitting the formula into sub-formulas.… Read the rest

What is a spanning relationship?

When attempting to update a client’s formula field on an object, I received an uncommon error message. Salesforce complained, “You have reached the maximum number of object references”.

This error is caused by trying to exceed the limit of cross-object references (also known as “spanning relationships”).… Read the rest

Only use the input variable once

When building flows, it’s common to have input and output variables. Whether passing the current record Id to a screen flow or calling an autolaunched subflow, these variables keep things modular.

Here’s a small tip I haven’t seen often: When using an input variable, only use it once.… Read the rest

When will AI replace developers?

There’s more and more chatter about AI replacing developers. Mark Zuckerberg talks about it often these days, and even Marc Benioff has made more than a few comments about it.

While it’s hard to predict the near future, I’m pretty sure about the state of AI today.… Read the rest

Flow debugging techniques

There are multiple ways to debug flows in Salesforce.

The debug button
The first option is the most popular. You create the flow and then click “Debug” to see it run. By the way, if your flow has input variables, there’s a way to speed up the debugging process.… Read the rest

Achieving flow

I bet you think this email will be about Salesforce flows, eh? Well, it’s not. Instead it’s about flow state.

According to Wikipedia, “Flow state theory suggests that when individuals are in a state of flow, they experience deep immersion, focus, and intrinsic motivation in their activities.”… Read the rest

Buy vs build

A Salesforce client of yours has a problem, so they reached out to you for help.

They’ve explained the issue, you’ve repeated it back to them to confirm your understanding, and now it’s time to make a decision. Also let’s remove urgency from this scenario, as that would clearly encourage you in one direction.… Read the rest

Using the repeater component in flows

The repeater component is a relatively new feature in screen flows.

A simple way to show its usefulness is through an example. Let’s imagine there’s a Payment object, which is related to the Opportunity. Rather than have your users click “Add” on the Payment related list, enter some data, and then click “Save & New”, you can offer an optimized screen flow with a repeater.… Read the rest

More ways to avoid race conditions within flows

Here are three other mechanisms to avoid race conditions in flows.

1. Add a wait element
Place a wait element after an update, create or delete element. The wait time can be as short as 1 minute, but this ends the current transaction and commits (saves) the operations to the database.… Read the rest