Skip to content

Instantly share code, notes, and snippets.

View rondy's full-sized avatar

Rondy Sousa rondy

  • Plataformatec
  • São Paulo, SP
View GitHub Profile

FWIW: I (@rondy) am not the creator of the content shared here, which is an excerpt from Edmond Lau's book. I simply copied and pasted it from another location and saved it as a personal note, before it gained popularity on news.ycombinator.com. Unfortunately, I cannot recall the exact origin of the original source, nor was I able to find the author's name, so I am can't provide the appropriate credits.


Effective Engineer - Notes

What's an Effective Engineer?

@rondy
rondy / git_categories.md
Last active June 27, 2023 17:33
Categorizing git commit messages

https://medium.com/@rondy/66df167c7d54

Categorizing git commits and how it affects the test suite

  • If the applied change is a "feature creation" or a "feature evolution" (i.e., it changes the current system behavior), then:
    • It should include a system/acceptance test, or, in case it already exists, ensure that the test will reflect the change.
    • It can optionally include a unit test case, since not every change requires a unit test.
    • A "feature creation" will probably include a good amount of system test and a few of unit tests.
      • Lots of unit test might be a design smell.
  • A "feature evolution" (i.e., changing a feature that already exists) will probably include just enough system test and a good amount of unit tests.

Callbacks do ActiveRecord: o mal secreto ou apenas mal compreendidos?

Um dos assuntos que mais levantados nas primeiras semanas de um novo desenvolvedor na Plataformatec é sobre o uso de callbacks do ActiveRecord. Neste post, vou descrever um cenário prático que oriente quando o uso de callbacks é bem-vindo ou quando eles deveriam ser evitados. A ideia é ter, ao final, um modelo mental que indique quando seguir um dos caminhos possíveis. (spoiler: o modelo mental vai ser fundamentado em uma boa prática de design de software).

Um exemplo prático

Imagine que, em um software fictício, exista uma funcionalidade "registrar pessoas" com os seguintes requisitos:

  • Os dados de uma pessoa devem ser persistidos no banco de dados (e-mail e CPF, ambos como String).
  • O CPF deve ser persistido apenas como dígitos (isto é, caso o input do usuário siga o formato "999.999.999-99", esse valor deve ser persistido como "99999999999").
@rondy
rondy / gist:2256526
Created March 30, 2012 22:32
Prompt branch name to deploy on Capistrano (OOP way)
namespace :deploy do
task :set_branch do
set :branch, prompt_branch_name
end
before "deploy:update" , "deploy:set_branch"
end
def prompt_branch_name
BranchedDeploy.new.prompt
end

Sugestão de guidelines de processo

DoR (definition of ready) - quando uma história pode ser considerada "pronta pra ser desenvolvida"?

  • Priorização atende a um valor de negócios específico.
    • Como …, devo …, para que...
  • Deve haver um roteiro de testes de aceitação (user acceptance journey), com pelo menos 1 cenário descrito no formato given-when-then.
  • Deve estar estimada pelos desenvolvedores (well-sliced) - 3~5 dias (com baixo risco de complexidade e incerteza):
    • Histórias maiores que 8 story points podem ser quebradas em histórias menores.
  • Podem ser feitas PoCs pra diminuir incerteza e haver proposta de solução.
  • Por que fazer testes?
    • saber se o software está funcionando de maneira automatizada
      • não elimina os testes exploratórios feito de forma manual
    • manter custos de desenvolvimento em níveis saudáveis
    • ajuda na qualidade interna do código (design e arquitetura do código)
  • Como avaliar a qualidade dos testes (se estão bem feitos)?
    • corretude - se o teste não está gerando um falso positivo
  • adequação do tipo de teste - se o teste é o mais adequado para a situação

A Context Map Should Answer:

  • Where is the technical debt?
  • Where are the areas of technical risk?
  • What knowledge gaps do you have?

Spectrum of cooperation

“Fools ignore complexity; pragmatists suffer it; experts avoid it; geniuses remove it.”

– Alan Perlis (Turing Award #1, ALGOL)


“Computer Science is the first engineering discipline in which the complexity of the objects created is limited solely by the skill of the creator, and not by the strength of raw materials.”

@rondy
rondy / gist:ef21d60e8761fc6d641d
Created October 23, 2014 17:19
Online performance tools