NavigaraNavigara
OrganizationsDistributionCompareResearch
NavigaraNavigara
OrganizationsDistributionCompareResearch
All developers

Jason Fried

Developer

Jason Fried

fried@meta.com

49 commits~4 files/commit

Performance

2026Previous year

Insights

Key patterns and highlights from this developer's activity.

Peak MonthOct'2565 performance
Growth Trend↑239%vs prior period
Avg Files/Commit4files per commit
Active Days38of 455 days
Top Repofolly34 commits

Effort Over Time

Breakdown of growth, maintenance, and fixes effort over time.

Bug Behavior

Beta

Bugs introduced vs. fixed over time.

Investment Quality

Beta

Reclassifies engineering effort based on bug attribution. Commits that introduced bugs are retrospectively counted as poor investments.

46%Productive TimeGrowth 53% + Fixes 47%
50%Maintenance Time
5%Wasted Time
How it works

Methodology

Investment Quality reclassifies engineering effort based on bug attribution data. Commits identified as buggy origins (those that introduced bugs later fixed by someone) have their grow and maintenance time moved into the Wasted Time category. Their waste (fix commits) remains counted as productive. All other commits retain their standard classification: grow is productive, maintenance is maintenance, and waste (fixes) is productive.

Relationship to Growth / Maintenance / Fixes

The standard model classifies commits as Growth, Maintenance, or Fixes. Investment Quality adds a quality lens: a commit that introduced a bug is retrospectively counted as a poor investment — the engineering time spent on it was wasted because it ultimately required additional fix work. Fix commits (Fixes in the standard model) are reframed as productive, because fixing bugs is valuable work.

Proposed API Endpoint

Currently computed client-side from commit and bug attribution data. Ideal server-side endpoint:

POST /v1/organizations/{orgId}/investment-quality
Content-Type: application/json

Request:
{
  "startTime": "2025-01-01T00:00:00Z",
  "endTime": "2025-12-31T23:59:59Z",
  "bucketSize": "BUCKET_SIZE_MONTH",
  "groupBy": ["repository_id" | "deliverer_email"]
}

Response:
{
  "productivePct": 74,
  "maintenancePct": 18,
  "wastedPct": 8,
  "buckets": [
    {
      "bucketStart": "2025-01-01T00:00:00Z",
      "productive": 4.2,
      "maintenance": 1.8,
      "wasted": 0.6
    }
  ]
}

Recent Activity

Latest analyzed commits from this developer.

