The MSP Business Model Fallacy

By  
Mendy Green
June 9, 2021
20 min read
Share this post

In any business where you’re not billing Time and Materials, the amount of time you spend on a project directly correlates to how profitable you are. In an MSP, this applies even more. MSP Businesses were designed years ahead of their time, bringing into practice concepts such as recurring revenue, outsourcing, efficient resources, and more; before people even realized the value. It’s the reason that today the MSP Businesses are blowing up with everyone you meet starting their own. Unfortunately, there’s a complex side to the framework of an MSP that is very often overlooked, especially by those just starting out.

Let’s discuss how the MSP business model is built. MSPs pitch to their prospective clients that they can provide the same level (or often times better) IT Services to their organization than they themselves can find if they go with someone internally. They ask for less money, and offer a bigger team with greater experience. These same MSPs then have to turn around and hire the same people that would have been hired directly, and not just one, but two or three or more depending on the size of the MSP.

MSPs have to pay the same salary with a smaller budget. How can these numbers possibly work?

This is where efficient resources come in; an MSP needs to stack multiple clients reusing the same resources for each client so that together all the clients combined pay enough money for the MSP to pay the technicians salary and make a profit. The income also needs to cover all base expenses of the MSP which includes infrastructure such as an RMM, PSA, Email, Phones, over-night team for emergencies and so on.

With an internal IT resource, that resource would be solely focused on the business they were working for and getting paid a full salary of say $52k/year, now the same resource at an MSP is getting paid $52k/year and needs to  stay on top of not one company IT needs, but actually 3 or 4 (or more depending on the contract size of each). This kind of expectation is unreasonable and when maintained results in high-stress work environments and eventual burn out for the technician. The saying “trial by fire” is very applicable to the technicians who work at an MSP. They are under constant barrage of tickets and stress, jumping from company to company each ticket wildly different from the next. This makes them unusually skilled and also rapidly exposes them to a wide range of experience they may not have received working for just one company. A good MSP technician of the lowest tier can easily go head to head in ability (if not knowledge) to a mid-tier internal IT resource.

Now keep in mind that when MSPs started we were a new phenomenon. There was no standard to follow, no existing business to copy, except for the existing internal IT department within a Company. We didn’t know what kind of pay structure was fair to offer a Tier 1 or Tier 2 technician because there was no “average pay” metric. The only thing we did know is that we are building a business with a stress on smaller dollar amounts per client, and more total clients. This means what we paid our technicians had to be less too, or that we keep the MSP as lean as possible with only the amount of technicians truly needed. Following the 80/20 rule we determined that 80% of the time with our clients running smoothly we would be fine and only 20% of the time when some kind “perfect storm” would occur we would need to motivate our technicians to put in more effort (or what was generally called “figure something out”).

What’s being described is not a sustainable long term plan. Simon Sinek likes to stress that business is an Infinite Game and that those who are not playing by those rules are doomed to failure eventually. The only way to stay in the game is by having resources, and the will to keep playing. We’ve already established that MSPs do not have the same pockets as a normal business, not without drastically imposing upon “will”, our employees, making them work in stressful environments and constantly being battered by the next broken issue.

The fix for this is easy, and its an iteration of what we already started. Efficient use of resources. Efficiency can help us spend less time per ticket, less time per client, and improve our technicians stress in the environment. There are two side to the efficient use of resources, one of which we already started (Sharing resources among companies) but the other is often overlooked “Work load management”. If we can make our work load efficient we can easily improve upon all the issues we just brought up. Here are some ideas that can be used to help facilitate the efficient workload.

Efficient resources is way more than just sharing resources. Making your workload efficient is just as important. Remember how profitable you are directly correlates to how efficient you can be
  • Proactively addressing age of client equipment
  • Proactively addressing ticket trends over time to help improve underlying issues
  • End User technology training for better understanding of the tools they use
  • Breaking Client’s business vertical into separate teams to allow for familiarity of Line of Business applications and setup
  • Building an MSP supported technical standard as your “stack” to ensure familiarity with technical infrastructure
  • Establishing formalized business processes for your MSP Teams so they know where to find information and how to proceed
  • Building an Automation First environment allowing you to offload work from your team to your technology decreasing the amount of time spent on tickets.

Remember, in the MSP business time isn’t a loss of potential profit, its actual profit lost as your contracted rate is the same every month. Automation and bulk actions are extremely important as the less time you spend doing something the more your Per Hour amount goes up.

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...
August 5, 2025
8 min read

By the [run]Book: Episode 4

By the Run Book dives into HaloPSA v2.192 — from holiday approval tweaks and smarter contract scheduling to AI suggestions, new security controls, and Robbie’s Quick Ticket app for lightning-fast ticket logging.
Read post

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

Multiple minor improvements to Holiday Approvals | v2.192 #948186 | 3:55

  • Shows balance in days/hours instead of decimals
  • Approval screen now displays holiday details
  • Fix for approval from holiday record failing

Multiple minor changes to improve Contract Schedule Plan functionality | v2.192 #947953 | 7:01

  • Easier setup for scheduled contract work
  • Tracks allocated vs. remaining hours
  • Still manual for recurring hour replenishment

Federated credentials update endpoint | v2.192 #937555 | 13:40

  • API endpoint to update federated credentials more easily

Quotation Config: remove whitespace from signature image | v2.192 #937347 | 14:30

  • Option to trim white background from customer signature images

Ready for Invoicing filter applies to other billable entities | v2.192 #937175 | 17:17

  • Top-level Customer criteria now carry over to other billable entities
  • Ignores other non-applicable filter criteria

