diff --git a/handbook/business-operations/README.md b/handbook/business-operations/README.md index afe96252f3..0345795bb3 100644 --- a/handbook/business-operations/README.md +++ b/handbook/business-operations/README.md @@ -312,20 +312,21 @@ When review is requested on a proposal to open a new position, the CEO will comp 1. **Consider role and reporting structure:** Confirm the new row in "Fleeties" has a manager, job title, and department, that it doesn't have any corrupted spreadsheet formulas or formatting, and that the start date is still blank (so that it is clear to everyone that this position has been proposed, but that it is not confirmed and planned, yet). 2. **Read job description:** Confirm the job description consists only of changes to "Responsibilities" and "Experience," with an appropriate filename, and that the content looks accurate, is grammatically correct, and is otherwise ready to post in a public job description on fleetdm.com. 3. **Budget compensation:** Ballpark and document compensation research for the role based on - - [ ] Scroll to the very bottom of ["¶¶ 💌 Compensation decisions (offer math)"](https://docs.google.com/document/d/1NQ-IjcOTbyFluCWqsFLMfP4SvnopoXDcX0civ-STS5c/edit#heading=h.slomq4whmyas) and add a new heading for the role, pattern-matching off of the names of other nearby role headings. Then create written documentation of your research for future reference. The easiest way to do this is to take screenshots of the [relevant benchmarks in Pave](https://pave.com) and paste those screenshots under the new heading. - - [ ] Update the row in ["¶¶ 🥧 Equity plan"](https://docs.google.com/spreadsheets/d/1_GJlqnWWIQBiZFOoyl9YbTr72bg5qdSSp4O3kuKm1Jc/edit#gid=0) using the benchmarked compensation and share count. - > _**Note:** Most columns of the equity plan are updated automatically when Fleeties is, based on the unique identifier of each row, like `🧑‍🚀890`. (Advisors have their own flavor of unique IDs, such as `🦉755`.)_ + - _Add screenshot:_ Scroll to the very bottom of ["¶¶ 💌 Compensation decisions (offer math)"](https://docs.google.com/document/d/1NQ-IjcOTbyFluCWqsFLMfP4SvnopoXDcX0civ-STS5c/edit#heading=h.slomq4whmyas) and add a new heading for the role, pattern-matching off of the names of other nearby role headings. Then create written documentation of your research for future reference. The easiest way to do this is to take screenshots of the [relevant benchmarks in Pave](https://pave.com) and paste those screenshots under the new heading. + - _Update team database:_ Update the row in ["¶¶ 🥧 Equity plan"](https://docs.google.com/spreadsheets/d/1_GJlqnWWIQBiZFOoyl9YbTr72bg5qdSSp4O3kuKm1Jc/edit#gid=0) using the benchmarked compensation and share count. - _Salary:_ Enter the salary: If the role has variable compensation, use the role's OTE (on-target earning estimate) as the budgeted salary amount, and leave a note in the "Notes (¶¶)" cell clarifying the role's bonus or commission structure. - _Equity:_ Enter the equity as a number of shares, watching the percentage that is automatically calculated in the next cell. Keep guessing different numbers of shares until you get the derived percentage looking like what you want to see. 4. **Decide**: Decide whether to approve this role or to consider it a different time. If approving, then: - - [ ] _Create Slack channel:_ Create a private "#hiring-xxxxxx-YYYY" Slack channel (where "xxxxxx" is the job title and YYYY is the current year) for discussion and invite the hiring manager. - - [ ] _Publish opening:_ Approve and merge the pull request. The job posting go live within ≤10 minutes. - - [ ] _Reply to requestor:_ Post a comment on the pull request, being sure to include a direct link to their live job description on fleetdm.com. (This is the URL where candidates can go to read about the job and apply. For example: `fleetdm.com/handbook/company/product-designer`). For example: + - _Create Slack channel:_ Create a private "#hiring-xxxxxx-YYYY" Slack channel (where "xxxxxx" is the job title and YYYY is the current year) for discussion and invite the hiring manager. + - _Publish opening:_ Approve and merge the pull request. The job posting go live within ≤10 minutes. + - _Reply to requestor:_ Post a comment on the pull request, being sure to include a direct link to their live job description on fleetdm.com. (This is the URL where candidates can go to read about the job and apply. For example: `fleetdm.com/handbook/company/product-designer`). For example: ``` The new opening is now live! Candidates can apply at fleetdm.com/handbook/company/railway-conductor. ``` +> _**Note:** Most columns of the "Equity plan" are updated automatically when "Fleeties" is, based on the unique identifier of each row, like `🧑‍🚀890`. (Advisors have their own flavor of unique IDs, such as `🦉755`, which are defined in ["Advisors and investors"](https://docs.google.com/spreadsheets/d/15knBE2-PrQ1Ad-QcIk0mxCN-xFsATKK9hcifqrm0qFQ/edit).)_ + ### Recruiting Fleet accepts job applications, but the company does not list positions on general purpose job boards. This prevents us being overwhelmed with candidates so we can fulfill our goal of responding promptly to every applicant. @@ -366,10 +367,12 @@ If you've been invited to "book with us," you'll have a Zoom meeting with the hi Here are the steps hiring managers can follow to get an offer out to a candidate: 1. **Schedule founder interview:** Schedule 30m for the CEO to interview the candidate, if they haven't already done so. - At Fleet, the CEO interviews every new team member at least once before Fleet extends an offer. (We plan to continue this practice until headcount reaches 100.) - - No need to check with the CEO first. You can just book the meeting on his calendar. - - If this is an engineering position, before the CEO interview, please also be sure that the candidate has already been interviewed by the CTO. - - The personal email the candidate uses for this calendar event is where they will receive the offer. -2. **Add to team database:** Update the [Fleeties](https://docs.google.com/spreadsheets/d/1OSLn-ZCbGSjPusHPiR5dwQhheH1K8-xqyZdsOe9y7qc/edit#gid=0) doc to reflect: + - No need to check with the CEO first. You can just book the meeting on his calendar. + - Schedule the meeting directly on the CEO's calendar during a time he and the candidate are both explicitly available according to that calendar. Available means whitespace. + - Either use Google Calendar directly, or offer to use the CEO's 30m Calendly link. _It is up to you, the hiring manager, to get this meeting scheduled and showing up at a time on the CEO's calendar._ + - _If this is an engineering position_, before scheduling the CEO interview, please also be sure that the candidate has already been interviewed by the CTO. If not, include the CTO in this interview. + - The candidate's email address involved in this calendar event with the CEO is also where they will receive their offer or rejection email from the CEO. +2. **Add to team database:** Update the [Fleeties](https://docs.google.com/spreadsheets/d/1OSLn-ZCbGSjPusHPiR5dwQhheH1K8-xqyZdsOe9y7qc/edit#gid=0) doc to accurately reflect: - start date _(No need to check with the candidate if you haven't already. Just guess.)_ - candidate's first and last name - preferred pronoun @@ -380,30 +383,35 @@ Here are the steps hiring managers can follow to get an offer out to a candidate #### Making an offer After meeting with the candidate for their final interview, the CEO uses the following steps to make an offer: 1. **Review decision:** The CEO reviews the data and decides whether it still makes sense to make this offer to this person in this role. If not, he lets the manager know. Otherwise, he continues with the offer. -2. **Adjust salary:** [Re-benchmark salary](https://www.pave.com), adjusting for cost of living where the candidate will do the work. - - [ ] Paste a screenshot of Pave showing the adjusted benchmark under the [heading for this position in " 💌 Compensation decisions"](https://docs.google.com/document/d/1NQ-IjcOTbyFluCWqsFLMfP4SvnopoXDcX0civ-STS5c/edit) - - [ ] Update the [equity plan](https://docs.google.com/spreadsheets/d/1_GJlqnWWIQBiZFOoyl9YbTr72bg5qdSSp4O3kuKm1Jc/edit#gid=0) with the actual adjusted salary and equity offer that is about to be sent. +2. **Adjust compensation:** [Re-benchmark salary](https://www.pave.com), adjusting for cost of living where the candidate will do the work. + - _Paste a screenshot_ of Pave showing the adjusted benchmark under the [heading for this position in " 💌 Compensation decisions"](https://docs.google.com/document/d/1NQ-IjcOTbyFluCWqsFLMfP4SvnopoXDcX0civ-STS5c/edit) + - _Update the [equity plan](https://docs.google.com/spreadsheets/d/1_GJlqnWWIQBiZFOoyl9YbTr72bg5qdSSp4O3kuKm1Jc/edit#gid=0)_ with the actual adjusted salary and equity offer that is about to be sent. 3. **Prepare the "exit scenarios" spreadsheet:** [Copy the "Exit scenarios (template)"](https://docs.google.com/spreadsheets/d/1k2TzsFYR0QxlD-KGPxuhuvvlJMrCvLPo2z8s8oGChT0/copy) for the candidate, and rename the copy to e.g. "Exit scenarios for Jane Doe". - - [ ] Edit the candidate's copy of the exit scenarios spreadsheet to include the number of shares they will be offered, and the spreadsheet will update automatically to reflect their approximate ownership percentage. - > **_Note:_** *Don't play with numbers in the exit scenarios spreadsheet. The revision history is visible to the candidate, and they might misunderstand.* + - _Edit the candidate's copy of the exit scenarios spreadsheet_ to include the number of shares they will be offered, and the spreadsheet will update automatically to reflect their approximate ownership percentage. + > _**Note:** Don't play with numbers in the exit scenarios spreadsheet. The revision history is visible to the candidate, and they might misunderstand._ 4. **Prepare offer email:** [Copy "Offer email (template)"](https://docs.google.com/document/d/1zpNN2LWzAj-dVBC8iOg9jLurNlSe7XWKU69j7ntWtbY/copy) and rename to e.g. "Offer email for Jane Doe". Edit the candidate's copy of the offer email template doc and fill in the missing information: - - [ ] _Benefits:_ If candidate will work outside the US, [change the "Benefits" bullet](https://docs.google.com/document/d/1zpNN2LWzAj-dVBC8iOg9jLurNlSe7XWKU69j7ntWtbY/edit) to reflect what will be included through Fleet's international payroll provider, depending on the candidate's location. - - [ ] _Equity:_ Specify the number of shares, then highlight the number of shares with a link to the candidate's personalized copy of the "Exit scenarios" spreadsheet. - - [ ] _Other information_: Read the offer email very carefully and double-check correctness versus the equity plan, especially in regards to salary, equity, and start date. + - _Benefits:_ If candidate will work outside the US, [change the "Benefits" bullet](https://docs.google.com/document/d/1zpNN2LWzAj-dVBC8iOg9jLurNlSe7XWKU69j7ntWtbY/edit) to reflect what will be included through Fleet's international payroll provider, depending on the candidate's location. + - _Equity:_ Specify the number of shares, then highlight the number of shares with a link to the candidate's personalized copy of the "Exit scenarios" spreadsheet. + - _Other information_: Read the offer email very carefully and double-check correctness versus the equity plan, especially in regards to salary, equity, and start date. 5. **Send offer:** Once both documents are complete, send the offer email: - To: The candidate's personal email address _(use the email from the CEO interview calendar event)_ - Cc: Zach Wasserman is included as a recipient, but will not participate in the email thread until after the offer is accepted. - Subject: "Full time?" - Body: _(The offer email is copied verbatim from Google Drive into Gmail as the body of the message, formatting and all.)_ - Sending: _(When sending the offer, Gmail will automatically offer to change the permissions of the exit scenarios sheet so it is accessible to the candidate. Choose to grant the candidate **"Edit"** access.)_ -6. **Archive channel:** Post to the `hiring-xxxxx` Slack channel to let folks know the offer was sent. Then archive and close the channel. (It can always be reopened, as needed.) +6. **Archive Slack channel:** Post to the `hiring-xxxxx` Slack channel to let folks know the offer was sent. Then archive and close the channel. (It can always be reopened, as needed.) ### Steps after an offer is accepted Once the new team member replies and accepts their offer in writing: -1. The CEO or Zach Wasserman replies to the candidate. -2. Whoever replies [creates a hiring issue](https://github.com/fleetdm/confidential/issues/new/choose) for the new team member. This will inform the Business Operations team to get involved. They will use this issue to keep track of the hiring tasks for the new team member. -3. Business Operations will then reach out to the new team member within 1 business day from a separate email thread to get any information they will need to prepare their agreement, add them to our payroll system, and get their new laptop and hardware security keys ordered so that everything is ready for them to start on their first day. +1. **Accept:** Either CEO or Zach Wasserman replies to the candidate. Whoever replies first is responsible for these steps: + - _Verify the candidate replied with their physical address… or else keep asking._ If they did not reply with their physical address, or it's not a usable address, then we are not done. Fleet will reply and ask for it, and no offer should is "accepted" until we've received a physical address. + - _Update the team database_ so that the new team member's row in ["🥧 Equity plan"](https://docs.google.com/spreadsheets/d/1_GJlqnWWIQBiZFOoyl9YbTr72bg5qdSSp4O3kuKm1Jc/edit#gid=0) now includes: + - physical address _(The full street address of the location where work will typically be performed.)_ + - personal email _(Use the personal email they're replying from, e.g. `@gmail.com`")_ + - _[Create a "Hiring" issue](https://github.com/fleetdm/confidential/issues/new/choose)_ for the new team member. (This is what will inform the Business Operations team to get involved. The company will use this issue to keep track of the hiring tasks for the new team member.) + - _Send a reply_ welcoming the team member to Fleet and letting them know to expect a separate email with next steps for getting the team member's laptop, Yubikeys, and agreement going ASAP so they can start on time. +2. Business Operations will then follow the steps in the "Hiring" issue, which includes reaching out to the new team member within 1 business day from a separate email thread to get additional information as needed, prepare their agreement, add them to the company's payroll system, and get their new laptop and hardware security keys ordered so that everything is ready for them to start on their first day. > **_Note:_** _Some Fleet team members are contractors and others are employees. The distinction between "contractor" and "employee" varies in different geographies, and the appropriate contract for any given team member and the place where they work is determined during the hiring process._