Laws for the Practical Technician

By  
Mendy Green
July 5, 2024
20 min read
Share this post

Over the years of training and assisting various technicians, I've formed a set of guidelines that I've been known to drill constantly. The other day while talking to a newer technician and working with them I realized that I now have the time I didn't have before to actually write down what I've been ranting about for 14 years. I've dubbed them as the Laws for the Practical Technician.

  1. Keep an open mind when approaching the problem and avoid falling back into the "End User" mindset
  2. Read and explore everything on the screen! Pay attention to what's being done and what its telling you
  3. Understand the problem at least as well as the person asking you for help
  4. Be intentional in your troubleshooting, closing your eyes and throwing darts at the wall is not helpful
  5. Question everything you think you know and are being told
  6. Always have a way out, make sure you can undo anything you do

There's a lot of nuance in each "law" so now that we got the TLDR version out of the way let's dive into the specifics. Note for the purposes of this post, each law has been given a title.

1. The "Technician" Mindset

Keep an open mind when approaching the problem and avoid falling back into the "End User" mindset

If you run around with your eyes closed expecting nothing to get in your way, you're bound to smack into a wall (or something) and fall down.  If you keep your eyes open and aware of your surroundings you can navigate the obstacles and overcome them.

End users typically expect systems to work seamlessly and view issues as problems needing external help. Technicians, on the other hand, approach systems with the expectation that things might not work and are prepared to "figure it out" each time.

Key Points:

  • Expect Issues: Approach every situation with the mindset that things might not work as expected. This keeps it fresh in your mind and allows you to figure out what should or should not be happening each time, and usually during that process you'll identify the disconnect that's causing the issue.
  • Problem-Solving Approach: View issues as challenges to be solved rather than insurmountable problems. This proactive mindset helps in finding creative solutions.
  • Context Matters: The difference in mindset is less about the person and more about the context! Everyone (for the most part) handles their own problems for their personal lives daily. The moment it becomes a work or tech issue suddenly its hands-off. Be aware of the context you're in, this affects Clients escalating to IT and IT escalating to a higher tier! Don't fall into the trap.

Example: When dealing with a software bug, an end user might see it as "broken" and wait for a fix. A technician, however, will explore various angles—checking logs, considering recent changes, and testing different scenarios to identify the root cause, or find a viable workaround

2. Read the Entire Screen

Read and explore everything on the screen! Pay attention to what's being done and what its telling you

