fleet/handbook/people.md

265 lines
18 KiB
Markdown
Raw Normal View History

# People
## Directly responsible individuals
2021-12-22 02:39:34 +00:00
At Fleet we use the concept of directly responsible individuals (**DRI**s), a person who is singularly responsible for a given aspect of the open source project, the product, or the company.
This person is responsible for accomplishing goals and making decisions about a particular element of Fleet.
DRIs help us collaborate efficiently by knowing exactly who is responsible and can make decisions about the work they're doing.
2021-12-22 02:39:34 +00:00
| Aspect | DRI |
2022-02-02 22:39:12 +00:00
| ----------------------------------------------------| ------------ |
| Wireframes (Figma)| Noah Talerman |
| How the product works | Noah Talerman |
| fleetctl CLI interface (and other tools) | Tomás Touceda |
| REST API interface design | Luke Heath |
2021-12-22 02:39:34 +00:00
| [REST API docs](https://fleetdm.com/docs/using-fleet/rest-api) | Luke Heath |
2022-02-02 22:39:12 +00:00
| Postman | Luke Heath |
| Terraform | Ben Edwards |
| Customer PoV deployments like acme.fleetdm.com | Ben Edwards |
| dogfood.fleetdm.com | Ben Edwards |
| Quality of core product UI | Luke Heath |
| Ticket movement from product to engineering | Luke Heath |
| Lead engineering standup and sprint planning | Zach Wasserman* |
2021-12-22 02:39:34 +00:00
| Customer Slack channels | Tony Gauda |
2022-02-02 22:39:12 +00:00
| Customer renewals | Tony Gauda |
| Quality of core product backend | Tomás Touceda |
| Quality of fleetctl (and other tools) | Tomás Touceda |
| Final cut of what goes into each release | Zach Wasserman |
| When we cut a release, version numbers, and whether to release | Zach Wasserman |
| Release notes | Noah Talerman |
| Publishing release blog post, and promoting releases | Mike Thomas |
| fleetdm.com | Mike Thomas |
| Self-service Fleet Premium license dispenser | Mike Thomas |
*Luke Heath is backup
2021-12-22 02:39:34 +00:00
>You can read more about directly responsible individuals in [GitLab's handbook](https://about.gitlab.com/handbook/people-group/directly-responsible-individuals/)
## Spending company money
As we continue to expand our company policies, we use [GitLab's open expense policy](https://about.gitlab.com/handbook/spending-company-money/) as a guide for company spending.
In brief, this means that as a Fleet team member, you may:
* Spend company money like it is your own money.
* Be responsible for what you need to purchase or expense in order to do your job effectively.
* Feel free to make purchases __in the company interest__ without asking for permission beforehand (when in doubt, do __inform__ your manager prior to purchase or as soon as possible after the purchase).
For more developed thoughts about __spending guidelines and limits__, please read [GitLab's open expense policy](https://about.gitlab.com/handbook/spending-company-money/).
### Purchasing a company-issued device.
Fleet provides laptops for team members to use while working at Fleet. As soon as an offer is accepted, `eashaw` will reach out to the new team member to start this process. `Eashaw` will work with the new team member to get their laptop purchased and shipped to them.
Most of the team at Fleet use 16" MacBook Pros, but team members are free to choose any laptop or operating system that works for them, as long as the price [is within reason](#spending-company-money).
When selecting your new laptop, we ask that you optimize your configuration to have a large hard drive and be available for delivery or pickup quickly, without waiting for customization.
When a device has been purchased, it's added to the [spreadsheet of company equipment](https://docs.google.com/spreadsheets/d/1hFlymLlRWIaWeVh14IRz03yE-ytBLfUaqVz0VVmmoGI/edit#gid=0) where we keep track of devices and equipment purchased by Fleet. When the team member receives their computer, they will complete the entry by adding a description, model, and serial number to the spreadsheet.
## Paid time off
What matters most is your results, which are driven by your focus, your availability to collaborate, and the time and consideration you put into your work.
Fleet offers all team members unlimited time off. Whether you're sick, you want to take a trip, you are eager for some time to relax, or you need to get some chores done around the house, any reason is a good reason.
For team members working in jurisdictions that require certain mandatory sick leave or PTO policies, Fleet complies to the extent required by law.
### Taking time off
When you take any time off, you should follow this process:
- Let your manager and team know as soon as possible. (e.g., post a message in your team's Slack channel)
- Find someone to cover anything that needs covering while you're out. (i.e., meetings, planned tasks, unfinished business, important Slack/email threads, anything where someone might be depending on you)
- Mark an all-day "out of office" event in Google Calendar for the day(s) you're taking off.
This process is the same for any days you take off, regardless of whether it's a holiday or you just need a break.
### Holidays
At Fleet, we have team members with various employment classifications in many different countries worldwide. Fleet is a US company, but we think you should choose the days you want to work and what days you are on holiday, rather than being locked into any particular nation or culture's expectation about when you should take time off.
When a team member joins Fleet, they pick one of the following holiday schedules:
- **Traditional**: Based on the country where you work. Non-US team members should let their managers know the dates of national holidays.
**Or**
- **Freestyle**: No set schedule, start with no holidays and add the days that are holidays to you.
Either way, it's up to you to ensure that your responsibilities are covered and your team knows that you're out of the office.
### New parent leave
Fleet gives new parents six weeks paid leave. After six weeks, if you don't feel ready to return yet, we'll set up a quick call to discuss and work together to come up with a plan to help you return to work gradually or when you're ready.
## Meetings
* At Fleet, meetings start whether you're there or not. Nevertheless, being even a few minutes late can make a big difference and slow your meeting counterparts down. When in doubt, show up a couple of minutes early.
* It's okay to spend the first minute or two of a meeting to be present and make small talk if you want. Being all-remote, it's easy to miss out on hallway chatter and human connections that happen in [meatspace](https://www.dictionary.com/browse/meatspace). Use this time together during the first minute to say "hi"? Then you can jump into the topics being discussed.
* Turning on your camera allows for more complete and intuitive verbal and non-verbal communication. Feel free to leave your camera on or to turn it off when joining meetings with new participants who you might not be familiar with yet. turn your camera on when you lead or cohost a meeting.
* In an all remote company, “face time” matters. Remember: even if someones calendar is open, they have other work to do. Limiting (or batching up) internal meetings can enable longer, uninterrupted stretches of deep work.
### Internal meeting scheduling
Use the Google Calendar [find a meeting
time](https://support.google.com/calendar/answer/37161?hl=en&co=GENIE.Platform%3DDesktop#zippy=%2Cfind-a-meeting-time)
feature to coordinate meetings with Fleet team members. Enter the `@fleetdm.com` emails for each
participant into the "Meet with..." box in Google Calendar, and the calendar availability for each
participant will appear in your view. Then, when you select a meeting time, those participants will
automatically be invited, and a video conference will be attached to the invite.
Please prefer this strategy over negotiating meeting times via chat -- This can save a lot of
communication overhead, especially when scheduling with multiple participants.
It is important to [set your working
hours](https://support.google.com/calendar/answer/7638168?hl=en&co=GENIE.Platform%3DDesktop) in
Google Calendar and block out any personal time/events/PTO, so that team members do not inadvertently
schedule a time when you are not available. Many team members use the free tier of
[reclaim.ai](https://reclaim.ai/) to synchronize personal event times (without event details) into
their work calendars. It is also common practice to block out time for focused work.
### External meeting scheduling
When scheduling external meetings, provide external participants with a
[Calendly](https://calendly.com) link to schedule with the relevant internal participants. If you
need a Calendly account, reach out to `@eashaw` via Slack.
### Zoom
We use [Zoom](https://zoom.us) for virtual meetings at Fleet, and it is important that every team member feels comfortable hosting, joining, and scheduling Zoom meetings.
Zoom settings are configured to be the same for all Fleet team members by default, but you can change your personal settings on your [profile settings](https://zoom.us/profile/setting) page.
Settings that have a lock icon next to them have been locked by an administrator and cannot be changed. Zoom administrators can change settings for all team members on the [account settings page](https://zoom.us/account/setting) or for individual accounts on the [user management page](https://zoom.us/account/user#/).
#### Scheduling a Zoom meeting
We use the Zoom add-on for Google Calendar to schedule Zoom meetings when we create calendar events. To add a Zoom meeting to a calendar event, click the "Add video conferencing" dropdown and select "Zoom Meeting." Google Calendar will automatically add the Zoom meeting details and instructions to join the event.
2022-03-14 21:14:32 +00:00
Our Zoom meetings are configured to let participants join before the host starts the meeting. We do this to ensure meetings start on time, even if the host isn't there.
## Slack
At Fleet, we do not send internal emails to each other. Instead, we prefer to use Slack to communicate with other folks who work at Fleet.
We use threads in Slack as much as possible. Threads help limit noise for other people following the channel and reduce notification overload.
We configure our working hours in Slack to ensure everyone knows when they can get in touch with others.
### Slack channel prefixes
We have specific channels for various topics, but we also have more general channels for the teams at Fleet.
We use these prefixes to organize the Fleet Slack:
* ***g-***: for team/group channels. *(Note: "g-" is short for "grupo")*
* ***oooh-***: used to discuss and share interesting information about a topic.
* ***help-***: for asking for help on specific topics.
* ***at*** or ***fleet-at***: for customer channels.
2022-03-25 19:10:30 +00:00
## People ops
### Performance feedback
At Fleet, performance feedback is a continuous process. We give feedback (especially negative) as soon as possible. Most feedback will happen during 1:1 meetings, if not sooner.
2022-02-14 18:01:13 +00:00
We evaluate and update compensation decisions yearly, shortly after the anniversary of a team member's start date.
### Hiring a new team member
1. Reach out to Mike and Zach and give them an opportunity to meet the candidate.
2. Research compensation using [Pave](https://www.pave.com), making sure to adjust for the cost of living where the candidate will do the work. *If you're unsure of your findings, ask for help from Mike.*
3. Share the compensation information you've gathered with Eric. Eric will confirm the information with Mike and document this decision in the [compensation decisions document](https://docs.google.com/document/d/1NQ-IjcOTbyFluCWqsFLMfP4SvnopoXDcX0civ-STS5c/edit) for future reference.
4. After compensation has been determined, create two documents for the candidate:
- "Exit scenarios" spreadsheet
- "Informal offer email" template.
If you need these templates, reach out to Eric on Slack, and he will provide you links that automatically create copies.
Change the name of the documents accordingly (e.g., "[candidate's name]'s copy of exit scenarios,") and link to the exit scenarios spreadsheet from the offer email.
5. Prepare the informal offer email. You'll need to add the following information to the template:
- Candidate's name and email address
- Candidate's start date
- Candidate's compensation
- Candidate's reporting manager
- Equity offered to the candidate (make this information a link to the candidate's exit scenarios spreadsheet)
- Benefits (determined by the candidate's location)
6. Prepare the exit scenarios spreadsheet. Enter the percentage of equity offered to the candidate, and the spreadsheet will update to reflect this.
>**_Note:_** *Don't play with numbers in the exit scenarios spreadsheet. The revision history is visible to the candidate, and they might misunderstand.*
7. Once both documents are complete, share the offer email draft, exit scenarios copy, and a link to the compensation decision, with Eric for confirmation.
8. After Eric confirms that everything is correct, Mike or Zach will send the offer email. The offer email is copied directly from Google drive and sent to the candidate. When they send the offer, Mike or Zach will edit the permissions of the exit scenarios sheet and share with the candidate.
>**_Note:_** *When hiring an international employee, Pilot.co recommends starting the hiring process a month before the new employee's start date.*
### Steps after an offer is accepted
1. Once an offer is accepted in writing, reply to the candidate, CCing Eric via his Fleet email address to introduce the candidate to him.
2. If the new team member is in the United States, Eric will reach out to them and get any information needed (typically the new team member's home address and phone number) and send them a consulting or employment agreement through [Docusign](https://www.docusign.com/). If the new team member is an international employee or contractor, Eric will start the hiring process in [Pilot](https://pilot.co/).
>**_Note:_** *International contractor and employment agreements are handled by Pilot.co when you start the hiring process.*
3. **For US employees/contractors:** After an agreement is signed and stored in the correct Google Drive folder, Eric will start onboarding the new team member in [Gusto](https://www.gusto.com/). If the new team member is a W-2 employee, Eric will reach out to them and schedule an I-9 verification meeting.
2022-02-08 22:19:21 +00:00
>**_Note:_** *If we're hiring in a new state, we'll have to register for state taxes and unemployment. This process can be handled by Gusto. Usually.*
4. Before their first day at Fleet, Eric will create a [Google Workspace account](https://admin.google.com/ac/users) for the new team member, add them to the [Fleet Github organization](https://github.com/fleetdm), create an onboarding issue in the [fleetdm/confidential](https://github.com/fleetdm/confidential/issues) Github repo, and invite them to join the Fleet Slack. If the new team member needs to purchase a work computer, Eric will set them up with a [Brex](https://dashboard.brex.com/team/invite-user) card.
### Onboarding a new advisor.
Advisor agreements are sent through [DocuSign](https://www.docusign.com/), using the "Advisor Agreement"
template. To send a new advisor agreement, you'll need the new advisor's name and the number of shares they
are offered.
Once the agreement is sent, add a new row to the [advisory board spreadsheet](https://docs.google.com/spreadsheets/d/15knBE2-PrQ1Ad-QcIk0mxCN-xFsATKK9hcifqrm0qFQ/edit#gid=1803674483) and enter the new advisor's information. Use this spreadsheet to track the advisor's progress through the onboarding process.
>**_Note:_** *Be sure to mark any columns that haven't been completed yet as "TODO"*
When the agreement is completed, make sure it is in the correct Google Drive folder, and ask the new
advisor to add us on [Linkedin](https://www.linkedin.com/company/71111416), [Crunchbase](https://www.crunchbase.com/organization/fleet-device-management) and [Angellist](https://angel.co/company/fleetdm).
### Zapier and DocuSign
We use Zapier to automate how completed DocuSign envelopes are formatted and stored. This process ensures we store signed documents in the correct folder and that filenames are formatted consistently.
When the final signature is added to an envelope in Docusign, it is marked as completed and sent to Zapier, where it goes through these steps:
1. Zapier sends the following information about the DocuSign envelope to our Hydroplane webhook:
- **`emailSubject`** - The subject of the envelope sent by DocuSign. Our DocuSign templates are configured to format the email subject as `[type of document] for [signer's name]`.
- **`emailCsv`** - A comma-separated list of signers' email addresses.
2. The Hydroplane webhook matches the document type to the correct Google Drive folder, orders the list of signers, creates a timestamp, and sends that data back to Zapier as:
- **`destinationFolderID`** - The slug for the Google Drive folder where we store this type of document.
- **`emailCsv`** - A sorted list of signers' email addresses.
- **`date`** - The date that the document was completed in DocuSign, formatted YYYY-MM-DD.
3. Zapier uses this information to upload the file to the matched Google Drive folder, with the filename formatted as `[date] - [emailSubject] - [emailCvs].PDF`.
4. Once the file is uploaded, Zapier uses the Slack integration to post in the #peepops channel with the message:
```
Now complete with all signatures:
[email subject]
link: drive.google.com/[destinationFolderID]
```
## Slack channels
These are the Slack channels the digital experience team maintains. If the channel has a [directly responsible individual](#directly-resonsible-individuals) (**DRI**), they will be specified. These people are responsible for keeping up with all new messages, even if they aren't mentioned.
- **#g-digital-experience** - **DRI**: Mike Thomas
- **#peepops** - **DRI**: Eric Shaw
- **#help-onboarding** - **DRI**: Eric Shaw
- **#oooh-automation** - **DRI**: Mike McNeil
**Who should have these channels unmuted?** Members of this group, everyone else is encouraged to mute them.
<meta name="maintainedBy" value="eashaw">