By
Mendy Green
July 5, 2024
•
20 min read
Fundamental Skills
Professional Development

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.
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.
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:
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
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.
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.
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.
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:
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.
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:
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.
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:
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

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.
The Billing tab is now visible to agents without requiring full billing permissions, with actions locked based on access.
Tickets on hold can now be included in SLA breached filters.
You can now define a default billing template applied automatically when creating a new customer.
Dynamic filters can now be used on ticket lists for more flexible querying.
This helps keep recurring invoices aligned when item third-party IDs change.
Recurring invoices now get the same due date option already available at customer setup.
This adds more control to portal-based approval workflows.
This extends alternate invoicing behavior down to the site level.
This helps prevent tickets from disappearing into inactive-agent limbo.
More ticket list criteria means more practical operational views.
This update improves the ManageEngine Endpoint Central integration.
Halo now supports generic OpenID Connect SSO.
You can now duplicate item bundles instead of rebuilding them manually.
This adds more naming flexibility to the UI.
This makes SLA breach reporting more honest and more useful.
A major improvement for standard billing configuration.
This adds more flexibility to meter-driven recurring billing.
Dynamic ticket filters add a much stronger filtering experience.
Cloning custom fields speeds up admin work.
This update improves chart label readability.
This update refines the encryption update workflow.
This improves call handling context.
This gives more control over quantity precision.
This improves flexibility when linking work records from sales orders.
This adds better billing visibility without fully exposing billing controls.
Spreadsheet imports can now target existing tickets by ID.
A small UI cleanup on the ticket details pane.
This adds flexibility for co-managed support models.
This improves control over CSP user mapping behavior.
This adds clarification around tax rate usage in Xero-linked setups.
This makes Avalara tenant cleanup easier from the client billing tab.
This is a strong automation improvement.
Custom table row deletion gets more precise.
This cleans up recurring invoice visibility.
This is a documentation/config clarity improvement.
Ticket rule assignment now supports more role-based options.
Approval rule logic gets another useful condition.
Supplier-related configuration gets more flexible.
Project templates now get more dynamic input from sales-order-driven creation.
This expands visibility in quote and sales order line views.
This makes customer/site control more precise.
The API docs continue to improve.
This improves ticket logging layout flexibility in the agent app.
This is an important reliability improvement for payment processing.
This adds more flexibility when services are generated from assets.
This improves parent/child ticket data behavior.
Third-party ID linking is now available across more entities.
Query Builder gets another field for reporting logic.
This expands visibility of account/prospect records in top-level views.
Custom buttons now get access control.
This adds polish to the opportunity creation experience.
This is one of the biggest integration-facing updates in the episode.

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.
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.
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.
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.
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".
This setting adds a new option for grouping ticket entities during invoice creation in the Ready for Invoicing area.
This setting locks a ticket from billing recalculation when billing time allocation is edited on an action.
A new variable has been added for adjusted opportunity value.
Workflow steps now require an outcome to be selected.
Invoices can now default to the customer’s main site address.
Credit notes can now default to today’s date instead of the original invoice date.
Halo can now remove FW: and RE: prefixes when creating tickets from email subjects.
AI generated summaries can now be displayed in ticket column profiles.
A new advanced setting enables configuration change tracking for Services.
A global setting can now display the asset DID as a read-only field.
Custom integrations can now use separate credentials per instance.
The Main Site Address field can now be used in client and site column profiles.
The instances area has been updated with a new loading method to improve performance.
Tickets generated from Contract Schedules can now be created a specified number of days before the appointment date.
Additional ownership-related fields are now available in asset column profiles.
Asset dependency diagrams can now display customizable fields.
The client API endpoint can now return website data when requested.
The Twilio WhatsApp integration has received multiple improvements.
Assignment rules can now be disabled during Salesforce sync.
Runbooks triggered via webhook can now use a secret URI parameter for authentication.
HubSpot quote imports now include a default user field.
Agents can automatically receive the next unassigned ticket when they close one.
Chat Bot input steps can now access browser local storage.
Additional configuration options are now available for asset system fields.
Asset custom buttons now support dynamic visibility.
Asset fields can now perform SQL lookups.
Stock bins can now be selected for non-serialized assets.
Date custom fields now support validation rules relative to the current date.
Workflow Stage can now be used in the report query builder.
The New Relic integration has received improvements.
The phone number requirement for anonymous portal tickets can now be configured per ticket type.
Parent tickets can automatically derive start and target dates from their child tickets.
AI can now suggest ticket categories from a configurable list.
A new setting expands how Agent Site Restrictions apply to users and organizations.
Halo now allows configuration of how appointment unique IDs are generated.

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.
Adds an SLA option so your first response target can differ from subsequent response targets.
Adds the FAQ List Ticket field as a workflow criteria option.
Allows ticket end-user updates when an anonymous chat is successfully upgraded.
Adds a clock in/clock out widget for Shifts.
Adds a 2-month schedule period option.
Improves Knowledge Base latest article links.
Adds “Visible - Read Only” for Agent Asset details visibility.
Adds load-balance on reopen if assigned agent doesn’t meet qualification rules.
Introduces a module for an Opinyin integration.
Adds test email sending for individual mail campaign messages.
Adds new Halo API actions in runbooks.
Splits KB view counts so end users see only user views (when enabled).
Adds item group restrictions + running cost total on portal ticket item selection.
Adds a Ticket Reference field that’s searchable and usable in column profiles.
Groups service subscribers.
Adds $ variables for CONTRACTSLA, CONTRACTSUBTYPE, CONTRACTSTATUS.
Adds improvements to Agent Resource Booking.
Adds encryption options for variables/responses in integrations/runbooks.
Adds software expiry date tracking on assets.
Adds ticket-type control for end-user approval action visibility.
Allows team leaders to modify agents’ preferences.
Adds bulk add assets via the asset search modal.
Adds chat profile overrides at the user role level.
Allows KB links to include FAQ lists and auto-expand on open.
Allows HTML formatting in popup notes triggered by ticket rules.
Shows credit notes alongside invoices in the portal.
Adds a setting to limit users/agents to one active session.
Adds TD Synnex Quote Line Imports.
Adds dark mode counter widget color options.
Adds downpayment invoice creation from sales orders (fixed price + T&M).
Adds settings to limit portal options to Web Access Level list values.
Adds access control for reports.
Adds a deep link button on imported Addigy devices.
Multiple changes made to the Expenses list.
Allows embedding Halo portal/agent UI (including dashboards) in SharePoint via iframe.
Changes how recurring invoices appear/create based on month selection.
Ensures billing template application creates a billing plan record per matching contract/agreement.
Adds Last Contacted + Created Date fields to NinjaOne device import.
Removes quote “Send” button so sending happens only via ticket/opportunity.
Disables change history tracking for selected asset fields.
Adds invoice access restriction levels (No Access/Site/Client).
Shows the overriding contract field even if it isn’t on the field list (admin-editable only).
Enables database lookup while entering an action in the self-service portal.
Updates the Account Integrator for Sage UK v32 (2026).
Adds a setting to group ticket entities separately during invoice creation.