0

Como é o dia-a-dia em uma aceleradora?

by Luiz Jr 17. dezembro 2013 10:46

Eu vivia me fazendo essa pergunta, até que a alguns meses tive a oportunidade de descobrir a resposta na prática. O Busca Acelerada foi selecionado para receber investimento e mentoria estratégica da WOW Aceleradora (http://wow.ac) e até o final de março estaremos fazendo parte da primeira turma de acelerados, então posso contar como está sendo esta experiência.

A Seleção

Competimos com quase 100 startups nacionais e latino-americanas, tendo passado por algumas entrevistas com os fundadores da aceleradora e investidores. Nosso projeto, o Busca Acelerada (http://buscaacelerada.com.br), é um buscador especializado em classificados automotivos, que indexa mais de 1,3 milhões de anúncios de carros, motos, caminhões e veículos náuticos da Internet brasileira. Mesmo com o pouco tempo que tínhamos com a aceleradora em cada etapa da seleção, conseguimos mostrar que o projeto era viável (afinal já estava rodando tinha um ano), possuía escala (temos um beta fechado na Argentina) e tínhamos uma boa equipe para executá-lo. Com isso chegamos entre os 10 finalistas.

Entre os 10 finalistas tínhamos programas de fidelidade na nuvem, marcação de consultas online, sistemas de memória organizacional e as outras startups que foram selecionadas conosco: a Zoomyard, que é um marketplace de fotógrafos e cinegrafistas profissionais, e o Curupira, que recupera áreas degradadas do meio-ambiente com o plantio de árvores nativas, alinhado às necessidades ambientais das empresas que contratam seus serviços.

Destes 10 finalistas que paticiparam do WOW Day, para quase 40 investidores que fazem parte da WOW, apenas 3 foram selecionados, incluindo nós obviamente. Caso contrário eu não estaria escrevendo este post, hehehehe

A Aceleração

Finda a seleção, começamos uma jornada para ajeitar toda a papelada necessária para receber o investimento. Como a aceleradora requer participação no negócio, tivemos de abrir uma Sociedade Limitada (que futuramente terá de se tornar uma SA), criar conta jurídica, o último sócio que ainda não tinha se desligado da empresa que trabalhávamos teve de pedir demissão e por aí vai, incluindo muitas assinaturas de contratos e outros documentos.

Como somos de Gravataí, e o espaço que a WOW destina às startups é em Porto Alegre, no Nós Coworking do Shopping Total, nossa sede mudou de meu home-office para algumas posições fixas em um escritório compartilhado. A infraestrutura fornecida possui mobília básica de escritório e acesso à diversos recursos compartilhados, como Internet wireless, cozinha, banheiros, salas de reunião, café, etc. Basicamente temos de nos preocupar em trazer nossos notebooks conosco :D

A rotina das startups não mudam muito com a aceleração. Continuamos tendo de nos gerenciar, definir nossas prioridades, executar nossas tarefas e tudo mais que já fazíamos antes. A diferença está no fato de que podemos contar com o auxílio de mentores experientes para nos ajudar nas decisões e planejamento (nunca na execução). Logo de início tivemos um auxílio muito forte para recriar a cara comercial do Busca Acelerada, recebemos coaching de empresários de sucesso e estamos usando e abusando da rede de contatos dos investidores para abrir as portas que precisamos.

Semanalmente temos reunião com o diretor de aceleração, Bruno Peroni, e com o diretor executivo, André Ghignatti, para fazer o report de como anda nossa startup e para onde está andando. Além disso, mensalmente temos o WOW Camp, onde as startups aceleradas se reúnem para participar de workshops e à noite do mesmo dia o WOW Meeting, onde os investidores e outros convidados tem a oportunidade de ver a evolução das startups e bater um papo com cada um dos fundadores. Mensalmente também temos o acompanhamento das metas, que são reajustadas de acordo com a realidade da startup no momento.

O que está por vir

Já estamos na metade do processo de aceleração e muita coisa já mudou. Conseguimos validar (ou seria mais correto dizer invalidar?) algumas hipóteses, lançamos um site novo, estamos com uma comunicação completamente diferenciada, estamos começando a ser citados em alguns canais de mídia e nosso volume de usuários se mantém constante (este último infelizmente). Nosso roadmap é longo e nosso futuro é incerto, mas com certeza a experiência está valendo a pena, principalmente com a aceleradora ao nosso lado.

Tags: ,

Experiências | Startup

0

O que os investidores estão buscando? - Parte 3

by Luiz Jr 10. novembro 2013 16:19

No ano passado, quando finalmente decidi me aventurar e abrir minha própria startup, passei a estudar profundamente as características que envolvem este "mercado", se é que podemos chamá-lo assim. Desde cursos, eventos, livros e blogs, devorei tudo o que podia sobre o tema, para me certificar que teria os subsídios intelectuais necessários para fazê-lo. O time eu tinha, meus amigos e atuais sócios Adriano Costa e Lucas Pfeiffer e a ideia também, seria o Busca Acelerada, um motor de pesquisa especializado em classificados automotivos. Faltava um terceiro item, que era o dinheiro, e ainda um quarto, que era a experiência em ter uma empresa, assuntos deste post.

Este post é uma continuação, embora eu nunca tivesse tido a intenção de criar uma série de posts. Para conferir a parte anterior, veja este post.

Smart Money

Dentro do mundo das startups existe um conceito chamado smart money. Que todo mundo precisa de dinheiro isso não é novidade, mas nem sempre o dinheiro por si só resolve o problema, se não souber onde aplicá-lo. Histórias de ganhadores da Mega Sena falidos são o que há de mais comum, assim como de startups com investimentos milionários que fracassaram (Shoes4You recentemente passou por isso, e até mesmo o Peixe Urbano não está muito bem das pernas atualmente). O smart money é o casamento entre capital intelectual e financeiro, onde o investidor também se torna parte da equipe, talvez não no dia-a-dia, mas como um mentor mais experiente para ajudar a tomar as decisões mais difíceis, abrir portas para alguns mercados e/ou clientes, entre outras coisas.

Dentro da ideia de smart money temos alguns Investidores Anjo, que passam a atuar de maneira bem próxima à startup, e as Aceleradoras, que são entidades que funcionam de forma análoga às incubadoras tecnológicas, mas com aporte de capital e participação societárias nas startups que serão aceleradas. Independente da opção o intuito é o mesmo: ajudar a startup a ter uma tração inicial para seguir seu caminho rumo a consolidação de um modelo de negócios rentável e escalável.

Quando notei que não conseguiríamos fazer o Busca Acelerada crescer apenas com nossas economias pessoais e principalmente com nossos conhecimentos, decidi que era hora de ir atrás de Smart Money de verdade. Já havia feito pitches e outros tipos de apresentações, mas nunca com 100% de intuito em levantar fundos e mentoria para a startup, o que muda bastante a situação. Abaixo segue o vídeo do pitch que fiz durante a Demo Brasil 2013, maior evento de startups da América Latina, do qual estivemos entre os finalistas.

http://www.youtube.com/watch?v=whVHjrkGZ-4

Aceleradoras de Startups

Como não havíamos arranjado ainda um escritório para a startup (usávamos apenas meu home-office) e tínhamos quase nenhuma experiência com práticas comerciais e operacionais de uma empresa, achei que recorrer a uma aceleradora era uma boa alternativa. Existem diversas pelo Brasil, embora a concentração maior seja em São Paulo e Rio. As primeiras aceleradoras surgiram tem poucos anos, e diz-se que foram moldadas pelo padrão proposto pela Y Combinator, que até hoje é a aceleradora que detém o maior percentual de startups bem sucedidas mundialmente. Aqui no Brasil elas tem começado a aparecer tem uns 3 anos e mais recentemente ganharam força através do programa Startup Brasil do governo federal, que em parceria com as mesmas levanta investimentos a fundo perdido para ajudar negócios de base tecnológica com grande potencial de crescimento a se tornarem "empresas de verdade".

Basicamente o que uma aceleradora faz é selecionar os melhores projetos que puder encontrar, para então investir tempo, dinheiro e infraestrutura neles, visando torná-los maiores e mais rentáveis a ponto de fazer com que valham muito dinheiro. Obviamente elas não fazem isso apenas pelo bem-estar dos empreendedores e existe a necessidade de incluir a aceleradora no quadro de sócios da empresa, o que garante à elas a possibilidade futura de venda dessa participação para outros fundos maiores, reavendo o investimento inicial com uma margem de lucro (obviamente muito superior ao investimento realizado). As quantias investidas costumam ser baixas, entre R$20 mil e R$150 mil, em troca de participações que variam entre 5% a 50%, embora o mais comum praticado seja investimentos de R$40-50 mil em troca de 25-30%, para empresas em estágio inicial (repito: o mais comum).

Geralmente as aceleradoras funcionam em ciclos semestrais. A cada ciclo a aceleradora seleciona um grupo de startups, geralmente 5, e durante os 6 meses seguintes oferece a possibilidade de incubação em suas dependências. Durante este período também oferece acesso a mentoria especializada sobre os temas necessários ao crescimento da startup, acompanha o mesmo através de reuniões, busca novos investimentos para a startup se necessário e abre tantas portas quanto possível através do seu networking. É um modelo que funciona muito bem, uma vez que o sucesso da aceleradora depende do sucesso das startups aceleradas, pois o investimento realizado não é um empréstimo, ou seja, se a startup falir, o dinheiro terá sido perdido.

A busca por Smart Money em Aceleradoras

Tendo entendido estes pontos, fica mais fácil compreender o porque de termos ido atrás de smart money em aceleradoras. Somos três profissionais técnicos que precisavam (e ainda precisamos) muito de capital intelectual nas áreas que não dominamos, além é claro de algum investimento financeiro. Aqui em Porto Alegre surgiram recentemente 3 aceleradoras, que independente das origens gaúchas aceleram empresas de todo o Brasil. Apesar da juventude das mesmas, os empreendedores por trás delas são conhecidos da cena regional e até mesmo internacional em alguns casos.

Estarte.me: a Estarte.me foi fundada por Maurício Centeno, ex-RBS e tem um pequeno portfólio de startups em processo de aceleração. A aceleradora faz aportes menores, cerca de R$20 mil e detém participações obviamente menores nos negócios que investe. Essencialmente digital, investe em startups web e mobile, incluindo games. Ela possui sede própria onde são incubadas as startups e não possui ciclo de aceleração bem definidos, podendo acelerar novas startups a qualquer momento.

Ventiur.net: a Ventiur foi fundada pelos mesmos criadores da Venti, empresa de projetos que ajuda outras empresas a tirarem suas ideias do papel e levarem para o mercado. Com esse know-how e um fundo de investidores por trás, surgiu a Ventiur, uma aceleradora em rede que busca projetos diversos que possuam inovação tecnológica, potencial de escala e mercado comprovado. Principalmente este último requisito que é avaliado através de um processo de pré-aceleração, onde os candidatos a receberem investimento recebem mentoria e auxílio em seus negócios para ver quais tem maior capacidade de execução e/ou possibilidade de retorno, o que por si só já vale como uma mini-aceleração.

Wow.ac: a Wow foi fundada por grandes empresários como André Ghignatti (Neogrid), Jaime Wagner (Digitel, Plugin, Powerself, Vakinha) e Cassio Bobsin (Zenvia, Mobigroup) que juntos formaram um grupo de 57 investidores que planejam investir em 20 startups até 2014. Além do investimento que varia de R$50 a R$150 mil dependendo do estágio da startup, eles investem também todo o capital intelectual de dezenas de mentores que atuam nos mais diversos mercados, de fundadores a executivos temos membros de empresas como W3haus, ECS, CWI, Google, entre outros nomes conhecidos. Os ciclos de aceleração são semestrais, em turmas de 5 startups.

Acabamos optando por esta última aceleradora devido à sinergia e afinidade que tivemos com os membros da mesma, aplicamos nossa proposta e após algumas entrevistas e uma apresentação ao vivo ao grupo de investidores fomos selecionados.

Mas o que as aceleradoras estão buscando?

Conversando com os investidores antes e depois da seleção, pude finalmente compreender porque fomos selecionados. O Busca Acelerada é um bom projeto, mas existem opções mais seguras de investimento nas quais eles poderiam estar colocando o dinheiro deles. O que não se encontra fácil por aí são pessoas comprometidas com uma ideia e que possuem capacidade para executá-la. Já estávamos rodando o projeto tinha um ano, dois de nós já havíamos largado a segurança dos nossos empregos e trabalhávamos full-time nele. Somos três apaixonados pelo que fazemos. Temos inovação em nosso DNA e a ambição de criar algo global. Somos inexperientes em criação de negócios, em gestão de empresas, em vendas. É verdade. Mas somos muito bons em tirar ideias do papel e enfrentar de frente as adversidades do empreendedorismo. Isso tudo pode soar muito clichê e de fato é, mas pergunte-se quantas pessoas você conhece que tem boas ideias, e destas, quantas executam ou executaram essas boas ideias? É exatamente neste ponto que fomos selecionados.

Se vamos ter sucesso em nossa empreitada, só o tempo dirá. Mas uma coisa posso afirmar: o que tem nos diferenciado é a execução, pois morrer abraçado com as ideias, sem jamais pô-las em prática, não está com nada.

Tags: , , ,

Dica | Mercado | Projetos | Startup

2

T-SQL Tunning

by Luiz Jr 10. maio 2013 11:02

Como todos que me conhecem pessoalmente sabem, gosto muito de trabalhar em projetos de melhoria de performance. Não sou nenhum especialista no assunto, mas acho desafiador pegar um sistema que está com problemas de velocidade na execução de seus algoritmos e de alguma forma torná-lo mais eficiente. Quando tive a ideia do Busca Acelerada, além do desafio inerente a projetos envolvendo Big Data, estava a instigante necessidade dele ser rápido, para honrar o nome é claro. Conforme fomos adicionando mais e mais sites parceiros (hoje já passam de 70), mais e mais estados (hoje temos cobertura nacional) e mais e mais anúncios (hoje são mais de 1 milhão), forçamos bastante os meios tradicionais de desenvolver aplicações em ASP.NET e ns deparamos com diversos problemas de performance e escala.

O que quero dizer com isso é que, geralmente, desenvolvemos programas em ASP.NET sem grandes preocupações com performance, do jeito mais produtivo. Este é o Microsoft way de programar, certo? O que se vende com o .NET é produtividade e baixa curva de aprendizado. E não há nada de errado nisso, principalmente para mais de 90% das necessidades de aplicações do mercado. Entretanto, o Busca Acelerada está nesses 10% e costumo dizer que desenvolver esse tipo de software com sucesso é o que separa os ótimos programadores dos apenas bons. Visando ajudar outras pessoas que possam vir a passar por problemas de desempenho, criei uma série de posts aqui no blog sobre tunning e benchmarks, incluindo Regex, desempenho web em geral, tipos de variáveis e por aí vai (procurem pelo blog). Hoje vamos falar de T-SQL (ou SQL da Microsoft como alguns citam) e em posts futuros pretendo abordar Entity Framework com Linq2Entities.

Aviso

Tudo o que vai ser descrito aqui é fruto pura e unicamente das minhas experiências pessoais. Obviamente em certo ponto busquei referências, principalmente no MSDN, mas quero dizer que não possuo um embasamento teórico aprofundado em bancos de dados, pois não é minha área de especialização. Com certeza muitos itens não se adequarão ao seu cenário, entenda que costumo (e gosto) de desenvolver softwares atípicos, e principalmente, fugir dos padrões de ERP, CRM, etc, softwares em que a maioria dos desenvolvedores trabalham todos os dias. Desta forma, leie, use o que se sentir à vontade e ignore o resto. Aceito sugestões de outras dicas, pode deixar nos comentários por favor.

O banco não é orientado a objetos!

Vamos começar do começo, ok? Quando estiver modelando um banco, você vai estar também definindo boa parte das limitações de performance que seu banco terá durante sua vida útil. A modelagem correta das tabelas (veja bem, correta, não normalizada) irá influenciar pesadamente no desempenho do seu sistema, principalmente considerando que a maior parte do tempo de resposta de um sistema é devido aos acessos ao banco de dados. A regra aqui é: não confundam modelagem ER com um diagrama de classes ou algo do gênero.

Embora muitos desenvolvedores atuais sejam adeptos de teorias pós-modernistas de desenvolvimento Code-First, onde primeiro se criam as classes para então gerar as tabelas a partir delas (o que não há nada de errado especificamente), vale ressaltar que a mais elaborada biblioteca de classes, usando e abusando de regras como herança, não-repetição de código, especialização de classes, agregação e composição, não dará um bom banco de dados. Seguem alguns exemplos.

Primeiro, vamos pegar como base o famigerado cadastro de clientes. Os clientes tem endereço certo? Muitos programadores já pensam logo de cara em fazer uma tabela de endereços separada da tabela de clientes. Se em seu sistema existe a necessidade de múltiplos endereços para um mesmo cliente (comum em e-commerces), ok. Caso contrário, é inútil. E não vale a desculpa de "mas se eu tiver outra tabela, como fornecedor, que precise de endereço...", pois a menos que alguns fornecedores morem no mesmo lugar que alguns clientes, não haverá ganho algum com essa abordagem. Isso se chama paternite, vamos falar dela mais tarde.

Esse pensamento leva a um aumento na complexidade de queries simples como trazer todos os dados de um cliente e preste atenção, quando falo em complexidade não estou falando de ser difícil de programar, mas custoso para o banco de dados em tempo de processamento, acesso à disco. Toda vez que quiser trazer todos os dados de um cliente, terá de usar um JOIN, o que é desnecessário se você modelar o banco otimizado para as consultas que vai fazer (também falaremos disso mais tarde).

Eu dei um exemplo tosco, de composição, mas um caso mais grave é o de querer usar herança em tabelas. Criar uma tabela Pessoa, com colunas comuns às tabelas Cliente e Fornecedor, por exemplo, levará novamente a trabalho desnecessário na construção e execução de consultas. Não há problema em ter colunas repetidas em tabelas diferentes, o problema é quando se tem dados repetidos em tabelas diferentes.

Não quero me extender muito neste item, vamos voltar nele mais tarde.

Use JOINs, mas não muito!

Na maioria dos casos em que tenha que juntar dados de duas ou mais tabelas em uma mesma consulta, dê preferência ao uso de JOINs ao invés de subconsultas e tabelas aninhadas. Usando esta dica com a dos índices mais abaixo, lhe darão um ganho muito grande em performance. Entretanto, o uso de múltiplos JOINs em uma mesma consulta podem acabar com sua performance devido ao excesso de cruzamento entre diferentes tabelas, neste caso, dê uma olhada no item sobre desnormalização de tabelas, mais adiante.

Índices!

Boa parte dos problemas de desempenho se resolvem com índices bem construídos. Assim como os livros, que são um conjunto de capítulos com muitas páginas cada, os bancos são conjuntos de tabelas como muitos registros cada. Em ambos nós precisamos ter índices, que são estruturas de apoio para encontrar rapidamente o que estamos procurando. Note que índices e chaves são coisas diferentes, embora a chaves primárias sejam os únicos índices clusterizados das tabelas. A ideia aqui não é ensinar como construir índices (use o SQL Server Management Studio e não terá problemas), é dar dicas sobre porque construi-los e quando fazê-lo.

Primeiro, toda tabela deve ter um índice clusterizado, que é o índice que rege a ordenação das linhas da tabela. Ou seja, a chave primária. Fora as regras tradicionais de chaves primárias, como não poder haver repetição, dê preferência por usar um campo numérico como chave, pois os índices trabalham melhor como estes campos (i.e. as consultas serão mais rápidas). Este é o mais básico e elementar dos índices e ele é criado mesmo que você não saiba disso.

Segundo, crie índices nas suas chaves estrangeiras. Não necessariamente em todas, afinal o uso excessivo de índices prejudica a performance dos INSERTs, UPDATEs e DELETEs, mas nas FKs que você costuma fazer JOIN.

Terceiro, crie índices para garantir integridade. Quando você cria um índice para uma coluna (ou grupo delas) e diz que ele é UNIQUE, você não apenas garante que não haja elementos repetidos em sua tabela, como aumenta significamente a performance de consultas que envolvam as colunas do índice. Isso porque quando o motor de consulta do SQL Server sabe que um campo não se repete, ele vai parar de procurar por mais ocorrências daquele campo tão logo encontre a primeira ocorrência, entende?

Quarto, dê manutenção nos seus índices periodicamente. Conforme você vai inserindo, removendo e atualizando elementos da sua tabela, seus índices vão ficando fragmentados, o que pode prejudicar a performance de uma maneira até pior do que a ausência de índices. Desta forma, lembre-se de dar um Rebuild nos seus índices quando eles estiverem fragmentados, preferencialmente em horários de pouco acesso ao seu sistema para evitar problemas com os usuários.

Guardando Strings no banco

O que tem a ver performance e Strings no banco? Tudo! A forma como você armazena String no banco influenciam o tamanho que a tabela terá, o tempo de consultas a estes campos e até mesmo questões estratégicas como chaves naturais com alta performance. Tudo começa entendendo os tipos de dados para texto e para que serve cada um.

O CHAR é o mais básico e representa um vetor de caracteres de tamanho fixo, não interessa o que você salva em um CHAR(10), ele terá 10 caracteres de comprimento, preenchendo o restante com espaços em branco ou cortando sua palavra na décima posição (dependendo da configuração do banco pode gerar erro). Use CHAR sempre que souber o tamanho exato de um campo, pois ele possui o melhor desempenho de todos. Como exemplo gosto sempre de citar a coluna CPF em cadastro de clientes, que sempre ossui 11 caracteres de comprimento.

O VARCHAR representa vetores de caracteres com tamanho indefinido. Você define o limite de caracteres permitidos no campo, mas somente o que você guardar nele é que ocupará espaço. A flexibilidade tem o seu preço: o tempo de consulta a campos VARCHAR é maior que campos CHAR, isso porque em um campo de tamanho fixo é fácil ler o conteúdo no disco pois basta saber onde ele começa e calcular o seu final pelo limite do campo. No caso do VARCHAR não se tem certeza de quantos caracteres está se usando no campo e isso gera testes adicionais por parte do motor de consulta.

Já o TEXT é para casos específicos em que se tem milhares de caracteres em um único campo. Com eficiência extremamente duvidosa, deve-se tomar cuidado caso queira realizar consultas nestes tipos de campo (procurando por um trecho em um texto com milhares de caracteres). Nestes casos recomenda-se habilitar o Full-Text Search no SQL Server. Não tenho propriedade para falar a respeito e sugiro procurar no MSDN.

Mas e as versões NCHAR, NVARCHAR e NTEXT? Pois bem, o N é de National, que indica suporte maior à diferentes idiomas e conjuntos de caracteres. Especialmente útil para garantir um armazenamento mais compatível de caracteres de diferentes idiomas. Isso não chega a ser um diferencial na maioria dos sistemas tradicionais mas lembre-se disso e de uma outra palavra chamada COLLATION quando estiver projetando sistemas multi-linguagem.

Uma última dica sobre campos de texto é a respeito de índices. Sabemos que campos de texto são os mais problemáticos de serem usados em WHEREs mas isto pode ser contornado com a criação correta de índices. Se o seu campo possui tamanho fixo (CHAR) e não pode ser repetido (novamente cito o CPF como exemplo), não pense duas vezes antes de criar um índice para ele. Consultas a este campo serão estupidamente mais velozes desta forma. Em casos que se usa campos de texto como parâmetro para ordenação, a construção de índices é muito boa também pois os índices são ordenados de maneira independente do restante da tabela.

Deixe a normalização para os trabalhos da faculdade!

Soa grosseiro, mas em projetos de uso intenso de dados temos de pensar dessa forma. Nada contra a forma acadêmica de projetar bancos, muito pelo contrário, um projeto bem estruturado de um grande ERP ou CRM é digno de colocar em um quadro na parede. Em alguns casos nem caberia em uma única parede, hehehehe. A questão aqui é que quanto mais se divide um banco em tabelas, mais JOINs serão necessários para juntar os dados novamente. Inversamente, quanto mais dados colocarmos em uma mesma tabela mais demorada serão as consultas nesta tabela.

E agora José? O negócio aqui é analisar cada caso e usar cada técnica de acordo com a sua necessidade para aquele cenário. Ou seja, se os JOINs a um grupo de tabelas estão sendo usados com muita frequência ou até mesmo sempre tem de ser consultados juntos, considere a hipótese de transformar tudo em um tabelão. Como sei que isso soa estranho para muita gente, experimente ao menos criar uma View e notará a diferença. Como exemplo gosto de citar a tabela de Endereco e de Estado. No Brasil os estados podem ser representados com apenas 2 caracteres, e criando um campo UF no endereço ao invés de um IDEstado tornará seu sistema muito mais eficiente do que fazer JOINs o tempo todo entre Endereco e Estado. Inversamente evite tabelas genéricas usando campos de tipo para definir a categoria do registro armazenado, pois isso geralmente costuma inflar demais as tabelas sem necessidade.

Outra coisa, ao contrário do que muitos acreditam, nem sempre criar chaves estrangeiras para todos os campos em comum entre tabelas é um bom negócio. Os relacionamentos servem para garantir integridade referencial e possuem como efeito colateral o aumento no tempo dos INSERTs, DELETEs e UPDATEs nas tabelas relacionadas. Então pense bem antes de sair criando chaves a torto e a direito.

Views...sim, você leu certo!

As views sofrem bullying desde a chegada das stored procedures no ano 2000. O pessoal acha que stored procedures são melhores que views pois são mais flexíveis, não permitindo apenas SELECTs. Costumam também achar que não há diferença entre um SELECT comum e uma VIEW. Blasfêmia! A estes eu digo que deveriam conhecer as maravilhosas Indexed Views. Diferente das views tradicionais que tem apenas a vantagem de serem pré-processadas (igual às stored procedures), as indexed views possuem performance semelhante a tabelas nativas, com a diferença de conterem somente os dados que interessam para determinada regra de negócio.

Sério, vale a pena perder uns 15 minutos procurando no MSDN por Indexed Views, consegui reduzir drasticamente o tempo de consultas de minutos para segundos.

Não seja preguiçoso, evite os atalhos!

Por mais que seja chato escrever comandos completos de SQL, quanto mais preciso e completo for seu comando, mais veloz será sua interpretação pelo motor de busca e consequentemente sua consulta terá melhor desempenho. Sim, estou falando de milisegundos, mas não esqueça que a cada 1000 milisegundos economizados, é 1 segundo a menos de encheção de paciência! A dica aqui é bem simples, não tenha preguiça ao escrever as queries, você o fará uma vez, mas elas serão executadas milhares de vezes, então vale a pena. Digite completamente o nome de tabelas, incluindo o schema (dbo geralmente), evite algumas palavras-chave as quais cito mais tarde e retorne somente as colunas que serão utilizadas. Você encontra a maneira certa de escrever consultas quando gera scripts SQL pelo Management Studio, note como até o uso de colchetes em volta das palavras é proposital, para evitar problemas com espaços em branco, entre outras preocupações que você também deveria ter.

LOCK ou NOLOCK? Eis a questão...

Poucos conhecem as palavras-chave LOCK e NOLOCK. Se voltar aos fundamentos das consultas em bancos ER descobrirá que em diversos momentos as tabelas são bloqueadas para garantir que os conceitos de ACID sejam respeitados (Atomicidade, Consistência, Integridade e Durabilidade).  Não lembro exatamente mas geralmente atualizações bloqueiam as linhas da tabela que estão sendo atualizadas, os deletes bloqueiam a tabela inteira entre outros bloqueios. O bloqueio em si afeta outras operações de escrita na mesma tabela/linha/coluna (dependendo do LOCK) e em algumas ocasiões também bloqueia os SELECTs.

Por padrão todo SELECT respeita os LOCKs das tabelas, como se você sempre escrevesse SELECT * FROM Tabela WITH(LOCK). Mas o que acontece quando você usa NOLOCK? O motor de busca irá ignorar se a tabela está bloqueada ou não, o que pode gerar inconsistências na consulta mas que ao mesmo tempo aumenta a velocidade da consulta pois ignora verificações de LOCK. As inconsistências só são um risco se seu sistema realiza muitos DELETEs e INSERTs, o que pode gerar retornos de consulta que não correspondem exatamente ao estado atual do banco (Não terá a última linha adicionada ou removida, entende?). Entretanto, no caso do Busca Acelerada, onde o uso intenso de buscas requer o máximo de performance e cujos dados apenas são inseridos durante a madrugada, não existe esse perigo, sendo que durante o dia apenas alguns updates são realizados em campos que nem mesmo são exibidos aos usuários.

Claro, é um cenário um tanto específico, mas não custa nada saber desse recurso também, não é mesmo?

Keywords que você deve usar

A regra é que não existem balas de prata. Entretanto, existem diversas palavras-chave que em 90% dos casos podem resolver grandes problemas de performance e às vezes são ignoradas pelos desenvolvedores. Brevemente não esqueça de:

TOP - retorna um número limitado de registros, muito útil para trazer somente a quantidade de dados que faz sentido para sua aplicação. A menos que queira todas as ocorrências de uma condição consultada, use TOP 1, 5, 10, etc conforme o número de registros que queira retornar.

DISTINCT - retorna os elementos sem repeti-los, muito útil para eliminar repetições de valores em uma mesma coluna e consequentemente dados inúteis sendo transferidos pela rede.

COUNT - retorna a quantidade de elementos para uma dada condição (WHERE). Se quer saber apenas se um elemento existe na tabela, ou quantos elementos de um tipo, use COUNT ao invés de mandar retornar todos os dados dos registros que atendem à sua condição.

Keywords que você deve evitar

Da mesma forma que mesmo as palavras acima Não são garantia de sucesso na escrita de boas consultas SQL, as palavras abaixo nem sempre são vilãs. Cito elas aqui apenas para que se lembre de sempre ponderar sobre sua utilização, para evitar surpresas quando seu sistema começar a ser utilizado de verdade, afinal, quando só você está testando o sistema tudo funciona com boa performance, não é mesmo?!

LIKE - compara um trecho de texto dentro de um bloco maior. Se tiver de usar o LIKE evite usar mais de um coringa (%) para que a perda de performance não seja tão grande. Outra dica que pode ajudar é o uso de índices no campo de texto onde precisará usar likes, como citado no tópico anterior sobre índices. Se você está se perguntando como fazem os buscadores como o Google, tenha a certeza de que eles não usam LIKE em uma grande tabela que possuia a web inteira dentro. O segredo aqui está em estruturas de dados específicas para armazenar textos de forma distribuída como índices invertidos, matrizes de dispersão, árvores de conhecimento, entre outras. O buraco é muito mais embaixo que um mero LIKE!

IN - se você quer retornar os registros cujas condições são múltiplos identificadores, como todos os empregados cujos IDs sejam 1,3,7,45,100, você irá usar um IN, certo? O problema aqui é que o IN é interpretado pelo motor de busca como uma junção de ORs, ou seja, 'WHERE ID IN (1,3,7,45,100)' é a mesma coisa que 'WHERE ID=1 OR ID=3 OR ID=7 OR ID=45 OR ID=100'. Isto Não chega a ser um problema em uma consulta com poucas dezenas de valores no IN, mas tome cuidado quando voc6e chega nas centenas deles. Já experimentei outras abordagens com tabelas temporárias, tabelas em memória, entre outras, com resultados semelhantes. A única solução foi encontrada nos algoritmos que precedem a consulta ao banco, fugindo do uso intensivo de IN.

* - o famigerado asterisco deve ser evitado pelo simples motivo de que é muito fácil retornar mais colunas do que o necessário usando esse recurso. Outro problema é que o interpretador SQL deve buscar no esquema da tabela as colunas que terão de ser retornadas, antes de realizar a consulta propriamente dita. No final das contas é uma economia porca de tempo e que não traz benefício algum nem mesmo a curto prazo.

Conclusões

Sim, o título foi sensacionalista. Ainda assim, qual o melhor termo para descrever ajuste de performance com T-SQL? Acredito que muitas dessas dicas podem ajudar diversos programadores que estão com problemas de performance em seus bancos. É muito fácil encontrar informações na Internet de como modelar bancos e criar consultas, mas poucos se importam em fazê-lo da melhor maneira ou poucos mostram em como melhorar o desempenho de bancos e consultas já existentes. Espero que isto traga resultados para você leitor do blog, e permita que construa sistemas cada vez melhores, pois para mim ajudaram bastante.

Concorda? Não concorda? Sabe mais alguma coisa que não listei? Manda ver nos comentários!

Tags: , , , ,

BD | Benchmark | Dica | Experiências | SQl Server

0

Dicas para um Pitch de sucesso

by Luiz Jr 30. abril 2013 13:21

Troféu D18 - Desafio de Startups

Quem me conhece pessoalmente ou mesmo acompanha meu blog sabe que ultimamente tenho participado de concursos de startups, entre eles o SAP Startup Forum em São Leopoldo-RS, o D18 - Desafio de Startups em Porto Alegre-RS e o Startup Weekend, também em Porto Alegre-RS, sendo que em dois deles levei o troféu pra casa. Além disso já presenciei outros tantos eventos onde o que mais importa é "vender" a ideia da sua empresa para uma banca de jurados. O famoso pitch.

O que é um pitch?

O elevator pitch, ou simplesmente pitch, é um discurso curtíssimo, de 1 a 4 minutos, dependendo do caso, em que você deve vender a sua ideia para alguém. Você tem de convencê-lo de que seu produto é, se não o melhor, um dos melhores do mercado, ou que sua empresatem grandes chances de crescer, ou que vale a pena para essa pessoa usar ou até investir em sua solução. Na sua essência, o elevator pitch tem esse nome supondo a hipótese de que você e um investidor estão no mesmo elevador, e que você tem apenas o tempo de saírem do elevador para convencer este investidor a apostar na sua ideia. Com essa premissa em mente os concursos definem tempos curtos para tanto, simulando a mesma situação.

O pitch não é a apresentação de um plano de negócios ou sequer de um canvas. Esse tipo de informação é para ser usada em uma segunda oportunidade, caso o investidor tenha gostado do seu pitch e convide-o para uma reunião ou mesmo conversa informal. Ou seja, o pitch é a sua chance de ganhar a atenção de uma pessoa que pode ser decisiva para o sucesso de sua startup: o investidor!

Como montar seu pitch

O pitch em termos gerais deve ser curto, com algo em torno de 1 a 2 minutos. Deixe para montar um pitch maior se o evento assim permitir (no SAP Startup Forum, por exemplo, os pitches eram de 4 minutos pois tínhamos de dar detalhes técnicos da solução). Comece se apresentando e tenha aqui uma frase bem definida para sua empresa. Chame como quiser: proposta única de valor, slogan ou frase matadora, mas ela tem de expressar o que sua startup é em uma frase. Simples e objetiva como "As MELHORES ofertas de veículos em um só lugar!". Você entende em uma frase que a startup é um único lugar (no meu caso um site) onde você vai encontrar as MELHORES (note a ênfase) ofertas de veículos. Independente de como fazemos isso ou se somos bons, essa frase diz exatamente o que o site é em termos gerais, e a partir dela o ouvinte pode decidir continuar lhe escutando ou não, caso não se interesse por esse mercado.

A seguir descreva como você faz isso, em linhas gerais. No Busca Acelerada (http://buscaacelerada.com.br) através de diversas tecnologias, agregamos os anúncios de veículos de 70 sites diferentes, totalizando uma base de mais de um milhão de ofertas do Brasil inteiro. Veja que aqui conseguimos expressar que somos um agregador de ofertas, e que é mais vantajoso usar a nossa ferramenta do que ter de procurar em 70 sites diferentes que nós já procuramos previamente para você. Essa sentença aliada a um bom slide cheio de logos de nossos sites parceiros causa o impacto que queremos: a pessoa vai querer acessar o site naquele momento para testar.

Agora que sua audiência já entende o que você faz e como, ela vai querer saber um pouco mais da empresa. Já possuem um protótipo funcionando? Quem são as pessoas responsáveis por isso? O time e sua experiência é muito importante para os investidores pois principalmente na área de TI, todo mundo sabe o quão difícil é montar uma boa equipe com gestores, programadores, designers, etc. Gosto de apresentar minha equipe em linhas gerais, dizendo o que cada um faz e as experiências que temos juntos (em nosso caso trabalhamos juntos por vários anos).

Até aqui tudo bem, você está dizendo que faz algo inovador, que sua equipe trabalha bem. Mas e a grana? Qual o tamanho do mercado que planeja atingir? Já possui um faturamento hoje ou alguma projeção que queira compartilhar? Possui uma base de usuários ou outro número interessante? E mais importante: qual é o seu modelo de negócios? Muitas startups que se apresentam em palcos de competições morrem exatamente aqui. A falta de preparo nestas questões são decisivas para separar quem tem maior capacidade de gestão dos que apenas estão se aventurando e correm o risco de quebrar no primeiro ano de operação. Você tem de saber claramente (embora isso provavelmente vá mudar com o tempo) para quem você vende (B2B? B2C?), como você vende, o quanto pode faturar com isso e se existe a possibilidade de escalar seu negócio para realmente criar a próxima startup milionária.

Neste momento seu tempo deve estar se esgotando. Se ainda tiver alguns segundos, use para dizer qual a sua motivação para estar ali. Fale o que está buscando, quais são suas preocupações e em que áreas precisa de ajuda hoje. Mostrar humildade em reconhecer no que precisa melhorar vale para tudo, desde entrevistas de emprego a pitches para investidores. Findo o tempo, agradeça a atenção. Se fez tudo certo, a banca ou o investidor isolado lhe encherá de perguntas sobre concorrência, projeção de faturamento, o quanto precisa de investimento, barreiras de entrada para novos concorrentes, diferenciais competitivos, escala, etc. Esteja preparado para responder perguntas muito cabeludas como: de quanto dinheiro vocês precisam para dominar este mercado? Ou quanto esse mercado movimenta em dólares por ano? O que impede de alguém copiar sua ideia e ficar rico antes de você? Eles irão perguntar, tenha certeza. Se não o fizerem é porque infelizmente não se interessaram tanto por sua startup.

Como se portar no palco

Sobre a aparência, vale ressaltar o básico de uma entrevista de emprego: vista-se bem, mas sem exageros (eu geralmente uso polo e jeans), esteja com barba e cabelos bem feitos, a menos que sua proposta seja diferente. Tem startup que realmente quer passar a imagem de que todo mundo é doidão, por isso que é barbudo, tatuado, etc. Nada contra, cada um com seu estilo, mas se não é isso que quer passar, lembre-se do que Steve Jobs diz no filme Piratas do Vale do Silício "Gerentes de banco não gostam de caras barbudos." em virtude dele não conseguir tirar um empréstimo até o dia que tirou sua barba para ir ao banco levantar fundos para a Apple.

Sobre expressão corporal, evite gestos que demonstrem nervosismo ou prepotência. O primeiro pode ser coisas simples como segurar o microfone com as duas mãos, errar trocas de slides com o laser-pointer na mão, se virar de costas para a platéia e por aí vai. O segundo é ainda mais perigoso. Pior que um apresentador nervoso, é um que se acha superior aos demais. Arrumar o cabelo feito comercial da Grecin 2000 ou mesmo coçar a nuca franzindo a testa podem indicar que você está "se achando". Tome cuidado com isso pois já vi fundadores de startups perderem grandes oportunidades devido a terem se mostrado arrogantes frente aos investidores.

Evite também ficar andando demais. Afinal você tem dois minutos, não tem lá muita necessidade de andar pelo palco, certo?

Como responder as perguntas

A chave aqui é humildade. Os investidores que estiverem presentes no evento são voluntários. Eles não estão ganhando nada para dar suas opiniões e em sua imensa maioria gostam de ajudar os empreendedores pois já passaram por isso antes. Em hipótese alguma discuta com eles ou faça réplicas sucessivas, isso vai mostrar que você é teimoso, burro, ou os dois. Lembre-se que o tempo para as perguntas e respostas também é limitado, então não fique confrontando quem está lá para dar sua opinião.

O interesse dos investidores em lhe perguntar é termômetro para saber se você foi bem na apresentação. Veja bem, um termômetro pode marcar quente ou frio, ou seja, se eles perguntarem coisas que você já disse na apresentação, pode ser que você não tenha sido tão claro quanto deveria. Reveja esses pontos antes de uma próxima oportunidade.

Seja honesto. Se você não sabe uma resposta, diga que não sabe. Não faça especulações que não tem embasamento algum. Já vi muito fundador dizer que vai faturar 1 milhão (ou seja lá a quantia) no primeiro ano sendo que até agora não faturou nada, não sabe seu custo de aquisição por cliente, não sabe o life-time value de seus clientes, e nem mesmo tem uma estratégia de vendas e/ou marketing para tal. Ou então dizer que vai dominar o mercado nacional em x tempo sendo que não deixou sua marca nem em sua cidade natal ainda. Sério, Não "viaje na maionese", só use números e projeções se souber usá-los.

Como montar seus slides

Uma apresentação de dois minutos não deve ter muitos slides, certo? Lembre-se que o foco deve ser você e os slides servem mais para deixar sua marca na cabeça da audiência, servir como pano de fundo para seu discurso ou mostrar gráficos interessantes. Eu geralmente uso em torno de 5 slides para um pitch de 2 minutos, sendo que o primeiro deles é a capa e por vezes o último é apenas um agradecimento com informações de contato.

Não coloque muito texto, um slide não deve conter mais que três frases curtas, afinal, ninguém está ali para ler, eles querem ouvi-lo. Mesmo com poucas frases, evite ler o que está escrito no slide. O slide é para o público e não para você. Bons slides tem apenas um título, uma imagem e uma frase. E apenas isso deve ser o suficiente para passar a ideia que deseja. Tenha em mente que você é o astro da apresentação, e não o Powerpoint ou Prezi.

Conclusões

Eu não sou especialista em pitches e minha startup nem mesmo recebeu investimento. As dicas acima apenas são fruto de minhas experiências de anos como professor e palestrante em mais de uma centena de eventos e cursos. Sinta-se à vontade para comentar e até mesmo para utilizar essas dicas em suas apresentações. Outras fontes interessantes sobre como montar pitches podem ser encontrados nos sites da Endeavor e na Anjos do Brasil.

Tags: , , ,

Dica | Eventos | Experiências | Startup

6

Dicas para Desenvolvedores de Jogos

by Luiz Jr 14. abril 2013 17:55

Este post é para os leitores que desenvolvem seus próprios jogos sozinhos e muitas vezes se sentem perdidos sobre quala  melhor maneira de desenvolver um jogo. Um dos maiores desafios no início da carreira de quem quer se tornar um desenvolvedor de jogos é o conhecimento do que se deve fazer, principalmente no que tange descobrir quais são as ferramentas necessárias para desenvolver um bom jogo. Como o foco da minha pós-graduação é desenvolvimento de aplicações para dispositivos móveis, esse post será mais interessante para quem deseja desenvolver jogos para smartphones e tablets. Mesmo para quem já está trilhando o caminho de outras plataformas, este post pode ajudar também, então continue lendo. 

A Plataforma

Antes de sair comprando algum livro de programação de jogos ou decidir que plataforma irá utilizar, é importante pensar a respeito. Quando o assunto é programação para jogos móveis, existem no mínimo dois sistemas operacionais que devem ser levados em conta iOS (iPhone, iPad, etc) e Android (Galaxy, Razr, Defy, Optimus, etc) e desta forma, para evitar o retrabalho, é interessante que seja escolhida uma plataforma de desenvolvimento que lhe permita atingir estes dois públicos de uma vez só. Existem vários frameworks de desenvolvimento multiplataforma no mercado, mas quando o assunto é games, Corona SDK tem se mostrado uma forte opção, e não obstante, um anúncio recente da empresa Corona Labs tornou o Corona 100% free, mesmo para os desenvolvedores que querem publicar suas aplicações nas lojas e ganhar dinheiro com elas.

Para quem não sabe, eu traduzi recentemente um livro sobre Corona SDK, que pode ser conhecido e adquirido clicando em seu link. Você não precisa comprar o meu livro para aprender a programar usando Corona SDK, mas com certeza ele lhe poupará muito tempo procurando como resolver os problemas mais comuns na Internet, principalmente se não domina o idioma inglês. Fora isso, existem exemplos completos de jogos no livro, com código-fonte e explicações.

O restante deste post é uma tradução livre do original "Making Progress as a Solo Mobile Game Developer", escrito por Inna Treyger entrevistando Hugo Bonacci, um desenvolvedor de jogos que trabalha sozinho e consegue grandes feitos usando Corona SDK. O post original pode ser visto no blog da Corona Labs (em inglês). O mais recente lançamento da Hugoware (marca de Hugo), que também foi eleito como Aplicativo da Semana pela Corona Labs, é Kung-Fu Clash, um beat-n-up muito viciante disponívels para iOS e Android e cujas informações completas (com screenshots e vídeos) pode ser vistos aqui:http://www.coronalabs.com/blog/2012/11/26/app-of-the-week-kung-fu-clash/

Tendo Progresso como Desenvolvedor Solo de Jogos

Hugo Bonacci é um desenvolvedor independente e designer da aplicação que venceu o App of the Week feito pelo Corona Labs em março deste ano, com o game Kung-Fu Clash. Sua paixão por jogos começous desde jovem, quando Hugo tornou-se um grande fã dos jogos de NES e SNES (ele ainda joga com suas crianças!) e é inspirado por jogos como Final Fantasy, Zelda, Secret of Mana e Chrono Trigger.

Durante o dia, Hugo trabalha como consultor de usabilidade para uma empresa em Dallas, Texas, mas sua paixão real é desenvolvimento de jogos. Veja os trabalhos de Hugo em seu blog Hugoware.net.

Fazer jogos pode ser muito divertido, mas também exige muito trabalho. Muitas pessoas tentam criar jogos por conta própria mas pouquíssimas conseguem - e eu me incluo aqui.

Com Kung Fu Clash eu decidi tentar coisas diferentes do que em meus projetos anteriores. Este post discute algumas das abordagens que me ajudaram a publicar com sucesso meu primeiro jogo.

Ninja Mockups

Projete Primeiro

Não se apresse em iniciar a codificar seu jogo. Gaste um tempo planejando o que será seu jogo, como ele funciona e obtenha uma ideia geral do que precisa ser feito. É muito mais rápido encontrar falhas no papel do que gastar horas escrevendo código somente para descobrir que uma idéia não funciona.

Tente abordar ideias que tornem seu jogo diferente dos demais. Algumas vezes é simples como pegar uma categoria comum de jogos (por exemplo, tiro em primeira pessoa) e dar um gostinho único (por exemplo, adicionando portais).

Você não precisa ter um cronograma detalhado de cada tela e comportamento do seu jogo. Eu descobri que simples rascunhos e anotações são mais do que suficiente para tirar as ideias da sua cabeça.

Planejamento não deve estar limitado a somente o início do projeto. Toda vez que quiser adicionar uma feature ou modificar algo que estava funcionando, gaste algum tempo para organizar suas ideias antes de começar.

Kung Fu Clash

Mantenha Simples

Como em qualquer projeto, o número de tarefas necessária para completar pode rapidamente sair do controle. Cada vez que você pensar que identificou tudo que precisa ser feito, acaba descobrindo um grupo inteiramente novo de tarefas que havia esquecido.

Inicie criando uma lista dos requisitos-chave para seu jogo, isto significa remover elementos não essenciais como power-ups, rankings, etc. A seguir, inclua cada um dos sprites, animações, planos de fundo, músicas e outros recursos criativos que você terá de criar. Por último, não esqueça de incluir tarefas que são geralmente esquecidas como gerenciar configurações do usuário, manipular transições de cenas, menus de jogo, gerenciamento de recursos, etc.

Não demora muito para que seu simples jogo vire uma lista que demorará semanas para ser concluída. Não deixe isto intimidar você. Tendo um overview das tarefas para completar irá lhe ajudar a definir objetivos e rastrear seu progresso ao longo do caminho.

E por último, se você quiser adicionar algo novo ao seu jogo então terá de executar este planejamento novamente. Pergunte a si mesmo o que você precisa codificar e criar para fazer acontecer. Uma vez que vislumbre o que precisa ser feito, decida se realmente precisa dessa feature ou se ela pode esperar.

Manter as coisas simples algumas vezes significa dizer a si mesmo "não" sobre adicionar features ao seu jogo.

Mantenha o Foco

É fácil ficar desencorajado quando você é a única pessoa no projeto, especialmente quando o progresso é lento e você tem trabalhado durante vários meses, mas felizmente existem algumas maneiras de se manter motivado.

Primeiro, comece compartilhando seu progresso com seus amigos, familiares e redes sociais. Deixe as pessoas verem no que você está trabalhando e compartilhe sua empolgação. Coloque seu jogo em um dispositivo e deixe as pessoas testá-lo. É emocionante, e altamente motivante, ver seu jogo em ação.

Não fique desencorajado se ele não funcionar corretamente - é somente um demo. Adicionalmente, não aja imediatamente após o feedback de um usu'rio. A menos que seja uma falha crítica, simplesmente tome nota de suas sugestões e então as revise mais tarde. Tentar implementar novas ideias, mesmo as boas, irá diminuir o seu progresso.

Segundo, se você se sentir desmotivado, sobrecarregado, ou simplesmente confuso no que deveria estar fazendo, então provavelmente isso é um sinal de que precisa se organizar melhor. Gaste algum tempo examinando seu projeto e escreva uma lista de tarefas restantes. Simplesmente sabendo o que precisa ser feito é que se consegue manter o projeto nos trilhos.

Quando você sentar para trabalhar, revise sua lista e defina a si mesmo um objetivo de ao menos uma tarefa (ou mais) para terminar e então marque-as conforme for terminando.

Use o Tempo Sabiamente

Teste e encontre maneiras de pré-visualizar suas ideias antes de escrever código. Por exemplo, eu uso Flash para animação e design de personagens, mas ele também funciona bem para visualizar como um personagem se parece movendo através de um plano de fundo para rapidamente experimentar os diferentes tipos de efeitos especiais.

Criar arte para um jogo é um processo que consome muito tempo então esteja certo de planejar para displays de alta-resolução logo no início usando vetorização, 3D ou PSDs muito grandes. Não teste e crie suas próprias sprite sheets manualmente, mas ao invés disso use aplicações como TexturePacker ou Zwoptex para acelerar o processo.

Considere usar recursos existentes para os itens que você não consegue fazer. Por exemplos, eu não sou músico e teria gastado semanas de desenvolvimento tentando criar uma música somente para acabar com algo horrível. Para este projeto eu decidi comprar uma música livre de royalties. Não somente a qualidade é muito superior a qualquer coisa que eu criasse como eu economizei muito tempo no processo.

Evite escrever código se uma biblioteca open-source está disponível e faz a mesma coisa. Mesmo que não da forma exata. É muito mais rápido modificar uma biblioetca existente do que escrever uma do zero. Por mais interessante que possa ser escrever seu próprio framework, seu tempo é melhor investido no código específico do seu jogo.

Não tema gastar tempo escrevendo scripts que automatizam tarefas repetitivas. Se voc6e se encontrar fazendo uma mesmo processo várias vezes, então ele é um candidato perfeito para automatização. Quando você é a única pessoa trabalhando em um projeto, o tempo gasto em atividades tediosas é um tempo jogado fora do ponto de vista dos objetivos pessoais.

E por último, evite o excesso de engenharia em seu código. Isto não siginifica fazer gambiarras, mas ao invés disso um lembrete de que o melhor código do mundo, se não for lançado e/ou gerar algum benefício, é um desperdício. Tente reutilizar código sempre que possível, escreva comentários úteis e use nomes de funções e variáveis com significado, mas principalmente, se preocupe em criar uma boa experiência para o usuário.

Kung Fu Clash Screenshot

Não se Contente

Olhe cuidadosamente a cada detalhe no seu jogo e nunca aceite um "bom o bastante". Se você não está feliz com algo ou algo não parece certo, então há uma boa chance que seus usuários também não gostem. Cuide de cada detalhe até que sinta que está perfeito. Trate seus jogos como se fossem obras-primas - eles não merecem menos!

É difícil ser a única pessoa trabalhando em um projeto, mas isto também significa que você é o único que decide o que vai para o produto final. Tire vantagem de ter o controle completo e dê o seu melhor!

Hugo Bonacci, Criador do Kung-Fu Clash

Tags: , , , ,

Corona SDK | Dica | Experiências | Lua | Mobile

Powered by BlogEngine.NET 1.6.1.0
Design por Laptop Geek, adaptado por onesoft e personalizado por mim.