Categoria: Engenharia de Software

  • No Fundo do Poço

    Quando vivemos em tempos de abundância de crises, é natural que algumas delas passem totalmente desapercebidas. Ponto minúsculo e silencioso no radar não chama atenção. Mas ele será lembrado quando o estrago já estiver feito. Há uma crise na relação entre empresas e seus fornecedores de serviços de desenvolvimento e manutenção de sistemas. É fato, esse relacionamento nunca foi harmonioso. Mas parece que estamos chegando no fundo do poço – naquele momento em que, mais do que debatida, a relação deveria ser totalmente revista.

    Tentarei ilustrar a situação com uma breve história.

    .:.

    Era uma vez uma empresa de médio para grande porte repleta de sistemas. Como é tradicional, a parte “feijão com arroz” do negócio (processos de apoio – financeiro, contábil, RH…) foi informatizada com um pacote ERP; A parte “filé com fritas” (processos primários – vendas, atendimento…) é um combinado de módulos desenvolvidos internamente com algumas soluções de terceiros. Antenada por necessidade, a empresa em questão, que chamaremos de ACME, já usa mas pouco abusa de conceitos modernos como SOA, BPM e BI.

    Assim como acontece em praticamente todas as organizações ao redor do globo, a “Arquitetura Corporativa” da ACME assemelha-se ao retrato do inferno devidamente registrado por uma câmera de 12 megapixels. Consequência natural de anos e anos de projetos “para ontem”, adoção de caixinhas mágicas, fornecedores famintos e voluntariosos e algumas pitadas de modismos. A receita pode variar um pouquinho de empresa para empresa, mas o prato parece ser sempre o mesmo. E é indigesto.

    A demanda por manutenção (80%) e novas aplicações (20%) é sempre maior que a capacidade instalada. Fornecedores devidamente homologados adoram essa parte. Afinal, “fábricas de software” (sic) foram inventadas para isso mesmo, certo?

    Software é um elemento vital para a ACME. Aliás, deve ser para 80% das empresas. Mas ele ainda não é visto como ativo, como conhecimento. Software é contabilizado como despesa. E é tratado como tal: um mal necessário. Então a ACME brinca de fazer de conta que mantém o cérebro e terceiriza membros, mais precisamente os braços. Traduzindo: uma equipe interna definiria o que precisa ser feito; o “como” e respectiva construção seriam executados por “parceiros”. (Há palavra mais maldita que essa em nosso mundo?)

    Acontece que o cérebro é pequeno e fica cada vez menor. Para cada neurônio disponível para “coletar requisitos” (sic), existem dezenas ou centenas de usuários putos da vida, atrasados, indecisos e com hora marcada no psicólogo. Quando muito, uma reunião(zinha) de 1 hora é tudo o que o neurônio tem para entender o que o usuário quer. Desse entendimento nasce um briefing. E dele extrai-se um “cheiro” que, como num passe de mágica, vira compromisso de prazo e custo. Tudo acontece tão rápido que o neurônio nem tem tempo de suspirar.

    Com um olho na fila de usuários que aguardam sua vez de choramingar requisitos, o neurônio repassa para o parceiro selecionado por um critério qualquer aquele conjunto de parágrafos desconexos apresentados anteriormente como briefing. Sim, a escassez de neurônios é tamanha que cabe ao parceiro “fechar o escopo” (sic). Com um pouco de insistência e um tanto de sorte o parceiro consegue um ou dois encontros com usuários para desenvolver “casos de uso”. O papo é menos belicoso que aquele entre usuários e neurônios porque o parceiro é “de fora”. Mas, talvez para mitigar riscos de rusgas, o parceiro sempre manda um analista diferente. O rodízio deve seguir a lógica do namoro de jogador de futebol. Mas os usuários já se cansaram de dizer que “eu já expliquei isso antes…”

    Tão logo o parceiro se manifeste satisfeito com as informações coletadas (implicitamente ele tá de saco cheio daquelas idas e vindas), tem início um hiato de duração indeterminada (apesar do cronograma assinado).

    É marcado para um belo dia (e precisa ser belo mesmo – porque, se ameaçar chover, o parceiro nem tira o carro da garagem) a apresentação do projeto. Dependendo da cara (e do bolso) do sponsor, o evento tem lá suas regalias. Na maior parte das vezes, é só um encontro do parceiro com alguns usuários e um cafezinho. O neurônio autor do briefing é convidado a participar. Claro, se ele ainda estiver na folha de pagamentos da ACME.

    O encontro é tenso. Já começa nervoso. E os usuários não colaboram com o clima: “Nossa, atrasou tanto desta vez, né?”

    Num caso específico a apresentação começou por uma parte bem complicada do projeto: uma tela de cadastro de clientes. O usuário do departamento de marketing mal esperou a tela acabar de ser “renderizada” (sic) e já reclamou: “Nossa logomarca sofreu pequenas alterações há 6 meses. Adequação para a nova realidade Web 2.0 e patati patatá…”. Foi interrompido. O parceiro falou que ninguém avisou. “Mas é uma pequena alteração besta…”, disse, tentando encerrar o assunto. Afinal, o importante era o conteúdo! O cara do marketing não concordou, mas silenciou.

    Para testar o conceito de usabilidade o parceiro pediu que um outro usuário, sem nenhum treinamento, fizesse o cadastro de um cliente. Claro, ele escolheu a menininha mais bonitinha que estava na sala. E quase pegou em sua mão para guiar o mouse na direção do botão “Incluir”. “Por que esse botão tem a cor diferente dos outros?”, questionou a bela. Não mereceu resposta, mas seguiu em sua nobre tarefa.

    Até que, após digitar nome, CPF e logradouro do namorado (para infelicidade do parceiro), se deparou com uma combo box onde ela deveria selecionar a Unidade da Federação. Clicou na setinha e viu uma lista mais ou menos assim: SP, BA, MG, RJ, DF, RS, SC, AC, RR, PA, MS, AM…

    Não se sabe quem disparou primeiro, se o neurônio, a bela ou o cara de marketing. Talvez tenha sido um coro: “Caramba, por que a lista não está ordenada?”

    O parceiro engoliu seco e sacou da mochila importada um calhamaço manchado e cheio de dobras que apresentava na capa a logomarca da ACME (desatualizada) e o nome do projeto. Passou pelas (33) páginas do caso de uso em questão – de trás para frente e de frente para trás – e cravou: “Não tá escrito aqui que a lista deveria ser ordenada. Isso é mudança de escopo!”

    .:.

    A história acima é uma ficção baseada em fatos reais. Só as trechos mais exagerados são verdadeiros.

    A foto utilizada, “Lift Shaft Within the Old Town Hall Tower”, foi devidamente surrupiada de lostajy. Ela foi liberada com licença Creative Commons.

  • D.E.V.A.G.A.R.

    Como apresentei no post anterior, DEVAGAR é um acrônimo para um conjunto de princípios que deveriam nortear um processo de desenvolvimento ‘business-centric’. Confesso, não deixa de ser uma provocação. E um contra-ponto ao ABCDEF que, segundo seus autores, seria ‘business-centric’. Na minha opinião, mais que ‘business-centric’, aquele conjunto de princípios – que, aliás, é muito legal – é mais ‘agile-manifesto-centric’ ou, em outras palavras, ‘developer-centric’.

    Mas, mais do que criar polêmica (essa cansa), eu queria descrever com mais detalhes os 7 princípios que compõem o DEVAGAR:

    D)emonstrar Valor de maneira Iterativa
    Deveria ser, Iterativa & Incremental. Parece frescura, mas faz diferença. Iterare, no latim, significa repetir. Aqui indicamos que repetimos diversos passos (no processo de desenvolvimento), mas a cada repetição nós agregamos real valor. Numa leitura “ágil”, é o mesmo que dizer “entregamos software rodando” em cada ciclo (ou iteração). Não curto o radicalismo: nas primeiras iterações, ou exclusivamente na 1ª iteração, software rodando pode ser menos importante que uma boa compreensão do negócio. Da mesma forma que ele pode ser muito importante para a equalização de visão entre todos os stakeholders. Mais do que um processo, o que determina o Real Valor a ser entregue em uma iteração é o projeto. E cada projeto é único. Mensagem mais importante (para o negócio e seus usuários): se uma iteração se encerra e você não consegue perceber o Valor, algo errado aconteceu. E é verdade: software rodando tem muito mais valor que uma série de modelos UML ou afins.

    E)ntender (e Melhorar) o Negócio
    É difícil aceitar que um projeto seja tocado sem que boa parte da equipe tenha uma mínima compreensão sobre o negócio que está sendo automatizado. É difícil entender a razão para tal alienação ser tão comum em nossa área. Mas o princípio aqui vai além: além de uma boa compreensão do negócio e dos projetos afetados pelo projeto, um processo ‘business-centric’ incentiva a busca por melhorias.

    V)alorizar os Ativos de Software
    Está aqui um princípio que, salvo engano, não vi formalizado em nenhuma proposta de processo. Ele deveria ter dois efeitos:

    1. Garantir a qualidade do software que está sendo produzido. Se bem empacotada (documentada e difundida), a aplicação ganha sobrevida. Vale apelar para um velho chavão: ativos de software, ao contrário dos ativos físicos, ganham mais valor quanto mais são utilizados. Todo software (de negócio) deveria ser construído para durar… muito.
    2. Dar sobrevida aos ativos existentes (também conhecidos como sistemas legados). Trata-se de um dos principais alvos das iniciativas SOA. Mas, hoje em dia, serão raros os projetos que não estabeleçam um mínimo relacionamento com software existente. Combater a síndrome NIH (Not Invented Here) e dar valor para aplicações (conhecimentos!) existentes é uma boa prática.

    A)daptar o Processo
    Taí um princípio que, se adotado pela (IBM) Rational desde o início (do RUP), teria evitado uma série de problemas. Se todo projeto é único, como acreditar em um único processo? Toda organização possui e vive seus valores e costumes. Algumas sobrevivem a eles (hehe.. brincadeirinha). Essa base, mais um conjunto de princípios (ou boas práticas, como as descritas aqui), dá forma à um meta-processo. Um framework que seria posteriormente adaptado para cada tipo de projeto e também para cada projeto.

    No nível mais baixo (um projeto), quatro variáveis principais afetam a configuração de um processo: O Negócio (sua estratégia, processos, departamentos e pessoas afetados); o Tipo de Aplicação (Transacional, Analítica ou Utilitária); a Tecnologia e o perfil da Equipe. Claro, várias outras questões (regulatórias, SOX, Bacen, Basiléia… por exemplo) também podem gerar considerável impacto no desenho dos processos de desenvolvimento e gerenciamento do projeto.

    G)erenciar Requisitos (e Mudanças)
    Vira e mexe, há tempos, o dado pipoca por aí: requisitos (e mudanças) estão de alguma forma relacionados com 80% dos problemas dos projetos que fracassam. Como eles (os projetos fracassados) não são poucos, é inaceitável que este princípio não conste de um processo para desenvolvimento de software. Pode parecer chatice (de certa forma o é), mas “balancear prioridades dos stakeholders” não é o termo adequado. Parece até “forçada de barra” para arrumar uma letra B (e assim compor o perfeito ABCDEF). E por falar nisso, gerenciar requisitos não significa lotar paredes com post-its coloridos.

    A)tacar os Riscos
    Assim como os requisitos, o mau gerenciamento de riscos também está entre as principais causas das falhas em projetos de software. Como Grady Booch já falava em 96 , “se você não atacar os riscos, eles o atacarão”. O verbo é este mesmo: Atacar (a redação de um princípio deve ser clara e direta). E é equivacada a impressão de que riscos são questões exclusivas de arquitetura. Um bom entendimento do negócio (princípio #2 acima), significa também a descoberta de riscos e até uma possível antecipação de mudanças. Aliás, os riscos de negócio são mais perigosos que os riscos de arquitetura (por mais que algumas péssimas aplicações tentem nos provar o contrário).

    R)espeitar os Usuários
    É chato que algo assim tenha que aparecer numa lista de princípios. Mas, infelizmente, se fez necessário. É bom que seja o item de fechamento da lista. Força a revisão de muitos fatores que podem ter ficado implícitos. Por exemplo: vamos ouvir e gerenciar todas as expectativas dos usuários. Mas não fugiremos da responsabilidade de sugerir melhorias, ou de alertá-los sobre riscos em potencial. Respeitaremos a inteligência e o tempo dos usuários estudando seu negócio, falando sua língua. E, mais importante, nos comprometendo com seus objetivos de negócio.

    Por tudo isso eu gostei do DEVAGAR. “DEVAGAR & SEMPRE”, como naquela fábula da tartaruga. Taí, já arrumei até mascote para o ‘business-centric’…

    .:.

    Notas:

    1. Os princípios desenham o perfil de um processo. Quanto mais genéricos forem, mais maleável é o processo. Por isso é preciso ter muito cuidado com processos que se apresentam como de uso geral, mas apresentam princípios que, de certa forma, são ‘intrusivos’. Reparem: trata-se de uma crítica que se aplica à listinha DEVAGAR acima. Com certeza ela não atenderá qualquer tipo de negócio. O que dizer então de projetos?
      O mais importante é ter um bom ponto de partida. E ninguém pode ensiná-lo melhor do que seu próprio negócio.
    2. Object Solutions – Managing the Object-Oriented Project
      Grady Booch. Addison-Wesley (1996).

    .:.

  • Business-Centric

    Quem participa do ótimo grupo UML-BR (Yahoo!Groups) deve ter visto uma discussão em torno da liberação da versão 1.0 do OpenUP. Em determinado momento, ainda lá nas primeiras mensagens, o debate virou “Architecture Centric X Business Centric”. Enquanto o RUP estaria mais para o primeiro, o OpenUP seria uma representação do segundo. Não é uma definição amplamente aceita. O RUP vem alterando seus princípios desde sua criação. Tanto que no verbete RUP da Wikipedia ele também é apresentado como “business centric”.

    Para entender: quando lançado, eram apresentados como princípios (ou grupos de melhores práticas) do RUP :

    1. Desenvolver software de maneira iterativa
    2. Gerenciar Requisitos
    3. Utilizar arquiteturas baseadas em componentes
    4. Modelar o software
    5. Verificar continuamente a qualidade dos artefatos gerados
    6. Controlar mudanças

    Com o tempo os princípios foram mudando. Em determinado momento, o “espírito do RUP” consistia em :

    1. Atacar os grandes riscos o quanto antes, continuamente
    2. Entregar valor para o cliente
    3. Direcionar seus esforços para gerar software executável
    4. Assimilar mudanças o quanto antes no projeto
    5. Definir uma arquitetura o quanto antes
    6. Construir o sistema com componentes
    7. Trabalhar como uma equipe
    8. Fazer da qualidade um modo de vida

    A pressão do “Agile Manifesto” e por um processo menos “pesado” continuou, o que nos trouxe para o mais novo conjunto de princípios que, segundo Per Kroll e Bruce MacIsaac , norteiam tanto o RUP quanto o OpenUP. São eles:

    • A)daptar o Processo;
    • B)alancear Prioridades dos stakeholders;
    • C)olaboração entre os times;
    • D)emonstrar valor de maneira iterativa;
    • E)levar o nível de abstração; e
    • F)ocalizar continuamente a qualidade.

    Este último conjunto seria, segundo seus criadores, “Business-Centric”, enquanto os dois anteriores, particularmente o primeiro, seria nitidamente “Architecture-Centric”. No grupo de discussão, respondendo ao Marcio Tierno e Rodrigo Yoshima, eu falei que não concordava com o rótulo “Business-Centric”. É um rótulo adotado pelos próprios criadores da lista de princípios. Se fosse um rótulo colocado por gente de fora, um consenso, tudo bem. Mas ao batizar suas idéias e sugestões de práticas de “business-centric”, os autores, imho, pesaram a mão. Eu disse que a lista parece mais “Agile-Manifesto-Centric”, enquanto o Tierno sugeriu “User-Centric”. Mas a crítica não basta.

    Desde então ando pensando em quais seriam os princípios de um processo “Business-Centric” de verdade. Meus 7 cents:

    • D)emonstrar valor de maneira iterativa
    • E)ntender (e Melhorar) o negócio
    • V)alorizar ativos de software
    • A)daptar o processo
    • G)erenciar requisitos (e mudanças)
    • A)tacar os riscos
    • R)espeitar os usuários

    Ops… D.E.V.A.G.A.R…. não deve pegar muito bem. Talvez com sobrenome: “Devagar e Sempre!” hehe..

    Mas, apesar do nome, gostei da idéia. No próximo post falo um pouco mais sobre cada princípio.

    .:.

    Bibliografia:

    1. The Rational Unified Process – An Introduction
      Phillipe Kruchten. Addison-Wesley (2000 – 2ª Edição).
    2. The Rational Unified Process Made Easy
      Phillipe Kruchten e Per Kroll. Addison-Wesley (2003).
    3. Agility and Discipline Made Easy – Practices from OpenUP and RUP
      Per Kroll e Bruce MacIsaac. Addison-Wesley (2006).
    .:.
  • Código = Documentação?

    Na pequena série sobre o “Agile BA” eu prometi um post para falar especificamente sobre Documentação – o 2º maior pesadelo dos programadores.

    Nick Malik, do Inside Architecture, chegou antes, e no último dia 11/jul publicou 4 razões para não acreditarmos que código é documentação suficiente para processos de negócio.

    O excelente artigo do Nick não me isentará de voltar ao assunto. Acontece que eu quero ir um pouco além, tentando entender ou explicar o trauma que é a tal “documentação”. Enquanto trato de outras prioridades, fica a provocação:

    Software is the leaky abstraction. It makes poor documentation for a business process.

    .:.
  • Getting Real

    Graffiti: Vocês usam algum processo de desenvolvimento? Podem falar um pouco sobre ele? Tipo, tem um pouco de XP ou afins?

    Marco Gomes: Usamos o Getting Real, a programação é “Orientada à Gambiarras com Ajustes Posteriores” e trabalhamos sempre nas madrugadas.

    .:.

    O papo aí é um pequeno trecho da entrevista que Marco Gomes e Rapha Vasconcellos, criadores do Boo Box, deram para o Graffiti (meu blog ‘menos sério’, hehe). Pena que não deu para explorar mais o assunto, o processo “Getting Real”. Mas, pelo jeito, oportunidades não faltarão.

  • Razões para Criar Software

    • 11.301% of software is written to save money.
    • 13.852% of software is written to make money.
    • 24.718% of software is written to make someone in the company (or some department) look good to their peers or bosses.
    • 50.129% of software is written as a panic reaction to solve a problem that no one understands.

    Olha que é só um pequeno trecho de um ácido e hilário post de Kevin Barnes, em seu Code Craft. Vale cada minuto da leitura.

  • CMMI x mpsBR

    Já divulguei aqui (e/ou no Graffiti) o grupo CMM-Br. O grupo praticamente dobrou de tamanho nos últimos três meses. E, por incrível que pareça, o aumento do número de participantes não resultou em queda da qualidade das discussões. Muito pelo contrário! Desde a semana passada tá rolando um debate legal sobre CMMI x mpsBR. Pra quem chegou agora: o mpsBR (Melhoria do Processo do Software Brasileiro) é um modelo ‘alternativo/suplementar’ ao CMMI. Tá aqui o pomo da discórdia: estamos reinventando a roda? Os defensores do modelo tupiniquim alegam a enorme economia de custos. Concordo. Mas ainda não consegui gostar do modelo. Não entendi o pq das diferenças, inclusive dos níveis de certificação. Mas o importante é que exista o debate. Em cima de propostas. Trouxe para o Finito um dos posts que pintaram no grupo. Seu autor, Sr Ricardo Mansur, autorizou sua publicação. Saca só:

    Boas colocações na questão de separação, afinal os chamados pacotes não demandam as certficações CMMI.

    Em relação ao software sob encomenda (serviço)eu discordo a little bit pois a India ( principalmente ) e China vem nadadando de braçadas neste mercado quase que sozinhas ( alguma competição do México ) e temos algumas empresas nacionais fazendo este tipo de desenvolvimento fora do Brasil.

    Então devemos nos perguntar por que empresas diversas do Brasil ( Não tão diversas assim, umas cinco ou seis ) ganham licitações para desenvolver software fora do Brasil, ou seja no local do solicitante e não conseguem na modalidade de offshore ?

    Por que a India consegue vender na modalidade off shore ?

    A resposta passa pelo termo gerenciamento. O Brasil consegue ganhar vendas na modalidade local do cliente pois tem engenheiros e outros profissionais de excelente qualidade, mas peca em termos de gerenciamento, a nossa fama é muito ruim quando falamos neste quesito e a India nada de Braçada porque além de estar cada vez mais se aprimorando no CMMI, ISO os seus profissionais tem em geral certificados PMP, ou seja eles se valem de certificados internacionais como pilares da sua vantagem
    competitiva.

    Ao se adotar modelos que não sejam padrão de mercado para métricas de qualidade nós estamos levando não apenas a indústria do software para um modelo que o mundo não reconhece, mas também arrastamos todos os setores produtivos nesta onda, já que tecnologia faz parte da infra dos negócios.

    Se o projeto for tocado 100% com capital próprio e sem incentivos fiscais e de juros será o mercado o decisor de que é mesmo é válido ou não, mas se existir dinheiro público, mesmo que na forma de renúncia fiscal nós estamos levando para a sociedade como um todo a conta de algo que é na minha visão como incerto….

    Quando falamos que estamos despreparados para um melhor nível de qualidade estamos na realidade condenando mais uma geração de brasileiros à probreza e miséria já que novamente estamos no posicionando no quarto de empregada da casa e não na sala de estar aonde estão ocorrendo as conversas de negócios lucrativos.

    A nossa qualidade de software está intimimanente ligada ao modelo de negócios no Brasil que tem remuneração como PJ e custo hora. Ora, qual profissional irá aumentar a sua produtividade em um cenário que ele irá receber menos ?

    Por que a India ganhou este mercado ? Parte se explica pelo modelo de negócios e a outra parte pela política coerente com normas, padrões mundiais e principalmente por conseguir alcançar primeiro objetivos que o primeiro mundo considerava quase impossível.

    O Brasil pode e deve ser um lider, se não mundial, pelo menos na América Latina e de repente podemos simplificar não mais falando de nível 5 mas de nível 2 ou 3 e com planos de médio e longo prazo para maiores níveis.

    Reparem na parte que negritei. Há tempos ‘arranho’ o tema mas o Ricardo, em 2 frases, falou tudo.

  • Placar CMM/CMMI

    O SEI (Software Engineering Institute) acabou de publicar resumos das avaliações aplicadas no mundo todo, o Maturity Profile. Apesar de certa ‘economia’, alguns dados interessantes podem ser extraídos de lá. Por exemplo: mais de 70% das certificações CMMI reportadas nos EUA vão para organizações que trabalham para o governo ou para os militares. Fora dos EUA, quase 90% concentram-se em trabalhos internos ou comerciais.

    Mais de 20% das organizações certificadas CMM possuem entre 101 e 200 empregados. E 46% delas atuam na área de serviços, contra 24% na indústria. O ranking por países ficou assim:

    1o. EUA :: 1947
    2o. Índia :: 387
    3o. China :: 243
    4o. Japão :: 149
    5o. França :: 142
    6o. Reino Unido :: 139
    7o. Canadá :: 79
    8o. Coréia do Sul :: 75
    9o. Alemanha :: 62
    10o. Austrália :: 36
    11o. Itália :: 33
    12o. Israel :: 30
    13o. Brasil :: 28

    Meu “placar” ali do lado fala de 39 certificações no Brasil. Tirei os dados das 2 empresas certificadoras daqui, ISD e Procesix, e somei CMM e CMMI. Provavelmente vem daí a diferença.