Digital Experience
This page details processes specific to working with and within this department.
Team
Role | Contributor(s) |
---|---|
CEO | Mike McNeil (@mikermcneil) |
Head of People / HR / Legal | See CEO |
Apprentice to the CEO | See Head of Digital Experience |
Head of Digital Experience | Sam Pfluger (@sampfluger88) |
Apprentice | Savannah Friend (@sfriendlee) |
Head of Design | Mike Thomas (@mike-j-thomas) |
Software Engineer | Eric Shaw (@eashaw) |
Contracts and Compliance Engineer | Nathan Holliday (@hollidayn) |
Marketing Apprentice | Onasis Munro (@onasismunro) |
Contact us
- To make a request of this department, create an issue and a team member will get back to you within one business day (If urgent, mention a team member in the #g-digital-experience Slack channel.
- Any Fleet team member can view the kanban board for this department, including pending tasks and the status of new requests.
- Please use issue comments and GitHub mentions to communicate follow-ups or answer questions related to your request.
Responsibilities
The Digital Experience department is directly responsible for the culture, training, framework, content design, and technology behind Fleet's remote work culture, including fleetdm.com, the handbook, issue templates, UI style guides, internal tooling, Zapier flows, Docusign templates, key spreadsheets, contracts, compliance, receiving and responding to legal notices, SOC2, deal desk, project management processes, human resources, benefits, opening positions, compensation planning, onboarding, and offboarding.
Note:: Commission planning, taxes, state unemployment insurance filings, business insurance, Delaware registered agent and franchise taxes, virtual mailbox, company phone number, and other adjacent areas of responsibility are run by the Finance department.
Note: If a user story involves only changes to fleetdm.com, without changing the core product, then that user story is prioritized, drafted, implemented, and shipped by the Digital Experience department. Otherwise, if the story also involves changes to the core product as well as fleetdm.com, then that user story is prioritized, drafted, implemented, and shipped by the other relevant product group, and not by
#g-digital-experience
.
QA a change to fleetdm.com
Each PR to the website is manually checked for quality and tested before going live on fleetdm.com. To test any change to fleetdm.com
Write clear step-by-step instructions to confirm that the change to the fleetdm.com functions as expected and doesn't break any possible automation. These steps should be simple and clear enough for anybody to follow.
View the website locally and follow the QA steps in the request ticket to test changes.
Check the change in relation to all breakpoints and browser compatibility, Tests are carried out on supported browsers before website changes go live.
Test fleetdm.com locally
When making changes to the Fleet website, you can test your changes by running the website locally. To do this, you'll need the following:
- A local copy of the Fleet repo.
- Node.js
- (Optional) Sails.js installed globally on your machine (
npm install sails -g
)
Once you have the above follow these steps:
Open your terminal program, and navigate to the
website/
folder of your local copy of the Fleet repo.Note: If this is your first time running this script, you will need to run
npm install
inside of the website/ folder to install the website's dependencies.Run the
build-static-content
script to generate HTML pages from our Markdown and YAML content.
With Node, you will need to use
node ./node_modules/sails/bin/sails run build-static-content
to execute the script.With Sails.js installed globally you can use
sails run build-static-content
to execute the script.When this script runs, the website's configuration file (
website/.sailsrc
) will automatically be updated with information the website uses to display content built from Markdown and YAML. Changes to this file should never be committed to the GitHub repo. If you want to exclude changes to this file in any PRs you make, you can run this terminal command in your local copy of the Fleet repo:git update-index --assume-unchanged ./website/.sailsrc
.Note: You can run
npm run start-dev
in thewebsite/
folder to run thebuild-static-content
script and start the website server with a single command.
- Once the script is complete, start the website server:
- With Node.js: start the server by running
node ./node_modules/sails/bin/sails lift
- With Sails.js installed globally: start the server by running
sails lift
.
- When the server has started, the Fleet website will be available at http://localhost:2024
Note: Some features, such as self-service license dispenser and account creation, are not available when running the website locally. If you need help testing features on a local copy, reach out to
@eashaw
in the #g-digital-experience channel on Slack.
Check production dependencies of fleetdm.com
Every week, we run npm audit --only=prod
to check for vulnerabilities on the production dependencies of fleetdm.com. Once we have a solution to configure GitHub's Dependabot to ignore devDependencies, this manual process can be replaced with Dependabot.
Respond to a 5xx error on fleetdm.com
Production systems can fail for various reasons, and it can be frustrating to users when they do, and customer experience is significant to Fleet. In the event of system failure, Fleet will:
- investigate the problem to determine the root cause.
- identify affected users.
- escalate if necessary.
- understand and remediate the problem.
- notify impacted users of any steps they need to take (if any). If a customer paid with a credit card and had a bad experience, default to refunding their money.
- Conduct an incident post-mortem to determine any additional steps we need (including monitoring) to take to prevent this class of problems from happening in the future.
Check browser compatibility for fleetdm.com
A browser compatibility check of fleetdm.com should be carried out monthly to verify that the website looks and functions as expected across all supported browsers.
- We use BrowserStack (logins can be found in 1Password) for our cross-browser checks.
- Check for issues against the latest version of Google Chrome (macOS). We use this as our baseline for quality assurance.
- Document any issues in GitHub as a bug, and assign them for fixing.
- If in doubt about anything regarding design or layout, please reach out to the Head of Design.
Export an image for fleetdm.com
In Figma:
- Select the layers you want to export.
- Confirm export settings and naming convention:
- Item name - color variant - (CSS)size - @2x.fileformat (e.g.,
[email protected]
) - Note that the dimensions in the filename are in CSS pixels. In this example, if you opened it in preview, the image would actually have dimensions of 32x32px but in the filename, and in HTML/CSS, we'll size it as if it were 16x16. This is so that we support retina displays by default.
- File extension might be .jpg or .png.
- Avoid using SVGs or icon fonts.
- Click the Export button.
Restart Algolia manually
At least once every hour, an Algolia crawler reindexes the Fleet website's content. If an error occurs while the website is being indexed, Algolia will block our crawler and respond to requests with this message: "This action cannot be executed on a blocked crawler"
.
When this happens, you'll need to manually start the crawler in the Algolia crawler dashboard to unblock it. You can do this by logging into the crawler dashboard using the login saved in 1password and clicking the "Restart crawling" button on our crawler's "overview" page](https://crawler.algolia.com/admin/crawlers/497dd4fd-f8dd-4ffb-85c9-2a56b7fafe98/overview).
No further action is needed if the crawler successfully reindexes the Fleet website. If another error occurs while the crawler is running, take a screenshot of the error and add it to the GitHub issue created for the alert and @mention eashaw
for help.
Re-run the "Deploy Fleet Website" action
If the action fails, please complete the following steps:
- Head to the fleetdm-website app in the Heroku dashboard and select the "Activity" tab.
- Select "Roll back to here" on the second to most recent deploy.
- Head to the fleetdm/fleet GitHub repository and re-run the Deploy Fleet Website action.
Update a company brand front
Fleet has several brand fronts that need to be updated from time to time. Check each brand front for consistency and update as needed with the following:
- The current pitch, found in the blurbs section of the 🎐 Why Fleet? doc.
- The current brand imagery. Check this Loom video for more info.
Respond to a "Contact us" submission
- Check the _from-prospective-customers Slack channel for "Contact us" submissions.
- Mark submission as seen with the "👀" emoji.
- Within 4 business hours, use the _from-prospective-customers workflow (private Google doc) to respond to general asks. Follow the "High-level workflow" to understand how to respond and who to loop into the conversation.
- Answer any technical questions to the best of your ability. If you are unable to answer a technical/product question, ask a Solutions Consultant in
#help-solutions-consulting
. If an SC is unavailable, post in#g-mdm
or#g-endpoint-ops
and notify @on-call. - Mark the Slack message as complete with the "✅" emoji.
For any support-related questions, forward the submission to Fleet's support team.
Update the host count of a premium subscription
When a self-service license dispenser customer reaches out to upgrade a license via the contact form, a member of the Demand department will create a confidential issue detailing the request and add it to the new requests column of Digital Experience kanban board. A member of this team will then log into Stripe using the shared login, and upgrade the customer's subscription.
To update the host count on a user's subscription:
- Log in to the Stripe dashboard and search for the customer's email address.
- Click on their subscription and select the "Update subscription" option in the "Actions" dropdown
- Update the quantity of the user's subscription to be their desired host count.
- Turn the "Proration charges" option on and select the "Charge proration amount immediately" option.
- Under "Payment" select "Email invoice to the customer", and set the payment due date to be 15 days, and make sure the "Invoice payment page" option is checked.
- Select "Update subscription" to send the user an updated invoice for their subscription. Once the customer pays their new invoice, the Fleet website will update the user's subscription and generate a new Fleet Premium license with an updated host count.
- Let the person who created the request know what actions were taken so they can communicate them to the customer.
Change customer credit card number
You can help a Premium license dispenser customers change their credit card by directing them to their account dashboard. On that page, the customer can update their billing card by clicking the pencil icon next to their billing information.
Cancel a Fleet Premium subscription
Use the following steps to cancel a Fleet Premium subscription:
- Log into Stripe (login in 1Password) and paste the customer's email they used to sign up in the search bar at the top of the page.
- Select the subscription related to the email and use the "Actions" drop-down to "Cancel immediately".
- Reach out to the community member (using the correct email template) and let them know their subscription was canceled.
Secure company-issued equipment for a team member
As soon as an offer is accepted, Fleet provides laptops and YubiKey security keys for core team members to use while working at Fleet. The IT engineer will work with the new team member to get their equipment requested and shipped to them on time.
Check the Fleet IT warehouse before purchasing any equipment including laptops, monitors, and Yubikeys to ensure we efficiently utilize existing assets before spending money. If Fleet IT warehouse inventory can meet the needs of the request, file a warehouse request.
Apple computers shipping to the United States and Canada are ordered using the Apple eCommerce Portal, or by contacting the business team at an Apple Store or contacting the online sales team at 800-854-3680. The IT engineer can arrange for same-day pickup at a store local to the Fleetie if needed.
Note: Most Fleeties use 16-inch MacBook Pros. Team members are free to choose any laptop or operating system that works for them, as long as the price is within reason.
When ordering through the Apple eCommerce Portal, look for a banner with Apple Store for FLEET DEVICE MANAGEMENT | Welcome [Your Name]. Hovering over Welcome should display Your Profile. If Fleet's account number is displayed, purchases will be automatically made available in Apple Business Manager (ABM).
Apple computers for Fleeties in other countries should be purchased through an authorized reseller to ensure the device is enrolled in ADE. In countries that Apple does not operate or that do not allow ADE, work with the authorized reseller to find the best solution, or consider shipping to a US based Fleetie and then shipping on to the teammate.
A 3-year AppleCare+ Protection Plan (APP) should be considered default for Apple computers >$1500. Base MacBook Airs, Mac minis, etc. do not need APP unless configured beyond the $1500 price point. APP provides 24/7 support, and global repair coverage in case of accidental screen damage or liquid spill, and battery service.
Order a pack of two YubiKey 5C NFC security keys for new team member, shipped to them directly.
Include delivery tracking information when closing the support request so the new employee can be notified.
Process incoming equipment
Upon receiving any device, follow these steps to process incoming equipment.
- Search for the SN of the physical device in the "Company equipment" spreadsheet to confirm the correct equipment was received.
- Visibly inspect equipment and all related components (e.g. laptop charger) for damage.
- Remove any stickers and clean devices and components.
- Using the device's charger plug in the device.
- Turn on the device and enter recovery mode using the appropriate method.
- Connect the device to WIFI.
- Using the "Recovery assistant" tab (In the top left corner), select "Delete this Mac".
- Follow the prompts to activate the device and reinstall the appropriate version of macOS.
If you are prevented from completing the steps above, create a "💻 IT support issue for IT, for the device to be scheduled for troubleshooting and remediation. Please note in the issue where you encountered blockers to completing the steps.
Ship approved equipment
Once the Digital Experience department approves inventory to be shipped from Fleet IT, follow these step to ship the equipment.
- Compare the equipment request issue with the "Company equipment" spreadsheet and verify physical inventory.
- Plug in the device and ensure inventory has been correctly processed and all components are present (e.g. charger cord, power converter).
- Package equipment for shipment and include Yubikeys (if requested).
- Change the "Company equipment" spreadsheet to reflect the new user.
- If you encounter any issues, repeat the process incoming equipment steps. If problems persist, create a "💻 IT support issue for IT to troubleshoot the device.
- Ship via FedEx to the address listed in the equipment request.
- Add a comment to the equipment request issue, at-mentioning the requestor with the FedEx tracking info and close the issue.
Update personnel details
When a Fleetie, consultant or advisor requests an update to their personnel details (name, location, phone, etc), follow these steps to ensure accurate representation across systems.
- Team member submits a custom issue to update their personnel details (or Digital Experience team creates if the request comes via email or is sensitive and needs a classified issue).
- If change is for a primary identification or contact method, ask for evidence of change and capture in employee's personnel file.
- Digital Experience makes change to HRIS (Gusto or Plane) to reflect change.
- Note: if making the change requires follow up steps, resolve those steps to action the change.
- Once change is effected in HRIS, Digital Experience makes changes to "🧑🚀 Fleeties" spreadsheet.
- If required, Digital Experience makes any relevant changes to Fleet's equity plan.
- If required, Digital Experience makes any relevant changes to the "🗺️ Geographical factors" spreadsheet and follows through on any action items involving tax implications (i.e. registering with a new state for employer taxes).
- If required, Digital Experience also makes changes to other core systems (e.g: creating a new email alias in google workspace; updating details in Carta; etc).
- The change is now actioned, notify the team member and close the issue.
Note: if the Fleetie is US based and has a qualifying life event that impacts benefit coverage, they can follow the Gusto steps to update their coverage elections.
Change a Fleetie's role
When Digital Experience receives notification of a Fleetie's role changing, The Head of Digital Experience will bring the proposed title change to the next Roundup meeting with the CEO for approval. If the proposed change is rejected, the Head of Digital Experience will inform the requesting manager as to why. If approved, use the following steps to change a Fleetie's role:
- Update "🧑🚀 Fleeties":
- Search the spreadsheet for the Fleetie in need of a job title change.
- Input the new job title in the Fleetie's row in the "Job title" cell.
- Navigate to the "Org chart" tab of the spreadsheet, and verify that the Fleetie's title appears correctly in the org chart.
- Update the departmental handbook page with the change of job title
- Prepare salary benchmarking information to determine whether the teammate's current compensation aligns with the benchmarks of the new role.
- If the benchmark is significantly different, take the steps to update a team member's compensation.
- Update the relevant payroll/HRIS system.
- For updating Gusto (US-based Fleeties):
- Login to Gusto and navigate to "People > Team members".
- Find the Fleetie and select them to see their profile page.
- Under the "Compensation" heading, select edit and update the "Job title" and input the specific date the change happened. Save the changes.
- For updating Plane (non-US Fleeties):
- Login to Plane and navigate to "People > Team".
- Find the Fleetie and select them to see their profile page.
- Use the "Help" function, or email support@plane.com to notify Plane of the need to change the job title for the Fleetie. Include the Fleetie's name, current title, new title, and effective date.
- Take any relevant steps as directed by Plane in order to make the required changes to the Fleetie's profile.
- For updating Gusto (US-based Fleeties):
Change a Fleetie's manager
When Digital Experience receives notification of a Fleetie's manager changing, follow these steps to ensure correct recording in our systems.
- Update 🧑🚀 Fleeties:
- Search for the Fleetie's new manager, and copy the new manager's unique ID from the far left "Unique ID" column.
- Search for the Fleetie whose manager is changing, and paste (without formatting) their new manager's unique ID in the "Reports to: (manager unique ID)" cell in the Fleetie's row.
- Verify that the "Reports to (auto: manager name and job title)" cell in the Fleetie's row reflects the new manager's details.
- Verify that in the new manager's row, the "# direct reports" cell reflect the correct number.
- Navigate to the "Org chart" tab in the spreadsheet, and verify that the Fleetie now appears in the correct place in the org chart.
- If the person's department is changing, then update both departmental handbook pages to move the person to their new department:
- Remove the person from the "Team" section of the old department and add them to the "Team" section of the new department.
- If the person's level of confidential access will change along with the change to their manager, then update that level of access:
- Update Google Workspace to make sure this person lives in the correct Google Group, removing them from the old and/or adding them to the new.
- Update 1password to remove this person from old vaults and/or add them to new vaults.
- For a team member moving from "classified" to "confidential" access, check Gusto, Plane, and other systems to remove their access.
Note: The Fleeties spreadsheet is the source of truth for who everyone's manager is and their job titles.
Recognize employee workiversaries
At Fleet, everyone is recognized on their workiversary. To ensure this happens, take the following steps:
On the 1st of every month, use Fleeties (private google doc) to determine who is celebrating their workiversary in the next month.
List all team members in the "✌️ All hands 🖐👋🤲👏🙌🤘" section of the e-group doc (confidential Google Doc) using the following format:
[workiversary date (DD-MMM)] - [teammate name] - [number of years at Fleet]
.On the day prior to a workiversary, send the teammate’s manager a DM on Slack:
Hey! Just a heads up, tomorrow is [teammate’s name] [number of years at Fleet] workiversary at Fleet. Digital Experience can post something in the #random channel to recognize them, would you like to make that post instead?
If a manager elects to post and hasn't done so by 2pm ET on the day of the workiversary, send them a friendly reminder and offer to post instead.
If the manager has deferred to Digital Experience, schedule a Slack post for the following day to recognize the teammate's contributions at Fleet. If you’re unsure about what to post, take a look at what’s been posted previously.
Prepare salary benchmarking information
- Use the relevant template text in the README section of the ¶¶ 💌 Compensation decisions document for a current Fleetie, a new role, a prospective hire, or other benchmarking use case.
- Copy the template text and paste at the end of the document.
- Fill in details as required, pulling from 🧑🚀 Fleeties spreadsheet and equity spreadsheet as required.
- Use the teammate's information to benchmark in Pave (login details in 1Password). You can pattern match from previous benchmarking entries and include all company assumptions. Add the direct link to the Pave benchmark.
Update a team member's compensation
To change a teammate's compensation, follow these steps:
- Create a copy of the "Values assessment" template and move it to the teammate's personnel folder in Google Drive.
- Share the values assessment document with the manager via Slack DM (include the Head of Digital Experience) and ask the manager to fill out the values assessment.
- Once the values assessment is complete, prepare salary benchmarking information and at-mention the Head of Digital Experience in the workiversary issue. Add a "DISCUSS" item to the roundup doc so the compensation change can be reviewed with the CEO.
- Once compensation decisions have been finalized, the Head of Digital Experience will send the teammate's manager a Slack DM to communicate the compensation decision and asking them to inform the teammate.
- Update the respective payroll platform (Gusto or Plane) by navigating to the personnel page, selecting salary field, and updating with an effective date that makes the next payroll.
- Update the equity spreadsheet (internal doc) by copying Adding to the "Notes" cell,
- Update the "¶¶ Annual OTE ($)" column with the new compensation information.
- Update the "Last compensation change" column with the effective date from payroll platform.
- Update the "¶¶ Notes" column. ⚠️ MAKE SURE NOT TO DELETE ANY EXISTING NOTES ⚠️ Add the note to the top of the cell using the following format:
As of YYYY-MM-DD OTE +15k
(pattern match off of other 2024 notes). Link your note to the relevant title in the "¶¶ 💌 Compensation decisions (offer math)" (classified Google Doc).
- Calculate the monthly burn rate increase percentage and notify the CEO via a Slack DM.
If the company decides on an additional equity grant as part of a compensation change, note the previous equity and new situation in detail in the "Notes" column of the equity plan. Update the "Grant started?" column to "todo" which adds it to the queue for the next time grants are processed (quarterly).
Grant equity
Equity grants for new hires are queued up as part of the hiring process, then grants and consents are batched and processed quarterly.
Doing an equity grant involves:
- Executing a board consent
- The recipient and CEO signing paperwork about the stock options
- Updating the number of shares for the recipient in the equity plan
- Updating Carta to reflect the grant
For the status of stock option grants, exercises, and all other common stock including advisor, founder, and team member equity ownership, see Fleet's equity plan. For information about investor ownership, see Carta.
Fleet's equity plan is the source of truth, not Carta. Neither are pro formas sent in an email attachment, even if they come from lawyers.
Anyone can make mistakes, and none of us are perfect. Even when we triple check. Small mistakes in share counts can be hard to attribute, and can cause headaches and eat up nights of our CEO's and operations team's time. If you notice what might be a discrepancy between the equity plan and any other secondary source of information, please speak up and let Fleet's CEO know ASAP. Even if you're wrong, your note will be appreciated.
Grant role-specific license to a team member
Certain new team members, especially in go-to-market (GTM) roles, will need paid access to paid tools like Salesforce and LinkedIn Sales Navigator immediately on their first day with the company. Gong licenses that other departments need may request them from Digital Experience and we will make sure there is no license redundancy in that department. The table below can be used to determine which paid licenses they will need, based on their role:
Role | Salesforce CRM | Salesforce "Inbox" | LinkedIn (paid) | Gong (paid) | Zoom (paid) |
---|---|---|---|---|---|
🐋 AE | ✅ | ✅ | ✅ | ✅ | ✅ |
🐋 CSM | ✅ | ✅ | ❌ | ✅ | ✅ |
🐋 SC | ✅ | ✅ | ❌ | ❌ | ✅ |
⚗️ PM | ❌ | ❌ | ❌ | ✅ | ✅ |
⚗️ PD | ❌ | ❌ | ❌ | ✅ | ✅ |
🔦 CEO | ✅ | ✅ | ✅ | ✅ | ✅ |
Other roles | ❌ | ❌ | ❌ | ❌ | ✅ |
Warning: Do NOT buy LinkedIn Recruiter. AEs should use their personal Brex card to purchase the monthly Core Sales Navigator plan. Fleet does not use a company wide Sales Navigator account. The goal of Sales Navigator is to access to profile views and data, not InMail. Fleet does not send InMail.
Process a tool upgrade request from a team member
- A Fleetie may request an upgraded license seat for Fleet tools by submitting an issue through ZenHub.
- Digital Experience will upgrade or add the license seat as needed and let the requesting team member know they did it.
Downgrade an unused license seat
- On the first Wednesday of every quarter, the CEO and Head of Digital experience will meet for 30 minutes to audit license seats in Figma, Slack, GitHub, Salesforce and other tools.
- During this meeting, as many seats will be downgraded as possible. When doubt exists, downgrade.
- Afterward, post in #random letting folks know that the quarterly tool reconciliation and seat clearing is complete, and that any members who lost access to anything they still need can submit a ZenHub issue to Digital Experience to have their access restored.
- The goal is to build deep, integrated knowledge of tool usage across Fleet and cut costs whenever possible. It will also force conversations on redundancies and decisions that aren't helping the business that otherwise might not be looked at a second time.
Add a seat to Salesforce
Here are the steps we take to grant appropriate Salesforce licenses to a new hire:
- Go to "My Account".
- View contracts -> pick current contract.
- Add the desired number of licenses.
- Sign DocuSign sent to the email.
- The order will be processed in ~30m.
- Once the basic license has been added, you can create a new user using the new team member's
@fleetdm.com
email and assign a license to it.- To enable email sync for a user:
- Navigate to the user’s record and scroll to the bottom of the permission set section.
- Add the “Inbox with Einstein Activity Capture” permission set and save.
- Navigate to the "Einstein Activity Capture Settings" and click the "Configurations" tab.
- Select "Edit", under "User and Profile Assignments" move the new user's name from "Available" to "Selected", scroll all the way down and click save.
- To enable email sync for a user:
Inform managers about hours worked
Every Friday, we collect hours worked for all hourly employees at Fleet, including core team members and consultants, regardless of their location. Consultants submit their hours through Gusto (US consultants) or Plane.com (international consultants) for DRI (generally their manager) review. Here's how:
- Find the DRI using the Digital Experience KPIs.
- Copy the template in the consultants column of the KPIs and send the teammate's DRI a direct message in Slack hours with an FYI including the total hours logged since last Saturday at midnight. For international teammates, they cannot enter hours weekly in Plane.com, so you will need to request the hours worked from them in order to have the DRI approve them.
- The following Monday, check for updates to logged hours and ensure the KPI sheet aligns with HRIS records. If there are discrepancies between what was previously reported, reconfirm logged hours with the teammate's DRI and update the KPI sheet to reflect the correct amount.
Change the DRI of a consultant
- In the KPIs sheet, find the consultant's column.
- Change the DRI documented there to the new DRI who will receive information about the consultant's hours.
Convert a Fleetie to a consultant
If a Fleetie decides they want to move to being a consultant, either the Fleetie or their manager need to create a custom issue for the Digital Experience team to notify them of the change. Once notified, Digital Experience takes the following steps:
- Confirm the following details with the Fleetie:
- Date of change
- Term of consultancy (time period)
- Hours/capacity expected (hours per week or month)
- Confirm hourly rate
- Once details are confirmed, use the information given to create the consulting agreement for the Fleetie (either in docusign (US-based) or via Plane (international)), and send to their personal email for signature. Once signed, save in Fleetie's employee file.
- Schedule the Fleetie's final day in HRIS (Gusto or Plane).
- Update final day in "🧑🚀 Fleeties" spreadsheet.
- Create an offboarding issue for the Fleetie converting to a consultant, and confirm with their manager if there is a need to retain any tools or access while they are a consultant (default to removing all access from Fleet email, and migrating to personal email for Slack and other tools unless there is a business case to retain the Fleet email and associated tool access).
- Follow the offboarding issue for next steps, including communicating to teammates and updating equity plan.
Change the "Integrations admin" Salesforce account password
Salesforce requires that the password to the "Integrations admin" account is changed every 90 days. When this happens, the Salesforce integrations on the Fleet website/Hydroplane will fail with an INVALID_LOGIN
error. To prevent this from happening, a member of the Digital expererience team will:
- Log into the "Integrations admin" account in Salesforce.
- Change the password and save it in the shared 1Password vault.
- Request a new security token for the "Integrations admin" account (This will be sent to the email address associated with the account).
- Update the
sails_config__custom_salesforceIntegrationPasskey
config variable in Heroku to be[password][security token]
(For both the Fleet website and Hydroplane).
Review Fleet's US company benefits
Annually, around mid-year, Fleet will be prompted by Gusto to review company benefits. The goal is to keep changes minimal. Follow these steps:
- Log in to your Gusto admin account.
- Navigate to "Benefits" and select "Renewal survey".
- Complete the survey questions, aiming for minimal changes.
- Approximately 2-3 months after survery completion, Gusto will suggest plans based on Fleet's responses. Choose plans with minimal changes.
- Gusto will offer these plans to employees during open enrollment, with new coverage starting 3-4 weeks afterward.
Access a background check
All Fleet team members undergo a background check provided through Vetty. Only the most recent background checks appear on the home page of Vetty's dashboard. To access a complete list of background checks run in Vetty, scroll down to the bottom of the candidates page and click "View Historical".
Review an NDA
We need to review an NDA anytime a vendor, customer or other party wants to:
- Use their own NDA rather than Fleet's standard NDA, or
- "Redline" (modify) Fleet's NDA by removing, adding or altering its terms.
We should always seek to use Fleet's own NDA first, without alteration.
When reading an NDA, we want to pay close attention to the following:
- We want to be sure that the confidentiality obligations of the NDA are reciprocal. Fleet and the other party to the agreement should be bound to the same standards of confidentiality toward the handling of each other's confidential information.
- Fleet does not agree to "do not compete" or "do not solicit clauses". An NDA should not contain provisions beyond the scope of an NDA. The two most commonly encountered examples of this are the "do not compete" and "do not solicit" clauses. We want to be free to hire the best people and make the best products, so when reading through an NDA it is important to keep an eye out for language that prohibits Fleet from hiring or soliciting current or former employees of other companies or that prohibit Fleet from independently developing products that compete with another company's products. Using the
cmd + f
function to search for "solici", "compet" and "hir" and reading through the results is a helpful method to quickly scan for these clauses. - Look for any language that discusses a transfer of property rights. Rarely, you may find a clause snuck into an agreement that discusses the transfer of intellectual property rights. We want to avoid any situation where Fleet transfers its intellectual property to another party as part of an NDA.
- Should you find any clauses in steps 2 or 3 that are beyond the scope of protecting both party's confidential information in a customer NDA or an altered version of Fleet's NDA, reject this language and communicate that Fleet cannot agree to those terms.
- Any concerns or uncertainty over any provisions in an NDA should be brought to Nathanael Holliday in Digital Experience, who will consult legal counsel if necessary to resolve any concerns.
Review a vendor agreement
When reviewing contracts from a vendor, Fleet is concerned about the following:
- If there are confidentiality provisions in the agreement in place of a stand-alone NDA, verify the confidentiality provisions are appropriate and protect Fleet when sensitive data is involved that isn't otherwise available to the public.
- We want to make sure there are no do not solicit or do not compete clauses in the contract. To aid in this search, we double check by using the cmd + f function and searching for "solici", "compet" and "hir" and then looking through the results to be sure that nothing prohibits Fleet from independently developing competing products or from hiring personnel with ties to the vendor.
- We want to make sure that contracts can be terminated relatively easily and be aware of what the process is for terminating them, avoiding commitments over 12 months in length.
- We want to make sure the payment terms work for us (i.e. being able to pay via wire transfer, credit card or bill.com) and that the price in any contract or order form is what we have agreed to. While almost never malicious, mistakes often occur in the steps between agreeing on a price, negotiating a contract, and receiving an invoice. We want to be sure at every step that the dollar amount and service provided is consistent with what has been negotiated and agreed upon.
- Remember, once we have signed the agreement - we're stuck with it. If any clause in the agreement appears strange or gives you pause or concern, it is better to seek clarification than to commit to something that might be detrimental to Fleet. Contracts are fairly standardized, and you'll quickly learn what is normal and what feels out of place. Unusual clauses or wording that seems out of the ordinary should get a second set of eyes just to be sure, do not hesitate to reach out to Nathanael Holliday with questions, who will reach out to legal counsel as necessary.
Review an order form
- We should always check order forms for additional terms that go beyond the scope of the order form (caps on price increases, for example).
- Be sure the order form includes contact information + billing address and information so that Fleet knows how and who to invoice for payment.
- Verify that the payment terms are correct and matches what's in the agreement. This is a frequent common mistake as companies usually have default payment terms and overlook changing them to match atypical payment terms.
- Make sure the effective term of the order matches what was agreed upon (usually a one year term) and that the order form includes the correct number of hosts and whether or not it should contain professional services (usually, it does not).
- Check that the amount on the order form reflects what Fleet agreed to, as this is the amount that the customer will expect to be invoiced for.
- Lastly, double check one more time to make sure there are no sneaky, unusual terms snuck in at the bottom of an order form or stashed away in fine print. Common things that are included in order forms and not always communicated to Fleet are caps on price increases upon renewal, new SLAs, or a product roadmap or milestones we may not have agreed upon. Any clauses on an order form that appear beyond the scope of simply elaborating on the services being provided, the purchase cost, the contract that the purchase is being made under, how Fleet will bill and how the customer will pay deserves a careful look. Reach out to Nathanael Holliday in Digital Experience with concerns.
Review a non-standard subscription agreement
We want to use our standard terms whenever possible with our customers, but it is common that customers want to use their own agreement or redline (modify) Fleet's terms.
When reviewing subscription agreements on customer paper or when a customer has made changes to Fleet's terms, we review it using these guidelines.
Obtain a signature from the CEO
When an agreement is routed to the CEO for signature, the Apprentice is responsible for obtaining a signature from the CEO using the following steps:
- Drag the email to the "🔏 SAM: Signature wanted" label making sure to mark the email as unread.
- The Contracts and Compliance Engineer will at-mention the Apprentice in a legal review issue, letting them know the contract is good to go. After that, move the email to the "✍️ MIKE: Ready to sign" label
If the agreement closes a deal, inform the CEO (via Slack DM) that a subscription agreement is ready for his review/signature. The SLA for CEO review and signature is 48hrs.
- Comment in the issue once the CEO has signed the agreement and assign the issue to Nathan Holiday.
Troubleshoot signature automation
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:
- 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.
- 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 the document was completed in DocuSign, formatted YYYY-MM-DD.
- Zapier uses this information to upload the file to the matched Google Drive folder, with the filename formatted as
[date] - [emailSubject] - [emailCvs].PDF
. - Once the file is uploaded, Zapier uses the Slack integration to post in the #help-classified channel with the message:
Now complete with all signatures: [email subject] link: drive.google.com/[destinationFolderID]
Send the weekly update
We like to be open about milestones and announcements. Every Friday, e-group members report their KPIs for the week by 5:00pm U.S. CT. Every Friday at 6PM, the Apprentice will post a short update in #general including: - A link to view KPIs - Who was on-call that week - Fleeties who are currently onboarding - Planned hires who haven't started yet - Fleeties that departed that week
To send the weekly update follow these steps:
- Navigate to the current weeks row in the KPIs Google Sheet.
- Check the KPI sheet at 5pm US central time to ensure all departments have updated their KPIs on time. If any departments are delinquent, notify the department head and document performance feedback.
- Copy the entire formula in this weeks "Weekly update" update cell and paste without formating (CMD+⇧+V) back into the same cell. The formula will now look like this:
- In the "Weekly update" column (column E) for that row, double-click into that cell and change the "⚡️" to "🔭" in the beginning of the formula.
- Paste the newly formatted message in the #general Slack channel and delete the double quotes around the message and any links that unfurl from links in the weekly update message.
- Use the drop-down next to the send button and select "Custom time" and schedule the message to send "Today" at 18:00 or 6pm CT.
Prepare for the All hands
Every month the Apprentice will do the prep work for the monthly "✌️ All hands 🖐👋🤲👏🙌🤘" call.
- In the "👋 All hands" folder, create a new folder using "yyyy-mm - All hands".
- Update "End of the quarter" slides to reflect the current countdown.
- Download a copy of the previous month's keynote file and rename the copy pattern matching existing files.
- Update the slides to reflect the current "All hands" date (e.g. cover slides month and the "You are here" slide)'
- Update slides that contain metrics to reflect current information using the 📈 KPIs doc.
- Update the "Spotlight slide" for guest speakers.
- Add new customer logos from Mike's bookmarks "Customers list" and Google "Company name" to find the current logo.
First "All hands" of the quarter
- Audit the "Strategy" slide.
- Audit the "Goals" slide
The day before the All hands, Mike will prepare slides that reflect the CEO vision and focus.
Share recording of all hands meeting
The Apprentice will post a link to the All hands Gong recording and slide deck in Slack.
Template to use:
Thanks to everyone who contributed to today's "All hands" call.
:tv: If you weren't able to attend, please *[watch the recording](Current-link-to-Gong-recording)* _(1.5x playback supported)_.
You can also grab a copy of the [original slides](https://fleetdm.com/handbook/company/communications#all-hands) for use in your own confidential presentations.
- Copy and paste the template to the "# general" Slack channel.
- Open Gong recording and click
Share call
, then clickShare with customers
, thenCopy link
. - Paste the url
*[Watch the recording](
here-in-your-template-message)*
.
- Schedule the Slack message to go out at 6pm CT (18:00).
Process and backup Sid agenda
Every two weeks, our CEO Mike has a meeting with Sid Sijbrandij. The CEO uses dedicated (blocked, recurring) time to prepare for this meeting earlier in the week.
- 30 minutes After each meeting archive the "💻 Sid : Mike(Fleet)" agenda, moving it to the (¶¶) Sid archive folder in Google Drive.
- In the backup copy, create Google Doc comments assigning all Fleet TODOs to the correct DRI.
- In the ¶¶¶¶🦿🌪️CEO Roundup doc, update the URL in
Sam: FYI: Agenda from last time:
LINK.
Process and backup E-group agenda
Follow these steps to process and backup the E-group agenda:
- Archive the E-group agenda after each meeting, moving it to the "¶¶ E-group archive" folder in Google Drive.
- In the backup copy, leave Google Doc comments assigning all TODOs to the correct DRI.
- If the "All hands" meeting has happened today remove any spotlights covered in the current "All hands" presentation.
Process the help-being-ceo Slack channel
The Apprentice will perform the following steps to process all communication from the CEO in the help-being-ceo Slack channel.
- As soon as the message is received in the channel, add the "
:eyes:
(👀)" emoji to the Slack message to signify that you have seen and understood the task or question. - Start a Slack thread to add any context or let the stakeholders know the status of the task.
- After each task is completed, apply the "
:white_check_mark:
" (✅) to the slack message.
Unroll a Slack thread
From time to time the CEO will ask the Apprentice to unroll a Slack thread into a well-named whiteboard Google doc for safekeeping and future searching.
- Start with a new doc.
- Name the file with "yyyy-mm-dd - topic" (something empathetic and easy to find).
- Use CMD+SHFT+V to paste the Slack convo into the doc.
- Reapply formatting manually (be mindful of quotes, links, and images).
- To copy images right-click+copy and then paste in the doc (some resizing may be necessary to fit the page).
Delete an accidental meeting recording
It's not enough to just "delete" a recording of a meeting in Gong. Instead, use these steps:
- Wait for at least 30 minutes after the meeting has ended to ensure the recording and transcript exist and can be deleted.
- Sign in to Gong through the CEO's browser.
- Scroll down to
Conversations
- Select the call recording no longer needed
- Click the "hotdog" menu in the right-hand corner
Delete recording
- Search for the title of the meeting Google Drive and delete the auto-generated Google Doc containing the transcript.
- Always check back to ensure the recording and transcript were both deleted.
Communicate Fleet's potential energy to stakeholders
On the first business day of every month, the Head of Digital Experience will send an update to the stakeholders of Fleet using the following steps:
- Navigate to the "🪴🌧️🦉 Investor updates" spreadsheet and confirm the data in each column matches the header of that column (e.g. the "Headcount" column actually has headcount values in it). Do this by confirming the "Remote column" value corresponds to the correct column "letter" in the "Weekly updates" tab of the "📈 OKRs (quarterly goals) + KPIs (everyday metrics)" spreadsheet.
- Confirm KPI's are up-to-date. If any KPI's aren't completed, at mention the e-group member responsible and ask that the KPI's be completed ASAP in order to send the investor update.
- Copy the following template into an outgoing email with the subject line: "[Investor update] Fleet, YYYY-MM".
Hi investors and friends,
FYI we just updated the self-service investor update portal with the numbers from last month: https://docs.google.com/spreadsheets/d/10T7Q9iuHA4vpfV7qZCm6oMd5U1bLftBSobYD0RR8RkM/edit#gid=0
Thanks for your support,
Mike and the Fleet team
- Address the email to the executive team's Gmail.
- Using the 🌧️🦉 Investors + advisors spreadsheet, bcc the correct individuals and send the email.
Schedule press release
Fleet will occasionally release information to the press regarding upcoming initiatives before updating the functionality of the core product. Use the following steps to schedule a press release:
- Add context for the next press release to the e-group agenda as a "DISCUSS:" to be reviewed by Fleet's executive team for alignment and finalization of date.
- Once a release date is set, at-mention our public relations firm in the #help-public-relations-firm--mindshare-pr--brand-marketing and schedule a 30m call for our CEO and to communicate the press release.
The above must be completed 6 weeks before the press release date.
- Schedule a 1.5h discussion between the Head of Digital Experience and the CEO to review the first draft linked as "Agenda: LINK" to the calendar event description.
- Schedule a 60m call with the CEO and public relations firm to review the first draft linked as above to the calendar event (first draft provided by the PR firm)
- Schedule 2.5 hrs of async time for the CEO work on edits and a 60m followup postgame (solo) where CEO edits and then settles+sends final release.
Archive a document
Follow these steps to archive any document:
- Create a copy of the document prefixed with the date using the format "
YYYY-MM-DD
Backup ofDOCUMENT_NAME
" (e.g. "2024-03-22 Backup of 🪂🗞️ Customer voice"). - Be sure to "Share it with the same people", "Copy comments and suggestions", and "Include resolved comments and suggestions" as shown below.
- Save this backup copy to the same location in Google Drive where the original is found.
- Link to the backup copy at the top of the original document. Be sure to use the full URL, no abbreviated pill links (e.g. "Notes from last time: URL_OF_MOST_RECENT_BACKUP_DOCUMENT").
- Delete all non-structural content from the original document, including past meeting notes and current answers to "evergreen" questions.
Process the CEO's inbox
- The Apprentice is responsible for processing all email traffic prior to CEO review to reduce the scope of Mike's inbox to only include necessary and actionable communication.
- Marking spam emails as read (same for emails Mike doesn't actually need to read).
- Escalate actionable sales communication and update Mike directly.
- Ensure all calendar invites have the necessary documents included.
- Forward any emails from customers about paying Fleet to the Buisness Operations department using Fleet's billing email.
Process the CEO's calendar
Time management for the CEO is essential. The Apprentice processes the CEO's calendar multiple times per day.
Clear any unexpected new events or double-bookings. Look for any new double-bookings, invites that haven't been accepted, or other events you don't recognize.
- Double-book temporarily with a "UNCONFIRMED" calendar block so that the CEO ignores it and doesn't spend time trying to figure out what it is.
- Go to the organizer (or nearest fleetie who's not the CEO):
- Get full context on what the CEO should know as to the purpose of the meeting and why the organizer thinks it is helpful or necessary for the CEO to attend.
- Remind the organizer with this link to the handbook that all CEO events have times chosen by Sam before booking.
- Bring prepped discussion item about this proposed event to the next CEO roundup, including the purpose of the event and why it is helpful or necessary for the CEO to attend (according to the person requesting the CEO's attendance). The CEO will decide whether to attend.
- Delete the "UNCONFIRMED" block if the meeting is confirmed, or otherwise work with the organizer to pick a new time or let them know the decision.
Prepare the agenda for any newly-added meetings: Meeting agenda prep is especially important to help the CEO focus and transition quickly in and between meetings. Using the CEO's browser, prepare each document by including the following:
If a meeting agenda has to be created from scratch, be sure to move it to the "Meeting notes" folder in Google Drive so that he isn't locked out of any documents. If preparing for a meeting with a current advisor, use the existing journal as the meeting agenda using these steps:
- Search for the journal in Mike's browser using the advisor's name or email.
- Update the journal by adding the date of the meeting as an H3 in the Google document (pattern matching the document) and link the document to the calendar description.
- LinkedIn profile url of all outside participants. Connect with any of the attendees that the CEO is not already connected to on LinkedIn, this should always be a blank connect request meaning "Send without note". Nest everything from prep under the LinkedIn url (ie all under #1)
- A screen-shot of LinkedIn profile pic
- Company name (in doc title, file name and Google calendar event title)
- Correct date (20XX-XX-XX in doc title and file name)
- Context that helps the CEO to understand the purpose of the meeting at a glance from: - CEO's email - LinkedIn messages (careful not to mark things as read!) - Google Drive
- Edit the calendar event description, changing “Notes” to “Agenda” when you're finished preparing the document to signify that this meeting has been prepped.
Check LinkedIn for new activity
Once a day the Apprentice will check LinkedIn for unread messages and pending connect request.
- Log into the CEO's LinkedIn and bring up the messaging window.
- Filter out all read messages by clicking "filter" and then "Unread".
- Bring all unreads to the CEO during the daily roundup.
To check for pending connect requests, perform the following steps:
- Log into the CEO's LinkedIn (if you're not already) and click "My Network".
- Bring all pending connect requests to the CEO during the daily roundup.
Schedule travel for the CEO
The Apprentice schedules all travel arrangements for the CEO including flights, hotel, and reservations if needed. CEO traveling preferences in descending order of importance are:
- Direct flight whenever possible (as long as the cost of the direct flight is ≤2x the cost of a reasonable non-direct flight)
- Select a non-middle seat, whenever possible
- Don't upgrade seats (unless there's a cheap upgrade that gets a non-middle seat, or if a flight is longer than 5 hours. Even then, never buy a seat upgrade that costs >$100.)
- The CEO does not like to be called "Michael". Unfortunately, this is necessary when booking flights. (He has missed flights before by not doing this.)
- Default to carry-on only, no checked bags. (For trips longer than 5 nights, add 1 checked bag.)
- Use the Brex card.
- Frequent flyer details of all (previously flown) airlines are in 1Password as well as important travel documents.
Schedule CEO interview
Use the following steps to schedule an interview between a candidate and the CEO:
- Once you receive a CEO interview request, apply the "eyes" (👀) emoji to the Slack post to acknowledge you've seen the request.
- Reach out to the candidate via email to find a time when the CEO and candidate are both available.
This entire process takes an hour for the CEO: a 30-minute interview followed by a 30-minute "¶¶ Postgame" Be sure to offer times that accommodate this.
- Make a copy of the "¶¶ CEO interview template" (private Google doc) and move it to the "¶¶ Interview feedback" folder in Google Drive.
- Prep the CEO interview doc:
- Change file name and heading of doc to
¶¶ CANDIDATE_NAME (CANDIDATE_TITLE) <> Mike McNeil, CEO final interview (YYYY-MM-DD)
. - Add candidate's personal email in the "👥" (attendees) section at the top of the doc.
- Add candidate's LinkedIn url on the first bullet for Mike.
- Share the CEO interview doc with the hiring manager as a "Commenter".
- Change file name and heading of doc to
- Link the CEO interview doc at the top of the "feedback" doc shared in the CEO interview request
- Create a Google Calendar event at a time when the CEO and the candidate are both available.
- Create a Google Calendar event matching the title of the interview doc.
- Add the interview doc to the calendar event description as the agenda (i.e.
Agenda: INTERVIEW_DOC_FULL_URL
) and save the calendar event.
- Schedule a 30-minute "¶¶ Postgame" working session for the CEO to evaluate the candidate and give his recommendation.
- In the hiring channel for the position, apply the "green-check-mark" (✅) emoji to the CEO interview request to confirm the request has been processed.
Program the CEO to do something
- If necessary or if unsure, immediately direct message the CEO on Slack to clarify priority level, timing, and level of effort. (For example, whether to schedule 30m or 60m to complete in full, or 30m planning as an iterative step.)
- If there is not room on the calendar to schedule this soon enough with both Mike and Sam as needed (erring on the side of sooner), then either immediately direct message the CEO with a backup plan, or if it can obviously wait, then discuss at the next roundup.
- Create a calendar event with a Zoom meeting for the CEO and Apprentice. Keep the title short. For the description, keep it very brief and use this template:
Agenda:
1. Apprentice: Is there enough context for you (CEO) to accomplish this?
2. Apprentice: Is this still a priority for you (CEO) to do.. right now? Or should it be "someday/maybe"?
3. Apprentice: Is there enough time for you (CEO) to do this live? (Right now during this meeting?)
4. Apprentice: What are the next steps after you (CEO) complete this?
5. Apprentice: LINK_TO_DOC_OR_ISSUE
Confirm CEO shadow dates
After the team member notifies the Head of Digital Experience (via Slack), the Head of DigExp will bring the dates to the next roundup as a "DISCUSS: CEO shadow dates". Use the following steps to confirm CEO shadow dates:
- Create an "All day", "Free" event on the CEO's calendar that matches the CEO shadow dates and name the calendar event "CEO shadow - [NAME] (Job title)".
- Confirm the "shadowability" for external and nonrecurring internal meetings with the CEO during the next daily 🐈⬛🌪️ Roundup.
- Go through the calendar and make sure all private meetings (e.g. 1:1's, E-Group, and quarterly board meetings) have "[no shadows]" in the event title.
Check GitHub terms
Go to GitHub's terms of services and search “inbound=outbound” to find the clause, if still there as is, paste a screenshot into the table in this document. If the clause has changed, contact Mike M. and let him know.
Rituals
- Note: Some rituals (⏰) are especially time-sensitive and require attention multiple times (3+) per day. Set reminders for the following times (CT):
- 9:30 AM (/before first meeting)
- 12:30 PM CT (/beginning of "reserved block")
- 6:30 PM CT (/after last meeting, before roundup / Japan calls)
Stubs
The following stubs are included only to make links backward compatible.