Skip to main content
FabWise

Tasks and Time Tracking

Tasks are how worker time becomes job cost. A worker starts a task in Workstation, picks a job and a labor code, works, and ends the task. Every minute rolls up to that job's cost picture and your shop's labor reports.


Why it matters

If your shop tracks time but not what the time was spent on, payroll works fine but job costing doesn't. You'll know your weekly hours; you won't know whether the XYZ tank job took 40 hours or 120.

Tasks close that loop. A task says "this worker, on this shift, spent this much time on this labor code, against this job (or this internal activity)." Tasks roll up two ways:

  • By job — drives your per-job cost picture, profitability, and "what's it actually costing us to make these" reports
  • By labor code — drives your shop-wide labor analytics ("how many welding hours did we ship this month?")

Tasks are optional. Shops using FabWise only for payroll can ignore them. Shops doing real job costing need them.


What you set up as an admin

Two things, both one-time:

1. Labor Codes

Labor codes are the categories of work your shop does. Examples:

  • Welding
  • Machining
  • Setup
  • Assembly
  • Sanding / Finishing
  • Quality / Inspection
  • Programming
  • Material handling

Workers pick a labor code every time they start a task. The list should match how you want to report on your time — not too granular (50 labor codes is too many), not too coarse (just "Production" tells you nothing).

To set up: Admin → Settings → Labor Codes → New Labor Code. Add a name and (optional) a default rate if you want to use code-based costing instead of per-worker rates.

Most shops do 8–15 labor codes and refine over the first six months as they see what their reports want to slice by.

2. Internal Codes (optional)

Internal codes are for time that doesn't belong to a customer job. Examples:

  • Shop maintenance
  • Training
  • Meetings
  • Cleanup
  • Inventory
  • Vacation prep / setup

Workers tracking time against an internal code don't need to pick a job. The time still gets captured (so payroll is accurate), but it doesn't roll up to a job's cost picture.

To set up: the same labor codes UI — when creating or editing a labor code, mark it as Internal. Internal codes appear in the worker's "Internal" picker; external codes appear in the job-task picker.


What workers do

Workers track tasks from Workstation (the per-user app, not the shared kiosk). The kiosk shows the active task in the worker's header as info, but task management — starting, ending, switching — happens in Workstation.

The flow:

  1. Worker clocks in at the kiosk (start of shift)
  2. Worker opens Workstation on their phone or tablet
  3. Worker taps Start Task on their current shift
  4. Worker picks:
    • A labor code (e.g., "Welding")
    • Either a job (most common) OR an internal code (for shop maintenance, etc.)
  5. The task starts. Time accumulates against that labor code + job combination.
  6. When the worker switches to different work, they tap End Task and then Start Task again with the new selection. FabWise can also auto-end the previous task if they start a new one without ending first.
  7. At end of shift, the worker clocks out at the kiosk. Any active task auto-ends.

