Como lidar com prioridades na sua empresa através de OKRs (Parte 2 de 2)

Implementação dos OKRs no Google Sheets

Leonardo Vinícius
Eusouelliot
Published in
16 min readMay 30, 2019

--

Há um certo desconhecimento quando o assunto é OKRs.

No texto passado, tentei abordar um pouco sobre o que são OKRs, explicar que eles podem ser extremamente úteis para empresas — independente do setor e serviço prestado — e discutir a parte psicológica por trás de seus resultados.

Nele, a criação dos segundos OKRs do Elliot foi utilizada para demonstrar como realizamos todo o processo desde decisões de prioridades até a listagem de tarefas específicas que deveriam ser realizadas para alcançarmos essas prioridades.

Nessa segunda parte, aqueles itens decididos previamente — pilares da empresa, listagem de KRs, criação da estrutura dos OKRs — serão incorporados no Google Sheets. A ideia é que seja possível calcular o progresso da companhia e das equipes para o trimestre, analisar se a empresa está convergindo para seu pilar master, e em qual velocidade.

Tentei encontrar algumas plataformas que estruturassem, calculassem e mostrassem o progresso da empresa com OKRs, semanalmente. Foi muito difícil achar exatamente o que eu queria, e os que eram um pouco próximos disso eram pagos. Então necessitei desenvolver um método próprio no Google Sheets para que satisfizesse as necessidades do Elliot, e sem custos.

Para fins de organização, a criação da tabela será abordada em 6 partes:

1. Criação de planilhas

2. Definição de ponderações

3. Estruturação de progressos por data

4. Organização da base de dados

5. Criação de gráficos

6. Acompanhamento dos progressos e níveis de confiança (Monday Commitments e Friday Wins)

Aqui você poderá ver o documento completo dos OKRs do Elliot.

1. Criação de planilhas

Os OKRs são uma estrutura top-down, como comentado no texto passado. Ou seja, há definições para a empresa primeiramente, para depois elas serem divididas em equipes e atividades específicas.

Após pesquisa e definição do que era prioridade para o Elliot, definimos 3 objetivos e 14 resultados-chave para a companhia — organizados no Gitscrum. Eles foram separados em 6 equipes: Devs-Features, Devs-Estrutura, Design, Marketing, Financeiro e Dados, e, ao dividir esses 14 KRs da companhia, geramos 125 KRs para as equipes, distribuídos nessas 6 equipes.

As equipes alimentam os objetivos gerais da companhia. Ou seja, quando esses 125 KRs das equipes chegarem a um progresso de 100%, todos os 14 KRs da companhia também estarão completos, e o avanço da companhia será de 100%.

A seção 1 é simplesmente a organização dos objetivos e resultados-chave em tabelas no Google Sheets. Se você for replicar esse método de forma idêntica, é indispensável que se use a mesma estrutura de colunas — há uma para a companhia e outra para as equipes.

Tabela da companhia — 3 objetivos e 14 resultados-chave

As células vazias irão ser preenchidas depois com fórmulas.

A planilha do Design será utilizada como exemplo de equipe, visto que todas as equipes tem o mesmo formato de planilha. Nesse caso, numerei todos os KRs das equipes também.

Tabela do Design — estrutura é diferente da tabela da companhia

A coluna B (Effort) representa o esforço para cada atividade do design — mencionado no texto anterior, enquanto o Confidence e o “on-track” na coluna A representam o nível de confiança e o Aligned to na coluna C mostra o KR da companhia em que essa atividade específica está atrelada.

Várias colunas que só servem para fins de dados, e não de avaliação, serão ocultadas no final. A coluna B, por exemplo, ficará oculta. O documento com o resultado final é apresentado com todas esses colunas ocultas.

O nível de confiança (NC) é simplesmente uma expectativa da equipe quanto ao objetivo. Ele abrange o objetivo todo e será utilizado somente para as equipes.

Por exemplo, o primeiro objetivo do Design assume 9 KRs, do 55 ao 63.

O NC poderá ser diferenciado a partir de 3 termos:

on-track: expectativa de que o objetivo terá um progresso de 100%
lagging: expectativa de que o objetivo terá um bom progresso, mas não 100%
at-risk: expectativa de que o objetivo terá um baixo progresso

Os NCs são atualizados a cada semana, e a intenção de os utilizar é verificar se alguma equipe necessita de ajuda ou está sobrecarregada, e até mesmo detectar ineficiências.

Caso tenha interesse em destacar esses níveis de confiança, a formatação condicional pode ser utilizada:

Formatar → Formatação Condicional

2. Definição de ponderações

Nessa etapa, vamos trabalhar com os esforços, o aligned to, e definir ponderações para os KRs da companhia. Isso é feito, pois as prioridades tem valores diferentes, umas valendo mais, e outras menos.

O primeiro passo é nomear os intervalos B:C de todas as equipes e criar uma nova página no documento do Sheets, chamada de Base de Dados:

Dados → Intervalos Nomeados
Crie a página “Base de Dados”

Ao criar a nova página de Base de Dados, uma query deverá ser feita na célula A1 da mesma.

=QUERY({DevsF;DevsE;Design;Marketing;Financeiro;Dados};"select sum(Col1), Col2 where Col1 is not null group by Col2 label sum(Col1) 'Effort', Col2 'KR'"; 0)
O “Effort” e o “KR” aparecem como resultado do “label” na query

A parte que envolve {DevsF;DevsE;Design;Marketing;Financeiro;Dados} agrega os intervalos nomeados anteriormente (B:C de todas as equipes). Nesse caso, nosso intervalo B:C do Design foi nomeado por “Design”.

Você pode copiar essa query e alterar somente a parte entre chaves pelos seus intervalos nomeados. Ela deve funcionar normalmente se você tiver pelo menos dois intervalos nomeados — duas equipes nesse caso.

Essa query vai somar o número de esforço (Effort) de todas as equipes e agrupar pelo número do KR da companhia — estará identificada no Aligned to.

O KR 1, por exemplo, tem um esforço de 79 — é a soma de todo o esforço envolvido dos KRs das equipes que estão alinhados com o KR 1 da companhia.

O próximo passo é definir ponderações para os KRs da companhia. Acrescente uma coluna ao lado direito da coluna A da companhia e coloque as ponderações desejadas para cada KR — total de 100%.

Aqui dividi o valor de 100% entre os 14 KRs dessa forma:

Por exemplo, se lançarmos o App 2.0 e mais nada for feito, a companhia terá um progresso de 20%, que é exatamente o valor da ponderação — é a nossa prioridade máxima para o trimestre.

A ideia aqui é colocar valores maiores, quanto maior a prioridade.

Na coluna C da Base de Dados, vamos aplicar um VLOOKUP. Ele vai bater o número da KR da coluna B da Base com o número da KR da planilha da companhia, e puxar o valor da ponderação.

A página em que está localizada a planilha da companhia foi nomeada por Companhia:

=VLOOKUP('Base de Dados'!B2;Companhia!A:B;2;FALSE)
Ponderações vieram em decimal, coloque em % se for sua preferência

Divida a ponderação pelo esforço e replique para as outras linhas.

Isso resultará no valor de progresso potencial para a companhia para cada 1 de esforço finalizado de determinado KR.

Exemplo: 1 de esforço completado para a KR 13 = 0.0025 de progresso para a companhia ou 0.25%.

Pond/Effort

3. Estruturação de progressos por data

Na tabela que compartilhei antes, todas as colunas e linhas que serviriam como dados foram ocultadas, para fins visuais. Se tiver curiosidade, e até mesmo dúvidas da programação das células, deixo aqui a tabela aberta.

Como o processo dos OKRs é trimestral, e deverá haver atualizações semanalmente. É necessário criar uma estrutura que permita que as equipes ponham progressos a cada semana, e que depois seja visível a mudança nesses progressos. Essa terceira parte vai englobar a criação desa estrutura.

Alguns dados vão ser copiados para outras colunas, simplesmente para evitar problemas de dependência circular no Sheets.

Iguale a célula da coluna C à coluna L em todas as linhas que tiver um KR. Não copie valores, pois se o Aligned to mudar, a coluna L não mudará automaticamente.

A segunda parte vai calcular quanto o KR específico vale para o progresso da companhia. Por exemplo, o KR 56 completo vale 1.012658228% para o Elliot.

O cálculo é feito na coluna M por um VLOOKUP que procura o KR alinhado na tabela de dados gerais, e retorna o valor do Pond/Effort para aquele KR (coluna D da base de dados) — relembrando que esse valor é quanto cada esforço completo vai gerar de progresso para a equipe, dado um KR alinhado à companhia. No final, esse número é multiplicado pelo Effort daquele KR da equipe. Arraste a fórmula para as outras células.

=VLOOKUP(C7;'Base de Dados'!B:D;3;FALSE)*B7

Na linha 3, nomeie as colunas e a partir da coluna N ponha todas as segundas-feiras do trimestre abrangido (13 datas). Nosso caso vai do dia 29/04 até dia 22/07. 13, pois a primeira segunda-feira é o ponto de partida = progresso de 0%. A coluna L vai ser nomeada de Aligned to devido ao fato de serem os mesmos valores da coluna C e a coluna M será nomeada de Value — é o valor do KR para a companhia, sendo a soma de todos os Values = 1.

As células vazias que cruzarem com uma data e um KR, deverão ser atualizadas todas as segundas-feiras. Essas células vazias são justamente o espaço para a equipe, ou um responsável por ela, colocar o progresso de determinado KR naquela data específica.

Isso tudo vai ficar mais claro no decorrer do texto.

Nomeação das colunas e datas

A coluna J é onde vão ficar os progressos atuais. A célula J3 vai simbolizar o atual progresso da equipe, enquanto as demais na coluna representarão o atual progresso dos KRs e dos objetivos.

Nos que envolvem KRs (estão em cinza — menos a J3), uma fórmula deverá ser aplicada, com referência entre a coluna N e Z, para buscar o último valor atualizado de progresso do KR.

=IFERROR(LOOKUP(10000;N7:Z7);"")

O IFERROR vai resultar em uma célula vazia, caso a fórmula não ache valores. Caso contrário, o output será o último valor, da esquerda para a direita, ou o mais atual de acordo com a data. De novo, essas fórmulas vão resultar no progresso atual do KR específico.

Logo após, o progresso atual dos objetivos deverão ser calculados (em azul). O primeiro objetivo do Design vai englobar do KR 55 até o KR 63. Então, o progresso atual dele vai ser a soma do Value vezes o progresso atual dividido pela soma total do value desses KRs.

=IFERROR(SUMPRODUCT(J7:J15;M7:M15)/SUM(M7:M15))
Coloquei a coluna J em porcentagem. Assim fica mais fácil a visualização. As colunas N:Z também serão colocadas em porcentagem posteriormente.

Adicione uma coluna à direita da Z, ou seja a AA. Essa vai ser a coluna em que uma sigla para o time deverá será adicionada. O VLOOKUP adicionado anteriormente deveria buscar o último valor da linha, como havia comentado. Porém, a fórmula abrangia as células entre N e Z, então as siglas da coluna AA não aparecerão como resultado.

4. Organização da base de dados

Essa parte é a mais complexa e detalhista. Vou mostrar como pegar todos aqueles dados das planilhas dos times, centralizar na página Base de Dados, e manusear eles para acompanharmos progressos.

A primeira parte deve ser nomear todos os intervalos das equipes entre as colunas L e AA. Mais para frente, vamos criar uma planilha, a partir de uma query, na página Base de Dados que vai unificar todos esses valores.

Nomeei esse intervalo por “PDesign”

Na query que faremos, vamos colocar todos os intervalos nomeados das equipes, como na query da seção 2 que as botava entre chaves: {DevsF;DevsE;Design;Marketing;Financeiro;Dados}.

Acrescente duas linhas abaixo da linha 4 na equipe que você colocará primeiro na query, e nas demais acrescente somente uma linha abaixo da linha 4.

Entre o intervalo L:AA, acrescente os seguintes valores somente na(s) linha(s) acrescentadas anteriormente:

A query só vai funcionar caso tenhamos pelo menos 1 valor não nulo para cada coluna entre L:AA, por isso a inclusão dessas linhas e valores.

Como nomeei todos esses intervalos L:AA com um “P” antes, e acrescentei duas linhas na equipe do Design a parte entre chaves ficará: {PDesign;PMarketing;PDevsF;PDevsE;PFinanceiro;PDados}

Logo em seguida, a query e o local dela serão demonstrados.

Agora vamos começar a moldar a página de Base de Dados para a criação dos gráficos e acompanhamento dos progressos das equipes e da companhia como um todo.

Na página da Base de Dados, acrescente na coluna J uma célula para Data, Otimista, Desejado, Pessimista, Atual, e as equipes.

Acrescente esses valores na coluna J, a partir da célula J1

A partir da célula K1, iguale as células às datas de alguma das planilhas, ou somente copie elas.

Igualei às do Design — não muda nada, só precisamos das datas semanais

Como temos 12 semanas de OKRs (12 semanas de trabalho, 13 datas), vamos categorizar esses progressos por:

Otimista: Progresso de 100%
Desejado: Progresso de 70%
Pessimista: Progresso de 40%

O progresso é semanal, então vamos colocar qual seria o progresso semanal necessário para atingir cada um desses valores no dia 22-jul, ou a data final.

Esses valores serão referência para o progresso Atual da empresa. Assim, saberemos se o progresso da companhia está dentro do desejado.

Para o Otimista → 100%/12
Para o Desejado → 70%/12 e para o Pessimista → 40%/12

