Com a grande demanda de profissionais por parte das empresas, muitos deles acabam sendo contratados sem ter o devido conhecimento sobre boas praticas de desenvolvimento de software, infraestrutura de desenvolvimento, protocolos de comunicacao, sistemas gerenciadores de banco de dados e muitas vezes ate conhecimento basico sobre sistemas operacionais.Alem disso, dentro das empresas existe uma demanda cada vez maior por projetos de software de alta complexidade, com prazos de entrega na maioria das vezes fora da realidade. O que faz com que muitos projetos sejam entregues sem testes, com falhas de implementacao, qualidade duvidosa e muitas vezes sem atender ao negocio do cliente.Como consequencia, apos implantado, o sistema passa a apresentar serios problemas como degradacao da performance, perda de dados, calculos incorretos, entre outros problemas, trazendo grandes prejuizos a empresa e fazendo com que os usuarios percam a confianca no sistema e por fim os proprios desenvolvedores.Direcionado para este cenario, o presente artigo visa demonstrar boas praticas de desenvolvimento de software e explicar os principios fundamentais para se criar um bom design. Veremos tambem a aplicacao de alguns padroes de projeto pouco difundidos, mas que sao de extrema importancia no dia a dia do desenvolvedor.Estilos de ArquiteturaQuando vamos planejar o desenvolvimento de um software, geralmente um dos primeiros itens que o arquiteto de software comeca a analisar e qual o melhor estilo de arquitetura que se aplica aocontexto do projeto. Neste ponto ele leva em consideracao diversos fatores, como os requisitos do software, custo, infraestrutura e conhecimento tecnico da equipe.Entender o estilo arquitetural adotado para o desenvolvimento traz diversos beneficios para os desenvolvedores e para a empresa como um todo, entre eles: fornecer uma linguagem comum entre os desenvolvedores e os demais envolvidos no projeto.Por exemplo, quando o estilo de arquitetura e SOA, os desenvolvedores podem ate conversar com pessoas de outras areas, que nao possuem conhecimento tecnico (como detalhes da linguagem de programacao, servidores de aplicacao, etc.), sobre o metodo envolvido na automacao dos processos de negocio, que as mesmas entenderao sobre o que e um servico, governanca e, dependendo do usuario, ate termos mais especificos, como escalabilidade.A Tabela 1 apresenta um resumo dos principais estilos de arquitetura. Estilo de Arquitetura Descricao Client-Server Tambem conhecida como arquitetura de duas camadas. Este tipo de arquitetura descreve a interacao entre um ou mais clientes e um servidor, atraves de uma conexao de rede. A aplicacao mais comum para esse tipo de arquitetura e um Banco de Dados no lado do servidor com a logica da aplicacao representada em Stored Procedures, e o lado do Cliente representado por aplicacoes conhecidas como Fat-Clients (Clientes Pesados), que muitas vezes contem a logica de negocio embutida no front-end. Como exemplo, podemos citar aplicacoes desenvolvidas com Delphi, Visual Basic, Oracle Forms, entre outros. Arquitetura baseada em Componentes Quando utilizamos uma arquitetura baseada em componentes, decompomos o design da aplicacao em componentes logicos com um fraco acoplamento, de forma que cada um deles seja individual e reutilizavel, com uma localizacao transparente e interface de comunicacao bem definida. Uma das grandes vantagens desse tipo de arquitetura e que ela promove a