Introdução

Vivemos numa época muito especial onde o desenvolvimento de software é uma das maiores áreas em expansão e onde existe a menor taxa de desemprego, o mundo é cada vez mais virtual e assente em software, logo torna-se critico o estudo e identificação de um modelo de liderança de equipas de desenvolvimento de software de forma a maximizar os índices de produtividade que neste caso serão a qualidade e eficiência do código fonte desenvolvido.

As equipas de desenvolvimento de software são quase sempre compostas por indivíduos com egos muitos fortes e de ideias fixas relativamente aos caminhos que querem seguir quando estão a desenvolver código, por outro lado temos ainda uma transmissão a estes programadores de uma realidade em que o ambiente onde é feita programação deve ser descontraído, sem horários e sem pressões. Temos como exemplo máximo a GOOGLE onde não existem lugares de trabalho fixos, não existem horários e onde por exemplo podemos jogar playstation durante o horário de trabalho, ou seja, o modelo é orientado ao objetivo com uma aparente remoção da carga hierárquica e processual a que estamos habituados em outras profissões.

A liderança é a capacidade de conseguir que as pessoas façam o que não querem fazer e gostem de o fazer.
Harry Truman

Sendo o objetivo de uma determinada equipa de desenvolvimento de software é a produção de código fonte com qualidade e eficiência, normalmente estas equipas são multidisciplinares constituídas por membros com conhecimentos e modos de atuação distintos, desta forma é vital que o líder destas equipas esteja preparado para lidar com esta heterogeneidade de realidades bem com as expectativas que a atualidade conferem aos programadores, só assim o projeto poderá ter sucesso, ou seja uma das chaves é a liderança.

Definição de equipa de desenvolvimento

Neste contexto uma equipa será um conjunto de pessoas, com competências que se complementam e que têm como objetivo o desenvolvimento de determinado software, pode ser constituída por exemplo por programadores, por administradores de base de dados, gestores de projetos, designers, etc. ou seja existe uma enorme heterogeneidade das skills de cada recurso da equipa, no entanto para o sucesso. esta equipa deve ser coesa e eficaz

Motivar uma equipa de desenvolvimento de software nos dias que correm é algo difícil e de extrema importância, a tecnologia muda muito rapidamente e manter uma equipa a utilizar uma tecnologia antiga, pode ser motivo para desmotivação, logo devem existir modelos e planos para a atenuar, esta desmotivação que pode ser critica recorrendo a um esquema de motivação, definido por exemplo pelo líder, que se pode dividir em dois grandes grupos:

Motivação intrínseca (psicológica, auto estima, reconhecimento)

Motivação extrínseca (materiais, salários, seguros, …)

É impossível desligar o emocional do profissional, ou seja, se emocionalmente o recurso não se sentir bem com a sua tarefa certamente não será produtivo ou proactivo, influenciando assim o sucesso do projeto, no caso especifico do desenvolvimento de software existe o chamado “trending” ou linguagens de programação da moda, por exemplo o angularJs, scala, etc. Um programador de pascal, linguagem com mais de 30 anos, pode sentir-se desmotivado por não usar as linguagens da moda, nesse caso deverá ser feito um trabalho de motivação do recurso reforçando a necessidade fundamental dele utilizar essa tecnologia para que o projeto tenha sucesso.

Uma equipa só pode ser uma equipa se tiver um objetivo comum, caso contrario será um grupo de pessoas e não uma equipa, desta forma a comunicação com a equipa para a transmissão desse objetivo é algo fundamental, as metas têm de estar bem definidas, bem como a avaliação da compreensão dessa mensagem, uma equipa só pode ser eficaz se compreender os objetivos. Tanto o líder como a equipa devem ter o conhecimento total do projeto, desta forma irá existir uma visão de todos os envolvidos que irá fazer com que as tarefas sejam definidas e executadas num âmbito maior.

A formação de uma equipa não acontece imediatamente, quando reunimos profissionais para um determinado projeto o que temos é um grupo, para que exista uma equipa estão tipificadas algumas fases nomeadamente a formação que é quando os membro analisam a equipa bem com a liderança, seguidamente temos a discussão os membros mais impacientes questionam a liderança, nesta fase existe pouco foco no trabalho, seguidamente temos a normalização ou seja os membros aceitam-se entre si, o trabalho eficiente só é possível com a ultima fase a execução onde toda a equipa está funcional.

Outro problema que existe atualmente nas equipas de desenvolvimento é a rotatividade dos recursos, em linguagens muito procuradas como por exemplo o JAVA existe um enorme assédio por parte das empresas, desta forma é fundamental que o recurso tenha um laço emocional à equipa, levando-o a uma opção com base nas emoções quando por exemplo outra empresa lhe oferece um vencimento superior.