Workers can have one active task at a time per shift. Starting a new task while one is active ends the first one. This keeps the time math clean — every minute on the clock is attributed to exactly one task (or to no task, if they didn't start one).

For more on the worker experience, see Your First Sign-In to Workstation.


What happens to the time

Each task records:

  • User — who did the work
  • Shift — which shift the task belongs to (so it's bounded by their clock-in and clock-out)
  • Labor code — what kind of work (Welding, Setup, etc.)
  • Job — what customer project (if external) OR internal_task: true with an internal code (if not)
  • Start time and end time
  • Duration (derived)
  • Labor rate snapshot — the worker's hourly rate at the time the task was logged, captured into a JobUserRate snapshot so the job's cost picture is historically accurate even if you raise the worker's rate later

The duration × rate gives you the labor cost for that task. Sum across all tasks for a job and you have the job's total labor cost.


Where you see the rollups

On the job

Open any job → Costs tab. You'll see:

  • Total labor cost (sum of all tasks against this job × rate snapshot)
  • Hours by labor code (so you can see "we spent 47 hours of welding and 12 hours of finishing on this")
  • Hours by worker (so you can see "Sarah did 22 of those welding hours, Mike did the other 25")
  • Quoted vs. actual hours per labor code (are you above or below what you priced?)
  • Profit / margin against the issued invoice

On the dashboard

Admin → Dashboard shows top-line shop metrics including labor utilization, hours by code, and current jobs with their cost-vs-quote position.

On reports

Admin → Reports → Job Costs gives you cross-job reporting (e.g., "show me every Welding-heavy job we ran in Q3 and the margin on each").

Direct vs. indirect in the Payroll Report

The Payroll Report (Admin → Reports → Payroll) shows a direct/indirect split per shift:

  • Direct hours — time a worker spent on a specific task (with a job and labor code). This time flows to the job's cost picture.
  • Indirect hours — time within the shift not attributed to any task: setup, transitions between jobs, clean-up, walking to the tool crib.

Indirect time counts toward the worker's payroll hours but does not load onto any job. This keeps your per-job cost numbers accurate — they reflect what was actually worked on the job, not a blend that includes overhead time.

If your shop runs high indirect time, that's useful to know. It often points to scheduling friction, job-transition delays, or tasks that workers are doing but not tracking.


Editing time after the fact

Workers can edit their own tasks within the current shift from Workstation — change the start/end times, switch the job, fix a wrong labor code. Once the shift is ended and approved, only admins can edit task times.

To edit a closed task:

  1. Open the shift (Admin → Shifts → [shift])
  2. Find the task in the task list
  3. Edit times, job, or labor code
  4. Save — the change is logged in the activity history

The original times are preserved internally; the edited values become the "final" times used for cost rollups. (Same pattern as shift corrections — capture is immutable, corrections are first-class. See Shift Review.)


Common questions

What if a worker forgets to start a task?

Their time at the kiosk still counts for payroll (the shift exists). It just doesn't get attributed to any job — it shows up as "untracked time" in reports. They (or their supervisor) can add the task after the fact by editing the shift.

What if a worker tracks a task against the wrong job?

Edit the task — either the worker from Workstation (during the shift) or an admin from the shift detail page (after the shift). The labor cost re-flows to the correct job.

Can a worker work on two jobs at once?

Not as one task. Each task is one labor code + one job + one worker. If a welder is genuinely splitting time across two jobs in the same hour (e.g., short interruptions), they end one task and start another. Most shops don't track at sub-15-minute granularity; the worker decides what's worth a separate task.

How granular should labor codes be?

If your shop has 8 distinct skill areas, that's about right. 4 is too coarse (you lose insight); 25 is too granular (workers stop tracking accurately). Start with what feels right, refine over a few months as your reports tell you where you'd like more detail.

What's the difference between labor code and job?

Labor code = what kind of work ("Welding"). Job = what customer project ("XYZ tank weldment"). A task is the intersection: "Welding on the XYZ tank."

What's an internal task?

Time that isn't customer work. Shop cleanup, training, a safety meeting, equipment maintenance. The worker tracks it against an internal code, no job. The time counts for payroll but doesn't load onto any customer job's cost.

Why do tasks live in Workstation and not on the kiosk?

The kiosk is shared and optimized for fast in/out (≤10 seconds per tap). Task switching needs more thought — picking the right job from a list, the right labor code, sometimes notes. That's a per-user, single-handed phone experience, not a shared tablet experience. The kiosk shows the active task in the user header so people walking by can see what they're working on, but it doesn't let them start or stop tasks there.

Does FabWise auto-end the previous task when I start a new one?

Yes, if you start a new task while another is active, the previous one ends at that moment. Net effect is the same as if you'd manually ended first — but the UI doesn't force you to do two taps when one is enough.

Can I see a worker's full task history for a shift?

Yes — open the shift in admin and scroll to the task list. You'll see each task with its labor code, job, start, end, and duration. Or from Workstation, the worker can see their own task list for any shift.


Where to find it

  • Worker task UI: Workstation → current shift → Start Task
  • Admin labor code setup: Admin → Settings → Labor Codes
  • Job cost rollup: Admin → Jobs → [job] → Costs
  • Cross-job labor reports: Admin → Reports → Job Costs
  • Editing tasks after a shift ends: Admin → Shifts → [shift] → task list (admin-only)
  • Where a worker views their own task history: Workstation → Shifts → [shift]
  • One active task per shift, per worker: enforced

  • [Managing Jobs](managing-jobs.md)
  • [Your First Sign-In to Workstation](../workstation/your-first-sign-in.md)
  • [Shift Review](../time-tracking/shift-review.md)
  • [How Hours Roll Up to Payroll](../time-tracking/how-hours-roll-up-to-payroll.md)

Still stuck?

Browse the full help library, ask Foreman inside your account, or email our support team.