Dica de arquitetura de sistemas para startups

A dica rápida de hoje é sobre arquitetura de sistemas. Semana passada o Rachad, gerente de engenharia dos produtos SaaS da Locaweb, apresentou para as startups que estão sendo aceleradas na Aceleratech algumas dicas sobre arquitetura de sistemas para startups:

E para facilitar sua vida, não se esqueça do Jelastic Cloud Locaweb.


É um PaaS (Platform as a Service), tipo Heroku e Google App Engine.

Roda aplicações Java e PHP. Vai ter Ruby no início de 2014. Tem várias opções de banco de dados, Postgres, MySQL, MariaDB, Mongo e CouchDB. Tem auto scaling tanto vertical como horizontal. É cobrado por hora e é mais barato que Amazon, e bem mais barato que Heroku e Google App Engine!

Para experimentar sem custo essa super novidade, basta acessar:


É uma ótima solução para infraestrutura de startups.

Be the first to like.

Why the hurry to launch an MVP?

I mentioned earlier that I was starting:

a new project called “The startup guide: how to create and manage profitable web products”. It’s a blog that will eventually become a book where I’ll explain how to create and manage a web product with a profit.

Well, I finished writing the book which is called “The Startup Guide: how startups and established companies can create and manage profitable web products“. The book is focused on how any type of company – no matter if it’s a startup or an established company – can create and profitably manage a web software. All it’s content is available at the “Guia da Startup” blog. It’s currently in Portuguese so it’s a good opportunity for you to practice reading in a new language. If you are not up-to-date with your Portuguese skills, there’s the option of using Google Translate but some meaning may be lost in translation. For these reason I intend to translate the content into English eventually.

One of the most popular posts from this blog is about the reasons to make fast the first version of your product. Why do we need to make an MVP? Why not wait to have the product with more features to launch it? Herb Kelleher, co-founder and former CEO of Southwest Airlines has a famous phrase to motivate people to do things:

“We have a ‘strategic plan.’ It’s called doing things.”

This “strategic plan” can be translated into the #jfdi hashtag which means something in the lines of “just focus and do it” or “just freakin’ do it” (polite form).

But why the hurry? Why can’t we keep working on our product until we feel comfortable it has all the features we believe are needed to solve the user’s problem?

Well, there are 3 main reasons:

Reason #1: The moment of truth!

The longer you take to put your product in front of real users, the longer you take to start getting feedback from real people to know if you’re on the right track. And what’s even worse, you’ll probably be giving too many steps in the wrong direction.

A software is supposed to solve a certain problem of its users. You will not know if you have built a good product until the product is used by real users and it actually solves one of their problems. The longer it takes for this to happen, the longer it will take for you to know if your product is or is not the solution for someone’s problem.

And if it is not, what should you do? Change, adapt and present it again to real users! The sooner you know that what you’re developing is not on track, the better, because you’ll have spent less time, energy and money moving into the wrong direction.

Reason #2: Featuritis

There’s a limit to the number of features an user can understand. When we present a software full of features to a potential user, instead of providing her with a possible solution to one of her problems, we may end up creating a new problem for her. Kathy Sierra, a well known software development and user experience instructor, designed the Featuritis Curve that illustrates in a clear and fun way how user satisfaction diminishes as we increase the number of features of a product.

Reason #3: ROI

The longer you take to put your product in front of real users, the longer it will take for you get some revenue and the longer you’ll have to invest from your own money or investor’s money. Below is a typical return on investment chart. While you don’t launch your product and don’t have revenue, all you’ll have are costs, i.e., you’ll be in the investment phase of the curve below. This situation will only change when you get some revenue and this revenue pays your monthly costs. This is the monthly profitability phase in the chart. Only after a few months in the monthly profitability phase you’ll be able to get to the return on investment phase. It’s a long way:

Now take a look at the chart below. If you decide to delay your launch in 3 months, this can delay your return on investment in 6 months! Are the features that you intend to implement in those 3 months you are delaying the product launch worth the 6 months delay to get to the return on investment phase?

On the other hand, if you are able to launch 3 months sooner than what’s described in the first chart, you’ll get into the return on investment phase 6 months sooner. Isn’t that worth figuring out how to launch your product faster?

If you’re not embarrassed…

There is a famous quote by Reid Hoffman, founder of LinkedIn, which really resonates with the MVP concept:

“If you are not embarrassed by the first version of your product, you’ve launched too late.”