Liderança de equipas de desenvolvimento

Tendo o líder a capacidade de influenciar as suas equipas e a sua performance, e embora a capacidade de liderança possa ser uma competência adquirida, existem traços de personalidade que segundo alguns estudos potenciam a capacidade de liderar bem como a eficácia da liderança. Como exemplos destes traços de personalidade temos por exemplo a insurgência, a estabilidade emocional, a consciência, e a familiaridade, ou seja, existe uma forte relação entre a personalidade do líder e a sua capacidade de liderar.

No contexto deste trabalho o líder tem de ter uma visão muito abrangente das tecnologias e embora não exista a necessidade de ser um expert em cada linguagem deve de a entender, para que os elementos da equipa sigam o caminho traçado pelo líder para chegar ao objetivo que é o desenvolvimento da aplicação, se por acaso esses elementos começarem a por em causa o nível de conhecimento do líder, a liderança está em risco.

O líder de uma equipa de desenvolvimento de software, tal com outros lideres, pode ter tipificado o seu comportamento identificado em catorze categorias segundo Yukl, Wall e Lepsinger (1990), a saber:

  1. planeamento e organização;

  2. resolução de problemas;

  3. clarificação;

  4. informação;

  5. motivação;

  6. monitorização;

  7. consultoria;

  8. reconhecimento;

  9. apoio;

  10. gestão de conflito e team building;

  11. networking;

  12. delegação;

  13. desenvolvimento de competências;

  14. recompensação.

No contexto de equipas de desenvolvimento de software, o líder deve ser um potenciador do que melhor existe em cada recurso, segundo Kurt Lewin, considera-se que existem 3 estilos diferentes autoritário ou autocrático; participativo ou democrático; delegativo ou “rédea solta”.

Como podemos ver na imagem acima o estilo de liderança perfeito resulta da interceção destes 3 estilos, ou seja, deverá ter a capacidade de adaptar o tipo de liderança consoante as varias condicionantes que no caso de desenvolvimento de software podem ser:

  1. Prazos de entrega

  2. Tecnologia

  3. Conhecimentos da equipa

  4. Experiência da equipa

  5. Conflitos Internos

  6. Fontes de informação

  7. Procedimentos internos

  8. Tipos de tarefa

  9. Níveis de stress

Ou seja uma equipa de desenvolvimento de software deverá ter um líder que entende perfeitamente o que se está a passar no ciclo de desenvolvimento, bem como quais os problemas ou expectativas de cada membro da equipa e consoante isso aplica o estilo, por exemplo se um dos recursos chega sempre atrasado ou não cumpre regras básicas, poderá ter de aplicar o estilo autoritário, se existir um novo desafio em que varias decisões tecnológicas têm de ser tomadas, o líder pode ser participativo ou seja envolve a equipa na tomada da decisão, no entanto é ele que toma a opção final, por ultimo e se existe uma confiança na equipa dos programadores o líder pode delegar tarefas na equipa, tendo elas nesse caso a capacidade de decisão com a sua eminente responsabilização e não culpabilização .

Vamos então a um exemplo prático em contexto tecnológico:

Situação

Atuação do Líder

Estilo de Liderança

Não é respeitado o procedimento de fazer comentários no código fonte

Informa a equipa que o procedimento não está a ser respeitado e que deve ser.

Autoritário

Mudança para uma nova tecnologia web

Discute e pede a opinião da equipa, toma a decisão com base nesse input

Participativo

Desenvolvimento de novos módulos de comunicação do sistema de informação

Delega numa equipa a decisão para a construção desses módulos

Delegativo

Uma especial atenção ao modelo delegativo, muitas vezes poderá existir uma sobrecarga do recurso em quem o líder está a delegar ou a tendência de delegar tarefas que são monótonas pela sua natureza, por exemplo validar uma folha de calculo com 4000 registos, este tipo de delegação pode trazer desmotivação e insatisfação para com a liderança.

Pelo conceito de liderança natural, por exemplo no caso da multidão em pânico em que um individuo assume a liderança e é apoiado pelos restantes, o líder é “eleito” pelos restantes tendo em conta determinado conjunto de características, no caso das equipas de desenvolvimento de software esse líder é escolhido por uma direção e imposto à equipa, não existe seleção natural, e o que pode acontecer é que a equipa tenha tendência para o rejeitar, nesse caso o líder terá de entender o porque dessa rejeição e tentar manipular e influenciar os membros da equipa para a sua aceitação,

Liderar a equipa

