GithubHelp home page GithubHelp logo

orbit-love / orbit-model Goto Github PK

View Code? Open in Web Editor NEW
971.0 35.0 68.0 25.32 MB

A framework for building high gravity communities 🪐

Home Page: https://orbit.love/model

License: MIT License

JavaScript 96.23% CSS 3.77%
community devrel developer-advocacy orbit-model community-management

orbit-model's Introduction

Welcome to the Orbit Model

The Orbit Model is a framework for building high gravity communities. A high gravity community is one that excels at attracting and retaining members by providing an outstanding member experience.

Explore the model

Visit the website: https://orbit.love/model

The model will help you answer questions like:

  • How do I measure my community's engagement and growth?
  • How do I attract new people to my community?
  • Which members should I prioritize spending time with?
  • What contribution should I ask each community member to make?

Who can use the Orbit Model?

Product and developer communities. Form a community of your most enthusiastic users and developers.

Community-driven businesses. Learn who your most influential customers and help increase their reach.

Open source projects. Build relationships that help convert users into contributors.

And anyone else focused on growing their community!

About the Orbit Model

The Orbit Model was developed by developer advocates for working with communities of software developers, but the principles apply to most things that are community-shaped. The model was first used in 2014 and put on GitHub in November 2019 so anyone can use it and contribute back. We aim to make this framework useful to open source maintainers, developer advocates, community managers, founders, and anyone interested in building a community. It is sponsored and maintained by Orbit.

Learn more on the about page.

Contributing

Contributions and questions are very welcome. Please open issues with ideas on how to improve the model including feedback, critiques, and information about how you're using it.

Read the contribution guide to learn more.

Tech Stack

We want to thank and acknowledge the open source projects used to build this site:

  • Next.js
  • MDX
  • G6
  • FontAwesome
  • Tailwind CSS

Changelog

May 2022

  • New website, updated concepts

July 2021

  • Updated Orbit Level names

March 2020

  • Created sections for love, reach, and gravity
  • Added calculations and example tables for each metric
  • Added Orbit KPIs section
  • Added sections about choosing and distributing orbit levels

December 2019

  • Added orbit levels
  • Improved introduction

June 2019

  • Repository created

orbit-model's People

Contributors

ahmadawais avatar akegaviar avatar alexlsalt avatar avelino avatar darnprice avatar dependabot[bot] avatar dustinlarimer avatar dzello avatar fanweixiao avatar html5cat avatar hummusonrails avatar joshed-io avatar khalidabuhakmeh avatar krhoyt avatar leggetter avatar li-clement avatar malgamves avatar martyndavies avatar morsapaes avatar nicoallgood avatar patrickjwoods avatar peggyrayzis avatar phacks avatar phazonoverload avatar rosiesherry avatar siliconivan avatar thomaspaulmann avatar vasa-develop avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

orbit-model's Issues

RFC: Orbit Model 2.0

👉 For the latest updates, jump down to this comment

We first published the Orbit Model as a blog post way back in March 2019. Since then, lots of folks have adopted it, many of you have helped improve it, and we've even built an app based on it 🎉

As the model has matured from a high-level idea in a blog post to a framework that community folks use every day, it’s become clear that it’s time for a “refactoring” to reach its full potential.

Orbit Model 2.0 is our proposal to streamline the model, help it scale to all community types, and become a complete framework for community building.

With that, I'm pleased to share with you this RFC - request for comments - that outlines a set of changes that I and the Orbit team would like to propose and get your feedback on. The changes are sweeping enough that I feel it's appropropriate to call it a full 2.0. So, let's dig in!

giphy

Motivations

Here are some key themes from feedback and long-term goals of the model.

Some are fairly specific:

  • Orbit level names like Ambassador/Fan/User/Observer don't work for everyone;
  • It's unclear who belongs in what Orbit Level;
  • It's unclear what role time plays: how does activity/inactivity factor into a member’s Orbit level?
  • It's unclear what score I should assign to each activity

Others are more general:

  • The connection between Orbit metrics and traditional marketing or business metrics should be clearer;
  • The model should work for communities of different sizes & shapes (new, established, et al.)

Proposed changes

To address the feedback and motivations, I am proposing the following 3 changes.

[outdated] Change 1: Base Orbit Level purely on activity within a recent period

This is the biggest change and is a conceptual leap from how the model works today. New Orbit level definitions would look like this:

Level Description
Orbit 1 Active in the last month
Orbit 2 Active in the last 90 days
Orbit 3 Active in the last year
Orbit 4 Inactive

By consequence, when a member does any activity, they pop into Orbit 1 for at least 1 month, or longer if they keep doing activities frequently. If not, each day that passes causes them to slowly drift away.

