Scope por equipo en un SaaS multitenant
Si quieres gestionar las flags por equipo (tenant) en lugar de por usuario individual, cambia el scope por defecto al equipo.Feature::active('billing-v2') apunta automáticamente al equipo actual. Sea quien sea el miembro del equipo, mientras pertenezca al mismo equipo se devuelve el mismo resultado, con lo que se mantiene la coherencia de la UI.
Ejemplo de rollout progresivo según la fecha de registro del equipo.
Kill switch de emergencia (aprovechando el método before)
Si se descubre un bug en producción, puedes desactivar la funcionalidad al instante sin hacer rollback de código. Si añades un método before a una feature basada en clase, se comprueba antes que el valor de almacenamiento.
FEATURES_NEW_CHECKOUT_DISABLED=true, se puede parar la funcionalidad sin tocar la BD. Es un kill switch sin despliegue.
Rollout programado
Un caso en el que quieres publicar automáticamente para todos los usuarios en una fecha/hora concreta. Puede implementarse con el métodobefore.
2025-04-01 se publica automáticamente para todos los usuarios. Se automatiza sin despliegue, sin BD y sin comando Artisan.
Dark launch (Shadow Mode)
Es un patrón en el que ejecutas la lógica nueva con datos de producción sin mostrársela al usuario, y comparas los resultados con la lógica antigua. Si no hay problemas, basta con activar la flag para completar la release.recommendation-v2.
Recolección de resultados de A/B testing mediante eventos
En la documentación oficial hay una mención al eventoFeatureRetrieved, pero no se muestran patrones reales de agregación de A/B testing.
El evento FeatureResolved se dispara solo la primera vez que se resuelve el valor de la feature. Aprovéchalo para registrar la asignación de variante al usuario.
Diferencia entre
FeatureResolved y FeatureRetrieved: FeatureResolved se dispara solo en la primera evaluación; FeatureRetrieved se dispara en cada comprobación. Para registrar asignaciones es adecuado FeatureResolved, y para seguimiento de vistas de página, FeatureRetrieved.Scope en jobs encolados
En los jobs de la cola no hay usuario autenticado, por lo que las comprobaciones de feature pueden comportarse de forma inesperada. Da un scope explícito al job.UI de gestión mediante un comando Artisan
Si creas un comando Artisan sencillo para gestionar flags, puedes operar las flags de producción sin despliegue.Refactorización segura del nombre de la feature (atributo Name)
Al renombrar una feature basada en clase, si cambia el nombre de la flag guardada en la BD, se resetean todas las flags de los usuarios. Fija el nombre de guardado con el atributo Name.
Conclusión
Una vez asimilados los fundamentos de la documentación oficial, con los siguientes patrones se aprovecha todo el valor de Pennant.Guía de Laravel Pennant
Para la instalación y el uso básico, consulta la página de la guía.