Muitos projetos começam com um bolo de funcionalidades a serem desenvolvidas e, então, o time precisa correr atrás de um valor de negócio desconhecido [1]. Ou seja, é como se soubessem que ter que correr, mas não soubessem a direção e nem porque estão correndo.

Quando alguém lhe pede para alterar algo da interface de usuário, por exemplo? Qual é o valor que está por trás dessa mudança? Reduzir o tempo do Processo? Ganhar novos Usuários? Reduzir a chance de que um erro aconteça? Quando o cliente diz “Preciso que seja incluído o Campo X no Sistema”. Você sabe o Motivo? Que valor está por trás disso? Será que isso realmente vai agregar algum valor? Para quem? De que forma? As vezes o cliente vem com “o como” em vez de vir com “o porquê”. Mas se ele vier com o porquê, junto com o time, podem chegar a “um como” muito melhor!

A Injeção de Funcionalidades é um Processo de Análise de Negócios criado por Chris Matts para resolver esse problema! O processo possui três passos bem simples que serão apresentados nesse curto artigo.

1. Persiga o Valor de Negócio

Quando o valor não está claro, as equipes não podem buscar outras formas, muitas vezes, mais eficientes de encontrar o valor e, a funcionalidade pode ser entregue, porém de forma distorcida e não entregar o valor que era esperado.

A Injeção de Funcionalidade propõe que o time comece criando um modelo de entrega de valor.

Ex: “Nós esperamos que o tempo médio de faturamento reduza de 20 minutos para 5 minutos, que o número de colaboradores dedicados ao processo reduza de 100 para 40, e a quantidade de emissões incorretas reduza de 900 notas fiscais para 100 notas fiscais.”

Um modelo como esse permite que o time avalie as funcionalidades que estão desenvolvendo e se, de fato, poderão ou não contribuir para que o modelo de valor seja colocado em prática.

Tornar esse modelo de valor explícito ajuda a criar um entendimento compartilhado de onde o valor está vindo [1].

Para te ajudar a criar o modelo de valor, você pode utilizar algumas ferramentas de pensamento crítico como o método dos 5 por quês da Toyota, por exemplo.

Com um objetivo claro, também fica mais fácil para se definir o que entra ou não entra no escopo. Basta procurar entender em que a funcionalidade contribuirá com o modelo de valor.

2. Injete as Funcionalidades

Depois de ter o modelo bem definido, é hora de criar uma lista de funcionalidades que deverão ser desenvolvidas para atingir o valor de negócio.

O importante é que deve haver uma ligação clara e objetiva entre as funcionalidades e valor de negócio [6].

Muitos analisas começam perguntando o que nós precisamos, em vez perguntar para que nós precisamos, e isso acaba levando a uma série de funcionalidades que para nada contribuem. Por isso, com Injeção de Funcionalidades você começa de trás para frente, ou seja, em vez de perguntar o que eu preciso (as entradas do sistemas) você pensa no porquê precisa (nas saídas do sistema).

É importante lembrar que o valor não está nas funcionalidades em si, mas no resultado que uso delas fornece ao usuário.

Tradicionalmente, as pessoas de negócio, vem com soluções meio-prontas em vez de apresentar o valor de negócio que estão buscando. Com Injeção de Funcionalidades o time propõe soluções em cima do valor apresentado.

Trabalhar com Valor, também é vacina contra “Analysis Paralysis“, porque em vez de pegar um lista gigante de funcionalidades, e pensar se elas são ou não relevantes, o time proativamente desenvolve funcionalidades que são relevantes para o negócio através de um modelo de valor.

De certa forma, Feature Injection é semelhante a TDD (Desenvolvimento Guiado por Testes), porque em vez de começar por escrever o código da funcionalidade, no TDD, você começa fazendo um teste de que verifica se o resultado está correto e depois faz a implementação da funcionalidade. Com Injeção de Funcionalidades, você começa com o Ouput do Sistema (Saídas, Resultado) e depois descobre os Inputs (Entradas) que precisa para conseguir o Ouput [5].