Previous contribution history doesn't impact a member’s Orbit Level. If even a long-term contributor is inactive for a month, they drop down to Orbit 2, and eventually 3 and 4 if they don't re-engage.

Time becomes an essential quality of the model, addressing one of the key questions about the model mentioned above. The suggested Orbit Level thresholds above are reasonable defaults based on the data we have about developer communities, but the number of days for each level can be configured by each community

So why is time important?

The great thing about time is that it's the same for everybody, and whether a member has or has not done something in a given time period is fully deterministic, given that you're tracking the activity. It either happened or it didn't, so it's a reliable abstraction to build on.

In this approach, Orbit levels would equate with the popular MAU (monthly active users) family of metrics. Reporting your community MAU is easy, it's the current size of Orbit 1. YAU (yearly active) is the size of Orbit 3 (both examples assume the default values above).

Time also provides clear moments to engage & retain your community members. You can know precisely when a member will fall to the next orbit level, just by looking at the date of their last activity. No fancy formula needed. For example, if an O1 (Orbit 1) member has been inactive for 29 days, that's a good time to re-engage them, especially if they're a historically high-Love (highly engaged) member and normally in O1 most of the time.

Finally, a time-based approach to Orbit Levels means we can remove the prescriptive labels like Ambassador, Fan, User, Observer which, unsurprising, have different meanings for different communities.

This approach simplifies the abstractions such that two community managers could have a meaningful conversation about their Orbit One, and each would know exactly what the other meant by those terms.

Change 2: Remove the concept of activity scores

The original intention of activity scores (weighting some activities higher than others, like counting a blog post more than a newsletter signup), was to be able to aggregate them together to give members a total points score, called Love. Such a score is then useful to compare the relative engagement of members.

This also proves hard to scale. The choice of what score to give an activity is arbitrary, dependent on the community, and never has a correct answer. Is a Twitter mention by a member with 20k followers “worth more” than the same mention by a member with 100 followers? Is a 5k word, in-depth blog post “worth more” than a 300 word superficial one?

Small changes in activity scores can cascade to big changes in the relative engagement of members, which feels wrong. Changing "Twitter mention" from 2 to 3 points shouldn't reconfigure my community metrics to heavily favor Twitter users, but it might because that’s a 50% increase.

This leads us to the next change: how do we calculate Love without activity scores?

Change 3: Update how Love is calculated

Love is the Orbit Model's relative community engagement score. Love is also the "currency that drives community" (h/t to Erin Frey). I say "relative" because comparing the Love score for two members should tell you, at a glance, which one is more engaged. An absolute value of Love (e.g. 16.2) doesn't have a meaning on its own, except to compare with another.

The current Orbit Model lacks guidance on how to factor in the role of time when calculating Love. That is a problem because time is so important in determining engagement. A member whose activities are more recent should be assigned a higher Love than a member who did the same activities a year (or a month) ago.

There is no one "right way" to calculate Love. It's an equation with many inputs. The member's activity timeline is central, but each community could also apply other signals & data they have too.

Given that, I propose that we lay out some general guidelines and a basic formula for calculating love, but leave the exact implementations open.

Here's one I've that works pretty well when I applied it to some real-life community data. I'll spare you the mathematical formula and describe it in pseudocode. This is one way to calculate the love for one member, based on just the number of activities they did, factoring in depreciation due to time.

value(month) =  (number of activities) * (0.9 ^ number of months ago)
love = sum of value(month) for the last 12 months

Example: I am a community member and did 1 activity in March and 2 in June. Today is July. My love is:

love(josh) = 2 * (0.9 ^ 1) + 1 * (0.9 ^ 4) = 2.4561

There are many ways to enhance and customize the equation to fit your needs best, which can be a topic of future conversation.

Supporting visuals

Heatmap-style visualizations are useful for showing engagement over time, without scores or complicated formulas.

image

Equations like Love above can produce useful trendlines for member engagement:

image

You've reached the end!

That's amazing. I want to give you a hug just for that. But this also means that you're dangerously close to the box where you can add your comments and reactions to anything that you've seen in here. Please do and let's discuss 👇

ℹ️ If you can add your first comments by July 31, or as soon as possible, that’d be of great help. Thank you!

Redefining 'love' as the sum of the activity scores

Given that "the maximum tells us the largest contribution the member has made, and the sum gives us a picture of their overall participation level", wouldn't it be more accurate to use the sum to measure someone's engagement / love?

Determining the Orbit Level based on the Love

This issue is connected to #29.

"Love" is a formula that helps determine relative engagement of community members. #29 contains a proposal for, among other things, a new way to calculate Love.

