O que é produtividade no desenvolvimento de software e como ela pode ser medida? Estas são algumas das perguntas mais frequentes feitas por gerentes técnicos. Compreender a produtividade envolve vários insights chave. Por exemplo, nosso cofundador, Mashooq Badar, recentemente discutiu o uso de métricas SPACE, um novo framework desenvolvido por vários pesquisadores da DORA*, para entender a produtividade dos desenvolvedores.
Além disso, durante o Codurance Fireside Chat #63, Adam Tornhill, fundador da CodeScene, e Sandro Mancuso, cofundador da Codurance, exploraram o conceito de produtividade, seu impacto na qualidade do projeto e métodos para medi-la dentro das equipes de desenvolvimento.
Resumindo, a produtividade de uma equipe de desenvolvimento pode ser definida como a relação entre o valor do software produzido e o investimento necessário para produzi-lo. Sim, a produtividade de um desenvolvedor de software é mensurável, mas muitas variáveis precisam ser consideradas, incluindo a Experiência do Desenvolvedor, que desempenha um papel crucial.
Aqui, vamos guiá-lo na identificação de possíveis problemas de produtividade dentro de suas equipes de desenvolvimento que possam estar impactando seus resultados de várias maneiras. Vamos explorar alternativas para mudar essas dinâmicas e melhorar a produtividade da equipe, juntamente com soluções de especialistas da indústria para ajudá-lo a alcançar esses objetivos.
Como afirma o Dicionário Oxford, a produtividade é definida como: "A taxa na qual um trabalhador, uma empresa ou um país produz bens, e a quantidade produzida, em comparação com o tempo, trabalho e dinheiro necessários para produzi-los." Identificar áreas potenciais onde sua equipe está perdendo produtividade é o primeiro passo para fazer melhorias. No contexto do desenvolvimento de software, isso pode se manifestar como desafios de codificação, baixo engajamento em projetos, má distribuição de trabalho ou dinâmicas de equipe disfuncionais, conforme descrito pelos princípios da Experiência do Desenvolvedor (DevEx).
Atrasos frequentes em prazos e orçamentos: Perder prazos ou exceder orçamentos de forma consistente pode indicar que a produtividade da sua equipe precisa de melhorias. Isso pode ser causado por um planejamento irrealista, subestimação das tarefas ou ineficiências no processo de desenvolvimento.
Alta taxa de bugs após lançamentos: Um número significativo de bugs ou problemas relatados após um lançamento sugere problemas nos processos de desenvolvimento e testes. Isso pode exigir melhores práticas de garantia de qualidade, testes mais abrangentes ou um foco em Desenvolvimento Orientado a Testes (TDD) para melhorar a qualidade do código.
Baixa moral e engajamento: Comunicação ineficaz pode levar a mal-entendidos, trabalho repetitivo e erros, contribuindo para a desmotivação e o desengajamento da equipe. É essencial abordar as causas principais, como documentação pouco clara, silos departamentais ou desafios relacionados ao trabalho remoto, e implementar práticas que facilitem uma melhor colaboração.
Práticas de desenvolvimento ineficientes: O uso de ferramentas, tecnologias ou metodologias desatualizadas pode desacelerar significativamente o desenvolvimento. Se a equipe não estiver usando controle de versão de forma eficaz, carece de pipelines de integração contínua/implantação contínua (CI/CD) ou está sobrecarregada por processos manuais que poderiam ser automatizados, essas são áreas claras para melhorias.
Desalinhamento entre o produto e a equipe de desenvolvimento: Quando as equipes de desenvolvimento não estão cientes das necessidades do produto, podem produzir código e recursos sem entender o contexto e os requisitos. Isso pode levar a um desconexão, onde a equipe sente que seu trabalho não tem impacto no produto final, reduzindo seu senso de pertencimento dentro da empresa.
Diversas barreiras podem dificultar a produtividade em equipes de desenvolvimento de software. Abordar essas barreiras é crucial para aumentar a eficiência, garantir a entrega pontual dos projetos e manter a moral elevada entre os membros da equipe.
Uma das barreiras mais significativas é o acúmulo de dívida técnica, que inclui correções rápidas, código desatualizado e falta de documentação. A dívida técnica pode impactar gravemente a produtividade, já que a equipe gasta mais tempo com manutenção do que desenvolvendo novas funcionalidades.
Outro problema comum é a ausência de membros da equipe com as habilidades ou conhecimentos necessários, o que pode causar gargalos. Resolver isso pode envolver o treinamento da equipe existente ou a contratação de novos talentos para preencher as lacunas.
Outras barreiras importantes incluem o uso de ferramentas, software ou infraestrutura desatualizados que não atendem às necessidades do projeto, e a falta de objetivos e prioridades claros. Esses problemas podem levar a ineficiências e esforços desperdiçados.
Medir a produtividade de uma equipe de desenvolvimento de software envolve avaliar vários fatores quantitativos e qualitativos para obter uma visão abrangente da eficiência e eficácia da equipe. Como mencionado anteriormente, pesquisadores experientes* desenvolveram um novo framework chamado SPACE para medir a produtividade dos desenvolvedores.
Aqui estão algumas abordagens e métricas adicionais que podem ajudar a avaliar a produtividade:
Se a sua equipe de desenvolvimento de software está enfrentando problemas de produtividade, é provável que isso se deva a uma combinação de fatores que podem variar amplamente dependendo do contexto específico da equipe, do projeto e do ambiente. No entanto, algumas razões comuns frequentemente surgem como contribuintes para os desafios de produtividade.
Requisitos pouco claros ou que mudam com frequência são um dos desafios mais significativos no desenvolvimento de software. Eles podem levar à confusão, tarefas repetidas e desmotivação entre os membros da equipe. Isso está intimamente relacionado à comunicação e colaboração inadequadas. Quando os membros da equipe não conseguem se comunicar de forma eficaz, é provável que ocorram mal-entendidos, prazos perdidos e erros.
A dívida técnica e os processos ineficientes também são grandes contribuintes para problemas de produtividade. À medida que a base de código se torna mais complexa, torna-se cada vez mais difícil para os desenvolvedores implementar novas funcionalidades ou manter as existentes. Combinada com processos ineficientes, como procedimentos de testes manuais, a dívida técnica pode desacelerar drasticamente o progresso da equipe e reduzir a produtividade geral.
Criamos este guia para ajudá-lo a reconhecer os problemas que podem estar afetando a produtividade da sua equipe de desenvolvimento, entender suas causas e fornecer dicas sobre como começar a resolvê-los.
Melhorar a experiência do desenvolvedor (DevEx) pode aumentar significativamente a produtividade das equipes de desenvolvimento de software. A experiência do desenvolvedor abrange todos os aspectos das interações de um desenvolvedor com suas ferramentas, processos e ambiente, com o objetivo de tornar o desenvolvimento de software mais rápido, eficiente e agradável.
Por exemplo, fornecer aos desenvolvedores ferramentas e tecnologias atualizadas e adequadas às tarefas em questão pode melhorar muito a eficiência deles. Essa abordagem reduz o tempo gasto em tarefas mundanas e permite que os desenvolvedores se concentrem mais na resolução criativa de problemas. Da mesma forma, incentivar a aprendizagem contínua e oferecer oportunidades para que os desenvolvedores adquiram novas habilidades e conhecimentos pode levar a soluções mais inovadoras e ganhos de produtividade.
Criar um ambiente de trabalho positivo e de apoio também é crucial. Reconhecer conquistas, fornecer feedback construtivo, lidar com o burnout e prestar atenção ao equilíbrio entre vida profissional e pessoal não apenas aumenta a produtividade, mas também melhora a satisfação no trabalho e ajuda a reter talentos. Investir em uma experiência positiva para o desenvolvedor é um investimento no bem-estar da sua equipe de desenvolvimento e no sucesso geral dos seus projetos de software.
Entendemos que não existe uma solução mágica ou imediata. No entanto, existem várias maneiras de aumentar a produtividade da sua equipe de desenvolvimento, e nem todas podem estar alinhadas com o seu negócio ou objetivos.
Como líder técnico implementando mudanças, a fase inicial é crucial para estabelecer as bases de uma equipe de desenvolvimento mais produtiva e eficiente.
Aqui, exploramos várias abordagens que podem ajudá-lo a atender às suas necessidades de produtividade.
Investir em programas de treinamento direcionados para equipes de desenvolvimento de software é uma decisão estratégica voltada para o aprimoramento de habilidades, o que, em última análise, melhora a produtividade.
Com um treinamento focado, os desenvolvedores podem aprender as melhores práticas e maneiras mais eficientes de usar ferramentas e linguagens, contribuindo diretamente para uma maior qualidade de código e redução no tempo de desenvolvimento.
Um desafio do treinamento é que melhorar habilidades e manter a produtividade frequentemente entram em conflito. Melhorar as habilidades geralmente exige uma redução temporária na produção. Empresas que priorizam resultados rápidos podem negligenciar essa questão, potencialmente frustrando os desenvolvedores e alcançando apenas ganhos de curto prazo.
Para organizações que buscam uma mudança cultural profunda, expansão ou projetos de modernização de software, um treinamento específico pode não ser suficiente. Esse treinamento pode não abordar todos os aspectos necessários para o crescimento da empresa e pode carecer de contexto, pois fornece ferramentas para resolver problemas, mas não pode cobrir todos os cenários.
Nos programas de Melhoria Contínua (CIPs) no desenvolvimento de software, processos iterativos são usados para melhorar a eficiência, a qualidade e o desempenho ao longo do tempo. Esses programas incentivam a avaliação regular de práticas, processos e resultados para identificar oportunidades de melhoria.
Os CIPs oferecem vários benefícios substanciais, incluindo:
No entanto, introduzir a melhoria contínua pode apresentar desafios. Implementar um CIP pode ser intensivo em recursos e financeiramente exigente, especialmente para equipes pequenas ou projetos com orçamentos apertados. Equipes menores podem se beneficiar de um treinamento mais enxuto e do desenvolvimento de trajetórias de carreira claras para seus membros.
O principal objetivo de um Centro de Excelência (CoE) é melhorar o desempenho e a eficácia de uma organização. Um CoE promove a colaboração e facilita a troca de ideias para distribuir o conhecimento coletivo.
Ele visa:
Um dos principais desafios na implementação de um CoE é a resistência à mudança. Para que um CoE tenha sucesso, seu propósito deve ser claro e aceito por todas as partes interessadas. Além disso, estabelecer e manter um CoE pode exigir recursos significativos, como tempo, dinheiro e pessoal qualificado, o que pode ser desafiador sem um parceiro estratégico para guiar a iniciativa.
O coaching técnico foca em capacitar os funcionários, aprimorar seus métodos de trabalho e melhorar seu desempenho. O objetivo é otimizar processos e práticas, aumentando a qualidade das entregas.
Investir nas pessoas e promover uma cultura de aprendizado faz com que se sintam valorizadas e mais motivadas. Ao expandir seu conhecimento, elas produzem melhores resultados e produtos, o que, por sua vez, leva a uma maior retenção de talentos.
Um dos maiores desafios na implementação do coaching técnico é a ideia equivocada de que ele consiste em atividades isoladas ou algumas sessões de treinamento, em vez de representar uma mudança cultural. Esse equívoco pode levar à crença de que, se resultados rápidos não forem visíveis, o coaching técnico é ineficaz. No entanto, a entrega e o aprendizado são objetivos que muitas vezes conflitam; melhorar habilidades e competências pode inicialmente desacelerar a entrega, fazendo com que os resultados tangíveis demorem a aparecer.
Nesta playlist de 9 capítulos, José Enrique Rodríguez Huerta, MD e Técnico Coach na Codurance Espanha, oferece uma visão geral de todo o processo de Coaching Técnico: isso inclui conceitos, metodologias, ferramentas e diretrizes para ajudá-lo a aumentar suas chances de sucesso ao fazer o coaching de uma equipe técnica.
Ao buscar melhorar a produtividade de uma equipe de desenvolvimento de software, as organizações frequentemente enfrentam a decisão entre desenvolver soluções internamente ou terceirizar. Essa decisão deve ser baseada em uma análise aprofundada das necessidades específicas da organização, suas capacidades e objetivos estratégicos, equilibrando os trade-offs entre controle, custo, expertise e flexibilidade.
Dependendo da complexidade do projeto, a equipe interna pode não ter as habilidades ou experiência necessárias, o que pode limitar a qualidade da solução ou estender os tempos de desenvolvimento. A terceirização, por outro lado, oferece acesso a uma ampla gama de talentos e às tecnologias mais recentes. Fornecedores especializados têm experiência com projetos complexos e podem oferecer expertise que pode não estar disponível internamente.
A terceirização oferece flexibilidade e escalabilidade, permitindo que as organizações ajustem os recursos com base nos requisitos do projeto. Também pode ser uma solução econômica para aqueles com um orçamento apertado, pois elimina a necessidade de investimento a longo prazo em recrutamento e fornece o treinamento necessário para os funcionários.
Sim, ferramentas podem aprimorar a produtividade de uma equipe de desenvolvimento de software ao automatizar tarefas rotineiras, melhorar a colaboração e simplificar o processo de desenvolvimento.
O surgimento de várias ferramentas de Inteligência Artificial (IA) também impactou positivamente o desenvolvimento de software. Embora a IA Generativa (GenAI) seja frequentemente destacada por sua assistência na escrita de código, detecção de bugs e testes, essas ferramentas também podem aumentar a satisfação e colaboração da equipe ao otimizar fluxos de trabalho e melhorar o desempenho.
No entanto, é essencial reconhecer algumas limitações. Embora a GenAI possa melhorar a produtividade, ela continua sendo uma ferramenta e não pode substituir os desenvolvedores. Portanto, seu uso deve ser adaptado ao contexto específico de cada projeto, com o devido controle sobre sua aplicação.
Em nosso eBook sobre Inteligência Artificial Generativa (Gen AI) no desenvolvimento de software, exploramos algumas das ferramentas mais utilizadas atualmente, como ChatGPT e GitHub Copilot, seus prós e contras, e como aplicá-las de forma eficaz em suas equipes.
Automação de Tarefas Repetitivas: Ferramentas de automação podem reduzir significativamente o tempo necessário para testes e implantação, melhorando a eficiência geral e permitindo que os desenvolvedores se concentrem em aspectos mais complexos e criativos do desenvolvimento de software.
Melhoria na Colaboração e Comunicação: Ferramentas como sistemas de controle de versão (por exemplo, Git), plataformas de gerenciamento de projetos (por exemplo, Jira) e ferramentas de comunicação (por exemplo, Slack) facilitam uma melhor colaboração entre os membros da equipe, especialmente para equipes remotas.
Melhoria na Qualidade e Manutenção do Código: Ferramentas como ambientes de desenvolvimento integrados (IDEs), plataformas de revisão de código e analisadores de código estático ajudam a melhorar a qualidade do código, detectando erros, impondo padrões de codificação e sugerindo melhorias.
Integração Contínua e Entrega Contínua (CI/CD): CI/CD é mais do que apenas um processo; representa uma mudança cultural. Um pipeline de CI/CD automatiza os pequenos passos necessários para colocar novas funcionalidades em produção, desde a execução de testes até a implantação de novas funcionalidades de forma contínua usando estratégias de implantação como implantação canário ou azul-verde.
Incorporar as ferramentas certas no seu processo de desenvolvimento de software pode levar a melhorias significativas na produtividade. No entanto, é crucial selecionar cuidadosamente ferramentas que estejam alinhadas com as necessidades e fluxos de trabalho da sua equipe para maximizar seus benefícios. Além disso, fornecer treinamento e suporte adequados para essas ferramentas é essencial para garantir que a equipe possa utilizá-las de forma eficaz para aumentar a produtividade.
As práticas de Extreme Programming (XP) podem influenciar a produtividade de uma equipe de desenvolvimento ao promover a excelência técnica, melhorar a comunicação e fomentar um ambiente de trabalho colaborativo.
XP é baseado em cinco valores fundamentais: comunicação, simplicidade, feedback, respeito e coragem. Esses valores orientam a forma de trabalhar e a mentalidade dos membros da equipe motivados que buscam objetivos comuns.
Aqui estão algumas práticas-chave que podem ajudar a aumentar a produtividade das equipes de desenvolvimento:
Desenvolvimento Iterativo: Ciclos curtos e iterativos permitem ajustes rápidos com base no feedback, reduzindo a probabilidade de trabalho prolongado em funcionalidades desalinhadas.
Desenvolvimento Orientado a Testes (TDD): Garante a confiabilidade e reduz o tempo gasto depurando, permitindo mais tempo para o desenvolvimento de funcionalidades.
Programação em Par: Aumenta a qualidade do código e facilita o compartilhamento de conhecimento, reduzindo os custos de manutenção a longo prazo e aumentando a eficiência da equipe.
Integração Contínua: Minimiza problemas de integração ao mesclar regularmente as alterações de código, garantindo uma base de código estável e confiável.
Refatoração: Melhora regularmente a qualidade do código sem alterar a funcionalidade, mantendo a base de código limpa e gerenciável, facilitando mudanças futuras.
Design Simples: Focar na simplicidade e evitar complexidade desnecessária pode levar a tempos de desenvolvimento mais rápidos e manutenção mais fácil.
Escolher a solução de produtividade certa para sua equipe de desenvolvimento de software envolve uma consideração cuidadosa de vários aspectos importantes para garantir que a ferramenta ou sistema selecionado atenda efetivamente às necessidades da equipe e aumente sua eficiência operacional. Aqui estão alguns fatores críticos a serem considerados ao tomar sua decisão:
Ao preparar um caso de negócios para implementar uma solução que aumentará a produtividade, há vários aspectos a considerar. No entanto, focar em três fatores principais pode frequentemente garantir o sucesso: entender seu público, saber o que eles precisam saber e delinear o retorno sobre o investimento (ROI).
Construir um caso de negócios convincente é crucial para ganhar apoio e manter o foco. Mesmo que você identifique claramente um problema, as partes interessadas afetadas pelo projeto precisam entender como a solução as impactará.
Um caso de negócios bem elaborado ajudará a engajar as partes interessadas que você pretende influenciar e fornecer uma base sólida para todo o projeto.
Não ter um caso de negócios seria como entrar em uma batalha sem um plano.
José Enrique Rodríguez Huerta
MD and Technical Coach na Codurance Espanha
Criamos um Modelo de Apresentação de Projeto de Produtividade para ajudá-lo a estabelecer as bases para sua iniciativa. Este modelo foca no problema, no plano e nos benefícios, auxiliando você a defender sua proposta e obter o apoio das partes interessadas.
Na Codurance, temos mais de 10 anos de experiência ajudando empresas a aumentar sua produtividade para alcançar seus objetivos. Em 2023, concluímos com sucesso 96% de nossos projetos dentro do prazo e do orçamento. Esse histórico permitiu que nossos clientes escalassem efetivamente e melhorassem o desempenho de suas equipes. Nossa vasta experiência nos ensinou a identificar rapidamente áreas que precisam de melhoria na produtividade, treinar equipes nas melhores práticas e estabelecer uma cultura de excelência que promove o crescimento sustentável.
Escolher um parceiro estratégico é uma decisão crítica que pode impactar significativamente a eficiência, o crescimento e a capacidade de inovação da sua organização. É necessário realizar uma avaliação minuciosa para garantir que o parceiro esteja alinhado com os objetivos, valores e necessidades específicas da sua organização.
Para ajudá-lo a fazer a escolha certa, criamos uma lista de verificação para avaliar os requisitos que seu parceiro de desenvolvimento de software deve atender para garantir uma colaboração bem-sucedida:
Especialização em tecnologias e práticas relevantes: Certifique-se de que o parceiro tenha expertise nas tecnologias, ferramentas e práticas mais recentes relevantes para sua equipe de desenvolvimento, como práticas DevOps, metodologias ágeis, computação em nuvem, práticas de teste, programação extrema e ferramentas de automação. A abordagem deles para melhorar a produtividade deve estar alinhada com a cultura e os valores da sua organização.
Visão estratégica: Para alcançar uma mudança sustentável, seu parceiro deve ter uma visão estratégica que alinhe as soluções com seus objetivos de negócios de longo prazo. Procure um parceiro que priorize a inovação e a melhoria contínua para manter sua equipe à frente da curva tecnológica e competitiva no mercado.
Foco em resultados tangíveis: É imperativo escolher um parceiro que esteja focado em entregar resultados mensuráveis. Eles devem ter critérios de sucesso claros e um processo robusto de garantia de qualidade para garantir que qualquer solução ou estratégia implementada atenda aos mais altos padrões e seja escalável ao longo do tempo.
A Scentmate da dsm-firmenich é a primeira plataforma de curadoria de fragrâncias que utiliza inteligência artificial para automatizar recomendações de fragrâncias e co-criação, oferecendo soluções de alta qualidade para empreendedores e pequenas e médias empresas.
A equipe da Scentmate da dsm-firmenich fez parceria com a Codurance para otimizar seu software, escalar seus sistemas e introduzir melhores práticas baseadas em artesanato de software. Juntos, transformamos seu MVP legado em uma plataforma estável com 99,95% de disponibilidade do sistema. Também refinamos a precisão do seu mecanismo de curadoria e automatizamos o processo de pedido de fragrâncias.
O resultado foi uma redução significativa no tempo de resposta das amostras de fragrâncias de 4 semanas para 48 horas, o que impulsionou as vendas e aprimorou a experiência do cliente. Leia o estudo de caso completo da Scentmate da dsm-firmenich aqui.
A eClinicalWorks (eCW) é um dos maiores provedores de software de saúde e segurança baseado em nuvem nos EUA. Seu produto principal, o sistema de Registros Médicos Eletrônicos (EMR), gerencia o histórico completo de documentação clínica dos pacientes e interopera com outros sistemas de saúde. A eCW reconheceu a necessidade de modernizar seus sistemas e preparar a plataforma EMR para a próxima década de crescimento rápido.
A equipe da Codurance desenvolveu um Programa de Melhoria Contínua (CIP) estratégico para ajudar a liderança sênior da eCW a priorizar projetos de melhoria com base no valor para o negócio. O CIP foi gerido de forma eficiente utilizando metodologias ágeis, princípios de artesanato de software e uma mentalidade DevOps. Facilitou a transferência de conhecimento por meio de tarefas, permitindo uma abordagem de aprender e aplicar, e promovendo uma nova cultura de trabalho dentro da organização.
Essa iniciativa levou à execução de 6 projetos de melhoria estratégica em áreas-chave de negócios (4 liderados pela Codurance, 2 pela eCW com o suporte da Codurance). Também introduziu métodos de trabalho aprimorados em toda a organização, com uma compreensão clara do ROI e uma redução na dívida técnica acumulada. Leia o estudo de caso completo da eCW aqui.
A VeryChic, parte do Grupo Accor, líder global em hospitalidade, oferece experiências de luxo cuidadosamente selecionadas em hotéis de classe mundial e serviços VIP. Colaboramos com a VeryChic durante sua jornada de modernização e migração para a nuvem para enfrentar os desafios técnicos que estavam impedindo sua capacidade de escalar e oferecer uma experiência superior ao usuário.
Nós treinamos as equipes de TI deles em melhores práticas de desenvolvimento, como Desenvolvimento Orientado a Testes (TDD) e Código Limpo, permitindo que eles se concentrassem mais na inovação em vez de correção de bugs.
A empresa fez a transição de uma plataforma manual com lançamentos mensais para uma abordagem de CI/CD com vários lançamentos diários. Essa mudança foi suportada pela nova infraestrutura de nuvem AWS, que possibilitou o gerenciamento automatizado dos catálogos de viagens e reduziu o tempo de atualização de 1 hora para 2 minutos. Leia o estudo de caso completo da VeryChic aqui.
O artesanato de software é e continuará sendo nossa metodologia principal: Profissionalismo, pragmatismo e orgulho. Ao aderirmos às melhores práticas derivadas dessa filosofia, entregamos no prazo e dentro do orçamento, ao mesmo tempo em que fomentamos uma mentalidade de busca contínua pela excelência. Essa abordagem eleva o padrão profissional do desenvolvimento de software.
Uma cultura de melhoria contínua deve estar no cerne de qualquer equipe de desenvolvimento: Para aumentar a produtividade de maneira sustentável e escalável, é essencial que uma cultura de melhoria contínua esteja incorporada na equipe.
Manter-se atualizado com as tendências da indústria é crucial: Manter-se informado sobre novas práticas, ferramentas e sistemas garante que as soluções de nossos clientes sejam construídas com as mais recentes inovações.
O aprendizado é uma parte integral de quem somos: Nossa curiosidade nos impulsiona a aprimorar constantemente nossas habilidades por meio do aprendizado contínuo e da troca coletiva de ideias.
Adaptabilidade é essencial: Cada cliente tem necessidades únicas, e parte da nossa abordagem é personalizar nossas soluções para oferecer o melhor resultado possível para cada caso específico.
* SPACE is a framework proposed in a paper by Nicole Forsgren at GitHub, Margaret-Anne Storey at the University of Victoria plus Chandra Maddila, Thomas Zimmermann, Brian Houck and Jenna Butler at Microsoft Research. Read the full paper here.
Get in touch and we'll help you design a plan tailored to your needs.