Essa história em quadrinhos publicada na InfoQ [8], mostra de forma divertida como o conceito de Injeção de Funcionalidades também está relacionado com Sistemas Puxados (assim como uma série de outros conceitos utilizados por métodos ágeis de desenvolvimento de software).

Feature Injection Comics by Chris Matts

Feature Injection Comics by Chris Matts

Baixa a História em Quadrinhos Completa no blog decision-coach.com: Parte 1, Parte 2Parte 3 e Parte 4.

Invertendo o Formato das Histórias de Usuários

Mike Cohn propõe o seguinte Modelo para se escrever histórias de usuário:

Como um <papel>
Eu quero <funcionalidade>
para que <valor de negócio>

A injeção de Funcionalidades propõe uma formato de diferente que começa pelo valor de negócio [3]:

Para que <valor de negócio>
como um <papel>
eu quero <funcionalidade>

Veja um exemplo apresentado por James Carr:

Para evitar spam no meu site
como um moderador de fórum
eu quero que os usuários preencham um captcha antes de comentar.

Ou ainda

Para evitar spam no meu site
como um moderador de fórum
eu quero que os usuários respondam uma pergunta matemática

Ou ainda

Para evitar spam no meu site
como um moderador de fórum
eu quero que determinados IPs sejam banidos

Note que o valor permanece, mas a funcionalidade pode mudar. Por isso é importante que o time foque em obter o valor de negócio e não a funcionalidade.

3. Encontre Exemplos

Agora é preciso encontrar as variáveis que podem afetar o output, ou seja expandir o escopo, e com a Injeção de Funcionalidades isso é feito através de exemplos. Trabalhar com exemplos é uma ótima forma de verificar se as premissas dos requisitos são de fato válidas.

Comece com os exemplos mais simples, depois parta para os exemplos mais específicos e complicados. Busque exemplos específicos e não exemplo generalizados.

Procure por cenários, por casos reais. É horas de buscar os “quandos”, os “ses”, os “naquele caso”, os “em particular”, etc..

Conclusão

Injeção de Funcionalidade permite que você não se comprometa cedo demais como uma solução ruim que pode nem sequer agregar valor, mas que, em vez disso, o valor de negócio seja o foco do processo e que puxe tudo o mais que for preciso para que o valor possa ser conquistado.

Aprenda Mais

Karl Scotland propõe um modelo que mistura Injeção de Funcionalidades com o conceito de Mapeamento de Estórias de Usuário de Jeff Patton e Ideia de Walking Skeleton do Alistair Cockburn [7]:

Misturando Ideias por Karl Scotland

Misturando Ideias por Karl Scotland

Leia mais em: http://availagility.co.uk/2012/09/14/feature-injection-fidelity-and-story-mapping

Palestra Feature Injection no Scan Agile 2012 por Chris Matts: 

Referências

[1] Feature Injection: three steps to success. Artigo de Chris Matts & Gojko Adzic na InfoQ  Acesse em http://www.infoq.com/articles/feature-injection-success.

[2] Palestra Feature Injection por Chris Matts no Scan Agile 2012.

[3] Pulling Power por Liz Keogh; Acesse em http://www.infoq.com/articles/pulling-power.

[4] Feature Injection: Putting the Value First In Your User Stories por James Carr; Acesse em http://blog.james-carr.org/2009/10/02/feature-injection-putting-the-value-first-in-your-user-stories

[5] BDD, Feature Injection (and the Whirlpool) por Ian Cooper; Acesse em http://codebetter.com/iancooper/2010/06/15/bdd-feature-injection-and-the-whirlpool

[6] BDD, Feature Injection, and the Fallacies of Product Ownership por Elena Yatzeck ; Acesse em http://pagilista.blogspot.com.br/2011/11/bdd-feature-injection-and-fallacies-of.html.

[7] Feature Injection, Fidelity and Story Mapping por Karl Scotland acesse em: http://availagility.co.uk/2012/09/14/feature-injection-fidelity-and-story-mapping.

[8] Feature Injection Comics por Amr Elssamadisy; Acesse em http://www.infoq.com/news/2009/05/feature-injection-comics

[9] CukeUp!: Antony Marcano & Chris Matts on Feature Injection. Acesse em http://skillsmatter.com/expert-profile/agile-scrum/chris-matts