fleet/handbook/marketing
2023-04-24 11:53:18 -07:00
..
article-formatting-guide.md Website: Update <call-to-action> component and article formatting guide (#9892) 2023-02-16 18:13:00 -06:00
commonly-used-terms.md Creating Marketing division of the handbook (#8275) 2022-10-17 21:35:06 -05:00
content-style-guide.md Why sentence case? (+examples) (#10701) 2023-03-23 09:51:08 -07:00
how-to-submit-and-publish-an-article.md Define DRI (#9967) 2023-02-21 09:59:08 -08:00
markdown-guide.md Creating Marketing division of the handbook (#8275) 2022-10-17 21:35:06 -05:00
README.md Sentence case (#11284) 2023-04-24 11:53:18 -07:00

Community

Marketing mission

To show organizations how Fleet is the best way to keep their employees and their machines safe and productive. To create demand for the worlds first open-source and cross-platform MDM.

Positioning

See 📖Company#Positioning.

Marketing Qualified Opportunities (MQOs)

Marketing's goal is to increase product usage. We value users of all sizes adopting Fleet Free or Fleet Premium. Companies purchasing under 100 device licenses should sign up for self-service. Companies that enroll more than 100 devices should talk to an expert. When these companies attend this meeting, Fleet considers them Marketing Qualified Opportunities (MQOs).

Lead enrichment

Fleet's lead enrichment process can be found in this Google Doc (private).

Product Marketing and Launch strategies

How we show up for our community online

Posting to social media should follow a personable tone and strive to deliver useful information across our social accounts. Some specific guidelines that we follow at Fleet:

  • Answer technical questions quickly: if a community member has a technical question drop it in #g-marketing in slack if you can't answer it yourself.
  • Never engage with un-constructive feedback or competitive spamming. If there is a valuable conversation to be had, let our community lead the conversation, and let our community come to our defense. They are the users, and often their insight and debates are more attuned then ours.
  • Do not share Hacker News links directly. If we are on Hacker News, just let the community know and if they find us then great.

Topics:

  • Fleet the product
  • Internal progress
  • Highlighting community contributions
  • Highlighting Fleet and osquery accomplishments
  • Industry news about osquery
  • Industry news about device management
  • Upcoming events, interviews, and podcasts

Guidelines:

In keeping with our tone, use hashtags in line and only when it feels natural. If it feels forced, dont include any.

Self-promotional tweets are not ideal(Same goes for, to varying degrees, Reddit, HN, Quora, StackOverflow, LinkedIn, Slack, and almost anywhere else). Also, see The Impact Equation by Chris Brogan and Julien Smith.

Great brands are magnanimous.

Scheduling:

Once a post is drafted, deliver it to our three main platforms.

Log in to Sprout Social and use the compose tool to deliver the post to each platform. (credentials in 1Password).

Promoting blog posts on social media

Once a blog post has been written, approved, and published, make sure that it is promoted on social media. Please refer to our Publishing as Fleet guide for more detailed information.

Fleet in the news!

Press releases

If we are doing a press release, we are probably pitching it to one or more reporters as an exclusive story if they choose to take it. Consider not sharing or publicizing any information related to the upcoming press release before the announcement. Also, see What is a press exclusive, and how does it work on Quora.

Press release boilerplate

Fleet gives teams fast, reliable access to data about the production servers, employee laptops, and other devices they manage - no matter the operating system. Users can search for any device data using SQL queries, making it faster to respond to incidents and automate IT. Fleet is also used to monitor vulnerabilities, battery health, and software. It can even monitor endpoint detection and response and mobile device management tools like Crowdstrike, Munki, Jamf, and Carbon Black, to help confirm that those platforms are working how administrators think they are. Fleet is open source software. It's easy to deploy and get started quickly, and it even comes with an enterprise-friendly free tier available under the MIT license.

IT and security teams love Fleet because of its flexibility and conventions. Instead of secretly collecting as much data as possible, Fleet defaults to privacy and transparency, capturing only the data your organization needs to meet its compliance, security, and management goals, with clearly-defined, flexible limits.

That means better privacy, better device performance, and better data but with less noise.

Sponsoring events

When reaching out for sponsorships, Fleet's goal is to expose potential hires, contributors, and users to Fleet and osquery. Track prospective sponsorships in "Sponsorships"

Once a relevant sponsorship opportunity and its prospectus are reviewed:

  1. Create a new GitHub issue.

  2. Detail the important information of the event, such as date, name of the event, location, and page links to the relevant prospectus.

  3. Add the issue to the “Conferences/speaking” column of the Growth plan project.

  4. Schedule a meeting with the representatives at the event to discuss pricing and sponsorship tiers.

  5. Invoices should be sent to Nathan Holliday for approval.

  6. Nathan Holliday (Business Operations) will route the signatures required over to Mike McNeil (CEO) with DocuSign.

  7. Once you complete the above steps, use the Speaking events issue template to prepare speakers and participants for the event.

Partners

All of Fleet's partnerships are located in "❤️‍🔥 Buying situations > 🚿Channels / partners". (This is the source of truth for any active or proposed partnership.)

Community

Communities

Fleet's users and broader audience are spread across many online platforms. Here are the most active communities where Fleet's developer relations and social media team members participate at least once every weekday:

Goals

Our primary quality objectives are customer service and defect reduction. We try to optimize the following:

  • Customer response time
  • The number of bugs resolved per release cycle
  • Staying abreast of what our community wants and the problems they're having
  • Making people feel heard and understood
  • Celebrating contributions
  • Triaging bugs, identifying community feature requests, community pull requests, and community questions

How?

  • Folks who post a new comment in Slack or issue on GitHub should receive a response within one business day. The response doesn't need to include an immediate answer.
  • If you feel confused by a question or comment raised, request more details to better your understanding of the next steps.
  • If an appropriate response is outside of your scope, please post to #help-engineering (in the Fleet Slack)), tagging @oncall.
  • If things get heated, remember to stay positive and helpful. If you aren't sure how best to respond positively, or if you see behavior that violates the Fleet code of conduct, get help.

Requesting more details

Typically, the questions, bug reports, and feature requests raised by community members will be missing helpful context, recreation steps, or motivations.

For questions that you don't immediately know the answer to, it's helpful to ask follow-up questions to receive additional context.

  • Let's say a community member asks, "How do I do X in Fleet?" A follow-up question could be, "What are you attempting to accomplish by doing X?"
  • This way, you have additional details when you bring this to the Roundup meeting. In addition, the community member receives a response and feels heard.

🦟 For bug reports, it's helpful to ask for re-creation steps so you're later able to verify the bug exists.

  • Let's say a community member submits a bug report. An example follow-up question could be, "Can you please walk me through how you encountered this issue so that I can attempt to recreate it?"
  • This way, you now have steps that verify whether the bug exists in Fleet or if the issue is specific to the community member's environment. If the latter, you now have additional information for further investigation and question-asking.

💡 For feature requests, it's helpful to ask follow-up questions to understand better the "Why?" or underlying motivation behind the request.

  • Let's say a community member submits the feature request "I want the ability to do X in Fleet." A follow-up question could be "If you were able to do X in Fleet, what's the next action you would take?" or "Why do you want to do X in Fleet?."
  • Both of these questions provide helpful context on the underlying motivation behind the feature request when brought to the Roundup meeting. In addition, the community member receives a response and feels heard.

Closing issues

It is often good to let the original poster (OP) close their issue themselves since they are usually well equipped to decide to mark the issue as resolved. In some cases, circling back with the OP can be impractical, and for the sake of speed, issues might get closed.

Keep in mind that this can feel jarring to the OP. The effect is worse if issues are closed automatically by a bot (See balderashy/sails#3423 and balderdashy/sails#4057 for examples of this).

Tools

Find the script in scripts/oncall for use during oncall rotation (only been tested on macOS and Linux). Its use is optional but contains several useful commands for checking issues and PRs that may require attention. You will need to install the following tools to use it:

Resources

There are several locations in Fleet's public and internal documentation that can be helpful when answering questions raised by the community:

  1. Find the frequently asked question (FAQ) documents in each section in the /docs folder. These documents are the Using Fleet FAQ, Deploying FAQ, and Contributing FAQ.

  2. Use the internal FAQ document.

Assistance from engineering

Community team members can reach the engineering oncall for assistance by writing a message with @oncall in the #help-engineering channel of the Fleet Slack.

Pull requests

The most important thing when community members contribute to Fleet is to show them we value their time and effort. We need to get eyes on community pull requests quickly (within one business day) and get them merged or give feedback as soon as we can.

Managing community contributions

The Community Engagement DRI is responsible for keeping an eye out for new community contributions, getting them merged if possible, and getting the right eyes on them if they require a review.

Each business day, the Community Engagement DRI will check open pull requests to

  1. check for new pull requests (PRs) from the Fleet community.
  2. approve and merge any community PRs that are ready to go.
  3. make sure there aren't any existing community PRs waiting for a follow-up from Fleet.

Identify community contributions

When a new pull request is submitted by a community contributor (someone not a member of the Fleet organization):

  • Add the :community label.

  • Self-assign for review.

  • Check whether the PR can be merged or needs to be reviewed by the Product team.

    • Things that generally don't need additional review:

      • Minor changes to the docs.

      • Small bug fixes.

      • Additions or fixes to the Standard Query Library (as long as the SQL works properly and is attributed correctly).

    • If a review is needed:

      • Request a review from the Product DRI. They should approve extensive changes and new features. Ask in the #g-product channel in Fleet's Slack for more information.
      • Tag the DRI and the contributor in a comment on the PR, letting everyone know why an additional review is needed. Make sure to say thanks!
      • Find any related open issues and make a note in the comments.

Please refer to our PRs from the community guide and use your best judgment.

Communicate with contributors

Community contributions are fantastic, and it's important that the contributor knows how much they are appreciated. The best way to do that is to keep in touch while we're working on getting their PR approved.

While each team member is responsible for monitoring their active issues and pull requests, the Community Engagement DRI will check in on pull requests with the :community label daily to make sure everything is moving along. If there's a comment or question from the contributor that hasn't been addressed, reach out on Slack to get more information and update the contributor.

Making the updates

Every week, the Community Engagement DRI will:

  • Create a new Weekly Doc Update issue on Monday and add it to the Community board.
  • Review the Slack Questions Spreadsheet and make sure that any necessary updates to the documentation are made.
    • Update the spreadsheet to indicate what action was taken (Doc change, FAQ added, or None) and add notes if need be.
  • Set up a single PR to update the Docs.
    • In the notes, include a list of changes made as well as a link to the related thread.
  • Bring any questions to DevRel Office Hours (time TBD).
  • Submit the PR by the end of the day on Thursday.
  • Once the PR is approved, share in the #fleet channel of Osquery Slack Workspace and thank the community for being involved and asking questions.

Fleet swag

We want to recognize and congratulate community members for their contributions to Fleet. Nominating a contributor for Fleet swag is a great way to show our appreciation.

How to order swag

We currently deliver Fleet swag and osquery stickers for those that request it through community contributions, Fleet documentation, and social media posts.

Our Typeform integrations automatically populate information within the #help-swag Slack channel for osquery sticker and shirt requests through TypeForm.

For community contributions, reach out to the contributor to thank them for their contribution, ask if they would like any swag, and fill out their information in the Fleet swag request sheet.

Once approved in the sheet, or submitted through Typeform, place the order through our Printful account (credentials in 1Password) within 48 hours of submission. If available through the ordering process, add a thank you note for their contribution or request.

When an estimated shipping date is available, notify the requestor by email with an update on shipping, thank them for being a part of the community, and provide the tracking number once shipped.

Printful order information can be found on Printful.

At this time, double-check that information within Salesforce and Typeform is accurate according to the enrichment process.

Brand

Publishing Fleet content

The following describes how to go about publishing and editing content at Fleet.

Publication methods

  1. Instant: Content is published instantly. Content is approved by Brand post-facto see links in the table below to get the required training.
  2. Gated: Submit content to Brand for review see specific instructions in the table below.
  3. Queued: Communicate the publication date with the DRI responsible for approving this content refer to specific instructions linked in the table below.

Revision methods (for editors)

  1. Absorb: Fix and publish yourself
  2. Feedback: Request changes and wait
  3. Pairing: Jump on Zoom to finalize with the original contributor.

Consider: Absorb may be risky depending on how sure the editor is about their edits. Feedback can be forgotten. Pairing is underused but can eat up more time if not careful.

Timeframe

Detail the minimum time needed for new or updated content to be live (published) and brand-approved (reviewed and revised, if necessary).

Content types

Content To publish To revise (for editors) Timeframe
Articles Queued see How to submit and publish an article. Absorb (pair or feedback as needed) see How to edit articles, release posts, and press releases. three business days
Ads Gated. Request review from Brand see (TODO: Creating an ad campaign). Feedback or pair five business days
Docs Gated. Request review from Chris McGillicuddy see (TODO: Adding to the docs). Absorb see How to edit Markdown pull requests for the docs. For non-grammar-related revisions: Feedback or pair with contributor, and request review from the on-call engineer. two business days
Docs (REST API) Gated. Request review from Luke Heath see (TODO: Adding to the docs (REST API)). Absorb see How to edit recently merged Pull Requests for the handbook and docs. For non-grammar-related revisions: Feedback or pair with contributor, and request review from Luke Heath. two business days
Handbook Gated. Request review from page DRI see (TODO: Adding to the handbook). Absorb and request review from page DRI see How to edit recently merged Pull Requests for the handbook and docs. two business days
Social media (Twitter, FB, LinkedIn.) Instant see Posting on social media as Fleet. Pair or absorb (pair if possible otherwise, silently fix ASAP by editing or deleting the post. Consider that some or many people may have already seen the post, and decide accordingly see How to edit social media posts.) one business day
Newsletter/email blast Gated. Request review from the Brand team see (TODO: Creating an email campaign). Feedback or pair five business days
Press release Queued see (TODO: Publishing a press release) Feedback or pair see How to edit articles, release posts, and press releases three business days
Release post Queued see (TODO: Publishing release posts) Feedback or pair see How to edit articles, release posts, and press releases three business days
Website (text change) Gated see (TODO: Adding content to fleetdm.com). Feedback or pair three business days
YouTube Queued see (TODO: Publishing on YouTube as Fleet.) Absorb for revisions to the description. Pair or absorb for video content (pair if possible otherwise, silently fix ASAP by deleting the post. Consider that the video may also have been promoted on social media see Social media (Twitter, FB, LinkedIn) above. three business days
Decks Instant. Sales typically creates decks. The Brand team shouldn't be a blocker. Feedback three business days

Content style guide

Learn how to communicate as Fleet with guidelines for tone of voice, our approach, grammar and mechanics, and more. Read the content style guide.

For editors

In this section

While we encourage and equip our writers to succeed by themselves in editing quests, tpyos are inevitable. Here's where the Fleet editor steps in.

The following is our handy guide to editor bliss at Fleet, but first, let's start by listing common content types that require an editor pass.

  • Docs and Handbook pages.
  • Articles, release posts, and press releases.
  • Social media posts.

How to make edits with GitHub

Our handbook and docs pages are written in Markdown and are editable from our website (via GitHub). Follow the instructions below to propose an edit to the handbook or docs.

  1. Click the "Edit page" button from the relevant handbook or docs page on fleetdm.com (this will take you to the GitHub editor).
  2. Make your suggested edits in the GitHub editor.
  3. From the Propose changes dialog, at the bottom of the page, give your proposed edit a title and optional description (these help page maintainers quickly understand the proposed changes).
  4. Hit Propose change which will open a new pull request (PR).
  5. Request a review from the page maintainer, and finally, press “Create pull request.”
  6. GitHub will run a series of automated checks and notify the reviewer. At this point, you are done and can safely close the browser page at any time.

Keep PR titles short and clear. E.g., "Edit to handbook Product group"

Check the “Files changed” section on the Open a pull request page to double-check your proposed changes.

How to edit recently merged pull requests for the handbook

We approach editing retrospectively for pull requests (PRs) to handbook pages. Remember our goal above about moving quickly and reducing time to value for our contributors? We avoid the editor becoming a bottleneck for merging quickly by editing for typos and grammatical errors after-the-fact. Here's how to do it:

Note: Contributors are not required to request reviews from editors for handbook changes.

  1. Check that the previous day's edits are formatted correctly on the website (more on this in the note below.)
  2. Use the Handbook history feed in GitHub to see a list of changes made to the handbook.
  3. From the list of recently merged PRs, look at the files changed for each and then:
  • Scan for typos and grammatical errors.
  • Check that the tone aligns with our Communicating as Fleet guidelines and that Grammarly's tone detector is on-brand.
  • Check that Markdown is formatted correctly.
  • Remember, Do not make edits to this page. It's already merged.
  1. Instead, navigate to the page in question on the website and submit a new PR to make edits - making sure to request a review from the maintainer of that page.
  2. Comment on the original PR to keep track of your progress. Comments made will show up on the history feed. E.g., "Edited, PR incoming" or "LGTM, no edits required."
  3. Watch this short video to see this process in action.

Note: The Fleet website may render Markdown differently from GitHub's rich text preview. It's essential to check that PRs merged by the editor are displaying as expected on the site. It can take a few minutes for merged PRs to appear on the live site, and therefore easy to move on and forget. It's good to start the ritual by looking at the site to check that the previous day's edits are displaying as they should.

How to edit Markdown pull requests for the docs

  • When someone creates a pull request for a doc that affects Markdown files, theyll need to request a review from the editor.
  • If no edits are needed, the editor will merge the PR.
  • If an edit changes the meaning, or if unsure, the editor should request a review from the on-call engineer and remove themselves as a reviewer.

How to edit articles, release posts, and press releases

Editing articles, release posts, and press releases usually comes in three flavors: a Google Docs draft, a new pull request, or an edit to an existing article.

How to edit social media posts

In the world of the Fleet editor, there are two types of social media posts; those scheduled to be published and those published already.

Refer to Posting on social media as Fleet for details on editing draft social media posts.

Making edits to published social media posts gets a little tricky. Twitter, for example, doesn't allow editing of tweets, so the only way to make an edit is to remove the tweet and post it again.

  1. Post the tweet in the #g-marketing Slack channel and tag the Brand team lead.
  2. Decide whether to remove the tweet. There's a tradeoff between us striving for perfection vs. losing the engagements that the tweet may have already generated.
  3. Suggest edits in the Slack thread for the Marketing team to include and re-post.

Commonly used terms

If you find yourself feeling a little overwhelmed by all the industry terms within our space, or if you just need to look something up, our glossary of commonly used terms is here to help.

Brand resources

To download official Fleet logos, product screenshots, and wallpapers, head over to our brand resources page.

See also https://fleetdm.com/handbook/community#press-releases for our press-release boilerplate.

Email blasts

Do you need to send out a branded email blast to multiple recipients?

The manual way

Use "bcc" so recipients don't see each other's email addresses and send an email manually using Gmail. (Good for small lists. This is definitely a "thing that doesn't scale.")

The automated way

  • First, design the email and content. The preferred method is to base the design on one of our existing email templates in Figma. If your Figma boots aren't comfortable (or you don't have edit access), your design could be a Google Drawing, Doc, or just a sketch on paper in a pinch.

  • Bring your request to the Brand team by posting it in their primary Slack channel, along with your urgency/timeline. The Brand team will finalize the design and language for consistency, then fork and customize one of the existing email templates for you, and write a script to deliver it to your desired recipients. Then, the Brand team will merge that, test it by hand to make sure it's attractive and links work, and then tell you how to run the script with e.g.;

    sails run deliver-release-announcement --emailAddresses='["foo@example.com","bar@example.com"]'

Newsletter emails

The content for our newsletter emails comes from our articles. Because our HTML emails require that the styles are added inline, we generate HTML emails by using a script and manually QA them before sending them out to subscribers.

Generating emails for the Fleet newsletter

To convert a Markdown article into an email for the newsletter, you'll need the following:

Once you have the above follow these steps:

  1. 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.

  1. Run the build-html-email script and pass in the filename of the Markdown article you would like to convert with the --articleFilename flag.
  • With Node, you will need to use node ./node_modules/sails/bin/sails run build-html-email to execute the script. e.g., node ./node_modules/sails/bin/sails run build-html-email --articleFilename="fleet-4.19.0.md"
  • With Sails.js installed globally you can use sails run build-html-email to execute the script. e.g., sails run build-html-email --articleFilename="fleet-4.19.0.md"

Note: Only Markdown (.md) files are supported by the build-html-email script. The file extension is optional when providing the articleFilename.

  1. Once the script is complete, a new email partial will be added to the website/views/emails/newsletter-partials/ folder.

Note: If an email partial has already been created from the specified Markdown article, the old version will be overwritten by the new file.

  1. Start the website server locally to preview the generated email. To test the changes locally, open a terminal window in the website/ folder of the Fleet repo and run the following command:
  • 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.
  1. With the server lifted, navigate to http://localhost:2024/admin/email-preview and login with the test admin user credentials (email:admin@example.com pw: abc123).

Click on the generated email in the list of emails generated from Markdown content and navigate to the preview page. On this page, you can view the see how the email will look on a variety of screen sizes.

When you've made sure the content of the email looks good at all screen sizes, commit the new email partial to a new branch and open a pull request to add the file. You can request a review from a member of the digital experience team.

Things to keep in mind when generating newsletter emails:

  • The emails will be generated using the Markdown file locally, any changes present in the local Markdown file will be reflected in the generated email.
  • HTML elements in the Markdown file can cause rendering issues when previewing the generated email. If you see a "Script error" overlay while trying to preview an email, reach out to Eric Shaw for help.
  • The filename of the generated email will have periods changed to dashes. e.g., The generated email partial for fleet-4.19.0.md would be fleet-4-19-0.ejs

Using Figma

We use Figma for most of our design work. This includes the Fleet product, our website, and our marketing collateral.

Which file should I use?

Fleet product All product design work is done in the Fleet EE (scratchpad) Figma doc. Check out the README for how to use this doc.

Fleet website. All website design work is done in the fleetdm.com (current, dev-ready) Figma file.

Design system. Shared logos, typography styles, and UI components can be found in Design system.

The Figma docs in Design System contain the master components that are referenced throughout all other Figma files. Use caution when modifying these components, as changes will be reflected in the master Fleet EE (scratchpad) and fleetdm.com (current, dev-ready) Figma docs.

Marketing assets. Product screenshots and artwork for social media, articles, and other marketing assets can be found in Collateral.

Looking for the official Fleet logo? Download it from: https://fleetdm.com/logos.

Fleet website

The Brand team is responsible for production and maintenance of the Fleet website.

Wireframes

Before committing anything to code, we create wireframes to illustrate all changes that affect the website layout and structure.

See Why do we use a wireframe first approach for more information.

Design reviews

We hold regular design review sessions to evaluate, revise, and approve wireframes before moving into production.

Design review sessions are hosted by Mike Thomas and typically take place daily, late afternoon (CST). Anyone is welcome to join.

Experimentation

In order for marketing to iterate rapidly we have created a process of experimentation. This will allow a small group of marketers to draft, review and publish a page or a flyer or an experiment without getting a series of approvals. Experiments should be short-lived, temporary things intended for a small audience. When an experiment succeeds it should immediately be turned into a part of Fleet'd rituals and then go through the proper wireframe-first approach.

Website experiments and landing pages should live behind /imagine url. Which is hidden from the sitemap and intended to be linked to from ads and marketing campaigns. Design experiments (flyers, swag, etc.) should be limited to small audiences (less than 500 people) to avoid damaging the brand or confusing our customers. In general, experiments that are of a design nature should be targeted at prospects and random users, never targeted at our customers.

Some examples of experiments that would qualify to get a rapid approach:

  • A flyer for a meetup "Free shirt to the person who can solve this riddle!"
  • A landing page for a movie screening presented by Fleet
  • A landing page for a private event
  • A landing page for an ad campaign that is running for 4 weeks.
  • An A/B test on product positioning
  • A giveaway page for a conference
  • Table-top signage for a conference booth or meetup

Estimation sessions

We use estimation sessions to estimate the effort required to complete a prioritized task.

Through these sessions, we can:

  • Confirm that wireframes are complete before moving to production
  • Consider all edge cases and requirements that may have been with during wireframing.
  • Avoid having the engineer make choices for “unknowns” during production.
  • More accurately plan and prioritize upcoming tasks.
Story points

Story points represent the effort required to complete a task. After accessing wireframes, we typically play planning poker, a gamified estimation technique, to determine the necessary story point value.

We use the following story points to estimate website tasks:

Story point Time
1 1 to 2 hours
2 2 to 4 hours
3 1 day
5 1 to 2 days
8 Up to a week
13 1 to 2 weeks

When can I merge a change to the website?

When merging a PR to master, remember that whatever you merge to master gets deployed live immediately. So if the PR's changes contain anything that you don't think is appropriate to be seen publicly by all guests of fleetdm.com, please do not merge.

Merge a PR (aka deploy the website) when you think it is appropriately clean to represent our brand. When in doubt, use the standards and quality seen on existing pages, ensure correct functionality, and check responsive behavior - starting widescreen and resizing down to ≈320px width.

How can I test changes to the website?

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:

Once you have the above follow these steps:

  1. 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.

  2. 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.

    You can use the --skipGithubRequests flag to skip requests made to GitHub if you get rate-limited by GitHubs API while running this script.

    e.g., node ./node_modules/sails/bin/sails run build-static-content --skipGithubRequests

  1. Once the script is complete, start the website server. From the website/ folder:
  • 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.
  1. When the server has started, the Fleet website will be availible at http://localhost:2024

Note: Some features, such as Fleet Sandbox, Self-service license dispenser, and account creation are not availible when running the website locally. If you need help testing features on a local copy, reach out to @eashaw.

How to export images for the website

In Figma:

  1. Select the layers you want to export.
  2. Confirm export settings and naming convention:
  • Item name - color variant - (CSS)size - @2x.fileformat (e.g., os-macos-black-16x16@2x.png)
  • 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.
  1. Click the Export button.

Maintaining browser compatibility

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 report, and assign them for fixing.
  • If in doubt about anything regarding design or layout, please reach out to the Design team.

Responding 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.
Incident post-mortems

When conducting an incident post-mortem, answer the following three questions:

  1. Impact: What impact did this error have? How many humans experienced this error, if any, and who were they?
  2. Root Cause: Why did this error happen?
  3. Side effects: did this error have any side effects? e.g., did it corrupt any data? Did code that was supposed to run afterward and “finish something up” not run, and did it leave anything in the database or other systems in a broken state requiring repair? This typically involves checking the line in the source code that threw the error.

The "Deploy Fleet Website" GitHub action failed

If the action fails, please complete the following steps:

  1. Head to the fleetdm-website app in the Heroku dashboard and select the "Activity" tab.
  2. Select "Roll back to here" on the second to most recent deploy.
  3. Head to the fleetdm/fleet GitHub repository and re-run the Deploy Fleet Website action.

Vulnerability monitoring

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.

How to make usability changes to the website

We want to make it easy to learn how to manage devices with Fleet. Anyone inside or outside the company can suggest changes to the website to improve ease of use and clarity.

To propose changes:

  1. Decide what you want to change. A small change is the best place to start.
  2. Wireframe the design. Usually, the Brand team does this, but anyone can contribute.
  3. Present your change to the website DRI. They will approve it or suggest revisions.
  4. Code the website change. Again, the Brand team often does this, but anyone can help.
  5. Measure if the change made it easier to use. This can be tricky, but the marketing team will have ideas on how to do this.

Cloudflare

We use Cloudflare to manage the DNS records of fleetdm.com and our other domains. Cloudflare offers a free, user-friendly, and cloud-agnostic interface that allows authorized team members to manage all our domains easily. If you need access to Fleet's Cloudflare account, please ask the DRI Zach Wasserman in Slack for an invitation.

To make DNS changes in Cloudflare:

  1. Log into your Cloudflare account and select the "Fleet" account.
  2. Select the domain you want to change and go to the DNS panel on that domain's dashboard.
  3. To add a record, click the "Add record" button, select the record's type, fill in the required values, and click "Save". If you're making changes to an existing record, you only need to click on the record, update the record's values, and save your changes.

Rituals

The following table lists the Marketing, Brand, and Community group's rituals, frequency, and Directly Responsible Individual (DRI).

Ritual Frequency Description DRI
Daily tweet Daily Post Fleet content on Twitter Drew Baker
Daily LinkedIn post Daily Post Fleet content to LinkedIn Drew Baker
Check Twitter messages Daily Check and reply to messages on the Fleet Twitter account, and disregard requests unrelated to Fleet Drew Baker
Social engagement Weekly Participate in 50 social media engagements per week Drew Baker
Osquery jobs Weekly Post to @osqueryjobs twice a week Drew Baker
Enrich Salesforce leads Weekly Follow the Salesforce lead enrichment process every Friday Drew Baker
Outside contributions Weekly Check pull requests for outside contributions every Monday Drew Baker
Weekly article Weekly Publish an article and promote it on social media Drew Baker
Missed demo follow up Weekly Email all leads who missed a scheduled demo Andrew Bare
Weekly ins and outs Weekly Track marketing team ins and outs Jarod Reyes
Podcast outreach Weekly Conduct podcast outreach twice a week Drew Baker
Weekly update Weekly Update the marketing KPIs in the "🌈 Weekly updates" spreadsheet Drew Baker
Update the "Release" field on the #g-marketing board Every 3 weeks
  • Go to the marketing board
  • add a 3-week iteration with the correct release number
Jarod Reyes
Monthly conference checks Monthly Check for conference openings and sponsorship opportunities on the 1st of every month Drew Baker
Freshen up pinned posts Quarterly Swap out or remove pinned posts on the brand Twitter account and LinkedIn company page Drew Baker
Documentation quality On request Review pull requests to the docs for spelling, punctuation, and grammar Chris McGillicuddy
Handbook quality Daily Review pull requests to the handbook for spelling, punctuation, and grammar Chris McGillicuddy
Tweet review Daily Review tweets for tone and brand consistency Mike Thomas
Article review Weekly Review articles for tone and brand consistency Mike Thomas
Article graphic Weekly Create a graphic for the weekly article Mike Thomas
Brand planning Three weeks Prioritize and assigns issues to relevant personnel based on current goals and quarterly OKRs Mike Thomas
OKR review Three weeks Review the status of current OKRs Mike Thomas
Handbook editor pass Monthly Edit for copy and content Chris McGillicuddy
Browser compatibility check Monthly Check browser compatibility for the website Eric Shaw
OKR planning Quarterly Plan next quarter's OKRs Mike Thomas
Website vulnerability check Weekly Checking for vulnerabilities on fleetdm.com Eric Shaw
Updating the extended osquery schema Three weeks Running the generate-merged-schema script and committing the merged schema json to the Fleet GitHub repo Eric Shaw
Community Slack Daily Check Fleet and osquery Slack channels for community questions, make sure questions are responded to and logged Kathy Satterlee
Social media check-in Daily Check social media for community questions and make sure to respond to them. Generate dev advocacy-related content Kathy Satterlee
Issue check-in Daily Check GitHub for new issues submitted by the community, check the status of existing requests, and follow up when needed Kathy Satterlee
Outside contributor follow-up Weekly Bring pull requests from outside contributors to engineering and make sure they are merged promptly and promoted Kathy Satterlee
Documentation update Weekly Turn questions answered from Fleet and osquery Slack into FAQs in Fleets docs. Kathy Satterlee
StackOverflow Weekly Search StackOverflow for “osquery,” answer questions with Grammarly, and find a way to feature Fleet in your StackOverflow profile prominently Rotation: Community team

Roadmap

https://github.com/orgs/fleetdm/projects/37

Slack channels

These groups maintain the following Slack channels:

Slack channel DRI
#g-marketing Jarod Reyes
#help-public-relations Jarod Reyes
#help-promote Jarod Reyes
#help-swag Drew Baker
#oooh-websites Mike Thomas
#help-p1 Mike McNeil