Na coluna J, abaixo das equipes, aplique a query que abrange os intervalos N:Z de todas as equipes — mencionada antes:

=QUERY({PDesign;PMarketing;PDevsF;PDevsE;PFinanceiro;PDados};"select Col1, Col2*Col3, Col2*Col4, Col2*Col5, Col2*Col6, Col2*Col7, Col2*Col8, Col2*Col9, Col2*Col10, Col2*Col11, Col2*Col12, Col2*Col13, Col2*Col14, Col2*Col15, Col16 where Col2 is not null label Col1 'KR'";0)

A query puxará todos os Aligned to na coluna J, enquanto as demais colunas serão iguais ao Value vezes o progresso da semana colocado manualmente. Melhor dizendo, a query fixa o valor da coluna Value (expresso pela “Col2” na fórmula) e multiplica esse valor pelo progresso % colocado a cada semana. Caso o progresso ainda não tiver sido completo, a célula ficará em branco.

Agora que temos todos os progressos atualizados de cada KR das equipes, podemos somar eles no Atual. Se todos os KRs estiverem com um progresso de 100%, o Atual também será de 100%. Esses valores vão simbolizar o progresso geral da companhia, o valor que envolve todos os progressos de todas as equipes.

É exatamente esse valor que vai ser comparado com o Otimista, Desejado e Pessimista.

=IF(SUM(K14:K1000)=0;"";SUM(K14:K1000))

Arraste essa fórmula até a coluna da última data, nesse caso a W.

O Atual envolve a soma de todas as equipes. Então, como inserimos anteriormente a sigla da equipe nas colunas AA, temos como discriminar esses progressos por equipe.

Também na coluna K, aplique essa fórmula para as equipes. O “d” representa a sigla que coloquei para o Design. Para as outras equipes, é só alterar essa sigla e arrastar todas essas fórmulas até a coluna W (última data).

=IF(SUMIF($X14:$X1000;"d";K14:K1000)=0;"";SUMIF($X14:$X1000;"d";K14:K1000))

O Elliot está na sua quarta semana de OKRs no momento em que estou escrevendo. Então, substitui os progressos com os valores reais do Elliot até aqui.

Podemos ver que nosso progresso está abaixo do desejado, principalmente puxado pela equipe de Devs-Features, Marketing e Dados.

Os próximos passos dessa etapa serão programar o progresso geral das equipes e os progressos parciais e geral dos KRs da companhia, como seus objetivos tambem.

Para os gerais — tanto das equipes como o da companhia — já temos os dados.

A a partir da célular K8 na Base de Dados, temos os dados do Design, assim, é só aplicar um LOOKUP nesse intervalo entre K8:W8 e buscar a última atualização para a equipe.

=IFERROR(LOOKUP(1000;'Base de Dados'!K8:W8);0)

Para as outras equipes, as colunas entre K:W permanecem, mas a linha 8 é alterada.

Fazer o mesmo pra companhia, só alterar a linha para 5 — para puxar os dados do Atual, dessa forma:

=IFERROR(LOOKUP(1000;'Base de Dados'!K5:W5);0)

Até esse momento, temos os progressos parciais e integrais dos KRs das equipes e também o progresso de seus objetivos, mas temos somente o progresso geral da companhia.

Podemos calcular os parciais e os objetivos da companhia, pois temos os dados do Aligned to e dos progressos por semana. Porém, para isso necessitaremos realizar uma outra query, a qual somará todos os progressos dos KRs das equipes, e agrupar pelos KRs da companhia.

Na coluna I, ao lado esquerdo do “KR”, aplicaremos um LOOKUP para resultar no último progresso desse KR da equipe. Arraste essa fórmula para todos os KRs da coluna J.

=LOOKUP(1000;K14:W14)

O próximo passo é nomear essa coluna, junto com a J abaixo do “KR”. No nosso caso, o intervalo foi I13:J147.

E realizar uma query, que some todos eses progressos e agrupe por KR.

=QUERY(Objetivos;"select J, SUM(I) where J>=1 group by J label sum(I) 'Progress', J 'KR'";1)
Veja que a coluna foi numerado do 1 ao 14 — exatamente o número de KRs da companhia.

Agora tudo fica mais simples para colocarmos fórmulas que resultem no progresso de determinado KR.

É só aplicar um VLOOKUP que busque o KR da coluna A da companhia na coluna F da Base de Dados, e traga o valor (Progress) da coluna G da Base de Dados. Com esse resultado, é só o dividir pela ponderação, apresentada na coluna B da companhia

=VLOOKUP(A7;'Base de Dados'!F:G;2)/B7