To illustrate this quote, here are some print screens of early versions of well known software products:

Google in 1998

Twitter in 2006

Linkedin in 2005

Facebook login screen in 2005

Facebook in 2005

Next post

Last year I decided to run a lean startup experiment. Would it be possible to build a software and market it without using Locaweb’s marketing power? The result of this experiment is a calorie counter web product with more than 17,000 registered users in less than one year of operation. In my next post I’ll explain how I built the first version of this product in 10 days.

14 people like this post.

Why before how

This weekend I was at QCon São Paulo, a great conference made by developers for developers.

In this conference I talked about “Guia da Startup” (Startup Guide), a blog (in Portuguese) that became a book (also in Portuguese) about product management lessons for web startups and for non-startups with web projects. I have plans to translate the content of this book to English and post it here.

Martin Fowler (@martinfowler) from ThoughtWorks gave the first keynote. At a certain point he used an interesting quote to introduce the topic of good design and technical debt.

I commonly come across developers who are frustrated because “management want more features, they don’t care about quality”

The quote got my attention specially because as a developer talking to developers in a developer conference, Martin focused on the part of the quote that normally drives the attention of all developers, the “how” part. He focused on the “quality” word to explain how important it is to have good design to avoid technical debt so developers can add more features more easily. As I’m more focused on the product management side of software development, as soon as I read the quote, I focused on the “why” part. This motivated me to create a new slide in my presentation about product management practices:

When I heard the quote, my focus was directed directly to the word “features” and my first reaction was asking “Why is this feature being requested?”

When we are asked to implement a feature in a software, the natural reaction is to think how this feature will be implemented. However, we need to give a step back and understand what we are trying to achieve implementing this feature. What value this feature brings to the software users? What value this feature brings to the software owners? Every new feature, no matter how small it is and how simple it is to implement, creates complexity in our code. What’s the value we expect out of this additional complexity? This is a question that not only a product manager should ask, but every developer who is asked to implement a feature should ask.

So my recommendation to every developer who’s asked to implement a feature is, before rushing to figure out “how” a feature should be implemented, question “why” this feature is being asked. This will help you understand the importance of the feature and help who’s asking the feature to reassure the motivation behind this feature.

16 people like this post.

Quanto tempo levou para fazer o ContaCal?

Já falei aqui como fiz o ContaCal. Para confirmar a importância de fazer rápido o produto web, aqui está um gráfico que mostra quanto tempo levei para colocar o ContaCal na frente de clientes:

Dados do desenvolvimento e lançamento do ContaCal

Dados do desenvolvimento e lançamento do ContaCal


  • 23/08/2011: Início do desenvolvimento da aplicação pelo pessoal da StartupDev.
  • 25/08/2011: Aplicação pronta e início da adaptação do logo e do template de WordPress.
  • 01/09/2011: Site em WordPress pronto.
  • 02/09/2011: Campanha de AdWords religada. Até aqui eu só tinha usuário de teste. A partir daqui é o momento da verdade, com usuários reais utilizando o sitema.
  • 04/09/2011: Email para pessoas que mostraram interesse.
  • 07/09/2011: Início de campnha no Facebook.

Ou seja, do início do desenvolvimento até religar a campanha no AdWords foram 10 dias! 🙂


Veja nas telas abaixo a primeira versão do site e da aplicação. Ambos já mudaram significativamente desde essa primeira versão.

Primeira versão do site

Primeira versão do site

Primeira versão da tela de login

Primeira versão da tela de signup

Primeira versão do produto web

Primeira versão do produto web

Be the first to like.

Boas práticas de engenharia de software

Claro que não adianta você saber exatamente o que vai fazer na versão mínima de seu produto web se você não tiver um ótimo time de desenvolvedores de software e designers de interface do usuário. Só que ter pessoas bem qualificadas por si só não resolve. É preciso que essas pessoas trabalhem usando as melhores práticas de engenharia de software. Vou comentar um pouco sobre algumas dessas práticas aqui, apesar de esse não ser o foco principal deste blog.

Desenvolvimento iterativo de software