Integration and webhook improvements | v2.192 #936110, #936402, #936998, #936862, #936739 | 19:34

  • Various integration updates including webhook authentication

Charge Rate restrictions at Ticket Type | v2.192 #933938 | 22:17

  • Restrict allowed charge rates for specific ticket types

AI Suggestions without AI integration | v2.192 #923472 | 24:48

  • Use AI Suggestions feature without enabling AI integration

Admin Mode security improvement | v2.192 #909530 | 31:55

  • Requires 2FA to enable Admin Mode
  • Adds audit logging of activations

Load Balance limits by Team | v2.192 #898859 | 35:52

  • Limit tickets assigned via load balancing per team

Forecasting Module improvements | v2.192 #883797 | 36:00

  • Enhancements to AI-based forecasting for tickets, hours, and reports

Enabled for Instances option | v2.192 #882671 | 39:05

  • Limit notifications, webhooks, and runbooks to specific instances

Disable editing of config-tracked entities | v2.192 #882664 | 39:32

  • Prevent editing config-tracked entities directly in production

Sprints for config tracking | v2.192 #882648 | 40:26

  • Group config changes into deployable sprints

Filter ticket types on New Ticket screen by group | v2.192 #858227 | 41:40

  • New ticket screen can be filtered by Ticket Type Group

Show/hide more User system fields in Screen Layout Profiles | v2.192 #856243 | 47:20

  • Added more User fields to show/hide controls

Add new Contacts on Opportunities | v2.192 #840296 | 47:46

  • Add contacts directly from existing opportunities

Owners and Assets in article query builder | v2.192 #836009 | 48:06

  • Owners and Assets now reportable in article queries

Added $-LOGGEDINAGENTSIGNATURE variable | v2.192 #831158 | 48:15

  • Variable for logged-in agent’s signature

Unit prices in Product Bundles on Quotes | v2.192 #823474 | 48:53

  • Show per-unit price when group quantifier enabled

Restrict creation of new article tags | v2.192 #822558 | 49:48

  • Only allow selecting from existing article tags

Primary agent, secondary agent, and account manager as additional agents | v2.192 #821136 | 49:57

  • Option to add these roles as additional agents when logging a ticket

Countersign Quotations | v2.192 #820956 | 53:04

  • Allow countersigning of quotations before finalizing

Prefix for $ variables with data | v2.192 #793305 | 53:55

  • Prefix only appears if variable contains data

Halo Quick Ticket extension demo | 55:21

  • Robbie’s Edge/Chrome extension for quick ticket creation
  • OAuth setup with Halo, select fields, and complete on creation

July 8, 2025
8 min read

By the [run]Book: Episode 2

HaloPSA 2.188 introduced runbook triggers via chat, smarter billing rules, and cleaner settings layouts. In this recap, Mendy and Connor unpack key updates, link to demo timestamps, and flag risks like the still-unruly HubSpot sync. This is your practical guide to deploying the new features with confidence (and a few extra guardrails).
Read post

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! 

Trigger Runbooks from Chat | v2.188 #838526 | 3:14

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:

  • Run diagnostics
  • Route to support teams
  • Automatically open categorized tickets

⚠️ Be careful what runbooks you expose publicly—especially if they modify data.

Notification Sound Customization | v2.188 #820304 | 6:58

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.

WebSocket Notifications (Beta) | v2.188 #839402 | 8:02

Enable WebSockets for faster, real-time alerts instead of using the default polling (heartbeat). This reduces delay in receiving internal or backend alerts.

Backend Service Monitoring Logs | v2.188 #840002 | 9:13

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.

Travel Charge Rate Flexibility | v2.188 #843591 | 15:25

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.

Email & Settings UI Reorganization | v2.188 #839711 | 21:22

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.

Auto-Expire Contract Logic | v2.188 #842066 | 25:50

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.

Item Group Accounting & Billing Defaults | v2.188 #844350 | 33:00

You can now:

  • Prevent PO receiving or invoice creation at group level
  • Exclude groups from accounting sync (useful for test/staging items)

Connor and Mendy share tips for keeping messy product catalogs from polluting QuickBooks/Xero.

Client-Specific To-Do Groups | v2.188 #847221 | 51:57

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.

Clone Billing Templates | v2.188 #849112 | 52:32

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.

Advanced Billing Rule Matching | v2.188 #850203 | 54:23

Billing plan rules can now reference:

  • Ticket custom fields
  • Action fields
  • Agent properties

Use this to get laser-precise about when a contract or billing model should apply.

New Custom Field Storage Options | v2.188 #853900 | 1:04:20

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

Quote XLS Import Profiles | v2.188 #855612 | 1:18:27

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.

OAuth via Custom Developer Apps | v2.188 #856711 | 1:21:52

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.

Recurring Invoice Proration Simplification | v2.188 #857744 | 1:24:33

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.

HubSpot Integration Tweaks (and Pain) | v2.188 #859011 | 1:31:35

The HubSpot sync continues to be... challenging:

  • Doesn’t respect new “Accounts & Prospects” model
  • Overwrites domains and duplicates clients
  • Inconsistent inbound behavior

Proceed with extreme caution or disable it entirely.

July 22, 2025
8 min read

By the [run]Book: Episode 3

This HaloPSA release may not grab headlines, but it delivers smart backend fixes for billing, approvals, and project automation. From delegate ticket approvals to proration-ready invoices and improved QuickBooks syncing, it's a solid batch of quality-of-life upgrades for fast-moving teams and structured orgs alike.
Read post

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

Features Reviewed

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