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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
David Cramer
May 02, 2014
Programming
340
2
Share
Architecting a Culture of Quality
Python Nordeste 2014
David Cramer
May 02, 2014
More Decks by David Cramer
See All by David Cramer
Mastering Duct Tape (PyCon Balkan 2018)
zeeg
2
910
Open Source as a Business (PyCon SG 2014)
zeeg
0
410
Angular.js Workshop (PyCon SG 2014)
zeeg
0
270
Redis Hacks
zeeg
3
260
Release Faster
zeeg
12
1.4k
Open Source as a Business (EuroPython 2013)
zeeg
18
17k
Building to Scale (PyCon TW 2013)
zeeg
18
1.4k
Building to Scale
zeeg
28
24k
Lessons in Testing - DjangoCon 2012
zeeg
8
1.5k
Other Decks in Programming
See All in Programming
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
160
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
690
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
120
脱 雰囲気実装!AgentCoreを良い感じにWEBアプリケーションに組み込むために
takuyay0ne
3
430
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
150
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
260
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.5k
存在論的プログラミング: 時間と存在を記述する
koriym
5
770
PHPで TLSのプロトコルを実装してみる
higaki_program
0
730
「速くなった気がする」をデータで疑う
senleaf24
0
130
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
220
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
92
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
64
53k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
210
Designing for Performance
lara
611
70k
We Are The Robots
honzajavorek
0
210
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
220
Designing Experiences People Love
moore
143
24k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
200
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
170
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