Start from the statutory calendar, which is fixed and public, then layer your own history on it. And stop forecasting hours — forecast arrivals, service time, wait time and review capacity.
Key takeaways
Start from the statutory calendar, which is fixed and public, then layer your own history on top of it. AI is a curve-fitter over your time and job records — useful for turning three years of messy timesheets into a week-by-week arrival profile, useless at knowing that a client will incorporate in November.
The mistake most firms make is forecasting hours. Hours are an output. Forecast three things instead: when files arrive, how long each takes once it can be started, and how much of the delay is you waiting for the client. Those three drive everything else, and only the first is genuinely seasonal.
Before touching a model, write down the shape the law imposes. Section 150(1) of the Income Tax Act sets the returns calendar: a corporation files within six months after the end of its taxation year; an estate or trust within 90 days from the end of the year; and any other person on or before the following April 30, or June 15 for an individual who carried on a business in the year (with a further rule for a cohabiting spouse or common-law partner). Separately, section 205(1) of the Income Tax Regulations requires the information returns filed under that Part — the slips — on or before the last day of February for the preceding calendar year.
That single paragraph explains most of a Canadian firm’s seasonality. February is slips. Late winter to 30 April is personal tax. Mid-June catches the self-employed. Corporate work is not seasonal at all in the statute — it is spread by clients’ year-end dates, which is why a firm with sixty December year-ends has a June cliff that a firm with the same revenue and scattered year-ends does not.
Model those four and the queue falls out of them. Model “total hours in March” and you have a number that cannot tell you whether to hire, to move deadlines, or to chase records earlier.
In Ontario the Employment Standards Act guidance on hours of work sets a daily maximum of eight hours (or the established regular workday if longer) and a weekly maximum of 48 hours, exceeded only by an electronic or written agreement between employee and employer. Overtime begins after 44 hours in a work week and is paid at one and a half times the regular rate; managers and supervisors do not qualify where the work they do is managerial or supervisory.
So a busy-season plan that quietly assumes 60-hour weeks from salaried staff is a plan with an unpriced legal component. Model the overtime cost explicitly and you will usually find that pulling work forward is cheaper than paying for the peak. Other provinces set different thresholds — name yours before you build the model.
Three jobs, all of them clerical rather than clever. Cleaning the history: mapping inconsistent time-entry descriptions onto jobs and services so the arrival profile can be computed at all. Segmenting clients: grouping by behaviour — who reliably delivers records in week one, who never does before the last fortnight — which is far more predictive than size. Drafting the intervention: generating the chase list and the client-specific request, weeks earlier than a person would have got to it.
Practice systems already carry the raw material. Karbon’s time and budgets feature describes estimating and tracking time against jobs, comparing budgets to actual outcomes and seeing who has capacity, and its reporting and analysis dashboards cover outstanding jobs and team capacity. Whatever system you use, the forecast is only as good as the job coding underneath it.
What AI does not do is decide. A staffing plan, a decision to decline work, or a conversation with a client about moving a year-end is a partner’s call, made with the forecast in front of them.
An Ontario firm has 260 personal returns and 90 corporate year-ends, 55 of which fall on 31 December. The naive plan staffs March and April. The arrival profile, once the history is cleaned, shows something different: personal files cluster in the last ten days before 30 April, and the June corporate deadline for the December year-ends lands directly on top of the June 15 self-employed filings.
Two changes come out of it. Records requests for the December year-ends go out in February rather than April, moving workable dates earlier without moving any deadline. And the twenty clients with the longest historical wait times get a different request format and a follow-up scheduled before they are late rather than after.
Measure the thing you can count: the number of files workable four weeks before their deadline, before and after. Hours saved is not measurable and makes a poor business case.
This is capacity planning for delivery to a book of clients. Once you have the forecast, the reporting layer that sits on it is covered in utilisation and realisation reporting and building a partner dashboard. Your own month-end close is a different job and lives on the accounting automation page. On the employment side, Treadstone’s sister firm covers Ontario hours of work limits.
How much history do I need?
At least two full cycles, because a single cycle cannot separate a trend from a one-off. With less than that you are describing last year rather than forecasting.
What if we do not track time by job?
Then fix that first. A forecast built on unallocated time tells you the firm was busy, which you already knew. Job-level coding is the prerequisite, not the enhancement.
Can it predict a new client’s volume?
Only by analogy to similar existing clients, and you should treat that as a starting estimate a partner adjusts, not an output.
How do I know the forecast is any good?
Score it. Record the forecast, compare it to what happened, and look at the error by week and by service. A forecast nobody scores is a decoration.
A 30-minute call is enough to tell you whether AI pays for itself here.