Critério de elaboração de Propostas de Desenvolvimento

Passar um orçamento e prazo correto para desenvolver um sistema é quase que impossível, pois é um trabalho basicamente de previsão do futuro, onde alguém tenta imaginar todo o trabalho que será executado para se chegar a algum resultado desejado pelo cliente.

Pensei em alguns itens e critérios para ajudar a refletir sobre como criar um orçamento mais real.

Simples CRUD (Create Read Update Delete)

Comecemos pelo mais simples, há algumas telas que serão apenas para cadastros simples, ou seja Telas de Inclusão, Leitura, Alteração ou Exclusão (CRUD em inglês)

Por exemplo, cadastro de tipos, categorias, grupos, ou estruturas simples geralmente relacionando um ID (identificador) a um termo texto (ex: Código 1 => Situação Ativo)

A ideia de eu chamar de Simples CRUD é em geral dizer que estas estruturas são cadastros simples que não precisam de filtros, buscas, guias, e outros relacionamentos mais avançados, mas que logico estes cadastros mais complexos poderão sim usar estes dados.

CRUD Complexos

Algumas telas podem aparentar simples, mas quando estas se relacionam a outras tabelas, ou quando possuem muitos campos onde vários destes precisam ser tratados ou validados o trabalho fica muito mais complexo.

Ter uma biblioteca que cria campos no banco de dados de acordo com os campos da Classe de formulário facilita o trabalho, pois cada campo precisa estar sempre em 3 lugares: No Banco de Dados, na Classe (variável) e em Tela, assim se são muitos campos, o trabalho de manutenção fica complexo, e se o layout da tela é complexa, com efeitos visuais, JavaScript, iconografia, mascaras, Ajax, JQuery, e outras frescuras comuns hoje em dia, assim digamos que os fatores de dificuldades e pontos para dar problemas são incontáveis.

Filtros

Qual é a quantidade de registros que haverá em uma tabela ? é preciso ter uma estimativa de tudo que é cadastrado, tabelas com até 20 registros não precisam de filtros, no máximo alguma ordenação alfabética ou por código, mas quanto mais registros, mais números de filtros de acordo também com o numero de campos, e fazer cada filtro dá um certo trabalho leva tempo, pois para fazer alguns destes filtros é preciso antes ter um banco bem modelado se não tudo irá ficar lento, e procurar um registro se torna um processo penoso.

Validações

Tudo que entra em um sistema, teoricamente tem que estar correto, ter alguma logica coerente, e para isso muitas vezes temos que aplicar validações, como por exemplo, no campo Sexo, permitir apenas Masculino ou Feminino (sexo genético) e não a opção sexual atual da pessoa. No campo documento deve ser usado o CPF, ou o CNPJ, ou o RG, ou o Passaporte, ou qual documento, qual a regra, o que de fato usar ? e no Campo nome, pode-se cadastrar apenas o nome “João”, o sistema deve exigir um sobrenome ou não ? Quais de fato são os campos obrigatórios ?

Quanto mais campos a Validar, mas trabalho há, e quanto mais complexa for as logicas de validação, tudo irá tender para um conjuntos de longas regras que podem até entrar em conflito.

Interfaces do usuário

Estamos na moda da Web 2.0 nunca vi sistemas com tatos efeitos inúteis: Modal, Efeitos jQuery, Acordion, Animações SlideShow, em fim muitas coisas que tem um efeito visual bem legal, moderno, mas fazer isso, por mais que se tenham bibliotecas prontas, é sempre um risco que pode gerar alguns conflitos, pois o que antes poderia ser simples, agora dentro de uma tela com vários outros scripts se tornou um inferno.

LOG

Para tudo é bom ter um “Log”, uma forma para registrar alterações de registros, acesso de usuários, visitas no site, e qualquer outro evento importante.

Mas implementar LOG irá requerer consultas de acesso e históricos, e estes precisam de bons filtros, e tudo isso no fundo é uma informação útil apenas no caso de problemas sérios, mas está também ocupando espaço no banco de dados, tempo de maquina para processar, os controles, e irá ocupar muito tempo de desenvolvimento.

Ter um histórico (Log) de tudo e não usar não serve para anda, quantas pessoas acessam os relatórios de visitas do seus próprio site frequentemente para entender o que acontece, qual o horário ou dia mais visitado, qual pagina ou produto mais acessado, de onde vem as visitas, em fim é impossível falar de SEO (Search Engine Optimization) sem analisar a situação atual, alterar itens, e ver o resultado depois.

Estrutura

Aqui é a parte mais complicada, uma comparação simples é você tentar vestir suas roupas em um elefante ou em um Papagaio, em fim não irá caber! Por isso sempre digo duas coisas básicas sobre qualquer sistema:

    1. A Estrutura é o Esqueleto de um Sistema
    2. Todo Sistema é Vivo e continua Crescendo até a sua Morte

O Esqueleto de um Elefante é bem maior do que o nosso e o contrario o de um Papagaio é bem menor, o Elefante tem Tromba, é um Quadrupede, e nos Bípedes, o Papagaio tem penas, bico e asas, assim o que serve para nos não serve para outros seres.