Para calcularmos o progresso do primeiro objetivo, somamos o Progress dos KRs envolvidos (1 ao 6) e dividimos pelo valor total de suas ponderações (nesse caso a soma é 52%). Aplicamos o mesmo para os outros objetivos, mas alteramos os KRs envolvidos.

5. Criação de gráficos

Essa é a última parte, mas também a mais fácil e a que mostra o porquê de toda essa tabela.

Os gráficos vão expor os nossos três parâmetros mencionados anteriormente, e também o progresso geral da equipe e das equipes para cada data selecionada. Assim, poderemos ver como a empresa está evoluindo a cada semana.

Vamos criar dois gráficos, para ficar mais fácil a visualização.

Para criar o gráfico da companhia, basta selecionar os seguintes dados:

Como havia falado antes, estamos com um progresso abaixo do desejado, quase cruzando o “Pessimista”

O gráfico das equipes é feito da mesma forma, mas selecionando dados diferentes:

Dados, Marketing e Devs-F muito abaixo do Desejado

O próximo passo para matar todo esse esquema maluco é ocultar as linhas e colunas de dados, simplesmente para ficar mais bonito.

Da companhia ocultei as colunas A:B, e das equipes, colunas B, L, M e AA, além das linhas 5, 6 do Design e linha 5 das demais.

Apresento agora, o resultado final da companhia e das equipes:

Coloquei os NCs com formatação condicional

Sim, o processo é trabalhoso, exige paciência, calma e inteligência emocional. Porém, toda a estrutura pode ser aproveitada para OKRs futuros, pois somente algumas alterações vão ter que ser feitas, já que a parte mais complexa de dados estará programada.

A estrutura pode sim ser mudada, e vou tentar simplificar ela cada vez mais, deixando uma Base de Dados mais simples, um processo mais automático de mudanças e um visual mais bonito.

Acredito ser um gasto de tempo necessário e valioso, pois a estrutura antecede atos, visando uma taxa maior de acerto.

5. Acompanhamento dos progressos e níveis de confiança (Monday Commitments e Friday Wins)

Com os NCs e progressos semanais, poderemos analisar como andam os progressos (companhia e equipes) periodicamente.

Vamos utilizar o método mais convencional de manutenção, o qual assume duas imprescindíveis reuniões semanais — uma na segunda-feira e uma na sexta-feira. Ambas são rápidas, mas vão ser diferentes para cada empresa,visto suas particularidades.

A de segunda-feira, chamada de Monday Commitment, revisará como andam esses progressos e confianças, atualizará as equipes do que está ocorrendo nos processos internos e externos e tentará melhorar a eficiência na execução das tarefas.

A de sexta-feira, chamada de Friday Wins, abordará conquistas, é um momento mais leve para mostrar a parte boa que foi executada na semana.

Monday Commitment

Aqui no Elliot, estruturamos as reuniões de segunda-feira em quatro seções. Duas abordando a companhia como um todo, e duas abrangendo todas as equipes — uma a uma.

Companhia: Atualizações da empresa para a semana — Comentar progressos gerais (gráficos)

Equipes: Prioridades da equipe para a semana — Progressos e NCs da semana

Com isso, conseguimos avaliar como as equipes e consequentemente a companhia estão progredindo, se há alterações necessárias a serem feitas e é um momento em que conseguimos desalienar as equipes — todas sabem o que está sendo executada e priorizado por todas.

Friday Wins

O mais correto seria realizar essa reunião no final do expediente da sexta-feira, com algumas comidas, um clima leve de final da semana e todos em uma mesma sala.

Confesso que tenho uma certa dificuldade em estruturar essa reunião, principalmente pelo fato de todos os desenvolvedores trabalharem remoto e não termos uma carga horária e horários fixos.

A intenção dessa reunião é apresentar progressos individuais, coisas legais que foram executadas na semana, passos importantes que foram dados, conquistas nos números da empresa e etc.

Os envolvidos na empresa devem sair motivados e prontos para a partir da próxima segunda-feira serem ainda melhores. Assim, informações ruins e comentários de mudanças necessárias devem ser evitados, pois isso é função das reuniões das segundas-feiras.

Esse texto foi longo, mas preferi não omitir nenhuma informação que pudesse ser importante.

Somando os dois textos, você terá gasto cerca de 30 minutos.

Mas há muita informação que pode ser válida para você e sua empresa. Há tantas variações possíveis desse método que os preciosos 30 minutos podem se tornar muito recompensadores.

Obrigado pela leitura!

Acompanhe o Elliot nas redes sociais (@eusouelliot) ou através do nosso site eusouelliot.com

Facebook
Instagram
Twitter
LinkedIn

--

--