HashMessageDateFilesEffort
7230c79This commit **refactors** the **Buck2 build system's Cython integration** by migrating `cython_library` and `cython_static_extension` from Starlark macros to native rules. This change significantly **simplifies the build graph** and **improves performance** by replacing the expansion into numerous sub-targets with direct `ctx.actions.run()` for Cython transpilation and `cxx_library_parameterized()` for C++ compilation. New files under `prelude/python/cython/` define the core logic, providers, and rule implementations, along with a new `cython_toolchain`. This **enhancement** streamlines the compilation process for projects leveraging Cython, making its integration more efficient and robust within Buck2.Mar 318grow
167f116This commit provides a **bug fix** for **native Python binaries** to prevent `PyInit` symbols for C extensions from being dropped by the linker. By emitting `-u` flags for these symbols and passing them to the linker, it ensures that necessary object files are pulled from archives, even when link groups or `--gc-sections` are active. This resolves issues like the `regex._regex` import failure in omnibus-linked binaries, guaranteeing **correct symbol resolution** and proper loading of C extensions in complex dependency environments. The change is implemented in `prelude/python/linking/native.bzl`, specifically within the `_compute_cxx_executable_info` logic.Feb 171waste
55a5c58This commit performs a **refactoring** across the **Thrift Python asynchronous codebase** to migrate from the deprecated `asyncio.get_event_loop()` to `asyncio.get_running_loop()`. Specifically, it updates core server components like `thrift/lib/py/server/TAsyncioServer.py` and example servers, along with numerous **Thrift Python test files** to align with modern `asyncio` practices. This **maintenance** effort ensures compatibility with newer Python versions, preventing potential runtime warnings or errors, and improves the long-term robustness of **Thrift's asynchronous server components**.Feb 59maint
55e0d6fThis commit **fixes memory leaks** identified in the **Thrift Python FastProto protocol** implementation. It addresses these issues by adding **Python reference count decrements** and implementing **module state clearing and traversal mechanisms** within `fastproto.cpp`. Specifically, changes were made to functions like `encode_impl` and `decode_struct` to prevent leaks during encoding and decoding, and new functions such as `fastproto_traverse` and `fastproto_clear` were introduced for proper module state management. This ensures more robust memory handling and prevents resource exhaustion when using the **FastProto** protocol in Python applications.Dec 51waste
940905eThis commit introduces an explicit `ensure()` function to the **`folly.request_context`** Python module, providing a **safer and more explicit mechanism** for installing critical callbacks. Previously, these callbacks were installed implicitly as a side effect of importing the module, which could lead to issues if the import was optimized away or removed. The new `request_context.ensure()` function now explicitly loads the module and guarantees callback installation, preventing potential breakage for systems relying on `task_factories`. This **maintenance improvement** ensures the continued functionality of the request context's callback system by making its initialization explicit and testable, with a new test case verifying its behavior.Nov 133grow
5a3489fThis commit performs **maintenance** and **refactoring** on the **`thrift-py3` test suite** to ensure compatibility with **Python 3.14**. It primarily addresses changes in `asyncio` event loop management by migrating numerous test classes within `thrift/lib/py3/test/auto_migrate` to use `unittest.IsolatedAsyncioTestCase`, converting their methods to be asynchronous. Additionally, the problematic `test_queue_timeout` test was removed due to its instability, and `asyncio.get_event_loop()` calls were updated to `asyncio.new_event_loop()` where appropriate. This work ensures the **`thrift-py3` asyncio tests** run correctly and reliably on the latest Python versions, preventing failures related to event loop handling.Oct 305maint
d83c318This commit **refactors** the **`folly::RequestContext` watcher mechanism** within the **Python bindings** (`folly/python/request_context.pyx`) to resolve critical deadlocks. It specifically removes problematic GIL grabbing logic that caused issues in multi-threaded edge cases, replacing it with a more robust **thread-local current Python context** and refined GIL state checks. This **bug fix** significantly enhances the reliability of `RequestContext` when used across different threads and with asynchronous operations. New test cases have been added to validate correct behavior in these complex multi-threading scenarios, ensuring stable context propagation.Oct 282maint
793d452This commit provides a **bug fix** for the **Thrift Python server**'s `request_context` module, specifically addressing a compatibility issue with Cython 3.1.x. It resolves a problem where Cython's generated C++ code for `std::optional.value()` could lead to **AddressSanitizer errors** (stack-use-after-scope) due to incorrect variable scoping. By redefining `std::optional` within `thrift/lib/python/server/request_context.pxd`, this **compatibility fix** ensures that Cython generates correct and safe C++ code, preventing runtime crashes. This change is crucial for maintaining stability when using newer Cython versions with the Thrift Python server.Oct 241waste
4c9a4a2This commit **refactors** the **`folly::python::request_context`** module to enhance the robustness and correctness of the `setContext` watcher mechanism. It introduces a **thread-local variable** (`set_curr_PyContext`) to track the current Python context, allowing the watcher to gracefully ignore callbacks if no Python context is active, and **simplifies `PyState` checks** for post-finalization scenarios. The change also ensures **GIL acquisition** during context variable updates, safeguarding against potential issues in mixed C++/Python threading environments. A new test case in `folly/python/test/request_context.py` validates the improved cross-language context propagation.Oct 162maint
db089e1This commit implements a **compatibility fix** for the **`folly/python/request_context` module**, specifically targeting issues encountered on `aarch64` architectures. It introduces an **environment variable check** within `folly/python/request_context.pyx` to serve as an "escape hatch." This mechanism allows users to **conditionally disable the module's internal watchers**, thereby resolving compatibility problems and ensuring the `request_context` module can function correctly on `aarch64` systems. This change provides a crucial workaround to prevent runtime failures in `aarch64` environments.Oct 111waste
2deaf3aThis commit introduces a significant **performance optimization** within the **`folly/python/request_context`** module by implementing **thread-local caching** for the last set context. This **refactoring** reduces the overhead of `setContext` operations in Python threads by minimizing expensive `PyContext` reads and Python C-API interactions. Specifically, it prevents the `_setContextWatcher` from redundantly setting an already active context, leading to **faster context management** and improved efficiency. The change includes new internal functions like `get_last_set_context` and `set_last_set_context`, and is accompanied by a **test update** to verify `request_context.save()` functionality.Oct 102maint
2197a86This commit **fixes a memory leak** within the **`folly/python/request_context`** module by **refactoring** how `RequestContext` objects are stored and managed. Previously, `RequestContext` `shared_ptr`s were wrapped in raw `PyCapsule` objects, leading to incorrect reference counting and leaks, especially when multiple context copies or tasks were involved. The internal representation is now reworked to embed the `shared_ptr` directly into the `Context` Cython class, replacing the problematic `PyCapsule` usage. This change ensures proper memory management and simplifies the API, with new tests added to verify the `use_count` functionality and confirm the **resolution of the memory leak**.Oct 107maint
5189d48This commit implements a **BREAKFIX** within the **`folly/python/request_context`** module, specifically addressing the conditions for installing a Python context watcher. It **expands the allowed environments** by permitting watcher installation when `sys.version` contains either `+fb` or `+cinder`. This ensures that **request context propagation** functions correctly in Meta and Cinder-specific Python builds, which were previously blocked from utilizing this essential functionality. The change rectifies a recent regression, restoring expected behavior for these specialized environments.Oct 71waste
8debb72This commit introduces a **bug fix** within the **Folly Python integration** to correctly manage the `Folly::RequestContext` during thread teardown. Specifically, the `_watcher` function in `folly/python/request_context.pyx` is modified to **unset the Folly RequestContext** by setting it to `nullptr` when the associated `PyContext` is `None`. This ensures proper cleanup and prevents potential issues with dangling context pointers when Python threads exit, aligning the C++ `Folly::RequestContext` state with expected behavior during thread destruction. The change improves the robustness of **cross-language request context management** by ensuring consistent context handling.Oct 71waste
faec230This commit provides a **bug fix** for **Folly's Python bindings**, specifically within the `folly/python/request_context` module. It addresses an issue where Conda wheel builds would segfault at runtime due to a mismatch with `cpython+meta` headers. A conditional check is introduced in `folly/python/request_context.pyx` to prevent the problematic call to `FOLLY_PYTHON_PyContext_AddWatcher` when running in incompatible environments like Conda. This **maintenance** change significantly improves **runtime stability** for Python users deploying Folly's bindings within **Conda environments**.Oct 71waste
9c81dd0This commit **refactors** the **Python bindings for Folly's request context** to **safeguard** the `_RequestContext` `ContextVar`. Specifically, it modifies `folly/python/request_context.pyx` by changing the declaration of `_RequestContext` to `cdef object`. This **limits its control surface** and **prevents external setting**, thereby **restricting direct modification** of the `ContextVar`. The change is a **security and stability enhancement**, preventing unintended side effects or incorrect usage in unit tests or everyday application code, mirroring the protection level of `thrift-python`'s `CPP2RequestContext` holder.Oct 61maint
abc6f55This commit introduces a **new capability** by adding the `get_PyContext` function to the **`folly/python/request_context`** module. This function provides a controlled mechanism to retrieve the `PyCapsule` stored within an internal `ContextVar`, which is managed by Cython. The primary purpose is to prevent direct, potentially "undesirable" mutations of the `ContextVar` from Python code, thereby enhancing the **integrity and stability** of the request context management. This ensures that `PyCapsules` can be safely accessed without exposing the underlying `ContextVar` to arbitrary changes, improving the robustness of context handling.Oct 32grow
3b25f98This commit introduces a **performance optimization** to the **Thrift Python server** by significantly accelerating `ContextVar` handling. It refactors the `combinedHandler` within `thrift/lib/python/server/python_async_processor.pyx` to leverage faster C-API functions, specifically `PyContextVar_Set` and `PyContextVar_Reset`. This change replaces the slower standard Python runtime loop methods, resulting in **substantially faster** `ContextVar` operations, estimated to be up to 15x quicker. The improvement primarily benefits RPC `create_task` operations, enhancing the overall efficiency of asynchronous RPC processing.Oct 11maint
74df493This commit introduces a **new context watcher mechanism** within the **`folly/python/request_context`** module, making `_setContextWatcher` the exclusive interface for managing the `PyContext` variable. This **refactoring** ensures that Python context variables are reliably synchronized with underlying C++ `RequestContext` changes, replacing direct manipulation methods like `set_PyContext` and `reset_PyContext`. The change improves consistency by centralizing how the Python context observes and reacts to C++ state, with new tests validating this synchronization. An efficiency optimization was also applied to `RequestContextToPyCapsule` using `std::move`.Sep 298maint
f340e72This commit introduces a **new feature** to the `folly::RequestContext` mechanism by implementing a **Watcher system**. This system allows external components to register callbacks that are invoked whenever the active `folly::RequestContext` is changed via `setContext()` or `setShallowCopyContext()`. The primary goal is to improve **cross-language context integration**, enabling better synchronization with foreign context systems like Python's `PyContext`. This enhancement to the `folly/io/async` module provides a crucial mechanism for propagating context changes across different runtime environments, with new declarations in `Request.h` and implementation in `Request.cpp`, alongside dedicated unit tests.Sep 293grow
7230c79Mar 31