A primeira boa prática que quero comentar aqui é o desenvolvimento iterativo de software. Essa forma de desenvolvimento se contrapõe ao modelo de desenvolvimento de software conhecido como waterfall. No desenvolvimento waterfall as fases de desenvolvimento de software são claramente definidas e, uma vez terminada uma fase e iniciada a outra, não se pode voltar atrás. Por exemplo, se você quer desenvolver um produto web, no desenvolvimento waterfall você precisa especificar absolutamente todas as funcionalidade que você vai querer nesse software, pois o desenvolvimento de software é visto como um projeto com começo, meio e fim que acontece em sequência: definição de requisitos, detalhamento e especificação do software, codificação, teste e produção. Já no desenvolvimento iterativo de software, esse mesmo ciclo é reduzido ao seu menor tamanho possível e repetido várias vezes usando o feedback do ciclo anterior para melhorar o próximo ciclo.

Jeff Patton, reconhecido consultor de desenvolvimento de software, fez uma comparação entre waterfall e desenvolvimento iterativo de software fazendo uma analogia com o processo de pintar um quadro. Qual dos dois processos abaixo parece ser mais natural?



Desenvolvimento iterativo

Desenvolvimento iterativo

Esse processo de desenvolvimento iterativo de software acabou sendo uma das bases do Manifesto para Desenvolvimento Ágil de Software, escrito há mais de 10 anos, que acabou se tornando uma revolução na forma de se fazer software:

Estamos descobrindo maneiras melhores de desenvolver software, fazendo-o nós mesmos e ajudando outros a fazerem o mesmo. Através deste trabalho, passamos a valorizar:

  • Indivíduos e interações mais que processos e ferramentas
  • Software em funcionamento mais que documentação abrangente
  • Colaboração com o cliente mais que negociação de contratos
  • Responder a mudanças mais que seguir um plano

Ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à esquerda.

Esse manifesto melhorou em muito a forma como software é desenvolvido, garantindo maior envolvimento da pessoa que define como vai ser o software durante o desenvolvimento desse software.

A partir desse manifesto alguns processos de desenvolvimento de software foram criados de forma a permitir esse envolvimento. Uma das recomendações que veio como consequência do manifesto é os times que desenvolvem software devem se reunir periodicamente para definir o que fazer e para acompanhar o andamento do projeto. Nessas reuniões participam não só os desenvolvedores de software como também as pessoas que definem “o que” e “como” será o produto web. O “o que” é definido pela função de gestão de produto e o “como” é definido pela função de experiência do usuário, funções descritas no post Quem deve criar uma startup de um produto web?. Essas reuniões frequentes são fundamentais para garantir a velocidade de entrega do produto mínimo.


Outra boa prática muito importante é o TDD (Test Driven Development ou Desenvolvimento Baseado em Testes). Por meio dessa prática se garante não só a qualidade do software que está sendo desenvolvido, uma vez que todas as suas funções têm testes para garantir que o que foi desenvolvido está funcionando conforme esperado, testes esses preferencialmente automatizados, como também aumenta a segurança para futuras modificações nesse software. Quando seu software tem testes, você pode adicionar novas funcionalidades e, por meio dos testes, garantir que o software continue se comportando conforme esperado em todas as situações previstas e cobertas pelos testes.

Entrega contínua

Ter essa cobertura de testes é fundamental para poder executar a terceira boa prática que eu queria comentar, a entrega contínua. Entregar continuamente o software significa ter a capacidade de colocar seu software em produção a qualquer momento de forma simples. Você só poderá fazer isso se:

  • tiver cobertura de testes para garantir que o software que você colocou em produção está fazendo o que se espera dele e;
  • tiver uma forma simples e rápida de voltar atrás, ou seja, se der algum problema com o software que você acabou de colocar em produção, você é capaz de restaurar a versão anterior do seu software em produção.

Ter entrega contínua é muito importante para que você possa, após ter seu produto web funcionando e com usuários, fazer rapidamente modificações nesse seu produto web baseado nos feedbacks que você receber desses usuários.

Como disse acima, quis incluir aqui no blog um rápido comentário sobre as boas práticas de desenvolvimento de software mas eu recomendo que, caso você não tenha ouvido falar dessas práticas, procure conhecer mais lendo blogs, indo a cursos, lendo livros e participando de eventos sobre desenvolvimento de software.

Recapitulando: fazer rápido o produto web = saber o que fazer + boas prática de engenharia de software

Por melhores que sejam os desenvolvedores e os designers de interface que trabalharem no seu produto, se você não escolher com muito cuidado que funcionalidades colocar e não selecionar um conjunto mínimo de funcionalidades, as chances de você desperdiçar tempo de desenvolvimento são muito grandes. A definição clara de seu produto mínimo é fundamental, e você só vai conseguir fazer isso conhecendo bem o problema do seu cliente e sabendo exatamente o que você está resolvendo para ele. Além disso, mesmo os melhores profissionais com a mais clara definição do que vão fazer precisam de boas práticas de desenvolvimento de software para poder desenvolver com rapidez um produto web de qualidade.

