Antigamente, quando falávamos de programação estruturada, os programadores normalmente criavam os programas baseando-se numa sequência lógica: primeiro se criava a tela principal do sistema, com o login de acesso e o menu de funcionalidades, depois criava-se os cadastros básicos, depois os cadastros mais complexos, depois as operações do sistema e por fim, os relatórios. Quase todas as equipes utilizavam essa ideia de processo de criação de software.
Entretanto, para o mundo orientado a objetos essa técnica mostrou-se ineficiente. Construir software orientado a objetos tem outra lógica, outra ideia: agora, os programadores criam os diversos pedaços (componentes) de software, cada um especializado em um tipo de tarefa. Exemplo: cria-se um componente de interface de usuário, outro de gerenciamento de login e segurança, outro para cadastros, outro para relatórios, tudo de forma bem genérica. Depois, é hora de montar o sistema, juntando os diversos componentes em outros componentes mais específicos, que realizam as tarefas pontuais. Para isso, reutilizam-se os componentes genéricos integrando-os por meio de componentes mais especializados.