This commit **refactors** the **Buck2 build system's Cython integration** by migrating `cython_library` and `cython_static_extension` from Starlark macros to native rules. This change significantly **simplifies the build graph** and **improves performance** by replacing the expansion into numerous sub-targets with direct `ctx.actions.run()` for Cython transpilation and `cxx_library_parameterized()` for C++ compilation. New files under `prelude/python/cython/` define the core logic, providers, and rule implementations, along with a new `cython_toolchain`. This **enhancement** streamlines the compilation process for projects leveraging Cython, making its integration more efficient and robust within Buck2.

8 filesgrow
167f116Feb 17

This commit provides a **bug fix** for **native Python binaries** to prevent `PyInit` symbols for C extensions from being dropped by the linker. By emitting `-u` flags for these symbols and passing them to the linker, it ensures that necessary object files are pulled from archives, even when link groups or `--gc-sections` are active. This resolves issues like the `regex._regex` import failure in omnibus-linked binaries, guaranteeing **correct symbol resolution** and proper loading of C extensions in complex dependency environments. The change is implemented in `prelude/python/linking/native.bzl`, specifically within the `_compute_cxx_executable_info` logic.

1 fileswaste
55a5c58Feb 5

This commit performs a **refactoring** across the **Thrift Python asynchronous codebase** to migrate from the deprecated `asyncio.get_event_loop()` to `asyncio.get_running_loop()`. Specifically, it updates core server components like `thrift/lib/py/server/TAsyncioServer.py` and example servers, along with numerous **Thrift Python test files** to align with modern `asyncio` practices. This **maintenance** effort ensures compatibility with newer Python versions, preventing potential runtime warnings or errors, and improves the long-term robustness of **Thrift's asynchronous server components**.

