Divide et Împera: Dividindo Tarefas, Fomentando a Agilidade e Atingindo Objetivos

RAFAEL SANTOS DE ALMEIDA
17 de Maio de 2019

Palavras-chave/Key-words: agile methodologies, dividir para conquistar, produtividade

Resumo: Nos últimos anos, as metodologias ágeis vêm ganhando muito espaço nas companhias ao redor do planeta. Neste contexto, uma das táticas utilizadas para executar atividades com maior eficiência é a divisão de tarefas complexas em pequenas entregas (o famoso “dividir para conquistar”).

Nos últimos anos, as metodologias ágeis vêm ganhando muito espaço nas companhias ao redor do planeta. Neste contexto, uma das táticas utilizadas para executar as atividades de um cronograma com maior eficiência é a divisão de tarefas complexas em pequenas entregas que contemplam todo o escopo do problema (o famoso “dividir para conquistar”). Apesar de ser um conceito altamente aplicado na área de desenvolvimento de software, sua história é muito mais antiga, encontrada nas ciências, na natureza e até mesmo nos campos de batalha.

O termo “dividir para conquistar” foi proferido inicialmente por Filipe II, rei da Macedônia entre 359 e 336 a.C., entretanto sua popularidade se deve a Napoleão Bonaparte, por se tratar de uma das táticas de combate mais utilizadas pelo capitão. Um dos principais fatos que comprovam sua maestria foi durante a batalha de Austerlitz [1], ocorrida em 2 de dezembro de 1805. Contando com aproximadamente 67.000 homens, Napoleão enfrentou as forças da coalizão formadas pelos impérios russo e austríaco, composto por 73.000 soldados. Mesmo em desvantagem numérica, o exército francês foi capaz de dividir as tropas inimigas ao meio, tornando-as mais vulneráveis e desorientadas, o que culminou em sua vitória. Ao todo, 15.000 homens do exército rival morreram em batalha e 12.000 foram capturados, contra 1.305 mortos e 573 capturados do exército de Napoleão.

Figura 2 – Batalha de Austerlitz [1]

A divisão do trabalho é também uma característica inerente aos sistemas biológicos mais sofisticados, como os genomas, organismos multicelulares e as sociedades de seres vivos, responsável por potencializar a evolução das espécies desde o surgimento da vida na Terra. Fenômeno capaz de ser observado em laboratório, a estratégia do "dividir para conquistar" pode resolver problemas biológicos em um curto espaço de tempo.

Assim como publicado em um artigo pela revista Nature [2], as bactérias Pseudomonas fluorescens, após sucessivas gerações, se especializam e se dividem em duas frentes de trabalho quando distribuídas em um meio de cultura: o primeiro tipo fornece um polímero umedecedor na borda da colônia, enquanto o segundo grupo empurra os organismos radialmente, favorecendo sua reprodução e ocupação pelo espaço.

Figura 3 - População de bactérias Pseudomonas fluorescens nos dias 3, 5 e 8 do experimento [2]

A divisão como meio de solução de problemas também pode ser encontrada nos algoritmos de ordenação, comumente utilizados por cientistas da computação para ordenar conjuntos de dados. Um exemplo é o algoritmo chamado merge sort [3]. Dado um grupo de valores numéricos, o algoritmo divide a sequência original em pares menores a serem ordenados. Estes conjuntos são agrupados a outros pares, formando uma sequência de quatro elementos, depois oito, dezesseis e assim sucessivamente, até que toda a sequência esteja organizada. Em geral, sua execução é muito mais eficiente do que a ordenação em série realizada por outros algoritmos, como o selection sort, cujo funcionamento consiste em organizar o conjunto de valores sequencialmente, analisando todo o vetor em busca do menor valor, depois o segundo menor, o terceiro menor e assim sucessivamente.

Por fim, até mesmo na engenharia (mais especificamente na área de análise de sinais) a simplificação pela divisão pode ser encontrada. Modelos matemáticos de sistemas físicos, definidos por equações diferenciais, podem ser determinados pela transformada de Laplace. Entretanto, seu uso é limitado a problemas em tempo contínuo, o que dificulta sua utilização em tempo discreto. Para isso, é preciso que o problema seja simplificado em frações menores, para instantes de tempo específicos. Neste contexto, surge a transformada Z.

Figura 5 – A transformada Z [5]

Como é possível observar, a quebra de problemas grandes e complexos permeia inúmeros casos em situações que muitas vezes nem percebemos, otimizando tarefas a princípio difíceis demais de serem resolvidas. Podemos utilizar este mesmo método das mais diversas formas ao nosso favor: dividindo grandes atividades de um sprint, objetivando a produção de pequenas entregas por vez, realizando testes a cada pequeno conjunto de código implementado, definindo meios de dividir determinada funcionalidade, escrevendo métodos mais enxutos que executam uma única tarefa, modularizando o código de uma aplicação…

Não há tarefas que não possam ser fragmentadas.

Há inúmeras possibilidades, bastando que se adapte ao nosso cotidiano (e por que não até mesmo em nossa vida?). Afinal, dividir também é multiplicar!

 

 

REFERÊNCIAS BIBLIOGRÁFICAS

[1] Battle of Austerlitz. McGill University. Disponível em:  <https://www.cs.mcgill.ca/~rwest/wikispeedia/wpcd/wp/b/Battle_of_Austerlitz.htm>. Acesso em: 10 mai. 2018

[2] WOOK, Kim; LEVY, Stuart; FOSTER, Kevin. Rapid radiation in bacteria leads to a division of labour. Nature Communications 7. 08 fev. 2016.

[3] Estrutura de Dados e Algoritmos. UFRJ. Disponível em:  <https://www.cos.ufrj.br/~rfarias/cos121/aula_07.html>. Acesso em: 10 mai. 2018

[4] Random Initial Order. Toptal. Disponível em:  <https://www.toptal.com/developers/sorting-algorithms/random-initial-order>. Acesso em: 10 mai. 2018

[5] TONIDANDEL, Danny Augusto Vieira. Entre o Real e o Complexo: Uma Visão Unificada do Conceito de Transformada. 2011. 144f. Dissertação de Mestrado – Universidade Federal de Minas Gerais, Belo Horizonte, 2011.