Be the first to like.

You need to talk with real users in order to build good software

I was reviewing ThoughtWorks latest version of their Technology Radar, which is a great source of information to help you know what’s hot in terms of software development and IT management, and notice it doesn’t mention Product Management (or you can call it Product Ownership) and put Experience Design (XD) only at the “assess” sector of the technique area of the radar.

In my view, Product Management and Experience Design are techniques as critical to successful software projects as DevOps, Continuous Delivery, Testing, Agile and Lean.

  • Product Management role tells what needs to done and in what order.
  • Experience Design role tells how what needs to done should be done, from the user experience perspective.

It is quite difficult to develop good software without those two roles and their techniques. Both should be in the “adopt” sector of the technique area of the radar.

Product Management is not only for systems that will become a product, but for any system, since any system will have users. The Product Management role is the link between system users and the team who will build the system. It is different from the Business Analyst role which is more focused in the business and the owners of the system. And its different from Experience Design role which is more focused on how a user interacts with a system.

The Product Management role is responsible for talking with real users of the system, understanding the pain that the system is supposed to solve for these real users and help define what needs to be developed. Note that a system may be owned by a company, like a ticketing system or an ecommerce system, and this company who owns the system will ask for a certain set of features so they can reach a certain business goal, but the requirement gathering is incomplete if we don’t listen to the real users of the system who normally are customers of the company who owns the system.

If you have a great group of developers, QAs and BAs, all veterans in using Agile, Lean, Testing, DevOps and Continuous Delivery, all of that is useless if you are not able define what is the minimal set of features that can create value for the customer in the first release. And subsequently define the minimal features to be developed and deployed that brings greatest value to real users. The Lean Startup movement calls it MVP (Minimal Viable Product). Mark Denne and Jane Cleland-Huang, authors of Software by Numbers, first published in 2003, coined another term for this minimal set of features. They call it MMF (Minimal Marketable Feature).

The Agile Manifesto says that we should value “Customer collaboration over contract negotiation” and set as it’s first principle that “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software”. The issue with these two statements is that it assumes that the customer who is the owner of the system knows what is “valuable software”. However, the customer normally knows what is “valuable software” for him, i.e., he knows what are his business goals that they want to achieve with the system. The problem is that the customer doesn’t know his own customers/users enough in order to define the requirements upon what a system should be developed, i.e., the customer doesn’t know what is “valuable software” for his own customers/users.

It is the Product Manager’s role to understand the users of a product/system, the problem the users have, and should bring this information back to the developers and experience designers so these three roles can jointly come up with a product/system that solves the users problem and, at the same time, meet the system owner’s business goals.

What do you think? Do you agree? Disagree? Share your comments below! 🙂

18 people like this post.

Como fazer rápido o seu produto web?

Já entendemos porque é importante fazer rápido o produto web. Agora precisamos saber como fazer isso! Será que precisaremos de bons desenvolvedores de software? Com certeza. E bons designers de interface do usuário? Sem dúvida alguma!

Contudo, só ter bons profissionais te ajudando não é o segredo para vc fazer o produto rapidamente. O que você precisa fazer é definir quais são as funcionalidades mínimas necessárias para o seu produto. Esse é a principal responsabilidade da função de gestão de produtos que, como eu comentei anteriormente no post sobre as diferentes áreas de conhecimento envolvidas em uma startup, é uma das únicas funções que não podem ser terceirizadas. Quem tem que fazer isso é vc.

A importância de conhecer o cliente e o seu problema

Nesse momento fica claro a importância de se conhecer muito bem o cliente e o seu problema. Vc vai ter que entender muito bem qual é o problema e qual é a solução mínima que vai resolver o problema desse cliente. Fica claro também a vantagem de se trabalhar em um problema próprio, pois sendo vc mesmo o cliente, é mais fácil definir o que é mínimo para resolver o problema.

Tome cuidado pois, como com software dá para fazer muitas coisas legais, é muito fácil a gente cair na tentação de querer colocar “só mais essa funcionalidade” antes de lançar o produto. Pense bastante se essa funcionalidade não terá um custo muito alto de desenvolvimento em termos de tempo, energia e dinheiro – vc se lembra das curvas de retorno de investimento do post anterior? – para o benefício que ela pode trazer para a solução do problema do cliente.

Para ilustrar isso de forma clara, vou citar dois exemplos.

Cursos online da Caelum

A Caelum é uma empresa bastante conhecida pelos seus cursos presenciais de desenvolvimento de software. Há uns 3 anos começou a surgir demanda por cursos online mas Paulo e Guilherme Silveira, sempre preocupados com a qualidade de ensino, não queriam dar esse passo até encontrar uma forma de oferecer cursos online com uma qualidade satisfatória. No início de 2011 encontraram um formato que lhes pareceu interessante. Resolveram então desenvolver o produto web de educação online com esse formato. O desenvolvimento começou em fevereiro de 2011 e a versão para usuários gratuitos ficou pronta no final de julho de 2011, totalizando 5 meses de desenvolvimento. Paulo ainda estava inseguro quanto a lançar na QCon em setembro, sentia que ainda precisava colocar várias funcionalidades, dentre elas a cobrança. Eles correram para colocar alguma forma de cobrança que ficou pronta literalmente no dia do lançamento que foi no primeiro dia da QCon. Várias funcionalidades que eles queriam ter colocado para o lançamento da versão paga acabou não entrando no lançamento.

Resultado: o primeiro cliente pagante veio somente depois de duas semanas, ou seja, a cobrança não era tão necessária para o lançamento. Agora em março de 2012, é uma funcionalidade bem necessária! Já são quase 130 cursos vendidos e um total de 400 alunos distintos. Contudo, a cobrança poderia ter sido desenvolvida após o lançamento. As outras funcionalidades que eles queriam ter colocado não fizeram falta para o lançamento do produto e, quando houve clientes reais utilizando, o que esses clientes deram de retorno acabou orientando o desenvolvimento do produto web.


Quando usei o pessoal da StartupDEV para fazer o ContaCal, eu não tive a opção de tentar fazer mais desenvolvimento e gastar mais tempo, eu tinha direito a apenas 48 horas. Eu mostrei para o time de desenvolvedores o que eu queria e eles estimaram quanto tempo cada pedaço do sistema ia levar. Obviamente que fazer todo o sistema ia ultrapassar as 48 horas que eu tinha direito, então tive que escolher.

Quando desenhei os wireframes do ContaCal para passar para o pessoal da StartupDEV desenvolver a aplicação web, os slides 4 e 5 tinham dois gráficos, uma para mostrar a evolução das calorias e outro para mostrar a evolução do peso. Não tinha como caber os dois. Eu tinha que escolher um dos dois, ou gráfico de evolução de calorias, ou gráfico de peso. Lembro que foi uma decisão difícil, e depois ainda conversamos sobre fazer versão de 7 dias e versão de 30 dias.

Decidi por implementar o relatório com evolução de controle de calorias, com visualização de 7 dias e 30 dias. Recebo com alguma frequência pedido de clientes que gostariam de ter alguma forma de acompanhar seu peso no contaCal. É a funcionalidade que deixei de implementar. Por outro lado, de todos os pageviews que a aplicação tem, 4,6% são pageviews dessa funcionalidade, ou seja, uma funcionalidade que tem um uso razoável, ainda mais comparado com 31,4% de pageviwes da página principal da aplicação:

Pageviews do ContaCal

Pageviews do ContaCal

Só que a dúvida ficou, será que relatório era de fato uma funcionalidade essencial para ter numa versão mínima do produto? Será que as pessoas gostam mais do produto por ter essa funcionalidade. Tem algumas formas de saber. Uma delas é fazendo uma pesquisa segmentada, ou seja, conversando com usuários que usam e com usuários que não usam a funcionalidade para saber dos que usam o que gostam e porque usam e dos que não usam, porque não. Outra forma é simplesmente desligando essa funcionalidade por algum tempo e ficando antenado para reclamações e comentários.

Minha opinião é que o ContaCal poderia ter sido lançado até mesmo sem a funcionalidade de relatório e que isso não teria impactado o número de usuários que se cadastram e que depois se tornam assinantes.

Falo isso devido a outra funcionalidade que implementei no ContaCal após o lançamento. Muitos usuários comentaram que seria muito bom ter a possibilidade de controlar não só a quantidade de calorias ingeridas como também a quantidade de calorias gastas. Em novembro, dois meses e meio após o lançamento, coloquei essa funcionalidade no ContaCal, de registro de atividades físicas. Anunciei para a base de usuários existentes, destaco isso como uma das funcionalidades que o sistema tem e várias pessoas acham bacana, mas a curva de novos usuários que se cadastram para testar o sistema, bem como de usuários que decidem virar assinantes não mudou em nada! Para confirmar, acabo de ver na base de dados que 1,8% dos registros feitos são de atividades, 98,2% são registro de alimentos.

Recapitulando: fazer rápido o produto web = saber o que fazer

Por melhores que sejam os desenvolvedores e os designers de interface que trabalharem no seu produto, se vc não escolher com muito cuidado que funcionalidades colocar e não selecionar um conjunto mínimo de funcionalidades, as chances de vc desperdiçar tempo de desenvolvimento são muito grandes. A definição clara de seu produto mínimo é fundamental, e vc só vai conseguir fazer isso conhecendo bem o problema do seu cliente e sabendo exatamente o que vc está resolvendo para ele.

Próximo post

O próximo post vai ser surpresa! Já tenho ele montado e ele tem por objetivo confirmar que é preciso lançar logo um produto. Só não vou contar como será o post para não estragar a surpresa! 😛


Vc conhece algum exemplo de produto que, quando foi lançado, era mínimo mas já resolvia um problema de cliente? Compartilhe nos comentários.

Be the first to like.

What is Product Management?

DDD (Domain Driven Design) has a very powerful concept, so powerful that it is the first concept presented to anyone who is initiated in DDD, Ubiquitous Language:

A language structured around the domain model and used by all team members to connect all the activities of the team with the software.

source: http://domaindrivendesign.org/node/132

It’s a way to guarantee a shared understanding of the main terms used in a domain.

I’ll start to write more about Product Management here, so I felt the need to define Product Management prior to writing more about it.


Prior to defining Product Management, let me define product in the software development industry:

Product is any customer facing software system.

A customer facing software system is not necessarily a system which drives revenue through subscription or on-demand use. A system like a newspaper portal can be considered a product. The revenue from such a system probably will come from ads. An internet banking is another example of a customer facing system who would benefit from product management. It doesn’t drive direct revenue but it helps decreasing cost of physical bank offices.

Product Management

And here goes the Product Management definition:

Product Management is accountable and responsible for everything from high-level objectives to the details of the user experience of a customer facing system. It’s the connection between the business strategy and the customer through a software system.

3 people like this post.

Why there are so few women in programming and why this matters

Sometime ago I was talking to some friends from ThoughtWorks when one of them asked me why there are so few women in the IT industry? Specifically, why there are so few women in programming?

Since I’m an open water swimming aficionado my first reaction – quite naïve reaction by the way – was to attribute to the physical gender differences such as we see in sports. Women don’t compete with men in sports because there are physical differences. A women world record in any swimming event is different from men world record. But my friends replied that there aren’t any known physical differences that can justify why there are so few women in the IT industry. And they pointed out that the right direction for an answer was in the social and cultural realms. So I kept thinking about this topic, did some research and I want to share my findings.


I still don’t know why but my parents decided to put me in a male only school from 6 to 17 years old. My school decided to accept girls when I was 15. In my last year of school I had to choose between exact, bio or human sciences as part of the preparation for entering university. I chose exact science and my classroom of 35 people had only 2 girls. I started to realize that exact science and girls were not best friends. By then I decided to go to engineering school. I heard that there are not so many women in engineering schools and I went to visit some of them. I decided to go to ITA, a male only engineering school. It was a male only school because during their first year at ITA, the undergraduate students are required to attend a military preparation course once a week. This is due to ITA’s strong connection with the Air Force. Some years ago ITA decided to accept women. After graduating at ITA, I worked at 4 internet service provider companies and in all of them women was a minority, specially in the technical teams.

So the lack of women in exact sciences and technology has been part of my entire life, even though I haven’t paid much attention to this until recently.

Why gender diversity matters

First, diversity in general matters since diversity brings new ideas, new opinions and new view points. Differences always bring fantastic opportunities for learning and improvement. Recent research from National Center for Women & Information Technology (NCWIT) shows that diverse talent in the technology industry increases innovation, productivity, and competitiveness:

  • A recent NCWIT study shows that teams comprising women and men produce IT patents that are cited 26–42 percent more often than the norm for similar types of patents.
  • In a study of more than 100 teams at 21 companies, teams with equal numbers of women and men were more likely (than teams of any other composition) to experiment, be creative, share knowledge, and fulfill tasks.
  • Additional studies indicate that, under the right conditions, teams comprising diverse members consistently outperform teams comprising “highest-ability” members.