9 filesmaint
55e0d6fDec 5

This commit **fixes memory leaks** identified in the **Thrift Python FastProto protocol** implementation. It addresses these issues by adding **Python reference count decrements** and implementing **module state clearing and traversal mechanisms** within `fastproto.cpp`. Specifically, changes were made to functions like `encode_impl` and `decode_struct` to prevent leaks during encoding and decoding, and new functions such as `fastproto_traverse` and `fastproto_clear` were introduced for proper module state management. This ensures more robust memory handling and prevents resource exhaustion when using the **FastProto** protocol in Python applications.

1 fileswaste
940905eNov 13

This commit introduces an explicit `ensure()` function to the **`folly.request_context`** Python module, providing a **safer and more explicit mechanism** for installing critical callbacks. Previously, these callbacks were installed implicitly as a side effect of importing the module, which could lead to issues if the import was optimized away or removed. The new `request_context.ensure()` function now explicitly loads the module and guarantees callback installation, preventing potential breakage for systems relying on `task_factories`. This **maintenance improvement** ensures the continued functionality of the request context's callback system by making its initialization explicit and testable, with a new test case verifying its behavior.

3 filesgrow
5a3489fOct 30

This commit performs **maintenance** and **refactoring** on the **`thrift-py3` test suite** to ensure compatibility with **Python 3.14**. It primarily addresses changes in `asyncio` event loop management by migrating numerous test classes within `thrift/lib/py3/test/auto_migrate` to use `unittest.IsolatedAsyncioTestCase`, converting their methods to be asynchronous. Additionally, the problematic `test_queue_timeout` test was removed due to its instability, and `asyncio.get_event_loop()` calls were updated to `asyncio.new_event_loop()` where appropriate. This work ensures the **`thrift-py3` asyncio tests** run correctly and reliably on the latest Python versions, preventing failures related to event loop handling.