Em um sistema é a mesma coisa a Estrutura de um Cadastro de Cliente de e-commerce é totalmente diferente da estrutura de um CRM, que é diferente da estrutura de um ERP, ou de outro sistema Financeiro, a única coisa comum seria talvez os dados básicos como Nome e código, pois todo o restante pode possuir uma relação 1:N (1 para N) ou seja um cadastro pode ter N telefones, N contatos de e-mail, N endereços, N pessoas Documentos por Tipos. Assim um erro muito comum é pegar partes de códigos e estruturas de outros sistema e readaptar só porque já está pronta.

Digo que um sistema é Vivo por dois princípios básicos da Vida: Mudança e Morte! A vida está sempre se alterando, um pessoa nasce Bebê, pequena limitada, e vai crescendo, e chega uma hora a pessoa morre! Logico que antes de morrer a maioria dá gera outra vida, que terá o mesmo ciclo. Assim eu chamo estes ciclos de “Versionamento” todo programa que é criado, continua crescendo, sofrendo ajustes, adequações constantemente, mas chega um certo momento que é necessário criar um novo programa do Zero, e dai talvez repensar em mudar o “Esqueleto” com suas estruturas bases, para que a Próxima versão possa atingir mais facilmente objetivos que a versão anterior não pode alcançar! Isto é a única forma de Evoluir um sistema! ficar remendando código e readaptando, gera sistemas mutantes onde a manutenção do sistema nunca acaba.

Versionamento

Um exemplo simples do que é versionamento são os sistemas operacionais como o  Windows, Você lembra da versão 3.1, ou do Windows 95 ? Estes sistemas operacionais foram feitos para sanarem as necessidades daquela época, para os computadores daquela época. Procure pelo Windows 8 (ops… isso mesmo nem foi lançado ainda) veja que nos primeiros vídeos de apresentação só mostra recursos “Touch-Screeen” (Interface gerenciada com a mão na tela) e toda usabilidade com internet, vídeo, fotos e redes sociais, assim teremos um novo sistema operacional para uma nova demanda de Hardwares.

Windows 8 Preview

 

O Windows Update são os pequenos ajustes e a manutenção que a Microsoft faz em seu sistema operacional de forma “gratuita” (logico que isso está embutido no preço), mas uma nova versão irá requerer um novo custo de licença, existem versões mais em conta de upgrade que valoriza a fidelidade de cliente (e logico aqui estou falando de um ambiente ideal sem pirataria)

Grandeza

Quanto maior, mas complexo, e quanto mais complexo, mais pessoas devem estar envolvidas, não da para fazer um sistema grande sozinho, sem discutir ideias, estrutura, e estas discussões levam tempo, e tempo é dinheiro que que patrocina um sistema que será grande tem que ter muito dinheiro para continuar patrocinando o desenvolvimento até o fim.

Componentização

Pense na expressão abaixo, e calcule o resultado:

Equação 1) 8 + 32 + 24 + 16 = ?

Agora veja se é mais fácil desta forma:

Equação 2)  8 x (1+4+3+2) = ?

Basicamente eu decompus  da Equação 1 o numero 8, e gerei uma nova equação mais simples, deixando o numero 8 em evidencia, matemática elementar.

Fazer isso em programação é possível também, mas reque muita criatividade e habilidade, criar componentes que facilitem e simplifiquem problemas complexos é o que torna um sistema de Fato “Robusto” e ao mesmo simples, pois a parte Consonantizada estará fora da Equação ( no nosso exemplo será o numero 8 ) e a equação entre os parênteses se torna fácil de fazer de cabeça.

Modularidade

Você já abriu um Computador ? Sabe trocar a Memoria, Processador, ou o disco Rígido, ou o Teclado, Mouse, etc ? Cada um destes itens são uma parte de um todo, e que pode ser trocado facilmente ou não, mas pode ser trocado!

Modularidade é poder dividir um sistema grande em partes, e podemos manipular cada uma destas partes isoladamente, e até poder trocar por um melhor e mais completo, sem interferir nas demais partes.

Na pratica estas são as famosas DLL, cada arquivo tem uma função especifica, e um depende do outro de forma que em alguns casos podemos apenas focar no desenvolvimento de uma nova versão de uma dada DLL, como ocorre muito nas atualizações do Windows, ou seja, tudo é picadinho, todo problema pode ser um problema isolado com uma solução simples, mas estruturar um sistema desta forma não é simples.

Focar em Modularidade e Versionamento é focar em manutenção e continuidade, ideal para um sistema operacional, mas nem sempre para qualquer tipo de sistema.

Robustez

Conhece um sistema com um índice de erro de menos de 0.1% ? e ainda os poucos erros que surgem nesta estatística são erros de rede, e-mail ou outros gerados por usuários ou fatores aleatórios ? Este é o Produto Certo! Um sistema totalmente Componentizado e Modular, que permite ser totalmente customizado.

Um sistema Robusto, é um sistema que é por si forte, integro, sem problemas ou erros básicos.

Logico que é normal que surjam uma leva nova de erros logo apos implementar um novo recurso, mas depois, tudo volta a ser como era, solido rodando direitinho como um relógio.

Anúncios

Sobre IMPACTRO Informática

Engenheiro Programador, MCP.Net, MCTS SQL, SEO
Esse post foi publicado em Não categorizado. Bookmark o link permanente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s