Anita Borg Institute for Women and Technology provides the business case for gender diversity:

The War for Talent – Remaining Competitive: Reaching out to technical women is crucial to a company’s ability to attract and retain the human capital it needs to succeed, and research shows:

  • The cost of filling the vacancy of a skilled technical employee has been estimated to be as high as 120% of the yearly salary attached to that position.
  • Despite popular beliefs about the impact of offshoring on hi-tech jobs, numbers show that the demand for high-level high-tech jobs such as software engineers has increased since 2000 and that offshoring has not slowed job growth in developed countries.
  • Companies are looking for technology workers with more experience and a broader set of skills such as leadership and interpersonal communication skills. Competition for these employees, combined with the drop of computer science graduates and impending retirement of the baby-boomer generation, has led to fierce recruiting competition among firms; nearly 300 technology executives surveyed identified identifying, hiring, and retaining skilled technical workers as their top concern in 2006.
  • Companies with effective diversity inclusion practices benefit from reduced absenteeism and employee turnover.

Women have the skill set for the new competitive demands of technical work

  • Companies agree that they need more technical leaders with varied skills such as interpersonal skills and business skills. 93% of technical leaders in a survey identified the building of collaborative networks in an organization as a crucial component of leadership. Women have the skills to meet the new demands of technological work both in terms of technical and interpersonal skills.

Women are paramount to User-Driven Innovation

  • Women influence 80% of consumer spending decisions, and yet 90% of technology products and services are designed by men. Including women in the technological design process means more competitive products in the marketplace.
  • The most innovative companies design products through user-driven innovation by integrating lead users in the design process. Women bring new markets and new technological applications to the design process and can market effectively to women, opening up new lines of business. Women of various ethnic backgrounds can furthermore open new international and ethnic markets.

Diversity brings benefits to an organizationís image

  • Companies with a diverse workforce generally benefit from a better image in the marketplace.

Diversity makes for better decision-making at all organizational levels

  • Group diversity leads to better decision outcomes, and this has been shown in a variety of settings,
    occupations, and organizations, and also applies to group task performance and to creativity and innovation. Diversity is beneficial because a variety of opinions, backgrounds, and thinking styles and their integration into the solution are what contribute to better decision outcomes.
  • Research has found a correlation between the presence of women in higher management and financial performance of the organization, as measured to total return to shareholders and return on equity.
  • A recent industry report estimates that by 2012, teams with gender diversity will double their chances of exceeding performance expectations when compared to all male teams.
  • Diversity is especially important and beneficial for problem solving and innovation tasks, such as is the case in technology.

Three weeks ago a read an interesting article on men and women in a Brazilian magazine called “Super Interessante”.

Cover of june's edition of a Brazilian magazine on men and women

Cover of june's edition of a Brazilian magazine on men and women

Some interesting facts from the article:

  • Women earn 75% of men’s salary for the same type of work.
  • 57% of the men negotiate their first salary. Only 7% of women negotiate their first salary.
  • Men prefer jobs with performance bonus and competition.
  • With friends, men talk more than women. However, when they are 1 year and 8 month old, women talk 2 to 3 times more than men.
  • Also, girls are stronger, since child death is 22% bigger for boys.
  • Women are 59% of the people who receives a university degree.
  • In 2010 women are the majority of the American workforce.

What can we do to improve this situation

Last week I watched a very interesting presentation entitled “Where Are All The Women?” by Erin O’Brien (@coolaunterin) via @sarahtarap and @dlbock that shed some light on the topic:


  • general US workforce: 47% women and 53% men.
  • computer and math occupations 26% women and 74% men. Women share is declining.
  • computer programmers: 22% women and 78% men.
  • open-source programmers: 2% women and 98% men.

possible explanations:

  • stereotyped computer programmer image:
    Computer programmer stereotype

    Computer programmer stereotype

  • a study in the university of washington where they introduced women into a computer science department classroom. If that classroom has images of startrek posters and videogame lying around women were less likely to show an interest in the computer science field. If that same classroom, still labeled as computer science classroom, has nature posters and phone booths lying around women were as likely as men to show an interest in computer science industry.
  • it’s a two way street:
    • women need to work to get into the field despite the stereotype
    • people need to work hard to recruit women