Depois de termos visto as definições de líder e de equipa, torna-se então importante falar da liderança da equipa e de como produzir um ecossistema onde os caminhos, os erros e os sucessos são lidados de forma a que todos se mantenham focados.

O sucesso de uma equipa depende do sucesso da sua liderança

De uma forma honesta, os erros vão sempre acontecer e o importante é como vão ser encarados esses erros, numa equipa de desenvolvimento existem quatros pilares fundamentais:

Logo em caso de erro o mesmo deve ser tratado com compreensão, respeito e confiança, desta forma a confiança da equipa mesmo que falhe é potenciada, em caso extremo o líder deve assumir o erro e proteger a sua equipa dos mensageiros do apocalipse e do caos. É importante que a autoestima da equipa e de cada recurso esteja sempre no mais alto nível dessa forma deverão ser elogiados e recompensados pelo seu trabalho.

Tão importante com a gestão dos erros da equipa é a celebração do sucesso, normalmente os projetos de desenvolvimento de software estão divididos em tarefas mais pequenas, desta forma sempre que exista um alcance do objetivo, deverá ser celebrado o sucesso.

Tendo em conta que muitas vezes estes projetos têm de ser desenvolvidos num curso de espaço de tempo, o líder destas equipas deverá ainda ter em conta o desperdício de tempo que podem originar varias tarefas e procedimentos tais como a falta de metas e objetivos bem definidos, a desorganização pessoal, o não saber dizer não ao cliente, o perfeccionismo em detrimento da disponibilização da plataforma, a delegação insuficiente ou inexistente, os problemas de comunicação ou ainda o excesso de reuniões ou a falta de preparação e condução das mesmas, resumindo uma frase chave da gestão das equipas é a “otimização do tempo”, os programadores em geral tendem em não ter uma noção muito real do tempo e em contextos que os prazos são apertados isto pode ser crucial para o sucesso do projeto.

Outra realidade das equipas de desenvolvimento de software é a falta de maturidade dos recursos, maioritariamente são jovens acabados de sair da universidade e que nunca estiveram numa realidade laboral, desta forma a liderança destas equipas pode apoiar-se numa liderança situacional, ou seja a liderança é exercida de acordo com o nível de maturidade dos liderados, o líder vai reduzindo o controlo sobre o liderado tendo em conta o crescimento do seu nível de maturidade, estes níveis de maturidade podem classificar-se em :

  • Baixa (M1). Pessoas que não tem vontade e nem capacidade de assumir a responsabilidade por determinada tarefa;
  • Entre baixa e moderada (M2). Pessoas que não tem capacidade, mas têm disposição assumir a responsabilidade por determinada tarefa;
  • Entre moderada e alta (M3). Pessoas que tem capacidade, mas não estão dispostas a assumir a responsabilidade por determinada tarefa;
  • Alta (M4). Pessoas que tem capacidade e estão dispostas a assumir a responsabilidade por determinada tarefa.
  • Consoante estes níveis o líder exerce o estilo de liderança, a representação desses estilos é feita na seguinte tabela:

Níveis de Maturidade dos colaboradores

M1

Não é capaz e não quer assumir responsabilidades ou é inseguro

M2

É incapaz de assumir responsabilidades mas tem vontade ou confiança

M3

É capaz mas não tem vontade de assumir responsabilidades ou é inseguro

M4

É capaz de assumir responsabilidades e, simultaneamente tem vontade e confiança

Estilos de liderança apropriados

Não é empenhado nem competente

É Empenhado mas incompetente

Não é empenhado mas é competente

É emprenhado e competente

Estilo E1 (diretivo)

  • Dar ordens
  • Guiar
  • Dirigir
  • Estabelecer
Estilo E2 (persuasivo)

  • Vender
  • Explicar
  • Colaborar
  • Comprometer
Estilo E3 (participativo)

  • Participar
  • Encorajar
  • Colaborar
  • Comprometer
Estilo E4 (Delegativo)

  • Delegar
  • Observar
  • Monitorizar

Faculta normas específicas e supervisão rígida, diz o que fazer, quando e como

Explana as decisões e clarifica; debate , explica o porquê

Partilha ideias, debate, apoia, facilita, fomenta a participação na tomada de decisões

Delega as responsabilidades na tomada de decisões e na sua implementação

Componente de tarefa do líder

Baixa

Elevado

Baixa

Baixa

Componente de relacionamento do líder

Elevado

Elevado

Elevado

Baixa

Ou seja, o sucesso de um projeto de desenvolvimento de software depende ainda do nível de maturidade dos seus recursos bem como da capacidade do seu líder em identificar em cada recurso o nível de maturidade e adaptar o seu estilo de liderança.