Skip to content

Vacancies

Vacancies represent open positions in your organization -- roles that have been approved but not yet filled. They are the bridge between headcount planning and actual hiring, giving you visibility into the cost impact of planned hires before anyone is onboarded.

What a Vacancy Represents

A vacancy in Flowstate is a position that exists in your organizational plan but does not yet have a person in it. It captures everything you know about the role at the time of planning: what it is, when you expect to fill it, how much it will cost, and which team it belongs to.

Vacancies are essential for accurate forecasting. Without them, your headcount plan only reflects the people you already have -- not the people you intend to hire. By modeling vacancies, Flowstate can project future costs, show you where your teams will grow, and flag budget constraints before they become problems.

Key Fields

FieldTypeDescription
roleStringA descriptive title for the position (e.g., "Senior Backend Engineer").
descriptionStringAdditional context about the role, responsibilities, or requirements.
statusEnumThe current state of the vacancy. See Vacancy Statuses below.
fteDecimalThe FTE value of the position (typically 1.0 for full-time, 0.5 for part-time).
targetStartDateDateThe date you expect the hire to begin working. Used for cost forecasting.
targetFillDateDateThe date you expect to extend an offer. Used for hiring pipeline tracking.
salaryMinDecimalThe lower bound of the salary range for this role.
salaryMaxDecimalThe upper bound of the salary range for this role.
currencyCodeStringISO 4217 currency code for the salary range (e.g., "USD", "GBP").
filledByLiveEmployeeIdIDReference to the employee who was hired into this vacancy. null while open.
hiringManagerIdIDReference to the employee responsible for filling this position.

Vacancy Statuses

Every vacancy has a status that reflects where it stands in the hiring process:

StatusMeaning
openThe position is actively being recruited for. It contributes to future cost forecasts.
on_holdRecruiting is paused but the position has not been cancelled. It may or may not appear in forecasts depending on your configuration.
filledA candidate has been hired and linked to this vacancy via filledByLiveEmployeeId. The vacancy's forecasted cost is replaced by the employee's actual cost.
cancelledThe position has been withdrawn. It no longer contributes to forecasts or headcount counts.
open  -->  filled
  |
  v
on_hold  -->  open
  |
  v
cancelled

TIP

When a vacancy is filled, keep it in the system rather than deleting it. The link between the vacancy and the resulting employee record provides a complete hiring audit trail -- you can trace any employee back to the approved position that led to their hire.

How Vacancies Become Employees

The lifecycle of a vacancy ends when someone is hired into it. In Flowstate, this transition is represented by setting filledByLiveEmployeeId on the vacancy to point to the new employee record.

Once a vacancy is filled:

  1. The vacancy status changes to filled.
  2. The vacancy's estimated cost is replaced by the employee's actual cost in all forecasts.
  3. The vacancy no longer counts toward open headcount.
  4. The link between the vacancy and the employee is preserved for historical reporting.

This connection is valuable for analyzing hiring outcomes. You can compare the vacancy's salary range against the actual offer, see how long positions took to fill, and track whether target start dates were met.

Salary Range and Cost Estimation

Vacancies use a salary range (salaryMin to salaryMax) rather than a fixed salary for forecasting. Flowstate uses the midpoint of this range as the estimated cost when projecting future expenses:

Estimated Annual Cost = (salaryMin + salaryMax) / 2

This estimated cost flows through the same calculation chain as employee costs:

Estimated Salary (midpoint of range)
  --> Currency Conversion
    --> Working Days Proration (from targetStartDate)
      --> FTE Allocation
        --> Overhead (based on work type, if assigned)
          = Estimated Vacancy Cost

WARNING

If salaryMin and salaryMax are not set, the vacancy will appear in headcount counts but will not contribute to cost forecasts. Always set a salary range for vacancies that should influence budget projections.

Team Allocations

Like employees and contractors, vacancies are assigned to teams through team allocations. Each allocation specifies which team the vacancy belongs to, the FTE value, and a date range.

A vacancy can be allocated to multiple teams if the role spans team boundaries, though this is uncommon. Most vacancies have a single team allocation at 1.0 FTE.

Team allocations for vacancies serve two purposes:

  • Headcount planning: Managers can see upcoming hires for their teams.
  • Cost attribution: The vacancy's estimated cost is attributed to the allocated team for budget forecasting.

Vacancies in Scenario Planning

Vacancies are a natural fit for scenario planning. Common patterns include:

  • Headcount scenarios: Add vacancies to a draft plan to model the cost of expanding a team, then compare multiple hiring timelines by adjusting targetStartDate values.
  • Budget scenarios: Set aggressive vs conservative salary ranges across different scenarios to understand the budget envelope.
  • Restructuring scenarios: Move vacancies between teams to explore different organizational structures before committing.

Since vacancies exist only as planning artifacts until filled, they are lightweight to create and discard within scenarios.

The Hiring Manager

The hiringManagerId field links a vacancy to the employee responsible for filling it. This is typically the team lead or engineering manager who will manage the new hire. The hiring manager relationship is used for:

  • Routing vacancy approvals in the UI
  • Filtering vacancies by responsible manager
  • Reporting on hiring pipeline by manager

Flowstate Documentation