Lapachos Lending : Implementación con Gowthbook

Integración de GrowthBook para habilitar el motor de reglas

Que es Growthbook

GrowthBook es una plataforma de gestión de feature flags y experimentación. Permite activar o desactivar funcionalidades en tiempo real, realizar pruebas A/B y controlar el despliegue de nuevas características sin necesidad de modificar el código ni hacer nuevos despliegues.

Para que se implementó en el proyecto

En este proyecto, GrowthBook se utiliza para habilitar o deshabilitar el motor de reglas (“Rule Engine”) para los nuevos modelos de negocio, manteniendo la funcionalidad legacy. Esto permite controlar desde GrowthBook si el sistema utiliza el motor de reglas moderno o sigue usando la lógica anterior, facilitando pruebas, migraciones y despliegues graduales.

Como se implementa Growthbook

La integración básica consiste en:

  • Instalar el SDK de GrowthBook.

  • Configurar el entorno con las credenciales y endpoints de GrowthBook.

  • Sincronizar los feature flags desde GrowthBook.

  • Consultar el estado de los flags para activar/desactivar funcionalidades.

Implementación en el proyecto lapachos lending

  1. Crear cuenta en growthbook

  2. Crear una nueva conexión SDK

    1. Crear nombre de la conexion

    2. Seleccionar el lenguaje del SDK

    3. Seleccionar el “Environment”

    4. Agregar el proyecto

    5. Crear

  3. Crear una nueva “Feature”

    1. Nombre de la feature

    2. Proyecto

    3. Tipo de dato

    4. Valor por defecto

    5. Habilitar los entornos al que se van a aplicar

    6. Crear

  4. Dentro de la feature

    1. En el apartado de “Reglas” agregar las reglas por cada entorno

    2. Aquí se define un “Atributo” y el valor de ese atributo que se envía en el código para aplicar el feature

    3. Publicar los cambios

  5. Conexiones SDK

    1. Dentro de la conexión se puede ver

      1. Estado de la conexion

      2. Claves que se deben agregar para la comunicación entre growthbook y el proyecto

      3. Comando de instalación

      4. Código para hacer la conexión

  6. En el proyecto lending-backend

    1. Ejecutar yarn add @growthbook/growthbook

    2. Agregar las variables de entorno en el archivo .env proporcionadas por growthbook en el apartado de “Conexiones SDK”

    3. Crear un archivo de configuracion de growthbook

      1. En el proyecto este archivo se llama growthbook.ts y esta en la carpeta “libs” del proyecto

      2. Aqui va el codigo SDK proporcionado por growthbook en el apartado de “Conexiones SDK”

    4. Crear el archivo de motor de reglas donde se va a implementar growthbook

      1. Este archivo se llama engineRules.ts

      2. Este archivo recibe la respuesta de growthbook

      3. Lleva la lógica respecto a la toma de decisión si aplica el motor de reglas o el código legacy

Ejemplo de Configuración

Este es el código implementado para la primera versión, donde se configura growthbook y se hace la integración con el UI de Growthbook

// growbook.ts
import { GrowthBook } from "@growthbook/growthbook";

const growthbook = new GrowthBook({
  apiHost: process.env.GROWTHBOOK_API_HOST,
  clientKey: process.env.GROWTHBOOK_API_CLIENT,
  enableDevMode: true,
});

export default growthbook;
// engineRules.ts
import growthbook from "./src/libs/growthbook";
import axios from "axios";

export async function checkRuleEngineFlag() {
  await syncFeatureFlags();

  growthbook.setAttributes({
    environment: process.env.ENVIRONMENT || "dev",
  });

  const isRuleEngineEnabled = growthbook.isOn("USE_RULE_ENGINE");

  return isRuleEngineEnabled;
}
async function syncFeatureFlags() {
  try {
    const res = await axios.get(`${process.env.GROWTHBOOK_API_HOST}/api/features/${process.env.GROWTHBOOK_API_CLIENT}`);

    const featuresPayload = res.data.features;

    growthbook.setPayload({ features: featuresPayload });
  } catch (error) {
    console.error("Error sincronizando feature flags de GrowthBook:", error);
  }
}
// Ejecuta el chequeo del motor de reglas en cada request
// Llamado desde el handler
  const ruleEngineStatus = await checkRuleEngineFlag();
  if (ruleEngineStatus) {
    //Flujo con el motor de reglas
    console.log("engine rules active");
  } else {
    // Flujo legacy
    console.log("Legacy rules active");
  }

Variables de entorno utilizadas

  • ENVIRONMENT

  • GROWTHBOOK_API_HOST

  • GROWTHBOOK_API_CLIENT