Você está na página 1de 65

Engenharia de Software Moderna

Artigos Didáticos - Parte III

Outros Artigos

Licença CC-BY; permite copiar, distribuir, adaptar etc; porém, créditos devem ser dados ao autor dos slides
1
Temas dos artigos
12. Revisão de Código
13. Microempresas de Software como Serviço

2
Engenharia de Software Moderna

Revisão de Código: Uma Breve Introdução

https://engsoftmoderna.info/artigos/revisao-codigo.html

Prof. Marco Tulio Valente

Licença CC-BY; permite copiar, distribuir, adaptar etc; porém, créditos devem ser dados ao autor dos slides
3
Revisão de código
● Prática muito comum para garantia de qualidade de software

4
Ideia Básica
● Código produzido por um desenvolvedor deve ser analisado por
pelo menos um segundo desenvolvedor, chamado de revisor
● O revisor pode adicionar comentários no código, procurando
esclarecer dúvidas, sugerindo melhorias, indicando bugs, etc.

5
Pull Requests

6
Ferramentas
para Revisão
de Código

7
https://blog.jetbrains.com/space/2021/12/15/best-code-review-tools/
8
O que revisar?
● Bugs em geral
● Código mais complexo do que o necessário
● Código que usa algoritmo/estrutura de dados menos eficiente
● Código que viola princípios de projeto
● Código que viola a arquitetura de camadas do sistema
● Código que não trata exceções e erros
● Código com code smells
9
O que revisar? (cont.)
● Otimizações prematuras
● Ausência de testes
● Ausência de documentação
● Falhas de segurança ou privacidade
● Problemas de desempenho
● Problemas de usabilidade com o usuário
● Uso inadequado ou sub-ótimo de APIs
10
O que revisar? (cont.)
● Uso de bibliotecas ou frameworks não autorizados
● Problemas relacionados com alocação de memória dinâmica
● Problemas relacionados com programação concorrente
● Código com problemas de leiaute ou indentação
● Código que viola convenções de nome

11
Exemplo
https://github.com/rodrigo-brito/gocity/pull/63

12
13
14
Recomendações para Revisão de
Código

15
Recomendações Gerais (para revisores)
● Objetivo é detectar problemas relevantes e inequívocos
● Evite comentários subjetivos e relacionados a estilos pessoais
● Nunca use palavras ofensivas
● Restrinja seus comentários ao código

16
Recomendações Específicas (para revisores)
● Procure fazer perguntas e não julgamentos
● Se fizer um comentário sem sentido, reconheça o erro
● Use emojis
● Use imagens e screenshots para ilustrar seus comentários
● Sempre que possível, adicione links para a documentação
● Sempre justifique seus pontos de vista
● Use o pronome "nós"
● Se a divergência escalar, marque uma reunião com o autor 17
Recomendações para Autores
● Separar as coisas: uma coisa é você, outra é seu código
● PRs devem ser pequenos (menos de 200 linhas)

18
Automatização (Linters)
● Sempre que possível, automatize o processo de revisão
● Principal ferramenta: linters
● Eficientes para detectar problemas mais simples, como regras
para nomes e indentação

19
Exercícios

20
1. Descreva uma desvantagem de revisão de código.

21
2. Seja o seguinte código de
uma classe Stack. Quais
comentários você faria caso
fosse responsável pela
revisão do código dessa
classe?

Sugestão: existem quatro


questões sobre esse código
que achamos que deveriam
ser mencionadas em uma
revisão.

22
Engenharia de Software Moderna

Microempresas de Software como Serviço

https://engsoftmoderna.info/artigos/micro-saas.html

Prof. Marco Tulio Valente

Licença CC-BY; permite copiar, distribuir, adaptar etc; porém, créditos devem ser dados ao autor dos slides
23
Contexto

Fundamentos de
Programação
Fundamentos

Engenharia de Software
Prática

Soft Skills Negócios


24
Interseção crescente com o negócio

Engenharia de
Negócios
Software

25
26
Oportunidades para empreender
● Dentro de empresas:
○ Intra-empreendedorismo
○ “Não queremos um desenvolvedor tarefeiro”
● Criando empresas, startups, etc
○ Usando capital de risco, de terceiros, etc
○ Usando capital próprio (bootstrapped): foco desta aula

27
SaaS e micro-SaaS
● SaaS: Software as a Service
○ Pagamento via assinaturas (recorrência)
○ Modelo mais comum de monetização de software
● Micro-SaaS
○ Micro-empresa de software, auto-financiada
○ Administrada por 1-2 desenvolvedores
○ Usando um modelo de assinaturas
28
Exemplos

29
Saber Feedback

https://saberfeedback.com
30
Transistor

https://transistor.fm
31
Reform

https://www.reform.app
32
Plausible Analytics
https://plausible.io

“We are completely independent, self-funded and bootstrapped. We are


33
not interested in raising funds or taking investment.”
Qual o primeiro desafio?

34
Desafio #1
● Achar um problema real
● Possa ser resolvido por software
● E que tenha mercado, isto é, clientes dispostos a pagar

35
Começar pelo cliente e seu problema

Cliente/ Produto/
Problema Solução

Produto/ Possível
Solução Cliente

36
Como ter boas ideias de produto?

37
Como você
definiu o
produto de
sua empresa?

“Scratch Your Own Itch”


“Eat your own dogfood”