Some advice for those who are trying to attract women to work in their companies:

  • Don’t make your office spaces stereotypical. Fill your spaces with non-stereotypical images.
  • Don’t assume all women like shopping, the color pink, or panda bears. There’s not a stereotypical female programmer.
  • Don’t allow gender-specific job titles: mother, diva, princess, babysitter, etc. Use titles that speak to skill and attributes.
  • Women work one hour less per week, but spend twice as many hours on housework as men.
  • Women are not appealing candidates because of maternity leave, sick kids, school vacations, sick spouse. Hence, be flexible for ALL employees for family time.
  • Networking is essential to further the career and networking normally happens in conferences which involves social aspects and traveling. This can be hard for a woman in an environment dominated by men. Additionally, it is bit harder for women to travel.
  • Women tend to self-select herself out and to sell herself short. Organizations need to more flexible on their search for talent and women need to sell themselves more adequately. When men succeed they justify it with their ability and skill. When women succeed they justify it with luck. When men fail they justify it with bad luck. When women fail they justify it with low ability. Hence don’t reject a woman at the resume-level of selection. Give them the benefit of the doubt. Interview all of them even if her resume is not as good as some men candidates. She’s probably selling herself short.
  • Women receive shorter letters of recommendation and lower job performance ratings. So use objective measures of job performance (e.g., # of widgets). Don’t use reviews to determine pay increases.
  • 82 cents is not equal to a dollar. A woman gets paid 82 cents for every dollar a man gets paid for the exact same programming job.
  • Don’t ask women why there aren’t more women in programming. Read blogs, articles, etc. by women in the field.
  • Don’t ask a woman to speak for ALL women in the field. Ask men to speak to other men about the problem.
  • Don’t assume a woman works in HR. Assume she is a programmer.
  • Don’t point out the only woman in the room. Ask a woman how she got started in programming.
  • Don’t assume a programmer isn’t a “real” programmer. Ask her what her favorite project is / was.
  • Start them early!
  • Be careful with language. Women have a natural aversion to risk. “Let’s hack this” may sound dangerous to a woman while it sounds cool to a man.
  • Get involved with organizations helping women (.e.g., STEM – Women in Science, Technology, Engineering,
    and Mathematics
  • Don’t ask women out that you work with.
  • Finally, inspire someone, guide someone, coach someone, mentor someone!

Checkout the full presentation.

Lessons learned

  • We need to recognize that gender diversity matters both because of its social aspect – equal opportunity to all people – and its business aspect – diversity impacts positively the bottom line.
  • After recognizing that gender diversity matters, we need to embrace the difference and work hard to improve this situation. Some suggestions on how to improve this situation can be seen in Erin O’Brien’s (@coolaunterin) presentation “Where Are All The Women?“. These suggestions were summarized above.
9 people like this post.

Let's use the "reduce, reuse, recycle" motto when writing software

When my 4 years old daughter likes a song, she asks me to repeat the song over and over. I believe this is no news for any parent… 😛

This weekend’s song was “Reduce, Reuse, Recycle” by Jack Johnson. Below is a clip of the music where Jack sings the song with some children. I set the video to start at the beginning of the music:

Whenever I hear this music I think about code and how the “reduce, reuse, recycle” motto should be applied to writing software:

  • reduce: as written by the 37signals guys in their Getting Real book, “Less software is easier to manage. Less software reduces your codebase and that means less maintenance busywork (and a happier staff). Less software lowers your cost of change so you can adapt quickly. You can change your mind without having to change boatloads of code. Less software results in fewer bugs. Less software means less support.”
  • reuse: as defined in Wikipedia, “is the use of existing software, or software knowledge, to build new software.” and includes the use of libraries, frameworks and design patterns.
  • recycle: in the physical world “recycling involves processing used materials (waste) into new products to prevent waste of potentially useful materials, reduce the consumption of fresh raw materials, reduce energy usage” (source: Wikipedia). When I read this definition of recycle it immediately reminds me of another R used in software development, refactor. “Code refactoring is the process of changing a computer program’s source code without modifying its external functional behavior in order to improve some of the nonfunctional attributes of the software. Advantages include improved code readability and reduced complexity to improve the maintainability of the source code, as well as a more expressive internal architecture or object model to improve extensibility.” (source: Wikipedia).

Lessons learned

  • So the next time you are writing software, don’t forget to “reduce, reuse, recycle“! 🙂

Reuse, reduce, recycle

Reuse, reduce, recycle

9 people like this post.