Once Love is calculated, it can then be used to place members into 1 of the 4 Orbit Levels. How this happens, numerically, is the topic of this issue. Ultimately, the way that Love is calculated and how it is used to map members to Orbit Levels is up to each community that implements the model. However, it'd be great if we could provide some reasonable defaults and common logic for the general case.

Here are a few different ways I can see calculating Orbit Levels. Please add thoughts, feedback, and more ideas below.

1 - Step function

Pick 3 ranges for Love that represent the Orbit Levels.

Orbit 1: Love >= 10
Orbit 2: 5 < Love < 10
Orbit 3: 1 < Love < 5
Orbit 4: Love < 1

The ranges would be defined by each community, and take into account how their Love formula works. We could try to provide reasonable defaults for this method, but since communities differ widely in their amount of engagement, this might be hard.

2 - Ranking / percentile distribution

Orbit 1: Top 95% Love
Orbit 2: Top 75-95% Love
Orbit 3: Top 25-75% Love
Orbit 4: Bottom 25% Love

This approach doesn't require picking constants for Love, which might make it more flexible for diffferent communities. The actual %'s would be configurable. However, it could lead to issues like a member who should be in Orbit 1, according to how the community sees their engagement, but can't be because Orbit 1 is already "full" of members with higher Love.

Note: There's a variation of this approach with fixed numbers instead of percents, i.e. Top 100 members in Orbit 1, next 250 in Orbit 2, and so on. That still fixes the size of each level, but to a constant not a percentage.

3 - Grading on a curve

MAX() version:

Orbit 1 - 95%+ of the highest member's Love
Orbit 2 - 75-95% of the highest member's Love
Orbit 3 - 25-75% of the highest member's Love
Orbit 4 - 0-25% of the highest member's Love

MEAN() version:

Orbit 1 - 200%+ of the mean member's Love
Orbit 2 - 100-200% of the mean member's Love
Orbit 3 - 50-100% of the mean member's Love
Orbit 4 - 0-50% of the mean member's Love

This approach decides Orbit Levels relative to the Love score for a member in the community at a certain percentile. It doesn't limit how many people can be in each level, unlike option 2. Percentages and which function to use would be customized per community. The values here are just illustrative and do not represent recommendations (true for all numbers in this comment).

See this comment on #29 for why MEAN might be a better approach than MAX here. The MEAN() approach above chooses numbers that puts the "mean member" right at the border of Orbits 2 and 3.

Specific number and type of activities

There are other approaches to Orbit Level calculation that could not use the Love score. One simple example is to set threshholds on just the number of activities done in a time period, of various types. For example, doing 10 pull requests and attending 3 events in the last 12 months would place a member into Orbit 1.

I'm not a huge fan of this approach since it doesn't use Love and feels like it puts too much onus on the model user to figure out exactly what this needs to look like. But I'm listing here anyway in the spirit of laying out all the options.

How do you decide the weights of each activities?

The weights of each activities are always definitely numbers, how do you decide it, engaging with users or decide by community itself ?

Activity Weight (out of 3)
Attended our conference 1
Spoke at a meetup 3
Opened a pull request on GitHub 1
Had a pull request merged 3
Answered a forum question 3

I think in some cases, a forum question can be difficult or simple, sometimes you should spend a lot of time to answer it, but sometimes it's a piece of cake, so how do you think about it?

Reach Tiers

What happens when there are multiple tiers of "reach"? In the given example, what if "1k Twitter Followers" is worth "1" and "2k Twitter Followers" is worth "2" and Avery has 3k followers? Does she then get both reach values (for a total of 3), or just the higher (2)?

My gut says - whatever, so long as it is consistently applied - but then I worry about it skewing gravity. Can the model write-up be updated to clarify this situation?

Calculate Gravity based on Orbit distance

To keep the analogy to gravity, and I think to more accurately calculate the effect of members on the overall community, the amount of gravity each member contributes to the overall gravity should be inversely proportional to their distance.

Or, to put it in community terms, if two members have identical reach and love scores, but different orbit levels, the member in the closer orbit (say, Advocate) has a larger gravitational impact than the member in a farther orbit (say, Observer). This is because members in the inner orbit are more likely to interact with any given new member than those in the outer orbits.

I propose changing the definition of Gravity to be:

Gravity = Sum(Love * Reach / Orbit^2) for each member

This also lets you calculate the relative gravity of each orbit in your community. If you have more gravity in your outer orbit than your inner orbit, that means members in the middle are feeling more "pull" towards being less-involved than being more-involved.

B&W canvas for printing?

Keen to print this out the canvas at the office, but dread the amount of ink it would take.

A B&W line art version would be great.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.