Há algumas frases que sempre são minhas reflexões ao dar um orçamento:
“Quanto mais se sabe, mas sabe que não sabe nada.”
”A ignorância é uma dádiva!”
Porque penso nisto, ao especificar um projeto, ao definir prazos, requisitos, funcionalidades?
Simples: Porque sempre há surpresas em qualquer projeto de software!
Por mais que possamos questionar e fazer o máximo de analise e levantamento de requisitos, há sempre aquele detalhe, fundamental, e que as vezes muda todo o escopo do projeto, e que nem o cliente sabia.
Por outro lado, quanto mais conheço uma linguagem e plataforma de desenvolvimento, tenho mais noção das dificuldades que enfrentarei em um projeto, e quantas horas realmente serão gastas, mas lógico sem contar as surpresas, e por isso cada vez mais posso dar um valor mais justo, e que em geral, é mais caro que o projeto anterior, por causa da certeza que tenho em conseguir fazer, afinal, como precificar algo que não tenho nem noção de como fazer? simples: cobro apenas um valor simbólico, e faço mais por ser um desafio pessoal, e não pelo valor… e é assim que basicamente que encaro sempre meus primeiros projetos em uma nova tecnologia, um investimento pessoal meu em aprender, para que depois sim eu possa ganhar alguma coisa.
E agora depois de alguns projetos Android que fiz, tenho conhecimento que não é lá tão simples, fácil e divertido fazer Após para Android.
E vou além, um programa para computador, é até mais simples de fazer, pois em geral os únicos dispositivos de entrada são o mouse e o teclado, e um projeto só começa a ter integração com o hardware só quando são projetos bem específicos, e já no android ler os sensores de posição, câmera, gps, faz parte ainda do básico, isso porque há muitas funcionalidades e inúmeras possibilidades, portanto orquestrar uma software com tantos recursos não é um trabalho simples, e quanto mais coisas usa-se em um mesmo projeto a complexidade vai aumentando.
Abaixo listei apenas alguns itens que hoje estou levando muito em conta durante um novo Orçamento de Aplicação:
- Activity – São cada tela diferente do aplicativo
- Dialog – São telas menores dentro de Activity
- App Global – É uma área comum a toda aplicação, muito útil quando o aplicativo tem muitas telas.
- Transição – São efeitos entre telas, ou na tela, que dão uma impressão mais profissional ao aplicativo
- Notificação – O Aplicativo pode enviar mensagens de notificação, e até com comandos ao usuário
- Integração Intent – É a comunicação entre aplicativos, seja enviando ou recebendo objetos (texto, imagem)
- Tamanho – São os tamanhos básico de compatibilidade que um aplicativo pode ter
- DPI – É a qualidade de resolução compatível que o aplicativo pode ter
- Orientação – Tipo de orientação (Retrato ou Paisagem) que o aplicativo irá ser compatível
- Threads – Nada no Android pode ser “blocante”, ou seja tarefas lentas, como baixar informações da internet, devem sempre estar em uma tarefa separada e bem gerenciada
- Imagem download – Baixa imagens da Web requer pelo menos uma tarefa assíncrona, além de um bom gerenciamento entre tarefas pois o link pode ser lento
- WebServices – É integrar o aplicativo com algum servidor na internet por meio de SOAP, REST, Sockets, e qualquer acesso web ainda requer conhecimento de threads
- Web Geturl – Para baixar qualquer coisa da internet.
- REST – Requer um conhecimento um pouco mais fundo de HTTP, pois é tudo feito diretamente sem o uso de componentes prontos
- Service – É possível criar serviços no android, aplicativos que ficam sempre ativos.
- Custom Controls – Criar controles próprios, desenha-los na tela, e integra-los com o a IDE é simples, mas trabalhoso.
- File System – Gravar e ler arquivos no dispositivo
- Banco de dados - Criar, Atualizar, e Manter um banco de dados apenas da aplicação (CREATE/DROP TABLE) no sqLite, um banco MySQL
- Tabelas – Gerir dados em Tabelas do sqLite com INSERT, DELETE, UPDATE, SELECT
- CursorAdapter – Consumir dados do sqLite
- Filtros – Filtrar dados em tela e no banco de dados
- Animação – Efeitos de animação entre telas ou controles
- Sensores – É mais uma forma de entrada de controle, usar o giroscópio, acelerômetro, magnetrômetro, sensores de luz e temperatura.
- GPS – Ler o GPS, calcular posições, identificar locais, desenhar e posicionar no mapa
- Câmera – Tirar fotos, Gravar vídeos, controlar e usar a câmera.
- Imagens – Criar, ler imagens, redimensionar, desenhar linhas, gradientes, gráficos.
- Relatório – Exibir dados de forma organizada em tela, ou mandar imprimir
- menu/por tela – Gerir e usar os menus de cada tela (activity)
- Styles – Dá para customizar tudo que é padrão e criar aplicativos em um estilo próprio de cor, tamanho, botas, espaçamentos
- ListAdapter – Gerir as listas de navegação
- Spinner – ou Dropdownlist, exibir e controlar opções de seleção
- Listview – Trabalhar com eventos das listas de exibição
- Gridview – Trabalhar com eventos de grids de exibição
- Uso de outros .JAR/API – Para fazer certas operações, começar do zero é muito demorado, então o melhor é usar componentes prontos, mas apender a usar componentes também demanda tempo
Veja mais: