Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Architecting a Culture of Quality
Search
David Cramer
May 02, 2014
Programming
2
310
Architecting a Culture of Quality
Python Nordeste 2014
David Cramer
May 02, 2014
Tweet
Share
More Decks by David Cramer
See All by David Cramer
Mastering Duct Tape (PyCon Balkan 2018)
zeeg
2
860
Open Source as a Business (PyCon SG 2014)
zeeg
0
300
Angular.js Workshop (PyCon SG 2014)
zeeg
0
220
Redis Hacks
zeeg
3
210
Release Faster
zeeg
12
1.3k
Open Source as a Business (EuroPython 2013)
zeeg
18
17k
Building to Scale (PyCon TW 2013)
zeeg
18
1.2k
Building to Scale
zeeg
28
24k
Lessons in Testing - DjangoCon 2012
zeeg
8
1.4k
Other Decks in Programming
See All in Programming
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
4
90k
Using Livebook to build and deploy internal tools @ ElixirConf 2024
hugobarauna
0
250
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
9
2.4k
Composing an API the *right* way (Droidcon New York 2024)
zsmb
2
130
Rubyとクリエイティブコーディングの輪の広がり / The Growing Circle of Ruby and Creative Coding
chobishiba
1
270
Crafting Cross-Platform Adventures: Building a Game Engine with Kotlin Multiplatform
dwursteisen
0
120
Go1.23で入った errorsパッケージの小さなアプデ
kuro_kurorrr
2
390
Amazon BedrockでサーバレスなAIお料理ボットを作成する!!
tosuri13
0
230
GenU導入でCDKに初挑戦し、悪戦苦闘した話
hideg
0
170
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
0
120
Understand the mechanism! Let's do screenshots tests of Compose Previews with various variations / 仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう
sumio
3
830
o1モデルのプロンプトエンジニアリングって?
ktc_wada
0
280
Featured
See All Featured
Building Applications with DynamoDB
mza
90
6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
89
16k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
326
21k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
36
1.7k
Imperfection Machines: The Place of Print at Facebook
scottboms
263
13k
Designing with Data
zakiwarfel
98
5k
The Invisible Side of Design
smashingmag
296
50k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
Designing on Purpose - Digital PM Summit 2013
jponch
114
6.8k
GraphQLとの向き合い方2022年版
quramy
43
13k
[RailsConf 2023] Rails as a piece of cake
palkan
48
4.6k
Transcript
David Cramer twitter.com/zeeg Architecting a Culture of Quality
None
None
I work on Developer Productivity
(aka the build system + tooling)
ň+PGGFVQRWUJVJKUEJCPIGQWVTKIJVPQYʼn
None
How do we stop emergency pushes?
Identifying the Problems
Slow build process DQQVUVTCRRTQXKUKQPVGUVUGVE
Inaccurate or missing tests
Complex dependencies
Day 1 at Dropbox..
"Go through these manual steps to setup a dev environment”
None
"Why aren’t we using something like Vagrant?"
Keep Things Simple
“make” — a promise that it’s simple
.PHONY: develop setup-env ! # install dependencies develop: setup-env npm
install bower install env/bin/pip install -e . ! ! # ensure virtualenv setup-env: virtualenv ./env
a Makefile is just one solution
Bootstrap affects our sanity
vagrant up ⇢ puppet apply
Bootstrap affects newly hired developers
Bootstrap affects rebuilding environments
Bootstrap affects ability and time to run tests
Remove Dependencies
You cannot reproduce your production environment
Stop Trying
Do you really need Apache? RTQDCDN[PQV
Do you really need HAProxy? UGTKQWUN[!
Do you really need RabbitMQ? JQYCDQWV4GFKU!
Do you really need Zookeeper? PQRG
Do you really need Hadoop? NQN
Do you really need Anything?
Justify your dependencies
Use build servers for whatever is left over
Find Your Bottlenecks [QWRTQDCDN[FQP VGXGPPGGFC8/
Does a using (and maintaining) a VM actually save you
time?
Building A Testing Culture
Make testing so easy that you feel good about writing
tests
"Oh hey, a test I can copy/paste" +VņUCDQWVVJGOCMKPIKVCEEGUUKDNG
Encourage building better testing tools and paradigms
pip install pytest
pip install flake8
pip install mock
Your goal is to make testing accessible
Automatically test individual commits to ensure every change is stable
None
Test Continuously Before code review
Test Continuously During code review
Test Continuously Post-code review (merge)
Keep a tight Feedback Loop PQQPGYCPVUVQHKPFQWVVJGPGZVFC[VJCVVJGKTEQFGYCUDTQMGP
None
Time to response is so important that we fanout to
25 servers per build
Prevent mistakes by blocking commits which fail the build cycle
Red builds can never be deployed
Use Code Review
None
Use Code Review to sanity check code
Use Code Review to influence testing culture
Use Code Review to educate developers
Use Code Review to decrease cycle time
"Does this change look sane?"
"No, this will break X, Y, and Z" FKF[QWGXGPMPQY:YCUCVJKPI!
Aim for Quality Patches
Changes happen outside of master causing master to be the
new stable CMCVKRQTVTWPM
Quality Will Happen
Smaller, better commits
Accessibility is your goal
Accuracy breeds adoption
Scale culture through tooling
Thank You! ! twitter.com/zeeg