5 filesmaint
d83c318Oct 28

This commit **refactors** the **`folly::RequestContext` watcher mechanism** within the **Python bindings** (`folly/python/request_context.pyx`) to resolve critical deadlocks. It specifically removes problematic GIL grabbing logic that caused issues in multi-threaded edge cases, replacing it with a more robust **thread-local current Python context** and refined GIL state checks. This **bug fix** significantly enhances the reliability of `RequestContext` when used across different threads and with asynchronous operations. New test cases have been added to validate correct behavior in these complex multi-threading scenarios, ensuring stable context propagation.

2 filesmaint
793d452Oct 24

This commit provides a **bug fix** for the **Thrift Python server**'s `request_context` module, specifically addressing a compatibility issue with Cython 3.1.x. It resolves a problem where Cython's generated C++ code for `std::optional.value()` could lead to **AddressSanitizer errors** (stack-use-after-scope) due to incorrect variable scoping. By redefining `std::optional` within `thrift/lib/python/server/request_context.pxd`, this **compatibility fix** ensures that Cython generates correct and safe C++ code, preventing runtime crashes. This change is crucial for maintaining stability when using newer Cython versions with the Thrift Python server.

1 fileswaste
4c9a4a2Oct 16

This commit **refactors** the **`folly::python::request_context`** module to enhance the robustness and correctness of the `setContext` watcher mechanism. It introduces a **thread-local variable** (`set_curr_PyContext`) to track the current Python context, allowing the watcher to gracefully ignore callbacks if no Python context is active, and **simplifies `PyState` checks** for post-finalization scenarios. The change also ensures **GIL acquisition** during context variable updates, safeguarding against potential issues in mixed C++/Python threading environments. A new test case in `folly/python/test/request_context.py` validates the improved cross-language context propagation.

2 filesmaint
db089e1Oct 11

This commit implements a **compatibility fix** for the **`folly/python/request_context` module**, specifically targeting issues encountered on `aarch64` architectures. It introduces an **environment variable check** within `folly/python/request_context.pyx` to serve as an "escape hatch." This mechanism allows users to **conditionally disable the module's internal watchers**, thereby resolving compatibility problems and ensuring the `request_context` module can function correctly on `aarch64` systems. This change provides a crucial workaround to prevent runtime failures in `aarch64` environments.

1 fileswaste
2deaf3aOct 10

This commit introduces a significant **performance optimization** within the **`folly/python/request_context`** module by implementing **thread-local caching** for the last set context. This **refactoring** reduces the overhead of `setContext` operations in Python threads by minimizing expensive `PyContext` reads and Python C-API interactions. Specifically, it prevents the `_setContextWatcher` from redundantly setting an already active context, leading to **faster context management** and improved efficiency. The change includes new internal functions like `get_last_set_context` and `set_last_set_context`, and is accompanied by a **test update** to verify `request_context.save()` functionality.

2 filesmaint
2197a86Oct 10

This commit **fixes a memory leak** within the **`folly/python/request_context`** module by **refactoring** how `RequestContext` objects are stored and managed. Previously, `RequestContext` `shared_ptr`s were wrapped in raw `PyCapsule` objects, leading to incorrect reference counting and leaks, especially when multiple context copies or tasks were involved. The internal representation is now reworked to embed the `shared_ptr` directly into the `Context` Cython class, replacing the problematic `PyCapsule` usage. This change ensures proper memory management and simplifies the API, with new tests added to verify the `use_count` functionality and confirm the **resolution of the memory leak**.

7 filesmaint
5189d48Oct 7

This commit implements a **BREAKFIX** within the **`folly/python/request_context`** module, specifically addressing the conditions for installing a Python context watcher. It **expands the allowed environments** by permitting watcher installation when `sys.version` contains either `+fb` or `+cinder`. This ensures that **request context propagation** functions correctly in Meta and Cinder-specific Python builds, which were previously blocked from utilizing this essential functionality. The change rectifies a recent regression, restoring expected behavior for these specialized environments.

1 fileswaste
8debb72Oct 7

