merging in material that will be folded in

This commit is contained in:
2021-08-03 21:48:37 -05:00
parent ca1e9cebd4
commit e6f1eae94f
71 changed files with 5990 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
---
title: Customer Support
sidebar: Handbook
showTitle: true
---
## We aim to delight
You can build a good company by focusing on getting lots of customers. To build a great company, you must delight your existing customers. This means that the journey doesn't simply end once we sign up a user - even more important is to ensure that PostHog is consistently delivering value for them.
## How we ensure customer delight at PostHog
### It's easy for customers to reach us
We have a few different routes for users to contact us. As an open source company, our bias is towards increasing the bandwidth of communication with our users and making it easy for them to reach us. We do not believe in putting up barriers by saying they can only reach us through a dedicated support email address, for example.
These are the ways in which customers can currently reach us, in order of popularity:
- **Slack** - our active [PostHog Users Slack](https://posthog.com/slack) community frequently post questions
- **Email** - a user may email hey@posthog.com with a specific support query
- **Papercups** - we provide in-app support chat via the [Papercups](https://papercups.io/) widget
- **GitHub** - sometimes users ask about the progress of [certain issues](https://github.com/PostHog/posthog) that are important to them
### No dedicated support people
We intentionally have not hired a single person dedicated to customer support. The direct interaction between our engineering team and our users is _hugely_ valuable, and an important part of building trust in our community is the ability for users to talk directly with the people who are actually building the product.
Providing support is a responsibility shared across our team - we expect everyone to jump in and help a user if you see they have a question or problem (though obviously not at the same time!) Once you have made the initial contact or response, it is your responsibility to see it through or explicitly hand over to someone else if they are better-equipped to help.
This does mean sometimes that, especially when we are particularly busy, customer success can take a bit of a back seat.
This is why, in addition, one person takes on the **Support Hero** role each two week sprint. This is a rotating responsibility, where the person involved spends a significant chunk of their time responding to support queries across Slack, email and Papercups, and sharing that feedback with the team and/or building features and fixes in response. We have found that each stint as Support Hero has thrown up a lot of really valuable feedback.
### Simple, lightweight tools
We go to where our users are. That means **we respond in the same channel that they reached out to**, rather than trying to funnel them somewhere else.
We use [Papercups](https://papercups.io/) as our internal platform to get an overview of our support requests. This ensures that we don't miss anyone, especially when their request is passed from one person to another at PostHog, or if they message us over the weekend. If customer success is part of your role, you should have received an invite to join as part of your onboarding - if you didn't, ask Charles.
The first time you sign into Papercups, please make sure you include your name and [profile picture](https://posthog.com/handbook/company/team) so our users know who they are chatting to!
A quick overview of Papercups' main features:
- _Main conversations view_: when you sign into Papercups, you can either [view all conversations](https://app.papercups.io/conversations/all), or just those [assigned to you](https://app.papercups.io/conversations/me). If you are the first person to respond to a query, you will be automatically assigned that conversation. Don't forget to close a conversation by ticking the box in the top right when you are done, so we know which queries have been resolved!
- _Slack integration (1)_: You can reply directly to PostHog app questions either in the Papercups app itself or in the private _customer support_ channel in the [PostHog Users Slack](http://posthog.com/slack) - both work.
- _Slack integration (2)_: In the PostHog Users Slack, messages posted in the _general_ and _feedback_ channels are also synced with the Papercups app. As above, this means you can reply to users in that Slack channel directly or in Papercups. Please try to reply in a Slack thread to any questions. This makes it easier for other users to navigate the channel without a lot of noise, and also prevents Papercups creating a new conversation for each response (as Papercups treats each thread in Slack as a conversation).
- _Email integration_: Any emails that come into hey@ get synced with Papercups and Slack, so you can reply on either of those platforms, or directly to the email. If you reply via email, please make sure you at least bcc hey@ so we know that someone has responded!
- _Notes_: You can leave a 'Private Note' in the right hand pane in Papercups if you need to make a note of something for future reference, e.g. a relevant GitHub issue.
- _Sharing_: If you click 'Share Conversation' at the bottom of the right hand pane in the Papercups app, you can link directly to a conversation. This is useful for sharing context with other team members.
- _Analytics_: 'Reporting' in the left hand panel shows some interesting analytics, such as how many queries we're receiving, average response time etc. We don't report on these yet as we're still figuring out the best way for us to do support.
Papercups are an open source company, so if there are any additional features you'd like to see then you can check out their [repo on GitHub](https://github.com/papercups-io/papercups/issues). They are building new features quickly, so it's worth checking in to see what new functionality is available from time to time.
## Some useful questions to ask
The below questions are evolving so please add more as they come up!
### Set up
- Has the customer logged in?
- Has the customer added their team?
- Are events coming into the platform on a recurring basis?
- Are identify calls being made so user profiles are being created?
- Are additional relevant user properties being sent?
- Has the customer set up actions?
- Has the customer set up funnels?
- Has the customer created or modified a dashboard?
- Has the customer used the toolbar?
- Has the customer gotten PostHog into production?
- If applicable, has the customer removed any test data?
- If applicable, is the customer using feature flags?
### Training and support
- Does their team have enough general product analytics experience?
- Has their team received a demo of the product?
- Has everyone on the team used the product at least once?
- Does the customer's team know where to find our use case guides?
- Have we told the customer where to get support?
- Have we set up a joint Slack channel with the customer?
### Providing more value over time
- Have we added their whole team to our email newsletter?
- Are we monitoring the customer's usage on a dashboard at a team level?
- Is the customer generally above 80% usage for their current plan?
- Have we set up a quarterly catchup with the customer to talk about roadmap/issues/expansion?
- Has their team had a good experience asking for help or reporting issues to us?
- Is the customer using PostHog on a weekly / monthly basis?

View File

@@ -0,0 +1,61 @@
---
title: Blog
sidebar: Handbook
showTitle: true
---
The [blog](/blog) is for telling PostHog stories and updates around our product positioning.
Accessible content with jokes, memes and gifs have done well.
## Successful Hacker News topics
A successful post on Hacker News can currently increase traffic by 5-10%.
Stories about PostHog's early hustling days have done well.
- Feb 20, 2020 [Launch HN: PostHog (YC W20) open-source product analytics](https://news.ycombinator.com/item?id=22376732)
- Feb 28, 2020 [Our experience moving to SF to do YC](https://posthog.com/blog/moving-to-sf/)
- Jun 2020 [How we raised $3M for an open source project](https://posthog.com/blog/raising-3m-for-os)
- Jan 2020 [A story about pivots](https://posthog.com/blog/story-about-pivots)
## Future topic areas
We want to start writing stories about our team, customers and community.
To view and contribute blog post ideas join our #ideas-for-blog-post Slack channel.
Todo: organize the blog post ideas into topic categories and priority list.
## Publishing
Submit a PR to [posthog/posthog.com](https://github.com/posthog/posthog.com) with the following content:
- with a new Markdown file (md, mdx) in `/contents/blog/`
- any assets [optimized]((/docs/updating-documentation)) and added to a new folder under `contents/images/blog/`
- the post added to relevant sidebar in `src/sidebars/sidebars.json`
Create an annotation on [app.posthog.com](https://app.posthog.com) for the content to track the effect.
Share the live content with out PostHog Users Slack group first, in the `#editorial` channel.
Arrange further promotion via the newsletter, social channels and 3rd party communities.
## PostHog Array
The PostHog Array is our product release series.
It's named the PostHog Array, because hedgehogs are collectively known as an *array* of hedgehogs.
Yakko adds new items to the Array ;) by gathering changes and highlights from PRs and the engineering team.
Each array includes:
- a community MVP
- a summary of new features, improvements and fixes
- important announcements e.g. deprecations
- detailed overview of each change with an image/video
- community shoutout for other contributors
- open roles
- complete list of PRs included
Before merging and distributing the release post, check with Tim that the new version has been released.

View File

@@ -0,0 +1,95 @@
---
title: Community
sidebar: Handbook
showTitle: true
---
See [./](Marketing) for community goals.
## Replying to the community
- Be kind, concise and direct
- Do not promise delivery dates
- Ask people to create GitHub issues for bugs and feature requests
- Provide a links to relevant GitHub issues and/or pull requests
## Discussions
Questions to consider about the platforms we use:
- Does it align with our mission and values, e.g. open source and its implications
- Does it exclude people
- How does it compare in terms of accessibility
- How does it compare in terms of ease of use
### Chat/Forum
We use Slack for our [community chat](https://posthog.com/slack) and share new content in *#editorial* before other non-Slack channels.
### GitHub
Community discussions can take place in GitHub issues and pull requests.
The engineering team can people in rather than having to following everything.
### Social
Speak to James for access.
**Channels:**
- [Twitter](https://twitter.com/posthoghq)
- [LinkedIn](https://www.linkedin.com/company/posthog/)
- [YouTube comments](https://www.youtube.com/channel/UCn4mJ4kK5KVSvozJre645LA)
**Content sources:**
- Original content from our blog, YouTube, GitHub and other channels
- Reply to discussions on our content
- Engage with wider community topics TBD
**Communities:**
Discuss sharing specific content with relevant communities:
- Startup School
- Hacker News
- Indie Hackers
- Reddit:
- [/r/analytics](https://www.reddit.com/r/analytics/)
- [/r/businessintelligence](https://www.reddit.com/r/businessintelligence/)
- [/r/opensource](https://www.reddit.com/r/opensource/)
- [/r/programing](https://www.reddit.com/r/programing/)
- [/r/python](https://www.reddit.com/r/python/)
- [/r/django](https://www.reddit.com/r/django/)
- [/r/startups](https://www.reddit.com/r/startups/)
- [/r/entrepreneur](https://www.reddit.com/r/entrepreneur/)
- [/r/business](https://www.reddit.com/r/business/)
- [/r/marketing](https://www.reddit.com/r/marketing/)
- [/r/dataisbeautiful](https://www.reddit.com/r/dataisbeautiful/)
### Events
Speak to James for access.
We use Eventbrite to organize events.
### Contributors
We created a [contributors platform](https://posthog.com/contributors) to recognize the community's work.
Merch is automatically awarded to people who contribute to any PostHog repos.
Notable PRs can be manually tagged with `extra merch` to reward large contributions.
### Merch
Speak to James, Yakko or Paolo for access.
We use Shopify for our [merch store](https://merch.posthog.com).
Note: a large portion of the vouchers will cover shipping.
### Orbit
We use [Orbit](https://app.orbit.love) for community analytics.

View File

@@ -0,0 +1,141 @@
---
title: Overview
sidebar: Handbook
showTitle: true
---
**The Marketing/Acquisition Team**
Philosophy: Be kind, concise and direct.
## Product positioning
An **open source product analytics platform** addresses the lack of choice and control amongst disconnected analytics solutions by offering a **unified platform** with **control** over hosting, pricing, source, data, privacy and security.
**Free PostHog** is positioned to solve product analytics problems for small non-enterprise teams.
**Enterprise PostHog** is positioned to solve product analytics problems for larger teams and enterprises.
**PostHog Cloud** is positioned to service clients who need less control.
**PostHog Self Hosted** is positioned to service clients who need more control.
## Target audience
*Innovative technical teams*, more commonly found in startups, who care about:
- a unified product analytics platform
- open source
- control: hosting, pricing, source, data, privacy and security
We will expand to non-technical teams when we have achieved technical awareness saturation.
### Goal 1: User acquisition
Increase:
- Open source self hosted installs
- Tracked in [AARRR dashboard](https://app.posthog.com/dashboard/2973)
- Page views tracked in [Marketing dashboard](https://app.posthog.com/dashboard/2881)
- Premium self hosted leads
- Todo: needs consolidated tracking
- Free cloud signups
- Todo: needs consolidated tracking
- Premium cloud signups
- Todo: needs consolidated tracking
### Goal 2: Community growth
Increase:
- GitHub stars
- Tracked in Orbit
- GitHub contributors
- Tracked in Orbit
- GitHub contributions
- Todo: needs consolidated tracking
- Plugin contributions
- Todo: needs consolidated tracking
See [Community](./marketing/community) for community function.
### Requirements
#### Achieve complete tracking
Tracking marketing efforts that contribute to acquisition and growth.
Going beyond marketing, tracking through the funnel to improve targeting.
#### Reduce effort to contribute
Reduce the actions, time or complexity for us and our community to contribute.
#### Reduce acquisition cost
Reduce cost to acquire users and grow our community.
## Functions
Functions that contribute more to *Acquisition* than another metrics are owned by Marketing.
Documentation contributes more to *Activation* and *Retention* than *Acquisition*. Marketing is a stakeholder in coverage and completeness.
*Activation* and *Retention* contribute more to *Referral* than *Acquisition*.
- Product marketing:
- research: market, competitor
- product positioning
- buyer personas
- messaging: website, careers, channel bios, README.md
- Content marketing:
- [Blog](./marketing/blog): product releases, stories (team, product, customer)
- Audio: audio stories, podcast series
- [Video](https://www.youtube.com/channel/UCn4mJ4kK5KVSvozJre645LA): video stories, vlog series, showcases, tutorials
- [Newsletter](./marketing/newsletter): general, investor
- Handbook: team, culture
- [Community](./marketing/community):
- social: Twitter, LinkedIn
- discussions: Slack, HN, StartupSchool, Reddit
- [onboarding](https://posthog.com/handbook/growth/sales/yc-onboarding): YC startups
- events: online, in-person
- networking: open source, analytics
- sponsorship: open source
- [Press](./marketing/press):
- relationships
- announcements
- media packs
- [Paid](./marketing/paid):
- search
- social
- communities
- newsletters
- websites
- podcasts
- events
- video
- Technical:
- reporting
- tracking
- tooling
- SEO
- Design:
- visual identity
- web properties
- channels
### Team
Prioritizing hiring for functions based on acquisition success and capacity in relation to other functions.
- Product marketing: currently hiring
- Content marketing: Mo
- Community: hiring next
- Press: 2022
- Paid: 2022
- Technical: hiring next
Design provided as a service by the Design team.

View File

@@ -0,0 +1,33 @@
---
title: Newsletter
sidebar: Handbook
showTitle: true
---
Speak to James or Yakko for access.
We use Mailchimp for our newsletter.
## Lists
### Newsletter
Our general list which grows from:
- Newsletter signups from the website
- PostHog users who opt-in
- Event attendees
Sean sends a newsletter after every product release (2-4 weeks) and include a summary of the new version and and recent news.
We aim to include at least one new blog post in every newsletter.
Use few links and emojis, and 1-2 images.
Users are automatically tagged to indicate where they came from e.g. Newsletter Subscribers, Deployed Posthog, Eventbrite, etc.
### Investors
List of interested investors.
James manually manages this list.

View File

@@ -0,0 +1,27 @@
---
title: Paid
sidebar: Handbook
showTitle: true
---
We are running limited ads at the moment and will dedicate more resources after improving product marketing and various metrics.
Todo: create a database of tactics and success.
## Platforms
### Twitter
We actively use Twitter Ads with a small budget for awareness.
### Google Ads
We actively use Google Ads with a tiny budget to capture PostHog search keywords.
### Reddit
We've used Reddit for campaigns.
### LinkedIn
We've used LinkedIn for campaigns and hiring.

View File

@@ -0,0 +1,71 @@
---
title: Press
sidebar: Handbook
showTitle: true
---
## Press enquiries
Any press-related enquiries should be directed to press@posthog.com. Only James, Tim or Charles should be talking to the press on PostHog's behalf. If someone from the press approaches you, please raise with one of them in the first instance.
## Managing press releases
From time to time, we may have significant company news that we want to release via the press, in addition to our usual channels. This is usually for significant company milestones such as funding rounds.
We have a simple process to ensure that any press releases go smoothly.
### First steps
- [ ] Write up objectives and comms strategy - what is the purpose of the press release? What key message(s) are we trying to get across?
- [ ] Set an approximate target date
### Two weeks before release
- [ ] Confirm key messages and write first draft press release
- [ ] Finalize target date
- [ ] Pitch and secure a media exclusive - our investors can help with this
- [ ] Secure approval for any third party involvement, e.g. quotes we want to use
We currently prefer working with a single media partner on an exclusive basis, as we believe a single, high-quality story is more impactful than taking a broad approach, given our current early stage.
### One week before release
- [ ] Finalize press release and share with exclusive media partner
- [ ] Any media prep if interviews have been scheduled
### On the day of release
- [ ] *Wait for the media partner's story to go live first!* Check it carefully and ask for any errors to be amended before proceeding with the below...
- [ ] Push out the press release via BusinessWire
- [ ] Submit via YC's social media request from
- [ ] James to post on his personal LinkedIn (and tag all relevant people)
- [ ] Post in our PostHog Users Slack
- [ ] Post in YC Slack
- [ ] Write post on our blog about the news
- [ ] Post on PostHog Twitter (and tag all relevant people)
- [ ] Share links to all of the above to the PostHog team so they can share
## Press release template
Include media and quotes from James, Tim or influential people.
```
# Headline
News
## About PostHog
PostHog is an open source, product analytics platform. PostHog enables software teams to understand user behavior auto-capturing events, performing product analytics and dashboarding, enabling video replays, and rolling out new features behind feature flags, all based on their single open source platform. The products open source approach enables companies to self-host, removing the need to send data externally.
Founded in 2020 by James Hawkins and Tim Glaser, PostHog was a member of Y Combinators Winter 2020 batch, and has subsequent raised $12m in funding from GV, Y Combinator and notable angel investors including Jason Warner (CTO, GitHub), Solomon Hykes (Founder, Docker) and David Cramer (Founder, Sentry).
## About Y Combinator Continuity Fund
YC Continuity is an investment fund dedicated to supporting founders as they scale their companies. Our primary goal is to support YC alumni companies by investing in their subsequent funding rounds, though we occasionally invest in non-YC companies as well.
Like YCs early-stage partners, the entire YC Continuity team has strong operating experience. We work to create opportunities for founders to continue their personal growth and scale their companies successfully.
We also run the YC Growth Program, which brings together founder-CEOs who are leading rapidly growing companies.
```

View File

@@ -0,0 +1,22 @@
---
title: Releasing Content
sidebar: Handbook
showTitle: true
---
<br />
We aim to regularly publish content in the form of videos and articles as part of providing value [to build a big community](content).
As a result, we have formulated a loose strategy for how to approach publishing the content produced once it is ready to be exposed to the world.
#### Suggested Workflow
1. If the content requires a visual element, create a [design request](https://posthog.com/handbook/company/working-with-design) (more than 24 hours in advance) to have a graphic produced. For example, if the content is a YouTube video, we'll make a thumbnail image. If it's a blog post, we'll create a post image that is featured at the top of the post.
1. Make sure the content is actually live: If it is an article, ensure that the changes are reflected on the website following the merge of the pull request, which might take 10 to 30 minutes.
1. Post a link to the article/video on our `#editorial` channel in the PostHog Users Slack group. This group should always the first to hear about new content.
1. Include the article in the **body** of an email and schedule it to be sent the next day via Mailchimp to people in the 'PostHog Newsletter' audience.
1. Schedule a tweet to be posted 1-2 days later with a link to the content.
1. Consider making a post on HackerNews on the same day as the content goes live on Twitter. Not all posts should go on HN, only the ones that make sense for that specific audience. Videos generally do not do well on HackerNews, for example.
1. Evaluate if the content can also benefit from being published in other mediums, such as LinkedIn, Reddit, or Medium. If unsure, you're generally better to publish it and see what happens.
1. Create an annotation on [app.posthog.com](https://app.posthog.com) about the content release, so that we can determine if it was the cause of any changes in our metrics.

View File

@@ -0,0 +1,105 @@
---
title: Billing
sidebar: Handbook
showTitle: true
---
## Managing billing
This handbook section is sort of the operation manual for the billing engine. If you're looking for the technical details or need to troubleshoot something check out the relevant [tech docs](https://github.com/PostHog/posthog-cloud#additional-docs)
### Self-hosted
For customers with special pricing (i.e. very large volumes or Enterprise & Supported plans), we need to manually set up the billing information on the system. This page contains instructions for setting up billing. Please note this page covers the process after an official PostHog quote has been approved by the customer. For information before this stage, please refer to the [Sales](/handbook/growth/sales/sales-operations) section of the handbook. Contrary to cloud plans, **all self-hosted _paid_ plans must be manually prepared today** (i.e. there's no self-serve option yet). To set up billing for self-hosted, please follow these instructions:
#### Pre-setup
This process only needs to happen once.
1. Download the Postman collection from [license][license].
1. Open the collection & set up the required environment variables (per the instructions on the repo).
1. To test that everything is working as expected go to the "List licenses" request and make sure you get a 200 status code.
#### Setting up a subscription
1. Log in to the [Stripe dashboard](https://dashboard.stripe.com/customers) and go to customers.
1. Tap on New and fill out the form. At minimum please provide the customer's email address. However, it's recommended to add as much information as possible to make ongoing maintenance easier. It is particularly recommended to add the customer's Hubspot ID in the metadata section with a `hubspot_record` key (you need to save the customer record first).
1. Copy the customer ID from the Stripe dashboard (it starts with `cus_`).
1. Open the Postman collection and go to the "Create license [all options]" request.
1. If you don't have the price ID of the plan you can obtain it from the [products page](https://dashboard.stripe.com/products). Be sure to copy the **price ID, not the plan ID** (it should start with `price_`).
1. On the body section, adjust the appropriate parameters (for details on the parameters check out the [license][license] repo),
```json
{
"valid_until": "2021-06-01T00:00:00.000000Z", // Timestamp (UTC) of when the license should expire (this won't affect the ongoing subscription agreement)
"plan": "enterprise",
"client_name": "Company, Inc.",
"client_contact": "John Doe",
"billing_email": "customer@example.com",
"stripe_customer_id": "cus_iwdnHIV5",
"stripe_price_id": "price_1HIbh9QhdPP",
"coupon_id": "qthElB", // Optional (ID coupon for special pricing)
"trial_end": "2021-01-22T00:00:00.000000Z" // Timestamp (UTC) of when the trial should end
}
```
1. After sending the request, make sure that Test Results show `(1/1)` (see below) and open the visualize tab. You should see a message like the one below with a link to set up billing. **Send that link to the customer** who can use it to enter their card details on their own.
![success license](../../../images/license-key-1.png)
1. Finally, go to the _pretty_ tab and you will see the license key for the user. You may share that key with the customer once they have activated their subscription. After [#10](https://github.com/PostHog/license/issues/10) when the activation process happens automatically, you may share the license key with the customer immediately.
#### Activate subscription
As a customer, to redeem a license key:
1. Go to the license page in your PostHog instance. `<your url>/instance/licenses`.
1. Enter the received license key in the input.
1. Tap on activate license key and you are good to go.
### Cloud billing
Cloud billing may be set up using self-serve. For this, the new user just needs to go to the [organization billing](https://app.posthog.com/organization/billing) page and select one of the available plans (internally please note these plans must have both `is_active` and `self_serve` set to `True`). Billing can also be set up from account creation, by adding the `plan_key` as a query string parameter (e.g. `https://app.posthog.com/signup?plan=standard`), this is helpful for redirections from landing sites where a plan has already been selected.
For PostHog Team: to set up a billing agreement, please follow these steps.
1. Go to the [Django admin](https://app.posthog.com/admin/) and open the [Organization billing](https://app.posthog.com/admin/multi_tenancy/organizationbilling/) objects.
2. Search for the relevant user (either by name, company name, email or Stripe IDs).
3. Once you have the appropriate user, select the plan you want to assign to the organization.
4. In addition to the plan, be sure to check the "Should setup billing" checkbox and click save.
After this the user will be prompted in their app to enter their card details to initiate the billing agreement.
If you need to activate a plan bypassing actual billing on Stripe (this should be extremely rare!), just set up a `billing_period_ends` that is after today's date (and be sure that "Should setup billing" is not checked).
#### Non-profit organizations
We offer 50% discount to non-profit companies (see [pricing](/pricing#non-profits)). The activation process is as follows:
1. Non-profit company reaches out to PostHog, likely via email.
1. On our end we validate the company is eligible for the discount.
1. Validate the customer has signed up for the standard plan and completed the billing process. Easiest done in [Stripe dashboard][stripe_dashboard], look up the customer using the owner's email address. The Standard Plan subscription must be active **and** the customer must have a valid payment source on file.
1. On the customer page click on Actions, and then _Apply coupon_. Select coupon "Non-profit organization discount" (ID: `NxipELS0`)
1. Let the customer know via email.
#### Startup & YC plans
We offer [a deal](/handbook/growth/sales/yc-onboarding) for certain YC companies & other startups, while the details of this deal change periodically (and are documented in the main website and/or ops repo), here are the details on how to apply the plan for a company. Internally, these plans have special logic handling in the [posthog-cloud][posthog-cloud] repo. If our deal terms changes (current details detailed below), a new plan needs to be added. This custom logic is handled in `multi_tenancy/models.py#handle_post_card_validation`). Currently we only have one plan (`plan_key = startup`) which provides free billing for 1 year and a 20M monthly event allocation.
**How to apply it**
- Follow the steps above (Go to Django admin, find the relevant customer, ...).
- For the plan, you'll choose the custom startup plan, `plan_key = startup`. Be sure to check the `should_setup_billing` checkbox!
- Let the customer know they need to enter their card information at the prompt (shown on every page of the app).
- After they enter their card information successfully, the plan will be activated and the prompt will disappear. The plan will last for 365 days from the moment they confirm their card details.
**General structure & notes**
- The way this plan works internally is that it creates a checkout session with `mode = setup` and with a card pre-authorization charge instead of a subscription agreement. This way, we validate the card is active and it gets saved on Stripe for future use. When we receive confirmation the charge has been processed and the card saved (via the `payment_intent.amount_capturable_updated` webhook), we do the custom logic handling to enable the plan for 365 days.
- There's an issue, [posthog-cloud#92](https://github.com/PostHog/posthog-cloud/issues/92), with some details on tech debt / improvements to this flow.
#### Updating subscriptions
This section provides instructions for a PostHog team member to change subscriptions for a existing customer (e.g. if they want to upgrade/downgrade, move from legacy plans to standard plans, etc.)
1. Look up the customer on [Stripe dashboard][stripe_dashboard] using their email address or Stripe ID (this ID can be obtained from Django Admin too, under `OrganizationBilling` object).
1. Click on the customer's current subscription.
1. Click on _Update subscription_.
1. Remove the old item from the pricing table and add the new item.
1. Click on _Update subscription_. Do not schedule the update for a later time. There will be unintended side effects if the changes are not applied immediately.
1. Find the corresponding `OrganizationBilling` on [Django Admin](https://app.posthog.com/admin/multi_tenancy/organizationbilling/). You can look up by the same email address.
1. Update the **new billing plan and the new Stripe subscription item ID**. The subscription item ID starts with `si_` (not to be confused with a Subscription ID). This **ID will have changed**, the Subscription ID remains the same.
[license]: https://github.com/posthog/license
[posthog-cloud]: https://github.com/posthog/posthog-cloud
[stripe_dashboard]: https://dashboard.stripe.com/

View File

@@ -0,0 +1,73 @@
---
title: Demos
sidebar: Handbook
showTitle: true
---
## Giving Great Demos
Always focus on delivering what the customer needs. Sometimes that will mean sending them to a competitor or turning them down.
### Initial Call
The purpose of this call is to work out what the potential customer needs.
Dont be presumptive - ask why they reached out. Its often a very quick way to understand what they need, but there will likely be adjacent challenges you can also uncover.
You are trying to work out:
- Does the client prefer ease over saving money or vice versa?
- How should the client deploy (i.e. cloud or self-hosted with support). This will depend on their volume and price sensitivity.
- Does our functionality meet their use case? Would it be worth going ahead with what we have now?
- Is the client going to need us to do most of the work? If this is the case, support is really important e.g. because theyre growing very fast.
- How much analytics experience does the client have? More experience means you should focus more on how we are different, less experience means you should try to keep things simple.
As a rule, always understand the context behind the question - it may help you make further useful recommendations.
### Demo
#### Environment
When doing a demo of PostHog, you should prioritize using the following environments:
1. The client's own instance or PostHog Cloud account (if they have one **and** are OK with this).
This is the best way to do a demo because you can help the client with their exact needs and you show them how to do what they want with their own data, so they immediately see the value.
2. The [PostHog Demo Environment](https://playground.posthog.com)
The demo instance was designed to be an environment with a significant amount of "good" demo data that showcases the multiple features of PostHog and allows clients to log in and run the demo themselves (while following your instructions).
To run a demo on the demo environment, you should:
1. **Have access:** Ask Yakko or James to give you access if you don't have it.
2. **Invite the client to the instance:** Invite them to the instance so that they can have access themselves without you having to share credentials.
3. **Guide the client through a demo while they share their screen:** Take them for a spin of the product as you would do if you were the one navigating. But be patient, the client might want to click around and get a feel for PostHog, which is encouraged!
4. **Revoke their access at the end of the call:** After the call, revoke the client's access to the instance or ask Yakko to do it if you do not have permission.
3. A local environment
This is best if you have a good set of demo data locally. You can use some our management commands for data generation to do this.
4. PostHog Cloud
Only demo using PostHog Cloud (on the PostHog team account) if you really have to. Be careful not to expose sensitive data when doing the demo.
#### Guidance
Show the client the product. Pause frequently and make sure there are no questions. Ask if the functionality would help them.
Use this to confirm the benefits to the customer that PostHog needs to provide. If you are talking only about feature X does Y, then youre doing it wrong. "As a Product Manager, I may want to know 'X' about my users, this is how you do that."
### Follow Up
Keep this as quick as possible - if you can follow up immediately / on the same day, do it.
### Feature Requests
Sometimes client calls will highlight features that they would need which we dont have. Your first step is to work out if what we do will be valuable enough to move forward with. Avoid committing to new functionality unless youre already about to work on it. Its better to underpromise and overdeliver.
### Style
* Be passionate: "This is one of my favorite parts of the system", "the neat thing about X is Y"
* Social Proof: If your current users are using something, or if you built something for a really specific reason, let the client know (obviously without naming names). This helps people know they're not the first to use PostHog!

View File

@@ -0,0 +1,125 @@
---
title: Sales Operations
sidebar: Handbook
showTitle: true
---
## The Basics
We use [HubSpot](https://www.hubspot.com/) as our customer relationship management ('CRM') platform. If you need access, you can ask Charles or James H and they will send you an invite to create an account. 
As a first step, it is _really important_ that you [connect your personal PostHog Gmail account](https://app.hubspot.com/crm-settings-email/6958578/email/connectedEmails), so that if you start a conversation in HubSpot but continue it in Gmail, we'll have a complete record. This will also make it generally easier for you to sync contacts with HubSpot. 
You might also find it useful to install HubSpot's [Chrome extension](https://chrome.google.com/webstore/detail/hubspot-sales/oiiaigjnkhngdbnoookogelabohpglmd?hl=en), as it means you can manage most things directly in Gmail. 
As a general principle, we try to ensure as much customer communication as possible is captured in HubSpot, rather than in individual email inboxes, so that we make sure our users are getting a great experience (and not confusing or duplicate messages from different team members!). You should use the channel that suits the user, not us. Just make sure you keep Hubspot up to date with your interactions. We've seen much higher response rates on Slack than email. You can copy paste from there into Hubspot until we have a way to integrate the two.
Hubspot is a comprehensive tool with a lot of functionality, so we are currently focused on using a few core features well. You are most likely to use the following regularly:
- _Contacts_ - pretty straightforward, under 'Contacts'. You can create contacts manually, or sync with your Gmail.
- _Companies_ - also under 'Contacts'. You will also want to create a company record to associate with any contact (and you can associate multiple contacts with a single company). If you enter the company's domain name, HubSpot is pretty good at pulling in additional data to fill out the record. 
- _Inbox_ - this is under 'Conversations' and is where we deal with messages that come into our public-facing email addresses. New messages will come in as 'Unassigned' and then get assigned to someone.
- _Deals_ - under 'Sales'. This is where we manage our customers who are interested in an Enterprise or Startup plan and is the core of our sales ops process. 
- _Tasks_ - also under 'Sales'. This is a useful place to see a summary of all the tasks that you have created or that have been assigned to you. 
If you'd like to dig deeper, HubSpot have a ton of [documentation](https://knowledge.hubspot.com/) and resources that you can refer to as well.
## Managing our CRM
People currently come into HubSpot through one of 3 ways:
- They email hey@posthog.com, sales@posthog.com or another email address if we have created a custom one for a specific group
- They sign up to the PostHog app
- They are manually added to HubSpot by a member of the team, e.g. if you met someone interested in PostHog at an event
### Email
New conversations come into 'Unassigned', whereas ongoing conversations will go straight to your inbox.
We do not have super defined roles here, but generally:
- James H deals with Enterprise queries
- Yakko takes care of Startup queries
- Paolo focuses on existing customers
- Charles oversees sales ops and HubSpot admin
However, anyone can and should jump in if they can help or they see someone hasn't been responded to, especially when folks are on holiday!
We have lots of handy templates you can use as well - just select _Templates_ in the email window in Hubspot. If you find yourself sending the same type of email repeatedly, you may want to create your own template - go to 'Conversations' -> 'Templates'.
If an inbound email is about one of our Startup or Enterprise plans, you should create a Deal - more on this below. 
In addition to hey@posthog.com and sales@posthog.com, we sometimes create special one-off email addresses to use for specific groups, such as for an event or promotion. If you create a Google group and you want messages to flow into HubSpot to be managed, make sure you add our [HubSpot inbox email address](hello-1@posthoginc.hs-inbox.com) to your group as a member.
### New PostHog signups
All new users are automatically added via our Zapier app to the 'New PostHog User' stage of our Sales pipeline. Sorting these ensures that we can keep communication clear with a customer when they have multiple users on the account - it's really annoying for a customer if we are having parallel conversations with different people on their team!
More on how we manage these users in the Deals section below. 
### Manually adding new users
You can also just manually add a user to HubSpot under 'Contacts'. When creating a new contact, try to add as much useful information as possible, especially about the type of company they work for and what their needs are. This enables us to provide them with the best possible experience. 
Once you have created a contact, you may want to add them to a Deal, depending on the context. 
Make sure you also assign someone as the Contact owner, so it's clear who is responsible for managing that relationship.
## Deals
We manage two pipelines for our deals - _Enterprise_ and _Startup_. This helps us stay organised, given the process is different for each.
Creating a Company with a Contact should be the _first_ thing you do when you are setting up a deal in HubSpot, if one does not exist already. It's then really easy to add a Deal from within a Company record.
Creating a new deal is quite intuitive, but here are a few tips:
- Generally, try to fill out as much information as possible - this is useful for you, but also gives context to other people working with a customer
- Make sure you assign your deal to the right pipeline
- Every deal needs an owner - this is the customer's main point of contact at PostHog
- Tag every deal by 'Deal Type' - use your judgement to determine which category makes sense
- Put the deal in the right _Deal Stage_ - again, use your judgement! Usually this will be 'First Contact' or 'In Discussion'. 
You can also easily add a customer to a deal directly from the Inbox as well - just select 'Create a Deal' in the right hand pane when you have their message selected. 
### Managing the pipeline
We don't have a super detailed process on this yet. That being said, here are a few things to bear in mind:
- Use private notes to tag relevant people for their attention, ask questions etc. Do this in HubSpot (not Slack) so everyone can stay on the same page. If you need to tag someone who doesn't have a HubSpot account, as Charles to add them. 
- Be clear, direct and open - see other deals for examples on tone. We are very opposed to the use of any kind of corporate language.  
- Be responsive! 
Within a deal, you can also set Tasks such as a follow up reminder for yourself. We are working on automating these, but in the meantime you can manually create tasks really easily, e.g. 'Follow up in 3 days'. HubSpot will automatically notify you of your tasks due each day by email.
As a conversation progresses (or not) with a customer, you should move them into the relevant stage as appropriate. 
### Quotes
Any Enterprise customers or Cloud customers wanting to capture over 500k events per month require a custom quote. 
Our Enterprise pricing starts at $2,000 per month, but you will need to determine the appropriate pricing based on factors including:
- What level of support they require, such as monitoring and/or updating their instance
- Approximate user/event volume anticipated
- Hosting requirements
- Number of projects
- Whether they have existing data to migrate
- Any relevant deadlines
We provide a discount for annual upfront invoicing, typically 10%. We may also offer some sort of free trial if appropriate - 30 days is our standard.
We generate quotes directly within HubSpot - go to 'Sales' -> 'Quotes'. 
The process is fairly straightforward for creating a quote. A couple of points to note:
- It is really important that you add our standard payment terms to the quote, so it is clear when the customer should expect to pay.
- You can use 'Snippets' when building a quote to insert frequently used text (like payment terms).
- Do not use the Stripe billing integration as it is very basic and does not enable you to have different types of line item (e.g. 1 month free trial and then an ongoing monthly subscription). 
### Billing
Once a quote has been agreed with a customer, you should proceed to billing and generating a license key for them. See instructions on how to do this on the [Billing](/handbook/growth/billing) page.
## All done - now what?
This is just the beginning of what will hopefully be an awesome relationship with a new customer!
We are just getting started here, but a few things that you should do:
- Make sure you invite the customer to our PostHog Users Slack!
- If they are an Enterprise customer, they should also have a private Slack channel in there with us.
- Set a couple of tasks in HubSpot to check in with them - depending on who they are you may want to check in after 1 week/month/quarter.

View File

@@ -0,0 +1,99 @@
---
title: Growth Strategy
sidebar: Handbook
showTitle: true
---
<br />
##Self-serve
We believe this approach will lead to the best product for end users, which is how we'll build the best company.
[Adam Gross](https://twitter.com/adam_g?lang=en) has given some excellent [talks on this topic](https://www.heavybit.com/library/video/self-serve-go-to-market/), that we've borrowed from.
#1-2-3 framework
## Product
This means the path to revenue starts with adoption of a Free version, then working out how to get teams (whether a small team at a big company or a 20 person startup) onto a paid version, and ultimately how to get departmental adoption at large enterprises.
| | 1 - Free | 2 - Team (Self Serve) | 3 - Enterprise (C-Level) |
|---|---|---|---|
|Value|Creation|Collaboration|Compliance|
|GTM|Free/Adoption|Self-serve|Enterprise|
### Examples of other companies following (part) of this
#### Postman
As an individual, it is useful for organizing your own API creation activity.
In team mode, it is a way for multiple teams to organize distributed development effort. If you're building across multiple teams with different services, how you coordinate these teams is a big, strategic business problem. By using the same tool with modifications, you can orchestrate this.
#### LaunchDarkly
As an individual, you can view as a pure utility for launching feature flags. I can write myself or use this thing off the shelf to save time. Interesting but limited value proposition.
In team mode, it becomes a way for a team to organize its business process between Product Management and Engineering. It becomes a product management process tool on rails.
## Our structure
As we grow, it'll get important to work out which teams in PostHog own different functions.
<table>
<tr>
<th>Function</th><th>Free</th><th>Team (Self Serve)</th><th>Enterprise (C-Level)</th>
</tr>
<tr>
<td>Marketing</td>
<td colspan="2" style="text-align: center;">Marketing (Developer Evangelism)</td>
<td>Enterprise Product Marketing</td>
</tr>
<tr>
<td>Sales</td>
<td>Developer Experience</td>
<td>Customer Success</td>
<td>Enterprise Sales</td>
</tr>
<tr>
<td>Support</td>
<td colspan="3" style="text-align: center;">Developer Experience</td>
</tr>
<tr>
<td>Success/Retention</td>
<td>Developer Experience</td>
<td>Customer Success</td>
<td>Customer Solutions Architect</td>
</tr>
<tr>
<td>Business Ops</td>
<td colspan="3" style="text-align: center;">Business Ops</td>
</tr>
</table>
Following the 1-2-3 framework, we are currently focused on building our team in the first and second columns - _Free_ and _Team_ - and already have Developer Experience and Business Ops people in place. Only after we have brought in people to take care of Marketing/Developer Evangelism and Customer Success will we then look at recruiting people into the roles in the third column, _Enterprise_.
### Structure FAQ
#### Why do you have "sales" for the free product?
Developer experience will help ensure the open source product is properly adopted, for $0 in this case.
#### What's 'Enterprise Product Marketing' versus 'Marketing (Developer Evangelism)'?
Product marketing is making sure that PostHog is positioned as a platform that can be used organization-wide, to aid with expansion. For example, organizing roadmap discussions with large clients.
Developer-evangelism is more about adoption of the first users - creating content, building an audience across social media and GitHub, etc.
#### What's the difference between Customer Success and Developer Experience?
Customer Success is a more commercially-oriented function, focused on inbound sales.
#### What are business ops?
It'll be important we have good processes in place to grow usage from free to team and beyond. This means making sure we have a CRM set up, integrated with our product, etc.