O provisionamento é uma máquina de estado, não uma ação

Ninguém que tenha construído sistemas de provisionamento de recursos de infraestrutura acredita apenas em “criar”. Criar é uma jornada: validar a solicitação, reservar capacidade, alocar recursos, configurar, ativar. Cada etapa pode falhar e, quando uma falha no meio, você fica com algo que não é nem um recurso nem nada. Objetos semi-criados são uma realidade em sistemas de provisionamento em grande escala. O código que os encontra, finaliza ou varre é onde vive grande parte da engenharia real.

O faturamento tem o mesmo formato. Uma assinatura não é um evento; é uma máquina de estados: experimental, ativa, vencida, pausada, cancelada. Todos os bugs interessantes residem nas transições: a atualização que foi aplicada pela metade, a mudança de plano agendada para o final do período que foi acionada duas vezes, o teste que converteu, mas manteve seu preço de teste. Se você já perseguiu uma VM que existe no banco de dados, mas não em nenhum host, você já entende a assinatura que cobra um plano que o cliente não pode ver.

Considere um cliente que faz upgrade no meio do ciclo. A alteração do plano é confirmada no registro da assinatura, mas o serviço de direito nunca fica sabendo disso. O cliente paga o upgrade mas não recebe o acesso correspondente. Três semanas depois, o suporte recebe um ticket. O suporte pode ver a cobrança, mas não o direito ausente. Esta é a assinatura gêmea da VM que existe no banco de dados, mas não em nenhum host: a jornada de criação chegou à metade e ninguém a varreu.