This commit introduces a **bug fix** within the **Folly Python integration** to correctly manage the `Folly::RequestContext` during thread teardown. Specifically, the `_watcher` function in `folly/python/request_context.pyx` is modified to **unset the Folly RequestContext** by setting it to `nullptr` when the associated `PyContext` is `None`. This ensures proper cleanup and prevents potential issues with dangling context pointers when Python threads exit, aligning the C++ `Folly::RequestContext` state with expected behavior during thread destruction. The change improves the robustness of **cross-language request context management** by ensuring consistent context handling.

1 fileswaste
faec230Oct 7

This commit provides a **bug fix** for **Folly's Python bindings**, specifically within the `folly/python/request_context` module. It addresses an issue where Conda wheel builds would segfault at runtime due to a mismatch with `cpython+meta` headers. A conditional check is introduced in `folly/python/request_context.pyx` to prevent the problematic call to `FOLLY_PYTHON_PyContext_AddWatcher` when running in incompatible environments like Conda. This **maintenance** change significantly improves **runtime stability** for Python users deploying Folly's bindings within **Conda environments**.

1 fileswaste
9c81dd0Oct 6

This commit **refactors** the **Python bindings for Folly's request context** to **safeguard** the `_RequestContext` `ContextVar`. Specifically, it modifies `folly/python/request_context.pyx` by changing the declaration of `_RequestContext` to `cdef object`. This **limits its control surface** and **prevents external setting**, thereby **restricting direct modification** of the `ContextVar`. The change is a **security and stability enhancement**, preventing unintended side effects or incorrect usage in unit tests or everyday application code, mirroring the protection level of `thrift-python`'s `CPP2RequestContext` holder.

1 filesmaint
abc6f55Oct 3

This commit introduces a **new capability** by adding the `get_PyContext` function to the **`folly/python/request_context`** module. This function provides a controlled mechanism to retrieve the `PyCapsule` stored within an internal `ContextVar`, which is managed by Cython. The primary purpose is to prevent direct, potentially "undesirable" mutations of the `ContextVar` from Python code, thereby enhancing the **integrity and stability** of the request context management. This ensures that `PyCapsules` can be safely accessed without exposing the underlying `ContextVar` to arbitrary changes, improving the robustness of context handling.

2 filesgrow
3b25f98Oct 1

This commit introduces a **performance optimization** to the **Thrift Python server** by significantly accelerating `ContextVar` handling. It refactors the `combinedHandler` within `thrift/lib/python/server/python_async_processor.pyx` to leverage faster C-API functions, specifically `PyContextVar_Set` and `PyContextVar_Reset`. This change replaces the slower standard Python runtime loop methods, resulting in **substantially faster** `ContextVar` operations, estimated to be up to 15x quicker. The improvement primarily benefits RPC `create_task` operations, enhancing the overall efficiency of asynchronous RPC processing.

1 filesmaint
74df493Sep 29

This commit introduces a **new context watcher mechanism** within the **`folly/python/request_context`** module, making `_setContextWatcher` the exclusive interface for managing the `PyContext` variable. This **refactoring** ensures that Python context variables are reliably synchronized with underlying C++ `RequestContext` changes, replacing direct manipulation methods like `set_PyContext` and `reset_PyContext`. The change improves consistency by centralizing how the Python context observes and reacts to C++ state, with new tests validating this synchronization. An efficiency optimization was also applied to `RequestContextToPyCapsule` using `std::move`.

8 filesmaint
f340e72Sep 29

This commit introduces a **new feature** to the `folly::RequestContext` mechanism by implementing a **Watcher system**. This system allows external components to register callbacks that are invoked whenever the active `folly::RequestContext` is changed via `setContext()` or `setShallowCopyContext()`. The primary goal is to improve **cross-language context integration**, enabling better synchronization with foreign context systems like Python's `PyContext`. This enhancement to the `folly/io/async` module provides a crucial mechanism for propagating context changes across different runtime environments, with new declarations in `Request.h` and implementation in `Request.cpp`, alongside dedicated unit tests.

3 filesgrow

Work Patterns

Beta

Commit activity distribution by hour and day of week. Shows when this developer is most active.

Collaboration

Beta

Developers who frequently work on the same files and symbols. Higher score means stronger code collaboration.

NavigaraNavigara
OrganizationsDistributionCompareResearch