A reutilização de software é o processo de implementação, desenvolvimento e atualização de sistemas de software utilizando recursos já existentes. Todo sistema de aplicação pode ser reutilizado, seja incorporando-o sem alterações em seu sistema ou desenvolvendo famílias de aplicações. Na realidade sempre é usada a mesma solução para problemas semelhantes. Normalmente o código escrito é reutilizado para outro projeto sempre que uma função similar é necessária. Um bom projeto, por sua vez, engloba fatores como consistência e coerência no projeto e implementação de componentes, capacidade de manutenção para simplificar a administração e o desenvolvimento e reutilização para permitir que componentes e subsistemas sejam utilizados em outras aplicações e em outros cenários.
O padrão arquitetônico (esquema de organização para estes sistemas de software) captura as estruturas de projeto de vários sistemas e elementos de software para que eles possam ser reutilizados. Durante o processo de escrita do código, os desenvolvedores encontram problemas semelhantes várias vezes dentro de um projeto, dentro da empresa e em suas carreiras. Uma maneira de resolver isso é criar padrões de projeto que dão aos engenheiros uma solução para reutilizá-los, permitindo que os engenheiros de software alcancem o mesmo resultado estruturalmente para um determinado projeto.
E o que pode ser reutilizado? As decisões tomadas durante a fase de projeto e implementação têm um enorme impacto sobre a qualidade e o custo total de propriedade de aplicações e serviços hospedados em nuvem. Ao dividir uma tarefa que realiza um processamento complexo, elementos separados podem ser reutilizados. Um exemplo são os componentes de uma aplicação, desde subsistemas até módulos ou componentes de software que implementam um único objeto ou função bem definida.
Também é possível reutilizar o sistema de aplicação completo ou ainda reutilizar conceitos de solução para resolver problemas estruturados de forma semelhante, o que inclui padrões de projeto e programação generativa. Estruturas de componentes, linhas de produtos de
aplicação, algoritmos legados, serviços de integração, além de blocos específicos de código, também são passíveis de reutilização.
Com algum trabalho de organização e planejamento para a reutilização de software, uma organização pode economizar tempo e dinheiro significativos. Pode-se destacar alguns benefícios-chave da reutilização de software, tais como a redução do tempo de desenvolvimento, economizando as horas gastas pelos programadores quando uma aplicação na qual eles estão trabalhando requer um código que já existe. Ao utilizar um componente já conhecido e aprovado, há menos riscos envolvidos na escrita de algo a partir do zero.
Outro benefício é a maior economia em tempo e custo. O código existente vem com documentação, garantia de qualidade existente e resultados de testes compatíveis. Tempo é dinheiro e a reutilização do código é rentável, pois maximiza substancialmente a produtividade e a qualidade da aplicação.
Ao reutilizar componentes ou código aprovados e certificados pela indústria a partir de uma aplicação existente e funcional, evita-se começar de baixo. O código já está testado para que se tenha garantia de um certo padrão de desempenho, em conformidade com as normas cumpridas no trabalho anterior e com a vantagem de ter um feedback sobre a experiência do usuário do software, permitindo que quaisquer deficiências sejam melhoradas futuramente.