Não há nada funcional sobre specs funcionais

Não escreva um documento de especificações funcionais

Esses documentos de projeto geralmente acabam tendo quase nada a ver com o produto finalizado. Aqui está o porquê:

Especificações funcionais são fantasias

Elas não refletem a realidade. Um aplicativo não é real até que os construtores estejam construindo, os designers estejam desenhando, e as pessoas estejam usando. Especificações funcionais são apenas palavras no papel.

Especificações funcionais são sobre apaziguamento

Elas são sobre fazer todos se sentirem envolvidos e felizes o que, embora caloroso e fofinho, não é tão útil. Elas nunca são sobre fazer escolhas difíceis e expor custos, coisas que precisam acontecer para construir um ótimo aplicativo.

Especificações funcionais apenas levam a uma ilusão de acordo

Um grupo de pessoas concordando em parágrafos de texto não é um verdadeiro acordo. Todos podem estar lendo a mesma coisa, mas estão pensando algo diferente. Isso inevitavelmente aparece mais tarde: “Espera, isso não foi o que eu tinha em mente.” “Hã? Não foi assim que descrevemos.” “Foi sim e todos concordamos com isso — você até deu sua aprovação.” Você sabe como é.

Especificações funcionais te forçam a fazer as decisões mais importantes quando você tem menos informações

Você sabe menos sobre algo quando começa a construí-lo. Quanto mais você o constrói, mais você o usa, mais você o conhece. É quando você deve estar tomando decisões — quando você tem mais informações, não menos.

Especificações funcionais levam ao excesso de recursos

Não há resistência durante a fase de especificação. Não há custo para escrever algo e adicionar outro bullet point. Você pode agradar alguém que é um incômodo adicionando o recurso preferido dele. E então você acaba projetando para esses bullet points, não para humanos. E é assim que você acaba com um site sobrecarregado que tem 30 abas no topo da tela.

Especificações funcionais não te deixam evoluir, mudar e reavaliar

Uma funcionalidade é aprovada e acordada. Mesmo se você perceber durante o desenvolvimento que é uma má ideia, você está preso a ela. Especificações não lidam com a realidade de que, uma vez que você começa a construir algo, tudo muda.

Então, o que você deve fazer no lugar de uma especificação? Vá com uma alternativa mais breve que te mova em direção a algo real. Escreva uma história de uma página sobre o que o aplicativo precisa fazer. Use linguagem simples e faça rápido. Se levar mais de uma página para explicar, então é complexo demais. Esse processo não deve levar mais de um dia.

Então comece a construir a interface — a interface será a alternativa para a especificação funcional. Faça alguns esboços rápidos e simples no papel. Depois comece a codificá-lo em HTML. Ao contrário de parágrafos de texto que estão abertos a interpretações alternativas, designs de interface são um terreno comum no qual todos podem concordar.

A confusão desaparece quando todos começam a usar as mesmas telas. Construa uma interface que todos possam começar a olhar, usar, clicar e "sentir" antes de começar a se preocupar com o código de backend. Coloque-se o máximo possível na frente da experiência do cliente.

Esqueça as especificações fixas. Elas te forçam a fazer grandes decisões-chave muito cedo no processo. Contorne a fase de especificação e você manterá a mudança barata e permanecerá flexível.

Especificações Inúteis

Uma "especificação" é quase inútil. Eu nunca vi uma especificação que fosse grande o suficiente para ser útil e precisa.

E eu vi muitos trabalhos totalmente ruins que foram baseados em especificações. É a pior maneira de escrever software, porque por definição significa que o software foi escrito para corresponder à teoria, não à realidade.

—Linus Torvalds, criador do Linux

Combata os bloqueadores

Eu descobri que as pessoas insistindo em documentos extensivos de requisitos antes de começar qualquer design eram realmente "bloqueadores" tentando apenas desacelerar o processo (e geralmente pessoas sem nada a contribuir no design ou pensamento inovador).

Todo o nosso melhor trabalho foi feito com alguns conceitos em nossas cabeças sobre melhorar um site, fazendo um protótipo rápido (estático), mudando um pouco o design e depois construindo um protótipo ao vivo com dados reais. Depois de testar esse protótipo, geralmente tínhamos um projeto real em movimento e um bom resultado.

—Mark Gallagher, desenvolvedor de intranet corporativa