Computers and software are designed to be used, (it's actually the only way they make money!). Therefore, the information needed to operate or troubleshoot them is generally available on the screen or in logs, (although the language can be context-specific for the industry). To effectively identify and solve issues, it's crucial to explore the interface and ask questions. Thoroughly reading on-screen messages and prompts can provide insights into what might be wrong and how to address it.

When encountering an error message or unexpected behavior, don’t rush to conclusions, AND DO NOT SKIP IT! 

Instead, read all the details provided. Error codes, system messages, and even seemingly minor details can offer significant clues. For instance, a message that seems obscure at first glance might make sense when considered within the context of the application or system you're working on. Even comparing against a computer that is working, looking for differences in behavior, or order of operations, screen activity, and so on, can provide clues (for example an error that takes a while to appear is likely caused by a timeout, vs an error that appears immediately is likely caused by an immediate rejection).

Example: If a user reports an issue with a software application crashing, instead of just noting "application crashes," you should read any error messages, logs, or system prompts that appear when the crash occurs. These details can guide you towards understanding the root cause and potential fixes.

3. Understand the Problem

Understand the problem at least as well as the person asking you for help

To effectively troubleshoot, ensure you can recreate the problem and understand its significance. Start by asking the person reporting the issue why it's a problem and why it's important to solve it. Gather as much information as possible to understand all sides of the issue. You should be able to understand the problem at least as well as the person reporting it to you, otherwise how do you expect to fix it? Or even explain it to the next escalation point if you have to reach out for help?

Here are some ways you can work to understand the problem.

  • Recreate the Problem: Attempt to replicate the issue in your environment. This step is the best option because it allows you to see the problem firsthand and understand its nuances, at the same time as testing to see if its a problem with their computer only or a wider issue. You can also choose to recreate the problem on a different system, if it requires specific applications or files you don't have on your computer directly.
  • Understand the Impact: Determine why the issue is significant. Is it causing data loss, preventing critical operations, or just a minor inconvenience? Understanding the impact helps prioritize the issue and communicate its importance to others.
  • Gather Detailed Information: Ask the user detailed questions about the problem. When did it start? What were they doing when it occurred? Has anything changed recently (e.g., new software, updates, hardware changes)? What's normally supposed to happen?
  • Prepare for Escalation: If you cannot resolve the issue, you might need to escalate it to a vendor or higher-level support. Having detailed information and a clear understanding of the problem will make this process smoother and more effective.

Example: If a user cannot access a shared network drive, ask them about any recent changes to their system, any specific error messages they receive, and how critical this access is to their work. Look at what the shared drive is mapped to, and if other people have access to it that are working. Identify the network the user who is complaining about is on and if it has connectivity to the shared drive host. This comprehensive understanding allows you to troubleshoot more effectively and escalate if needed.

4. Be Intentional

Be intentional in your troubleshooting, closing your eyes and throwing darts at the wall is not helpful

Being intentional in your actions means making deliberate, thoughtful decisions rather than taking random stabs at fixing an issue. This approach prevents exacerbating the problem and leads to more efficient troubleshooting. Most technicians below Tier 3 will perform troubleshooting by way of "trying different thing to see what works", this is essentially closing your eyes and trying to pin the tail on the donkey, make sure you understand what is going on, and the logical reason why what you're attempting will affect (either negatively or positively) the current outcome so that you can make progress with every step.

Expand on This:

  • Map out the "Attack" Chain: Before diving into fixing an issue, outline the Chain that exists to allow the system you're troubleshooting to work during normal behavior. What are the potential areas for disconnect? What steps will you take to test that the chain is working throughout?
  • Progress is Progress (both good and bad): Any change in outcome is desired, as it'll help provide information about the underlying behavior that we don't have visibility into. Look for error messages, success messages, timers, lags and so on. No detail is too small.
  • Evaluate and Adjust: After each step, evaluate whether it has brought you closer to resolving the issue. Adjust your approach based on these evaluations.

Example: If a printer isn’t working, don’t randomly try different fixes like restarting the printer, reinstalling drivers, or changing settings. Instead, follow a logical sequence—check for error messages to help point you towards a connection issue or a driver issue.

5. Question Assumptions

Question everything you think you know and are being told.

Always be prepared to reassess what you know. Technology and systems evolve, and what was true yesterday might not hold today. Keeping an open mind and questioning assumptions can lead to discovering the true cause of an issue.

Expand on This:

  • Expect to be wrong all the time: When you're right about something there's no reason to go back and check because you know you're right. If you're wrong about something then you'll be looking to validate that you are wrong, or what the right answer is. This mindset helps keep your knowledge fresh and reminds you to double check everything you think you know or are being told.
  • Seek Out Information: Be proactive in seeking out new information and learning from others. Forums, user groups, and official documentation can offer insights you might not have considered. Often times all it takes to help find the answer is asking the question, not to the person next to you, but even to yourself! Use the Rubber Duck method if you need to.

Example: If a network issue arises, don’t assume it’s due to the same cause as last time. Reevaluate the situation - start the troubleshooting process from scratch everytime until you've identified the root cause to the be the same as last time.

6. Never Do Something You Can't Undo

Always have a way out, make sure you can undo anything you do

Always have a contingency plan before making changes. Ensure that any action you take can be reversed if it doesn’t resolve the issue or causes new problems.

Expand on This:

  • Backup First: Before making destructive changes, find a way to keep a good copy of what you're changing. This ensures that you can revert back if needed.
  • Test Changes: Where possible, test changes in a controlled environment before applying them to the live system.
  • Document Reversible Steps: Ensure that every action you take can be undone. Document the steps if necessary so you can revert configurations and settings.

Example: Before modifying a system registry, backup the registry or export the key in question. Rename something instead of deleting it, or cut/paste it somewhere else. This way, if the change has unintended consequences, you can easily revert to the previous state.

----

Edit 2024/11/13 | This article has been presented and recorded at The IT Nation Connect 2024 in Orlando, Florida! You can watch it here: https://youtu.be/ZJqhT48pnLU

Share this post
Mendy Green

I'm passionate about IT, driven by a dual love for solving complex problems and a commitment to transforming the stereotype of technical support into a positive and enjoyable user experience. For over 13 years, I've been deeply involved in the MSPGeek community, lending my expertise to various Managed Service Providers (MSPs), while also serving as the CTO at IntelliComp Technologies.

My journey in the tech world is fueled by a passion for teaching others. I find great satisfaction in imparting problem-solving and critical thinking skills, and offering practical guidance during the troubleshooting process. It's this enthusiasm for mentorship and improvement that led me to my current venture.

Today, as the founder of Rising Tide, I'm focusing on the MSP industry, dedicating my time to coaching and assisting both individuals and businesses. At Rising Tide, we're not just about providing solutions; we're about nurturing growth, fostering innovation, and building a community where everyone can rise together. Whether it's through hands-on problem solving or strategic planning, my goal is to make the IT experience not just efficient, but also empowering and enjoyable

See some more of our most recent posts...
March 17, 2026
8 min read

By the [run]Book: Episode 17

Episode 17 wraps up 2.21 and begins 2.212 covering key HaloPSA updates across billing, SLAs, and ticket workflows. Highlights include dynamic ticket filters, default billing templates, and improved billing visibility—making this a must-watch for MSPs optimizing operations and reporting.
Read post

Episode 17 warps up the breakdown of version 2.21 and begins 2.212, highlighting impactful updates across billing, SLA visibility, and ticket management. The team dives into major improvements like dynamic ticket filters, default billing templates, and better billing tab access controls. This episode is especially useful for MSPs looking to tighten billing accuracy, improve reporting visibility, and streamline ticket workflows.

Watch Now: By the [run]Book: Episode 17
For easier tracking, check out haloreleases.remmy.dev to filter and search HaloPSA updates by ID, version, and keyword.

Important Mentions

Billing Tab Visibility Changes | v2.212 #1062249 | 30:16

The Billing tab is now visible to agents without requiring full billing permissions, with actions locked based on access.

  • Improves visibility without over-permissioning agents
  • Reduces need to grant risky billing permissions
  • ⚠️ Be cautious: exposing billing data still requires process control and training (as discussed in the episode)

SLA Breach Visibility for On-Hold Tickets | v2.21 #795425 | 12:33

Tickets on hold can now be included in SLA breached filters.

  • Previously, putting a ticket on hold could hide SLA breaches
  • This setting ensures accurate reporting and accountability
  • ✅ Recommended: turn this on immediately

Default Billing Template for New Customers | v2.21 #792419 | 13:01

You can now define a default billing template applied automatically when creating a new customer.

  • Removes need for custom automation to apply templates
  • Ensures consistent billing rules across all customers
  • ✅ Recommended: enable this and retire older automation-based approaches

Dynamic Ticket Filters | v2.21 #772177 | 16:52

Dynamic filters can now be used on ticket lists for more flexible querying.

  • Enables complex AND/OR filtering logic
  • Reduces reliance on multiple saved views
  • Opens the door for more advanced automation without SQL
  • 🚀 One of the most impactful usability improvements in this release

FullFeature List

Changing the Product/Item 3rd Party ID reference will now be copied to recurring invoices when configured in Item Settings | v2.21 #956174 | 5:23

This helps keep recurring invoices aligned when item third-party IDs change.

  • Useful during accounting platform migrations
  • Reduces manual cleanup on recurring invoice records
  • Helps preserve item mapping consistency across systems

Invoice Due Date option "Equal to Invoice Date" has been added to the Recurring Invoice options to match the options at Customer setup | v2.21 #933961 | 6:09

Recurring invoices now get the same due date option already available at customer setup.

  • Brings recurring invoice behavior into line with customer billing settings
  • Helpful for teams that want cleaner due date standardization

You can now hide the ‘Approve/Reject All’ buttons on the Portal My Approvals page and require approval notes to always show ticket details | v2.21 #898703 | 6:22

This adds more control to portal-based approval workflows.

  • Helps avoid overly broad one-click approval behavior
  • Encourages better review discipline
  • Improves auditability around approval notes and detail visibility

Added 2 new Site-level settings to create invoices against a different Customer | v2.21 #859082 | 6:40

This extends alternate invoicing behavior down to the site level.

  • Adds more flexibility for multi-site or multi-entity billing setups
  • Useful where billing responsibility differs by site rather than customer

Added a setting "Re-assign tickets to unassigned when the assigned agent is made inactive" to the Microsoft Entra integration to allow agent tickets to be re-assigned if they are deactivated via an import | v2.21 #833690 | 7:04

This helps prevent tickets from disappearing into inactive-agent limbo.

  • Particularly useful when Entra sync deactivates agents automatically
  • Helps surface tickets that might otherwise get lost
  • Worth reviewing carefully because reassignment can also affect downstream reporting

You can now add Primary Agent, Secondary Agent & Account Manager as criteria for ticket filter profiles and lists | v2.21 #827931 | 9:50

More ticket list criteria means more practical operational views.

  • Lets you filter based on responsibility relationships, not just ticket ownership
  • Useful for dashboards, routing views, and account oversight lists

Improvements to ManageEngine Endpoint Central Integration | v2.21 #815251 | 10:11

This update improves the ManageEngine Endpoint Central integration.

  • Better integration maturity is always welcome for teams relying on external RMM/endpoint tooling
  • Useful for shops standardizing around that stack

Added the ability to use generic Open ID Connect single sign-on | v2.21 #814980 | 10:36

Halo now supports generic OpenID Connect SSO.

  • Expands identity provider compatibility beyond more limited built-in options
  • A solid improvement for organizations with more advanced authentication requirements

Added the ability to clone Item Bundles | v2.21 #801764 | 11:31

You can now duplicate item bundles instead of rebuilding them manually.

  • Saves setup time
  • Helpful when creating variations of similar commercial offerings

Added settings in asset management and services configuration for the name shown for the assets and services areas | v2.21 #798807 | 11:36

This adds more naming flexibility to the UI.

  • Lets teams align terminology with internal language
  • Helpful for organizations that want the platform to better match how they talk about assets and services

Added a setting to the SLA configuration to allow tickets that are on hold to be included in the SLA Breached filter for ticket lists | v2.21 #795425 | 12:33

This makes SLA breach reporting more honest and more useful.

  • On-hold tickets can still be breached, and now your filters can reflect that
  • Recommended setting to enable for better service visibility

You can now set a default billing template, picked up when creating a new customer. | v2.21 #792419 | 13:01

A major improvement for standard billing configuration.

  • Great for MSPs using a common template across all new customers
  • Replaces the need for custom customer-created automation in many environments

Added support for asset-based meters on recurring invoice lines, enabling managed print functionality | v2.21 #787149 | 15:28

This adds more flexibility to meter-driven recurring billing.

  • Especially relevant for managed print and other metered service models
  • Supports scenarios where an asset carries multiple billable meter values

Added the ability to use dynamic filters on ticket lists | v2.21 #772177 | 16:52

Dynamic ticket filters add a much stronger filtering experience.

  • Supports grouped filter logic beyond basic visible-column filtering
  • Helps reduce list sprawl and improves usability for operations teams

Added the ability to clone custom fields | v2.21 #722363 | 21:17

Cloning custom fields speeds up admin work.

  • Useful when building multiple similar fields
  • Cuts down repetitive configuration effort

Improvements to Pie and Doughnut Chart data labels | v2.21 #638315 | 21:49

This update improves chart label readability.

  • Helpful for dashboard clarity
  • A small but welcome quality-of-life improvement

Improvements to the Update Encryption option found in Security/Advanced Settings | v2.21 #510731 | 22:24

This update refines the encryption update workflow.

  • Relevant for teams actively managing advanced security settings
  • Another admin-side quality improvement

A setting has been added to Call Management configuration to show the user's preferred number on the call screen | v2.21 #510517 | 22:56

This improves call handling context.

  • Puts the preferred number front and center
  • Helpful for service desks handling inbound and outbound calls

Properties have been added to Item and Item Group for "Number of decimal places to use for quantity" that will affect the default decimal behaviour | v2.21 #228735 | 23:17

This gives more control over quantity precision.

  • Useful for products or services sold in partial units
  • Helps tailor quantity behavior to the actual commercial model

When using the configuration option to allow all Project and Tasks to be chosen when creating a Project from a Sales Order line, this will now include Tickets if they are linked to a Sales Order line | v2.212 #1062502 | 25:12

This improves flexibility when linking work records from sales orders.

  • Helpful for teams using tickets instead of projects in some fulfillment scenarios
  • Better supports mixed service delivery workflows

The Billing tab of a Ticket will now show for agents without requiring the Billing Details permission. Actions and properties within the Billing tab will be locked depending on permissions | v2.212 #1062249 | 30:16

This adds better billing visibility without fully exposing billing controls.

  • Good balance between awareness and security
  • Still requires caution around how teams use the billing area

ID can now be specified in a Ticket spreadsheet (XLS/CSV) import to update existing Tickets | v2.212 #1062155 | 32:34

Spreadsheet imports can now target existing tickets by ID.

  • Makes bulk updates easier
  • Useful for admin cleanup or migration workflows

The heading for the timer on the Ticket details pane has been removed | v2.212 #1061107 | 32:50

A small UI cleanup on the ticket details pane.

  • Frees up a bit more space
  • Minor but sensible interface polish

A configuration option has been added to allow Co-managed agents to log time | v2.212 #1060620 | 33:09

This adds flexibility for co-managed support models.

  • Lets co-managed agents participate more directly in time tracking
  • Helpful for shared-service or hybrid support arrangements

An option has been added to the CSP Integration so that you can map Users to "Do not import" so that mappings will not be automatically created for them in cases when the Users are not within the scope of a specific tenant permissions. | v2.212 #1060619 | 36:23

This improves control over CSP user mapping behavior.

  • Helps avoid unwanted user mappings
  • Useful where tenant scope or permissions are intentionally limited

Added a hint has been added to the Customer Tax rate selection when using Xero to better explain when this rate is used | v2.212 #1060166 | 38:25

This adds clarification around tax rate usage in Xero-linked setups.

  • A small but useful usability improvement
  • Helps reduce confusion in finance configuration

A button has been added to the Client Billing tab to clear the current Avalara Tenant. | v2.212 #1059696 | 38:34

This makes Avalara tenant cleanup easier from the client billing tab.

  • Handy for correcting configuration mistakes
  • Saves time compared with more awkward reset workflows

Runbooks can now be triggered from Custom Buttons on the following entities: Client, Site, User, Device, Quotation, Purchase Order, Invoice | v2.212 #1059597 | 38:56

This is a strong automation improvement.

  • Lets you trigger runbooks directly from more parts of the UI
  • Opens up practical workflows for service, sales, procurement, and account management

It is now possible to delete specific rows from a custom table using the property "delete_these_rows" | v2.212 #1059297 | 40:35

Custom table row deletion gets more precise.

  • Useful for automation and structured data maintenance
  • Reduces the need for full-table replacement logic

When using the configuration option to not create invoice lines with 0 value, recurring invoices lines shown in recurring invoice lists will be hidden if they have 0 value | v2.212 #1058650 | 40:54

This cleans up recurring invoice visibility.

  • Keeps invoice lists tidier
  • Makes review screens easier to scan

Minor changes to configuration to better explain how the function to automatically add Asset to Contracts can be configured | v2.212 #1058609 | 41:04

This is a documentation/config clarity improvement.

  • Helpful for admins configuring asset-to-contract automation
  • Less ambiguity is always welcome in contract automation settings

Additional options have been added to Ticket Rule assignment for Regional Manager, Logistics Manager, Sales Representative, Account Owner and CXM Lead | v2.212 #1057719 | 41:13

Ticket rule assignment now supports more role-based options.

  • Improves routing flexibility
  • Better reflects broader operational ownership models

Added approval rule criteria "Already approved by agent" | v2.212 #1057491 | 41:21

Approval rule logic gets another useful condition.

  • Adds more nuance to approval workflows
  • Helpful for reducing redundant approval steps

Added Supplier as a criteria field for dynamic field visibility, and added Supplier as notification criteria | v2.212 #1057372 | 41:56

Supplier-related configuration gets more flexible.

  • Helps tailor field visibility based on supplier context
  • Adds supplier-aware notification scenarios

Variables have been added that can be used on Project Templates when created from a Sales Order line | v2.212 #1057339 | 42:34

Project templates now get more dynamic input from sales-order-driven creation.

  • Improves template flexibility
  • Helpful for standardized fulfillment workflows

Additional columns have been added to the Quote and Sales Order line column profiles | v2.212 #1057260 | 42:47

This expands visibility in quote and sales order line views.

  • Helpful for finance and sales review workflows
  • More columns means less need to jump into detail views

An option has been added to the setting "Allow a Tickets Customer and Site to be different from the Users Customer and Site" to allow only the Site to be changed for a given User | v2.212 #1057242 | 42:59

This makes customer/site control more precise.

  • Adds a middle ground between fully matching and fully independent customer/site behavior
  • Useful for environments with stricter user association rules

Added additional response schemas to the API swagger documentation | v2.212 #1053435 | 43:56

The API docs continue to improve.

  • Better documentation supports better integrations
  • Especially useful for teams building custom API workflows

You can now specify the amount of columns you'd like like to show when logging a ticket through the agent app | v2.212 #1053014 | 44:35

This improves ticket logging layout flexibility in the agent app.

  • Lets teams control form density
  • Helpful when designing cleaner ticket intake experiences

Auto payments processed via Stripe on the integrator now use idempotency keys | v2.212 #1052572 | 45:31

This is an important reliability improvement for payment processing.

  • Helps prevent accidental duplicate processing
  • Good back-end hardening for Stripe-integrated billing

Added the ability to be able to change a service's category when the service is created from an asset | v2.212 #1050926 | 45:52

This adds more flexibility when services are generated from assets.

  • Useful where the default category is not the right long-term fit
  • Gives admins more post-creation control

Added the setting 'Copy values to parent Tickets on new Ticket screen' at custom field and ticket type field level | v2.212 #1042761 | 45:59

This improves parent/child ticket data behavior.

  • Lets values flow upward earlier in the ticket creation process
  • Helpful for service desks using child-ticket-driven workflows

Added the ability to link a 3rd party ID against agents, teams, agent roles, user roles, and CABs | v2.212 #1041704 | 47:57

Third-party ID linking is now available across more entities.

  • Supports cleaner integrations
  • Helps external systems map records without relying on internal IDs alone

Added flastactiondate as a field within the Query Builder | v2.212 #1041176 | 50:52

Query Builder gets another field for reporting logic.

  • Gives admins more data points to build useful views and reports
  • Helpful for operational tracking

Account and Prospects can now be viewed in Top Levels | v2.212 #1034016 | 50:56

This expands visibility of account/prospect records in top-level views.

  • Useful for sales and account-management workflows
  • Continues the gradual maturity of account/prospect handling

Added access control for custom buttons | v2.212 #1033683 | 51:35

Custom buttons now get access control.

  • Lets admins expose UI actions more safely
  • Important for governance as button-triggered automation becomes more powerful

UI Improvements to the New Opportunity Screen launched from Accounts/Prospects records | v2.212 #1032933 | 51:42

This adds polish to the opportunity creation experience.

  • Makes sales workflows smoother from account/prospect records
  • A welcome UX improvement for CRM-oriented teams

API Key Authentication method added to the Halo API | v2.212 #1032829 | 51:47

This is one of the biggest integration-facing updates in the episode.

  • Makes API authentication easier in many practical scenarios
  • Especially useful for agent-based integrations and tooling
  • Important reminder from the episode: permissions are tied to the identity behind the key, so scope and access design still matter

March 3, 2026
8 min read

By the [run]Book: Episode 16

Episode 16 of By the [run]Book continues the walkthrough of HaloPSA v2.210, covering updates to billing behavior, ticket automation, AI features, and asset management improvements. Mendy and Robbie highlight several settings MSPs should review carefully—especially a billing change that can lock recalculation—and share practical insights on how these updates may impact real-world workflows.
Read post

In Episode 16 of By the [run]Book, Mendy and Robbie continue reviewing HaloPSA v2.210, covering a wide range of updates across billing, workflows, integrations, AI, and asset management. The episode highlights several settings MSPs should review immediately—especially a billing change that can lock recalculation—as well as improvements to ticket automation, AI categorization, and service desk efficiency.

Watch Now: By the [run]Book: Episode 16
For easier tracking, check out haloreleases.remmy.dev to filter and search HaloPSA updates by ID, version, and keyword.

Interesting Features

Editing billing time allocation will lock billing recalculation | v2.21 #1044274
A setting has been added to Billing configuration so that editing the billing time allocation on an action will lock the ticket from billing recalculation.

  • This setting can cause technicians to unintentionally override billing rules.
  • When enabled, Halo will lock the time entry and prevent recalculation of billing.
  • If your billing rules rely on rounding, billing plans, or multipliers, this can break those calculations.
  • Recommendation: Check your system and make sure this setting is turned off unless you intentionally want technicians to override billing behavior.

Credit notes can default to today’s date | v2.21 #1042924
A setting has been added to Credit Note configuration so that the Credit Date is set to today's date instead of the Invoice Date.

  • Helps keep financial reporting aligned with the actual credit date.
  • Prevents credits from affecting historical invoice periods.
  • Recommended to enable for most accounting workflows.

Auto-assign the next unassigned ticket when closing a ticket | v2.21 #1003964
Added a new setting that automatically assigns an Agent the next available Unassigned Ticket when they close a Ticket.

  • Great for service desks using load-balanced queues.
  • Reduces technician idle time between tickets.
  • Keeps agents moving directly to the next available task.

Parent tickets can inherit dates from child tickets | v2.21 #975755
Added a new Ticket Type setting: "Automatically set Start Date and Target Date based on Child Tickets".

  • Especially useful for project-level tickets.
  • Automatically keeps parent ticket timelines aligned with underlying tasks.
  • Reduces manual date management in complex projects.

FullFeature List

A setting has been added to allow the Ticket entities to be added to a separate group when creating invoices in the "Ready for Invoicing" area | v2.21 #1044974 | 2:35

This setting adds a new option for grouping ticket entities during invoice creation in the Ready for Invoicing area.

  • Provides an additional way to organize invoice entities
  • May help improve visibility when reviewing invoice lines before creation

A setting has been added to Billing configuration so that editing the billing time allocation on an action will lock the ticket from billing recalculation | v2.21 #1044274 | 5:24

This setting locks a ticket from billing recalculation when billing time allocation is edited on an action.

  • Prevents automated billing recalculation rules from applying
  • Technicians may unintentionally override billing rules
  • Locked entries must be manually unlocked before recalculating

The variable $_OPPVALUEADJUSTED has been added for the Opportunity Value | v2.21 #1043479 | 9:44

A new variable has been added for adjusted opportunity value.

  • Useful for workflows and automation referencing opportunity value
  • Allows adjusted opportunity calculations to be referenced more easily

Setting a workflow step outcome is now mandatory so that invalid step cannot be set | v2.21 #1043033 | 10:16

Workflow steps now require an outcome to be selected.

  • Helps prevent broken workflows
  • Ensures invalid workflow steps cannot be set

A setting has been added so that during Invoice creation the Invoice Address of the Customer's main Site will be used by default | v2.21 #1042925 | 11:09

Invoices can now default to the customer’s main site address.

  • Helps standardize billing addresses
  • Reduces manual selection during invoice creation

A setting has been added to Credit Note configuration so that the Credit Date is set to today's date instead of the Invoice Date | v2.21 #1042924 | 12:52

Credit notes can now default to today’s date instead of the original invoice date.

  • Helps maintain accurate financial periods
  • Prevents backdating credits to historical invoices

A setting has been added to Email configuration that will cause prefixes such as FW: and RE: to be stripped from the beginning of emails when creating new Tickets | v2.21 #1041025 | 13:11

Halo can now remove FW: and RE: prefixes when creating tickets from email subjects.

  • Keeps ticket subjects cleaner
  • May improve consistency in ticket titles

Added AI Generated Summary as an available column in ticket column profiles | v2.21 #1037790 | 14:26

AI generated summaries can now be displayed in ticket column profiles.

  • Helps technicians quickly understand ticket context
  • Useful for triage and queue management

Added the setting 'Enable config change tracking for Services' to advanced settings | v2.21 #1032549 | 14:57

A new advanced setting enables configuration change tracking for Services.

  • Improves auditing of configuration changes
  • Useful for environments that track service configuration history

Added global setting in Asset Management to add a read-only field that displays an asset's DID | v2.21 #1027632 | 22:59

A global setting can now display the asset DID as a read-only field.

  • Makes it easier to reference internal asset IDs
  • Helpful for integrations and troubleshooting

Added the ability to specify different client credentials per instance for custom integrations | v2.21 #1027506 | 23:15

Custom integrations can now use separate credentials per instance.

  • Useful for environments running test and production instances
  • Improves credential separation and security

"Main Site Address" can now be used as a field on Client and Site column profiles | v2.21 #1024856 | 23:37

The Main Site Address field can now be used in client and site column profiles.

  • Provides more flexibility when building list views
  • Helps surface key address information quickly

Added a new way to load the instances area to improve performance | v2.21 #1024619 | 24:06

The instances area has been updated with a new loading method to improve performance.

  • Helps reduce delays in environments managing multiple instances

A setting has been added to Contract configuration that allows Tickets to be created from Contract Schedules to be created a specified number of days before the Appointment date | v2.21 #1024527 | 24:29

Tickets generated from Contract Schedules can now be created a specified number of days before the appointment date.

  • Helps teams prepare for upcoming scheduled work
  • Useful for recurring service or maintenance visits

Added Owning Portfolio/Service/Business Application/CI as fields that are available to use in asset column profiles | v2.21 #1023421 | 25:39

Additional ownership-related fields are now available in asset column profiles.

  • Improves visibility across assets tied to services and business applications

Added the ability to customise which fields show on the asset dependency diagram | v2.21 #1023353 | 25:48

Asset dependency diagrams can now display customizable fields.

  • Makes dependency diagrams more flexible
  • Allows teams to tailor diagrams to relevant asset data

You can now use the query param 'include_website=true' on the get all endpoint of client to include the website in the response | v2.21 #1018061 | 25:57

The client API endpoint can now return website data when requested.

  • Useful for API integrations and reporting tools

Multiple Improvements have been made to the Twilio for WhatsApp Business Integration | v2.21 #1016946 | 26:11

The Twilio WhatsApp integration has received multiple improvements.

  • Enhances messaging support workflows
  • Improves integration functionality

Added a setting to disable assignment rules when syncing to Salesforce | v2.21 #1016418 | 27:58

Assignment rules can now be disabled during Salesforce sync.

  • Provides more control over record ownership during integration

Added 'Secret in URI Parameter' as an authentication type for triggering a runbook by a webhook | v2.21 #1011441 | 28:05

Runbooks triggered via webhook can now use a secret URI parameter for authentication.

  • Improves security when using webhook triggers

Added default user field for HubSpot quote import | v2.21 #1011046 | 28:44

HubSpot quote imports now include a default user field.

  • Helps assign imported quotes to a default user

Added a new setting that automatically assigns an Agent the next available Unassigned Ticket when they close a Ticket | v2.21 #1003964 | 28:47

Agents can automatically receive the next unassigned ticket when they close one.

  • Ideal for load-balanced service desks
  • Keeps technicians working through the queue continuously

The Chat Bot can now pull data from browser local storage on Input steps | v2.21 #999644 | 29:45

Chat Bot input steps can now access browser local storage.

  • Allows chatbot workflows to use browser-stored data

Added more configuration options for asset system fields | v2.21 #997653 | 30:52

Additional configuration options are now available for asset system fields.

  • Provides more flexibility when customizing asset fields

Added Dynamic Button Visibility to asset custom buttons | v2.21 #997641 | 31:11

Asset custom buttons now support dynamic visibility.

  • Allows buttons to appear only when relevant

Added SQL Lookups to Asset Fields | v2.21 #995633 | 37:06

Asset fields can now perform SQL lookups.

  • Enables dynamic population of asset field data
  • Useful for integrations and advanced automation

Allowed selection of a stock bin for non-serialised assets | v2.21 #989995 | 38:11

Stock bins can now be selected for non-serialized assets.

  • Improves stock and inventory management workflows

Added Days Before and After Now date validation options for date custom fields | v2.21 #984104 | 38:24

Date custom fields now support validation rules relative to the current date.

  • Enables rules like “must be X days before or after today”

"Workflow Stage" field is now available on the report query builder | v2.21 #980651 | 39:43

Workflow Stage can now be used in the report query builder.

  • Expands reporting options for workflow-based processes

Improvements to the New Relic integration | v2.21 #978676 | 40:26

The New Relic integration has received improvements.

  • Enhances monitoring integration capabilities

You can now configure whether the phone number field is mandatory at the Ticket Type level when End-Users raise tickets anonymously via the Portal | v2.21 #976768 | 40:33

The phone number requirement for anonymous portal tickets can now be configured per ticket type.

  • Gives more flexibility in portal form requirements

Added a new Ticket Type setting: "Automatically set Start Date and Target Date based on Child Tickets" | v2.21 #975755 | 40:41

Parent tickets can automatically derive start and target dates from their child tickets.

  • Very useful for project and multi-ticket workflows

Added new option to allow AI to suggest a category value from a configurable list of category values | v2.21 #972984 | 41:55

AI can now suggest ticket categories from a configurable list.

  • Helps standardize ticket categorization

Added the setting 'Allow Agent Site Restrictions to restrict against the Site's User's and the Site's Organisation' in users settings | v2.21 #965724 | 46:23

A new setting expands how Agent Site Restrictions apply to users and organizations.

  • Useful for environments with strict site access controls

Added an option to determine how the unique ID of appointments is calculated | v2.21 #961168 | 48:39

Halo now allows configuration of how appointment unique IDs are generated.

  • Relevant for calendar and scheduling integrations

February 18, 2026
8 min read

By the [run]Book: Episode 15

Episode 15 of By the [run]Book covers Halo v2.208 and the start of v2.210, highlighting improvements to SLA response targeting, shift clock-in/clock-out tracking, bi-monthly billing schedules, and expanded team leader permissions. Mendy and Robbie break down what these changes mean for MSPs refining service delivery, billing workflows, and internal access control.
Read post

Episode 15 of By the [run]Book covers Halo v2.208 and starts into v2.210, with Mendy and Robbie walking through SLA refinements, shifts/time tracking updates, billing cadence improvements, and tighter access controls across portals and reporting. Key moments include new SLA response targeting options, a clock-in/clock-out widget for shifts, a bi-monthly schedule period, and expanded team leader controls. This is a useful episode for MSPs looking to tighten operational workflow, reporting governance, and self-service experience improvements.

Watch Now: By the [run]Book: Episode 15
For easier tracking, check out haloreleases.remmy.dev to filter and search HaloPSA updates by ID, version, and keyword.

Added an option to Service Level Agreements to enable a different First Response Target to Subsequent Responses | v2.208 #988897 | 2:04

Adds an SLA option so your first response target can differ from subsequent response targets.

  • Better reflects triage vs ongoing comms
  • Cleaner SLA reporting for service teams

Added the FAQ List Ticket field as an available option for workflow automation criteria | v2.208 #987268 | 6:13

Adds the FAQ List Ticket field as a workflow criteria option.

  • Enables knowledge-base-driven workflow logic
  • Helps route/handle KB-related ticket workflows more precisely

Added a Chat Profile setting to allow the update of the End User of Tickets linked to an Anonymous Chat if the haloChat_inboundEvent_upgradeAnonChat is successfully called | v2.208 #984332 | 7:31

Allows ticket end-user updates when an anonymous chat is successfully upgraded.

  • Improves attribution of chat-created tickets
  • Reduces manual cleanup after anonymous-to-known identity transitions

Added a "Clock in, Clock out" widget for Shifts | v2.208 #984138 | 8:00

Adds a clock in/clock out widget for Shifts.

  • Helps formalize on-duty time tracking
  • Useful for after-hours / on-call patterns

Added a 2 monthly schedule period option | v2.208 #979982 | 10:45

Adds a 2-month schedule period option.

  • Supports bi-monthly billing cadences
  • Reduces schedule workarounds

Added multiple improvements to Knowledge Base latest article links | v2.208 #979751 | 10:59

Improves Knowledge Base latest article links.

  • More consistent KB navigation as articles change/version
  • Helps avoid “stale link” confusion

Added the option 'Visible - Read Only' to Agent Asset details screen visibility | v2.208 #979737 | 11:49

Adds “Visible - Read Only” for Agent Asset details visibility.

  • Lets agents view key fields without editing
  • Supports tighter asset governance

You can now configure a ticket to load balance upon reopening if the assigned agent does not meet the mandatory qualification matching criteria | v2.208 #979563 | 12:53

Adds load-balance on reopen if assigned agent doesn’t meet qualification rules.

  • Keeps qualification matching consistent over the ticket lifecycle
  • Helps avoid “reopen back to wrong resource” situations

Added a module for an integration with Opinyin | v2.208 #978437 | 13:06

Introduces a module for an Opinyin integration.

  • Relevant if Opinyin is part of your customer feedback stack
  • Worth evaluating for review/feedback workflow alignment

You can now send test emails for individual Mail Campaign email messages | v2.208 #977085 | 13:42

Adds test email sending for individual mail campaign messages.

  • Helps validate content before sending live
  • Reduces campaign mistakes

Added multiple new Halo API Actions in runbooks | v2.208 #974932 | 13:50

Adds new Halo API actions in runbooks.

  • Expands no-code/low-code automation options
  • Reduces dependency on custom calls in some workflows

Added a new setting to split Knowledge Base view counts. When enabled, the End-User portal shows only User views | v2.208 #971344 | 14:52

Splits KB view counts so end users see only user views (when enabled).

  • Cleaner end-user analytics
  • Separates agent/internal browsing from customer consumption

Added item group restrictions and a running cost total when adding items to new tickets on the self-service portal. | v2.208 #971032 | 15:27

Adds item group restrictions + running cost total on portal ticket item selection.

  • Better guardrails for what customers can request
  • More transparent cost expectations while building a request

Added a Ticket Reference field that can be searched and included in column profiles | v2.208 #968004 | 17:39

Adds a Ticket Reference field that’s searchable and usable in column profiles.

  • Helpful for ITSM-style reference formats
  • Improves filtering and reporting in list views

Service subscribers are now grouped | v2.208 #963508 | 18:56

Groups service subscribers.

  • Improves clarity around AND/OR logic in subscriber conditions
  • Makes complex subscriber setups easier to maintain

Added dollar variables ($) CONTRACTSLA, CONTRACTSUBTYPE & CONTRACTSTATUS | v2.208 #935851 | 19:55

Adds $ variables for CONTRACTSLA, CONTRACTSUBTYPE, CONTRACTSTATUS.

  • Improves template and workflow flexibility
  • Useful for notifications, templates, and automations

Improvements to Agent Resource Booking | v2.208 #935781 | 20:00

Adds improvements to Agent Resource Booking.

  • Enhances appointment booking workflows
  • Helpful if you’re trying to reduce reliance on external schedulers

Added options to encrypt variables and responses in Custom integration methods & Runbooks | v2.208 #882510 | 21:41

Adds encryption options for variables/responses in integrations/runbooks.

  • Better security for sensitive values used in automations
  • Especially relevant for API keys and secrets

You can now set an expiry date for software against an asset | v2.208 #880465 | 22:33

Adds software expiry date tracking on assets.

  • Supports proactive renewals
  • Enables automation around expiring software

Added a ticket type level setting that can allow you to show/hide approval actions for end-users. | v2.208 #859228 | 22:54

Adds ticket-type control for end-user approval action visibility.

  • Keeps the portal cleaner where approvals aren’t relevant
  • Useful for differentiating internal vs customer-facing ticket types

Added functionality for team leaders to modify their agents’ preferences | v2.208 #855276 | 23:07

Allows team leaders to modify agents’ preferences.

  • Supports delegation without full admin access
  • Helpful in scaled team structures

Added the ability to bulk add assets to a ticket via the asset search modal screen | v2.208 #835383 | 27:26

Adds bulk add assets via the asset search modal.

  • Speeds up multi-asset incident/service request logging
  • Reduces repetitive clicking

Added the ability to set a chat profile override at user role level | v2.208 #834258 | 28:11

Adds chat profile overrides at the user role level.

  • Standardizes chat behavior by role
  • Helps maintain consistency across teams

FAQ lists can now be included in Knowledge Base links and will auto-expand on open | v2.208 #833936 | 30:24

Allows KB links to include FAQ lists and auto-expand on open.

  • Faster navigation into the exact FAQ content you want
  • Helpful for portal/self-serve KB UX

You can now specify HTML when setting a pop up note on a ticket rule | v2.208 #825950 | 30:38

Allows HTML formatting in popup notes triggered by ticket rules.

  • Create more readable/structured internal guidance
  • Useful for critical warnings, prompts, and process reminders

Credit notes are now displayed along side invoices on the self service portal | v2.208 #806488 | 33:34

Shows credit notes alongside invoices in the portal.

  • Improves billing clarity for customers
  • Reduces confusion during reconciliation

Added a new setting to limit agents and users to one active session | v2.208 #761279 | 33:52

Adds a setting to limit users/agents to one active session.

  • Helpful for security and account-sharing prevention
  • Supports tighter access governance

Added TD Synnex Quote Line Imports | v2.208 #698431 | 34:03

Adds TD Synnex Quote Line Imports.

  • Speeds quote building for MSPs using TD Synnex
  • Reduces manual entry errors

Added the ability to set specific colours for counters widgets when using dark mode | v2.208 #681842 | 34:07

Adds dark mode counter widget color options.

  • Improves readability for dark mode users
  • Helps dashboard clarity

It is now possible to create downpayment invoices from Sales Orders for both fixed price hardware/projects and time and materials projects | v2.208 #596243 | 34:26

Adds downpayment invoice creation from sales orders (fixed price + T&M).

  • Useful for upfront deposits on projects/hardware
  • Supports cashflow management

Added multiple settings in Self Service Portal settings to limit options to the Web Access Level list | v2.208 #436892 | 35:29

Adds settings to limit portal options to Web Access Level list values.

  • Reduces risk of accidental “too broad” portal access
  • Makes permissioning more controllable

Added the ability to use access control for reports | v2.208 #262984 | 37:46

Adds access control for reports.

  • Lock down sensitive financial/ops reporting
  • Useful for larger MSPs with more role separation

End of 2.208 Q/A and Cats! On to 2.210 | 41:59

When using the Addigy integration a button will show on devices imported to open the device in Addigy | v2.210 #1054688 | 46:52

Adds a deep link button on imported Addigy devices.

  • Faster navigation between Halo and Addigy
  • Reduces context switching for techs

Multiple changes made to the Expenses list | v2.210 #1053141 | 47:06

Multiple changes made to the Expenses list.

  • Improves list usability and admin workflows
  • Helpful if you use Halo expenses operationally

Halo Portal and Agent application (including dashboards) iframes can now be embedded in SharePoint pages | v2.210 #1051449 | 47:32

Allows embedding Halo portal/agent UI (including dashboards) in SharePoint via iframe.

  • Useful for intranet-style “single pane” access
  • Supports internal operational dashboards

A setting has been added to Recurring Invoice configuration so that Recurring Invoices appear in the Ready for Invoice list and are auto-created (if enabled) if the next creation date falls in the current/selected month | v2.210 #1051296 | 47:58

Changes how recurring invoices appear/create based on month selection.

  • Impacts finance workflows—review before enabling
  • Useful for month-based invoice planning

A setting has been added to Contract/Agreement configuration that will ensure when adding a Billing Plan Combination using a Billing Template a record will be added for each matching Contract/Agreement | v2.210 #1050626 | 48:32

Ensures billing template application creates a billing plan record per matching contract/agreement.

  • Helps when contracts renew/change and you still need accurate billing mapping
  • Reduces edge cases in contract-driven billing

Additional import fields have been added to the NinjaOne Device import - Last Contacted and Created Date | v2.210 #1050486 | 51:33

Adds Last Contacted + Created Date fields to NinjaOne device import.

  • Enables stale-device reporting (offline 30/60/90 days)
  • Supports cleanup and license optimization workflows

A setting has been added to Ticket/Opportunity Types so that the "Send" button can be removed from the Quote screen, so that the Quote can only be sent from the Ticket/Opportunity | v2.210 #1049474 | 54:04

Removes quote “Send” button so sending happens only via ticket/opportunity.

  • Enforces process consistency
  • Reduces accidental sends from the quote screen

A setting has been added to the Asset Field properties so that Change History records are not created for the Asset Field | v2.210 #1048570 | 54:35

Disables change history tracking for selected asset fields.

  • Prevents noisy logs on frequently updated fields
  • Helps keep asset records cleaner long-term

A permission has been introduced for Users and User Roles so that Invoice access can be restricted to No Access/Site/Client | v2.210 #1048548 | 55:32

Adds invoice access restriction levels (No Access/Site/Client).

  • Tightens financial visibility controls
  • Useful for role-based access separation

If an overriding Contract/Agreement is set against a Ticket but not configured to show in the Field List then it will still show but only administrators will be able to edit/update the field | v2.210 #1046935 | 56:13

Shows the overriding contract field even if it isn’t on the field list (admin-editable only).

  • Makes hidden billing context visible for troubleshooting
  • Reduces “why isn’t billing applying?” mysteries

Database Lookup functionality can now be used when entering an action using the self-service portal | v2.210 #1046459 | 56:58

Enables database lookup while entering an action in the self-service portal.

  • Makes portal actions more dynamic and guided
  • Useful for structured self-service inputs

Updated Account Integrator released that is compatible with Sage UK v32 (2026) | v2.210 #1046181 | 57:14

Updates the Account Integrator for Sage UK v32 (2026).

  • Relevant for Sage UK accounting users
  • Helps keep finance integrations current

A setting has been added to allow the Ticket entities to be added to a separate group when creating invoices in the "Ready for Invoicing" area | v2.210 #1044974 | 57:32

Adds a setting to group ticket entities separately during invoice creation.

  • May improve invoice grouping/organization depending on your billing setup
  • Worth testing in “Ready for Invoicing” workflow