38
Fonte: MicroConf Survey 2020
Você pretende vender aspirina ou vitamina?

39
Não descartar sistemas tradicionais
● Costumam ser aspirinas, isto é, tratam dores reais
● Exemplos:
○ Atendimento a clientes: CRM, help-desk, etc
○ Sistemas de gestão: contábil, financeira, pagamentos, etc

(execução + mercado) > ideia original, disruptiva, inovadora

40
Timing muitas vezes é supervalorizado
● Exemplos:
○ Google não foi a primeira máquina de busca
○ iPhone não foi o primeiro smartphone
○ Facebook não foi a primeira rede social
○ Tesla não foi o primeiro carro elétrico
○ etc

41
Isso não significa que timing não seja importante
● Suponha o Instagram
● Se tivesse sido criado alguns anos antes:
○ Problemas com celulares, câmaras ruins, conexão Internet
● Se tivesse sido criado alguns anos depois:
○ Um concorrente forte já poderia ter dominado o mercado

42
Do things that don’t scale (http://paulgraham.com/ds.html, 2013)

● Recrute os primeiros clientes de forma manual e pessoal


● Encante esses primeiros clientes, oferecendo um nível de
serviço que nenhuma companhia grande consegue
● Foque em poucos clientes e faça um produto perfeito para eles
● Esqueça lançamentos gigantescos

43
Diálogo entre Paul Graham (YCombinator) e Brian
Chesky (AirBnB)

Paul: So your users are in New York and you're still in Mountain View.

Brian: Yeah.

Paul: What are you still doing here? Go to your users. Get to know them.

Brian: But that won't scale. If we’re huge and we have millions of customers

Paul: That's exactly why you should do it now!

https://mastersofscale.com/brian-chesky 44
Qual o segundo desafio?

45
Desafio #2
● Não basta ter uma excelente ideia
● Não basta implementar o melhor sistema
● Se as pessoas não tomarem conhecimento do seu sistema…
● Ou seja, você pode ter o melhor sistema, mas ele não vai se
vender sozinho

46
Quais serão seus canais de distribuição?
● Outbound (“você procura os clientes”)
○ Anúncios (Google, Instagram, etc)
○ Vendedores
● Inbound (“cliente te procura”)
○ Marketing de conteúdo
○ Sites, blogs, canais no YouTube, podcasts

47
Observações sobre distribuição
● Boca a boca pode não ser suficiente para tornar seu produto
conhecido
● Faça testes com alguns canais de distribuição (anúncios, etc),
para ter ideia de preços, alcance, cliques, etc

48
Métricas
● Custo de Aquisição de Clientes (CAC)
● Valor do Tempo de Vida do Cliente (LTV) (Customer Lifetime Value)
● Receita Mensal Recorrente (MRR) (Monthly Recurring Revenue)
● Taxa de Cancelamentos (Churn Rate)

Para um SaaS ser viável, LTV > CAC


Na verdade, costuma-se recomendar que LTV / CAC > 3.0
49
Custo de Aquisição de Clientes (CAC)
● Anúncios (Google, Facebook, Instagram, etc)
● Vendedores
● Pessoal de marketing e produção de conteúdo
● Descontos
● Feiras e conferências
● Contas freemium

50
https://www.failory.com/blog/startup-mistakes 51
Qual o terceiro desafio?

52
Desafio #3
● Implementar o sistema (ou o MVP)
● Manter o sistema (deployment, operação, etc)
● Atendimento a clientes (dúvidas, suporte, etc)

53
Tecnologia (principalmente no início)
● Maduras, estáveis, com ampla documentação, etc
● “Fora de moda”, mas que você domina e tem experiência
● Exemplos:
○ Python/Django, Ruby on Rails, PHP Cake
○ Banco de dados relacional (Postgres, SQLite)

54
Algumas recomendações
● Love the problem, not the solution
● Keep it Simple, Stupid (KISS)
● You Aren't Gonna Need It (YAGNI)
● Start at the epicenter
● Ship Early, Ship Often
● Done is better than perfect

55
Leia o maior número possível de livros

56
Depois a empresa pode crescer, de
forma auto-financiada ou não

57
ClassMarker

https://www.classmarker.com 58
Less Annoying CRM

https://www.lessannoyingcrm.com
59
Balsamiq

https://balsamiq.com/wireframes
60
Discourse

61
https://www.discourse.org
Discourse

https://blog.discourse.org/2021/08/discourse-series-a

62
Exercícios

63
1. Faça um resumo de um parágrafo sobre a principal mensagem
e lições do seguinte artigo:

https://www.mattlayman.com/blog/2019/failed-saas-postmortem

2. Do ponto de vista de monetização, qual a vantagem de


micro-SaaS em relação a uma pequena app não-SaaS
comercializada em lojas como Google Play e Apple Store?

64
3. Define-se como churn de receita negativo a situação na qual o
novo faturamento obtido com os clientes atuais de um sistema
supera a perda de faturamento devido aos cancelamentos de
outros clientes. Por exemplo, um SaaS tinha 100 clientes e
faturava R$ 10 mil/mês. Em um dado mês, ele perdeu 10
clientes, porém os 90 clientes que ficaram geraram um
faturamento de R$ 11 mil. Em outras palavras, tivemos uma
perda negativa de receita, ou seja, um ganho de receita.
Explique como isso é possível. Quais eventos podem ter sido
responsáveis por essa situação?

65

Você também pode gostar