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
In Episode 4 of By the Run Book, the team digs into HaloPSA v2.192 with a mix of technical deep-dives and practical tips for MSPs. Robbie and Mendy walk through improvements in holiday approvals, contract schedule plans, and important security updates like webhook authentication. They also explore quality-of-life changes in ticket type restrictions, AI suggestions without an AI license, and new admin mode controls. To wrap up, Robbie demos his “Quick Ticket” browser extension for lightning-fast ticket creation without breaking your workflow. Whether you’re streamlining internal processes, tightening security, or speeding up ticket logging, this release has something to improve your day-to-day.
Watch Now: By the [run]Book: Episode 4
Robbie's Quick Tickets: Halo Quick Ticket - Microsoft Edge Addons
HaloPSA version 2.188 brought a variety of usability and backend enhancements—from runbook triggers in chat to finer-grain billing logic and cleaner settings layouts. In Episode 2, Mendy and Connor walk through these updates, troubleshoot common gotchas, and share the kind of real-world implementation advice you can only get from people deep in the trenches. They also made a point to mention a few times to add feature requests at ideas.halopsa.com
Watch now: https://youtube.com/live/6tjM4SGOcB4
Busy MSP? This guide recaps the episode’s major updates, links you to key moments in the video, and flags anything that might deserve extra caution in deployment.
Join us July 22, 2025 for Episode 3, where we'll start to cover v2.190!
Chat flows can now kick off integration commands—including runbooks. Embed chat on your website or in Teams, and let Halo handle the routing. You could:
⚠️ Be careful what runbooks you expose publicly—especially if they modify data.
You can now toggle the notification sound on or off—but the visual popup still appears. You still can’t upload custom sounds, and notifications can get out of hand across tabs.
💡 Bonus tip: You can suppress sound notifications per rule, but they may still clutter the alert pane.
Enable WebSockets for faster, real-time alerts instead of using the default polling (heartbeat). This reduces delay in receiving internal or backend alerts.
Debug runbooks, automations, email failures, and integration issues using the new service monitoring pane. It logs each backend action so you can pinpoint where workflows failed.
🔍 You no longer need to email Halo support for log digging—huge time-saver.
You can now set separate rates for time and distance in a single travel charge entry. Perfect for billing both mileage and technician transit time in a single step.
Settings like mailboxes, templates, and rules have been reorganized into distinct tabs instead of being buried under “General.” More logical, but prepare for some retraining of your internal muscle memory.
Set a contract status to auto-expire when the end date passes. A scheduled task now flips expired contracts to “inactive” if configured.
⚠️ Hidden contracts can cause trouble—pair this with automated tickets or alerts to track renewal conversations.
You can now:
Connor and Mendy share tips for keeping messy product catalogs from polluting QuickBooks/Xero.
To-do groups can now be restricted to specific customers. Use this to tailor onboarding checklists, project tasks, or compliance processes.
⚠️ Only one customer per group for now. Feels clunky, but it’s a start.
Quickly duplicate complex billing logic with a new “Clone” button. Ideal for MSPs using multiple templates per client or those needing custom combinations for each contract type.
Billing plan rules can now reference:
Use this to get laser-precise about when a contract or billing model should apply.
Choose between traditional storage (custom fields added to core tables) or a new “separate table” method. The latter avoids bloating system tables—but still stores multi-selects as comma-separated strings (ugh).
You can now import vendor quote spreadsheets directly into Halo quotes. Set up mappings for Cisco, Dell, or distributor quote templates and save serious time.
You’re no longer stuck using Halo’s shared apps. Bring your own app registration to limit scopes, improve auditing, and align with internal security policy.
A new setting condenses prorated adjustments into a single invoice line (instead of two). Easier to read—but harder to debug.
🔍 Consider leaving this disabled unless your team fully understands the logic.
The HubSpot sync continues to be... challenging:
Proceed with extreme caution or disable it entirely.
This release didn’t come with any headline grabbers—but for those deep in Halo, it delivered a handful of quality-of-life improvements and some thoughtful backend fixes. Below are the features worth your attention, especially if you're in billing, approvals, or building project automation.
Watch here now: https://youtube.com/live/WGnJXYeSxN4
Delegate Approvals for Tickets | v2.190 #830512 | 2:28
Ticket approvers can now assign delegates directly from the agent app ticket detail screen. Great for ITSM or structured orgs, but less relevant for fast-moving MSPs unless you're running approvals regularly.
Manual Proration Made Invoice-Ready | v2.190 #823611 | 4:18
A new checkbox on manual proration entries lets them show up in the invoicing screen immediately. Particularly useful for mid-cycle adjustments to annual billing, like licensing or domains.
Zero Draft Invoice Handling | v2.190 #819999 | 6:41
Halo will now ignore draft invoices created in Xero, preventing clutter and accidental syncing. You'll need to enable this in the Xero integration webhook settings.
Receive Stock Before PO Approval | v2.190 #829771 | 9:04
You can now receive items before a purchase order is approved. Risky for strict workflows but may fit fast-paced environments where hardware urgency overrides red tape.
Auto-Issue Items from Actions | v2.190 #837101 | 10:21
Set up actions to issue specific inventory items without user selection. Makes fixed-fee tickets more maintainable. Bug alert: doesn't yet work with quick actions—still requires a workaround.
Ticket ID in PDF Template Item Tables | v2.190 #837112 | 12:39
PDF templates can now pull the associated ticket ID into item tables—helpful for clarity in documentation, reporting, or client-facing PDFs.
Read-Only Appointment Subjects | v2.190 #829744 | 17:43
Admins can lock appointment subjects to match the ticket/project. It’s a small control that helps standardize records across large teams.
Editable Invoice Line Contract Links | v2.190 #823492 | 20:41
You can now edit the contract tied to a specific invoice line—especially valuable if you're tracking profitability across services with multiple contracts.
Prevent RMM from Changing Device Types | v2.190 #821917 | 24:58
ConnectWise RMM imports won't overwrite an existing device type anymore, assuming you check the new box.
QuickBooks Name Collision Workaround | v2.190 #829321 | 26:05
Halo now checks for matching item names before syncing, and links them rather than creating duplicates. A clever patch for a QuickBooks API issue.
Ticket Type as Rule Outcome | v2.190 #831422 | 27:28
You can now set ticket type via rule outcomes. Great for automating triage flows or conversions between types during lifecycle changes.
Team Custom Fields in Details Tab | v2.190 #831994 | 31:13
You can finally surface custom fields tied to teams directly in ticket details. Limited use cases for now, but it’s a step toward richer internal data visibility.
Granular Attachment Permissions | v2.190 #829812 | 32:36
Admins can now control who can view, edit, upload, and download attachments—down to the ticket type and role level.
Track Completion of Sales Lines | v2.190 #832113 | 33:58
Sales order lines can be manually or automatically marked as “Complete.” Adds helpful clarity, especially when you're tracking partial progress across installs or shipments.
Runbook Execution Modes (Parallel/Sequential) | v2.190 #830301 | 35:27
Control how runbooks trigger: run steps in parallel for speed or in series to avoid conflicts and ensure data accuracy.
Column Profiles for Invoices & Quotes | v2.190 #834755 | 44:01
Column profiles now work on sales orders, quotes, and invoices. You can personalize the data you see—and what you hide—for cleaner views.
Runbook Stats Tab | v2.190 #830996 | 35:27
Basic run metrics are now visible in a tab. Not yet robust for reporting, but a decent glance for usage and debugging.
For easier tracking, check out haloreleases.remmy.dev to filter and search HaloPSA updates by ID, version, and keyword. And join us on August 5th for a show with Robbie and Mendy: https://youtube.com/live/ApiYEmWJsPU!