A boa documentação arquitetural reduz os custos totais de um software reduzindo os esforços necessários para entender e justificar decisões do passado. Ela também fundamenta e acelera as decisões emergentes indicando quais constraints e condições permanecem relevantes. Assim, para cumprir seu propósito, a documentação arquitetural é, ao mesmo tempo, descritiva e prescritiva. Bem feita, a […]
Documenting Software Architectures, 2nd edition
Documenting Software Architectures (2nd edition) – de Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Paulo Merson, Robert Nord e Judith Stafford – é a referência definitiva sobre o tema. A primeira edição desse livro já era incrível. Entretanto, essa edição, atualizada, ficou mais “fácil” de ler e muito mais pragmática. […]
Como determinar o volume de documentação arquitetural para um software?
A quantidade adequada de documentação arquitetural para um software depende de análises de risco e de custo. Entendemos que boa documentação arquitetural reduz os custos totais de um software. Ou seja, é mais barato adicionar features ou fazer ajustes quando há boa documentação arquitetural disponível. De forma análoga, entendemos que, com boa documentação, os riscos […]
Como determinar que “dívidas técnicas” pagar primeiro?
Dívidas técnicas de naturezas similares podem ter impactos muito diferentes na produtividade dos times de desenvolvimento. Por isso, iniciativas ingênuas para “pagar” a maior quantidade de dívidas técnicas, sem critério claro de priorização, embora bem intencionadas, acabam não produzindo, muitas vezes, resultados perceptíveis na redução da complexidade. [tweet]As dívidas técnicas e a complexidade tem muito mais […]
Serious Cryptography
Serious Cryptography -A Practical Introduction to Modern Encryption, de Jean-Philippe Aumasson, é uma das recomendações de Ayende Rahien (Oren Eini) – principal desenvolvedor e líder do RavenDB – para todos os interessados neste tema tão importante e não trivial. Serious Cryptography talks about cryptography, obviously, but it does it in such a way that it is understandable. I […]
Quais são as diferenças entre Arquitetura e Design de Software?
Há tempos, participamos e acompanhamos discussões acaloradas sobre quais seriam as diferenças entre as práticas de arquitetura e design de software. Consequentemente, sobre o nível de autonomia e liberdade dos membros do times de desenvolvimento para a tomada de decisões envolvendo aspectos estruturantes. De forma categórica: [tweet]Atividades relacionadas a arquitetura de software são sempre de […]
Cada tipo numérico ocupa uma quantidade diferente de bytes na memória, #SQN
Cada tipo numérico precisa de uma quantidade específica de bytes em memória para ser representado. Quanto maior a quantidade de bytes demandada, maior o range de valores suportados. #include int main() { std::cout << “sizeof(char) : ” << sizeof(char) << std::endl; std::cout << “sizeof(short) : ” << sizeof(short) << std::endl; std::cout << “sizeof(int) : ” […]
Como variáveis locais são suportadas em Assembly
O conceito de “variáveis locais”, como estamos habituados em linguagens de programação de mais alto nível, não tem equivalência direta em assembly. IMPORTANTE: Todos os códigos em assembly compartilhados nessa série omitem verificações e, para fins de simplicidade, não estão otimizados. Na prática, o desafio é determinar, dentre as alternativas disponíveis, a forma mais eficiente […]
Error Budget: Uma forma justa de equilibrar novas features e preservar a disponibilidade
Sejamos honestos! Por melhor que sejam nossos procedimentos de teste, cada nova release colocada em produção estará recheada de novas funcionalidades e de bugs novos que precisaremos gerenciar, contornar e corrigir. Se, por um lado, queremos permitir releases mais frequentes para atender aos anseios do negócio. Por outro, sempre temos o receio de que as […]
Entendendo a “Stack” em sua forma mais primitiva (em Assembly)
Conhecer assembly, geralmente, não é fundamental para o dia a dia de um programador. Entretanto, entender como assembly funciona ajuda a valorizar determinadas características de linguagens de programação de nível mais alto e, até mesmo, deixar mais confortável cenários mais complexos de depuração ou otimização. Um dos conceitos centrais de programação em assembly que ajudam […]