Most IT consultants and small MSPs are running two businesses inside one calendar. The first is the helpdesk: password resets, printer drivers, MFA lockouts, the partner who can't open a PDF on a Tuesday at 4:55 p.m. The second is project work: a Microsoft 365 migration for a 30-seat law firm, a firewall replacement at a manufacturing client, a SharePoint cleanup that was supposed to take a week and is on month three.
The two businesses pull on the same engineers. A senior tech who is supposed to be on the migration spends the morning on a P1 ticket because nobody else can touch the client's domain controller. Project hours slip. The MRR client whose ticket got bumped sends a Slack message asking why response times are creeping up. The partner reviewing the month-end financials notices that project margin is 18% instead of the 35% the SOW was priced against, and nobody can explain where the hours went.
This is the operations problem, and it is mostly a software and process problem — not a hiring problem. This guide walks through six concrete steps that separate consultancies that scale from consultancies that drown: ticket routing, SLA targets, time capture, the ticket-vs-project decision, MRR billing, and asset tracking. Plus the KPIs to watch, the mistakes that show up at every shop, and how the [Helpdesk](/apps/helpdesk) and [Projects](/apps/projects) apps in Deelo run all of this on a single platform.
Step 1 — Build a Ticket Routing System That Doesn't Rely on Heroes
The default state at most small consultancies is hero routing: tickets land in a shared inbox, the most senior engineer scans them, and whoever answers fastest owns it. That works at three engineers. It does not work at seven. The senior engineer becomes the bottleneck, junior techs lose the chance to learn, and tickets get triaged based on urgency-of-the-loudest-client instead of actual priority.
Replace hero routing with deterministic routing. Every inbound ticket — email, portal submission, phone-to-ticket conversion, monitoring alert — gets classified on three axes the moment it enters the queue: client (which contract, which SLA), category (network, identity, endpoint, application, M365, security), and severity (P1 outage, P2 degraded, P3 standard, P4 request). From those three axes, the routing rules write themselves: P1 for any client goes to the on-call engineer; P2 network issues go to the network team queue; P3 endpoint requests go to tier-1 round-robin; M365 license changes go directly to the account that owns license management. The engineer never has to decide who owns a ticket — the queue does.
The payoff is not just speed. It is auditability. When a P1 misses SLA, you can show the client exactly when the ticket was created, when it was routed, who picked it up, and what was done — without reconstructing it from Slack threads.
- Capture every channel into one queue. Email, web portal, phone (with a phone-to-ticket integration), monitoring tool alerts, and chat. If a ticket is born in a channel that does not feed the queue, it is invisible.
- Tag at intake, not at triage. Client, category, severity, and originating channel get attached when the ticket is created — by automation rules on email subject patterns, monitoring tool tags, or web-form fields. Don't ask the engineer to guess.
- Route on rules, not on memory. A ticket from `legal-firm-a.com` with subject containing `outage` goes to the on-call queue with severity P1, regardless of who's at their desk. The rule engine does the work.
- Set ownership the moment a ticket is claimed. "Assigned to me" is a state the engineer enters explicitly — usually by clicking "claim" — so the system knows who is on the hook and the SLA timer is anchored to a real person.
- Escalate on rules, not on shouting. If a P2 ticket has been open 4 hours with no first response, it auto-escalates to a senior queue. The client never has to call the partner to get attention.
Step 2 — Define SLA Targets You Will Actually Hit
SLAs that exist only in the MSA are a liability. The contract says first response within 30 minutes for P1, but nobody on the team gets a notification at 25 minutes, nobody tracks the breach, and the partner finds out three months later when the client asks why two breaches in a row were never credited back. Either the SLA is in the operations system or it is not real.
A workable SLA framework has three layers. First, response targets — how long until a human acknowledges the ticket. Second, resolution targets — how long until the issue is fixed or worked around. Third, business-hours scope — does the clock run 24x7, business hours only, or business hours plus an after-hours surcharge. All three are per-severity (P1 strictest, P4 loosest) and per-contract (a managed-services client gets tighter SLAs than a break-fix client).
Here is the trap: most small consultancies set SLAs they cannot actually meet because the spreadsheet looked good in the proposal. Look at the last 90 days of real first-response times by severity. The P75 of that distribution is roughly what you can promise without lying. Anything tighter requires hiring or after-hours coverage you do not yet have.
- Codify each SLA in the system, not in a Word doc. Every contract should map to an SLA profile: P1 = 15 min response / 4 hr resolution, P2 = 1 hr / 8 hr, P3 = 4 hr / 2 business days, P4 = 1 business day / 5 business days, etc.
- Pause the clock for client-blocked status. If you are waiting on the client to confirm a change window or send a password, the SLA timer pauses. Otherwise you punish your team for the client's delay.
- Show SLA status in the ticket UI. A countdown badge — "P1, 22 min remaining on response" — focuses the engineer on the actual deadline.
- Run a weekly SLA report. Breach rate by severity, by client, and by engineer. If one client is generating 60% of breaches, the SLA is wrong for that contract or the contract is mispriced.
- Tie SLA performance to the QBR deck. Clients want to see a dashboard of SLA hit rate, ticket volume, and trend. If you are at 97% on P1 response, that is a renewal lever. If you are at 78%, the conversation is happening anyway — better to bring the data first.
Step 3 — Capture Time the Moment It Happens
Time capture is the single biggest revenue leak at small consultancies. The work is real, the hours are billable, and they don't get billed because nobody wrote them down. Engineers reconstruct timesheets on Friday afternoon from memory and Slack scrollback, and 15-25% of actual billable work disappears. On a $1.2M/yr practice, that is $180K-$300K in unbilled labor every year.
The fix is structural. Time should be captured against the ticket or project at the moment the work happens — not at the end of the day, not on Friday, not at month-end. Three mechanisms make this possible: a timer attached to every ticket and project task that any engineer can start with one click, automatic capture from calendar entries (a 60-minute meeting on the M365 migration project becomes 60 minutes of time on that project), and post-call entry directly from the phone integration (a 22-minute call becomes a 0.4-hour entry on the originating ticket).
The goal is to move time entry from a weekly spreadsheet exercise to a continuous byproduct of doing the work.
- Every ticket has a timer. Click start when you pick up the work, click stop when the work is done, and the entry is created against the ticket with a description. No separate timesheet step.
- Round to the agreed billing increment. Most consulting contracts bill in 15-minute increments. The system rounds each entry up to the next 0.25 hour and stores both the actual and the billed time, so you can see the rounding effect on margin.
- Tag time as billable, non-billable, or warranty. Re-work on a project task you already invoiced is non-billable. SLA-credit work is non-billable. A free-hours block on an MSP contract is non-billable. The system needs to know — otherwise warranty work shows up as margin erosion you cannot explain.
- Reconcile time daily, not weekly. Each engineer reviews the day's time entries before they sign off. Five minutes daily prevents the Friday-afternoon archaeology dig.
- Lock the period at month-end. Once an invoice run is closed, time entries for that period are read-only. Adjustments go through a credit memo, not a backdated edit.
Step 4 — Decide Whether It's a Ticket or a Project (And Stop Confusing Them)
Half the operational chaos at small consultancies comes from running project work as a series of tickets and ticket work as informal projects. A 30-hour M365 tenant cleanup gets opened as one ticket, six engineers touch it over three weeks, time is fragmented across half a dozen entries, and at the end nobody can tell whether it was profitable. Meanwhile, a recurring "clean up disk space on the file server" task gets opened as a project with a Gantt chart, when it is really a 2-hour ticket.
The rule is simple. A ticket is a single unit of reactive work — usually under 4 hours, usually completed by one engineer, usually triggered by a client request or a monitoring alert. A project is multi-step planned work — multiple tasks, dependencies, a defined scope, a budget, a start and end date, and usually multiple people. The tells: does it have phases? Is there a deliverable that requires sign-off? Is the budget over a threshold (most shops use 8 or 16 hours)? If yes, it is a project.
Mixing the two creates two specific failures. First, project margin becomes unmeasurable because half the work is in tickets. Second, tickets balloon because what should have been a 30-minute fix gets scoped into a mini-project nobody priced.
- Set a hours threshold for conversion. Anything over 8 hours of estimated work becomes a project. The engineer who picks up the ticket flags it, a dispatcher converts it, and the ticket links to the resulting project record so history is preserved.
- Projects have phases, tasks, and dependencies. Discovery → Design → Build → Test → Cutover → Hypercare. Each phase has a budget and an owner. Time entries roll up to phase, then to project, then to client.
- Tickets have one resolution event. When the issue is fixed, the ticket closes. If the fix exposed a bigger problem ("this server needs replacement"), open a project for the bigger problem and close the ticket.
- Don't bill project work as ticket time. Project hours go on the project invoice (fixed-fee, T&M, or milestone-based), not on the monthly MRR run. Crossing them is how project margin disappears.
- Keep the link visible. When a ticket converted into a project, the ticket detail still shows the project link. When a project produced follow-up tickets (e.g., bug reports during hypercare), those are linked back. History is one of the most valuable things you sell at renewal.
Step 5 — Run a Clean MRR Billing Cycle Every Month
MRR billing — the recurring monthly invoice for managed services, plus add-ons and overages — is where small consultancies leak money slowly and politely. The base contract bills correctly. The 50 included help-desk hours per month are not metered, so when a client uses 80, the overage is forgotten. Add-ons (a new user, a new mailbox, a new endpoint license) get added in the middle of the month and never make it onto the invoice. Three months later, the partner finds the discrepancy during a contract review and either eats it or has the awkward conversation with the client.
A clean MRR run has four pieces. A locked base fee per contract per month, automatic. A per-unit count that pulls from the system of record (number of managed endpoints, number of M365 licenses, number of mailboxes) at month-end. An hours overage calculation that compares actual billable hours on that client's tickets and projects against the contracted block. And a one-click generation of the invoice with line items for each, ready to send.
The difference between this and most shops is that nothing is calculated by hand. The endpoint count comes from the RMM. The license count comes from the M365 partner portal or a daily sync. The hours come from the time-capture system. The base fee comes from the contract record. If any of those data points requires a human to look it up, the invoice will be wrong eventually.
- Lock the contract terms in the system, not the proposal PDF. Base fee, included hours, per-unit overage rate, billing increment, and renewal date are structured fields. The PDF is for the client; the system is for billing.
- Pull endpoint and license counts automatically. Sync from the RMM and the M365 partner portal nightly. The end-of-month snapshot is what gets billed, with the diff vs. last month logged in the audit trail.
- Calculate hours overage on a billing-cycle clock. Reset on the contract's billing date, not the calendar month. A client whose contract starts on the 15th has a 15th-to-14th cycle.
- Generate invoices in a single batch. Run all MRR contracts in one go on the billing date, review the variance vs. last month before sending, and only push to send after a one-page review. Catches outliers before the client does.
- Auto-collect via card or ACH on net-X terms. The longer an invoice sits unpaid, the more it costs. Stripe or a bank ACH integration with auto-charge on day-X drops collections friction to near zero.
- Track unbilled WIP separately from billed. Project T&M hours that have not yet hit an invoice are work-in-progress. A WIP report at month-end tells you the cash you have already earned and not yet collected.
Step 6 — Treat Asset Inventory as the Source of Truth
The asset inventory is what holds the rest of the system together. The endpoint count drives MRR. The serial number on a server connects a ticket to a warranty record. The user-to-mailbox mapping decides who pays for which M365 license. When the inventory is wrong, the billing is wrong, the SLA targets are wrong (because the wrong device gets a P1 designation), and the engineer wastes 20 minutes finding out which firewall a client owns before they can fix the issue.
The asset record is one row per physical or logical thing the consultancy is responsible for: workstation, server, firewall, switch, VPN appliance, printer, M365 license, mailbox, security tool license. Each row has a client, a location, an owner (the user it is assigned to, if any), a serial number or unique ID, a purchase date and warranty expiry, an install date, and a status (active, retired, in-spare-pool). Tickets reference assets. Projects produce or modify assets. Invoices are partly built from asset counts.
The rule is that no ticket about a piece of hardware closes without the asset being identified, even if the engineer has to add it on the fly. Otherwise the inventory drifts and three years later you are doing a discovery scan from scratch.
- Sync from the RMM nightly. Endpoints discovered by the RMM get auto-added to the asset list with type, OS, and last-seen timestamp. Manual fields (purchase date, warranty) are filled in once at procurement.
- Tie M365 licenses to user records. Every assigned license is a row. When a user is offboarded, the license assignment closes — and the next month's invoice reflects the change.
- Track warranty and lifecycle dates. A dashboard of devices going out of warranty in the next 90 days is a quoting opportunity. Don't make the partner remember it.
- Make tickets ask for the asset. A field on the ticket form (or an automation that infers it from the originating user) ensures the link gets made every time.
- Run a quarterly reconciliation. RMM-discovered endpoints vs. asset inventory vs. invoiced count. Differences show up as missing endpoints (under-billing), retired devices still being billed (refund risk), or new devices that nobody noticed (revenue capture).
KPIs Worth Watching Every Week
- First response time (P50, P75, P95) by severity. P95 matters more than the average — the worst 5% of tickets is where complaints come from.
- Resolution time by severity. Pair with reopen rate; a fast resolution that gets reopened is a false positive.
- SLA hit rate by client. The renewal conversation runs on this number.
- Reopen rate. Tickets reopened within 7 days. Anything over 8% says triage or fix quality is breaking down.
- Utilization (billable vs. total hours) per engineer. The honest number, not the timesheet number. 70-75% is healthy for a tier-2 engineer; 60-65% for a senior who also does pre-sales.
- Realization rate (billed vs. logged hours). Where time gets written off — usually warranty, dispute credits, or rounding loss.
- Project margin (planned vs. actual hours x rate vs. invoiced). The single best signal of estimating accuracy.
- Unbilled WIP aging. Hours older than 30 days that have not been invoiced. Anything over 5% of monthly revenue is a process problem.
- MRR per client (and net change month over month). Adds, churns, expansions. The number the partner looks at first.
- Ticket volume per endpoint per month. Above 0.5/mo for an MSP client signals chronic underlying issues; below 0.1 is either over-managed or the client is going around you.
Common Mistakes IT Consultants Make
- Running tickets and projects in different systems. A help-desk tool plus a project tool plus a billing tool plus a CRM means engineers re-key everything four times. Time and margin disappear in the gaps.
- Treating SLAs as a marketing claim, not an operational target. If the SLA is not visible inside the ticket UI with a countdown, it is not real.
- Letting engineers be the dispatcher. Senior techs spend two hours a day triaging. That is the most expensive routing system you can buy.
- Estimating projects in calendar time instead of effort. "It's a two-week project" is not the same as "it's 60 hours." The first hides under-pricing; the second exposes it.
- Reconstructing timesheets weekly. Memory is not a billing system. Friday afternoon is the wrong time to capture Tuesday's work.
- Billing MRR off a manual spreadsheet. Endpoint counts drift, license counts drift, hour overages get forgotten, and over a year the leak is one full-time engineer's salary.
- Closing tickets without asset attribution. The inventory degrades, and three years later a discovery audit costs as much as the original deployment.
- Skipping the QBR. Clients renew the firms that show up with data. Without a quarterly review, the renewal is decided on whatever P1 happened most recently.
- Pricing managed services on hours, not endpoints. Hours-based MRR rewards inefficiency. Endpoint-based MRR rewards automation and scripting.
- Treating project hypercare as free support. Hypercare is a defined window with a defined hours budget — when it ends, follow-up issues become tickets against the MRR contract or T&M billable.
How Deelo Helps
Deelo's [Helpdesk](/apps/helpdesk) and [Projects](/apps/projects) apps run all six steps on a single platform — without the four-tool stack most consultancies are stitching together with Zapier and prayer.
In Helpdesk, every inbound channel feeds one queue. Routing rules use client, category, and severity tags applied at intake. SLA profiles attach to each contract, with countdown badges on every ticket and automatic escalation when a target is at risk. The timer button on every ticket creates time entries the moment the work starts, tagged billable / non-billable / warranty. Tickets link to assets, projects, and the originating client record so history is preserved across the relationship.
In Projects, multi-step work runs with phases, tasks, dependencies, owners, and budgets. Time captured against project tasks rolls up to phase, project, and client margin views in real time. Conversion from a ticket to a project keeps the link, so a hypercare bug report opened against a delivered project shows up at QBR time as part of the project narrative.
The MRR billing engine pulls endpoint counts from the connected RMM, license counts from the M365 partner sync, and hours overage from the time-capture system, then generates one invoice per contract on the billing date. The asset inventory is the same database the helpdesk and projects apps read from — change it once, it changes everywhere.
Pricing starts at $19/seat/mo, which is the line where small consultancies stop paying for four point tools and start paying for one platform that runs the whole operation.
[Run your IT consulting helpdesk and projects on Deelo — start free, no credit card required.](/apps/helpdesk)
Frequently Asked Questions
- What is the best helpdesk software for an IT consulting firm or small MSP?
- The best helpdesk software for a small IT consultancy or MSP is one that combines ticketing, SLAs, time capture, project management, MRR billing, and asset inventory in a single platform — not four tools stitched together. Deelo's Helpdesk and Projects apps handle all of that on one database starting at $19/seat/mo. Standalone tier-1 helpdesk products (Freshdesk, Zendesk) are strong on ticketing but force separate tools for projects, billing, and assets, which means engineers re-key data and margin leaks at every handoff.
- How do you decide whether a piece of work is a ticket or a project?
- The simplest rule: a ticket is reactive, single-engineer, usually under 4 hours, and has one resolution event. A project is planned, multi-step, has phases or dependencies, has a budget over a threshold (most shops use 8-16 hours), and usually involves more than one person. The tells are phases, deliverables that require sign-off, and a defined start and end date. If the work has any of those, run it as a project. Mixing the two destroys project margin reporting and balloons ticket scope.
- What SLA targets are realistic for a small IT consulting firm?
- Look at the P75 of your last 90 days of actual first-response times by severity, and use that as the contractual target — not what looked good in the proposal. A common starting point for an MSP-tier client: P1 = 15 min response / 4 hr resolution (24x7 if you have on-call coverage, business-hours only if you don't), P2 = 1 hr / 8 hr, P3 = 4 hr / 2 business days, P4 = 1 business day / 5 business days. Don't promise 24x7 P1 response unless you have a real on-call rotation; one missed Saturday outage will cost you the renewal.
- How can I bill MRR clients accurately without a manual spreadsheet?
- Move every input to an automatic source. Endpoint counts from the RMM via nightly sync, M365 license counts from the partner portal sync, hours overage from the time-capture system tied to tickets and projects, base fee from the contract record. The MRR run becomes a one-click generation of invoices on the billing date with a variance review against last month before sending. Manual spreadsheets fail in two predictable ways: forgetting mid-month adds (under-billing) and forgetting offboards (over-billing, which becomes a refund). Automating the inputs eliminates both.
- Why does asset inventory matter so much for MSP billing?
- Asset inventory is the source of truth that drives most of the billing inputs: endpoint count for per-device MRR, M365 license count for per-license charges, warranty status for hardware quoting, and the link that ties tickets to specific devices. When inventory is wrong, billing is wrong — usually under-billing because new devices were not added or licenses were not assigned. A nightly RMM sync, a structured M365 license-to-user mapping, and a quarterly reconciliation between RMM-discovered endpoints, asset inventory, and invoiced count are the three controls that keep the inventory honest.
- How do I reduce time-tracking leakage on my engineering team?
- Time leaks happen when capture is asynchronous from the work. The fix is structural: a timer on every ticket and project task that engineers click at the moment they pick up work, automatic capture from calendar entries (a 60-minute meeting on a project becomes 60 minutes of project time), and post-call entry from the phone integration. Daily reconciliation — five minutes at the end of the engineer's day to review entries — replaces the Friday-afternoon spreadsheet exercise. Combined, these typically recover 15-25% of billable hours that were previously lost in the gap between work happening and time being captured.
Related pages
Explore More
Related Articles
Best Personal Injury Case Management Software in 2026
A head-to-head comparison of the top personal injury case management platforms in 2026. Lien tracking, medical record management, demand letters, contingency math, and settlement distribution compared across Clio, MyCase, Filevine, CASEpeer, PracticePanther, Smokeball, and Deelo.
12 min read
How-ToHow to Start a Plastic Surgery Practice: Complete 2026 Guide
A step-by-step guide to launching a plastic surgery practice in 2026. Licensing, credentialing, facility setup, liability insurance, patient pipeline, operations software, and first-year revenue targets.
14 min read
Best OfBest Podcast Management Software in 2026
The top podcast management platforms compared for 2026. Descript, Captivate, Buzzsprout, Transistor, Riverside, and Deelo — features, pricing, and the angle each takes for professional podcasters.
11 min read
ComparisonDeelo vs ServiceTitan: The Honest 2026 Comparison
A genuinely fair side-by-side comparison of Deelo and ServiceTitan for field service businesses. Pricing, features, strengths, weaknesses, and who each platform is really built for.
12 min read