Skip to content

Time Tracking

Time entries are the atomic unit of VERA. Everything else — budgets, burn rates, financials — flows from the hours logged.


What is a time entry?

A single logged record of work. Every entry has exactly five meaningful fields:

FieldDescriptionExample
user_idWho did the workAlice (resolved from her Slack ID)
project_idWhat project it's forNike Rebrand
task_idWhat type of workDevelopment
hoursHow many hours4.5 (stored as decimal)
dateWhen it happened2026-03-28
notesOptional context"Fixed auth bug on login page"

There's also an id — a permanent sequential number assigned when the entry is created. Use this ID to edit or delete the entry later.


Task is always required

VERA will never log time without a task type. If you don't specify one, VERA will ask.

User: "4 hours on Nike"

VERA: "What type of work? (Development, Design, QA, Project Management, Client Meeting, Admin)"

This is not optional. Tasks are what connect hours to cost categories, envelopes, and billability.


Hours format

Always use hours-and-minutes format in conversation:

  • ✅ "4h 30m"
  • ✅ "2h"
  • ✅ "45m"
  • ❌ "4.5 hours"
  • ❌ "4.5h"

VERA stores hours as a decimal internally (4.5), but always presents and accepts them as 4h 30m.


Billable vs. non-billable tasks

Each task type has an is_billable flag. Billable tasks generate revenue. Non-billable tasks are tracked for cost purposes only.

Example: "Admin" is typically non-billable. "Development" is typically billable. The billability is set per task type, not per entry.

Project type also affects this: Pro Bono projects have is_billable = false regardless of task type.


Logging for others

By default, Users can only log time for themselves. Managers can log time for people on their assigned projects (e.g. via log_sick_day or log_leave). Owners can log for anyone.

When logging via @mention, VERA uses the Slack user ID from the mention — name-based matching is less reliable and not used.


Editing and deleting entries

Use the entry's id to reference it:

  • edit_entry — change hours or notes. Owners can edit any entry; Users can only edit their own.
  • delete_entry — permanently removes the entry. Same permission rules.

There is no "soft delete." Deleted entries are gone. VERA will warn you before the deletion.


How entries relate to budgets

Logging time does not deduct from an envelope automatically in a blocking sense — but VERA tracks the relationship:

  • get_project_status shows hours logged vs. task budgets
  • get_estimates_vs_actuals compares allocated hours to actual logged hours
  • Morning summaries flag people whose logged hours exceed their envelope

The system is transparent, not restrictive. You can always log more than your budget — the alerts tell you when that's happening.


Time entry IDs

Every entry gets a permanent sequential ID assigned at creation. IDs are never reused, even if an entry is deleted. This means:

  • You can always reference entry #42 in conversation: "Edit entry 42"
  • VERA confirms the ID when logging: "Logged 4h on Nike Rebrand (Development) (ID: 42)"
  • Historical audit trails are reliable

The person field (deprecated)

The schema includes a person column (column C in 01. Time Entries), but it is deprecated and always written as an empty string. Person is resolved from user_id when needed. Do not rely on this column in reporting formulas — always join via user_id.


Protected time-off projects

Three special projects exist for absence tracking:

  • Out of Office — for PTO/vacation
  • Sick — for sick days
  • Leave — for unpaid or extended leave

Users cannot log directly to these projects. Time is only recorded here through the formal request and approval workflow. See Time Off Requests.

Further reading

VERA by talktalkmake