Slide 1

Slide 1 text

Friday, October 5, 12

Slide 2

Slide 2 text

Scaling Your Project Alex Gaynor PyCon South Africa, 2012 Friday, October 5, 12

Slide 3

Slide 3 text

Me • Software Engineer at rdio.com • Python Software Foundation member • Django software Foundation board member • Django, PyPy, and CPython core developer Friday, October 5, 12

Slide 4

Slide 4 text

What is scaling? Friday, October 5, 12

Slide 5

Slide 5 text

Scaling is not performance Friday, October 5, 12

Slide 6

Slide 6 text

Scalability is the ability of a project to handle more users/traffic/customers linearly with resources Friday, October 5, 12

Slide 7

Slide 7 text

A website is scalable if adding N more server lets it handle N times more traffic than adding one server Friday, October 5, 12

Slide 8

Slide 8 text

A software project is scalable if adding N more engineers lets you ship code N times faster than adding one more engineer Friday, October 5, 12

Slide 9

Slide 9 text

“9 women can’t have a baby in one month” Friday, October 5, 12

Slide 10

Slide 10 text

How to scale a project and a team? Friday, October 5, 12

Slide 11

Slide 11 text

“Bus factor” Friday, October 5, 12

Slide 12

Slide 12 text

One-click deployment Friday, October 5, 12

Slide 13

Slide 13 text

• fabric • Roll out any revision at any time • Rollback to a known working state at any time Friday, October 5, 12

Slide 14

Slide 14 text

• Seems to be a relatively new idea. • Python tools for this aren’t great yet. • Chef, puppet, salt One click infrastructure Friday, October 5, 12

Slide 15

Slide 15 text

New developer onboarding Friday, October 5, 12

Slide 16

Slide 16 text

$ git clone http://url.to/your/project $ mkvirtualenv your-project $ pip install -r requirements.txt $ supervisord start Friday, October 5, 12

Slide 17

Slide 17 text

Developing for the web 5 years ago • HTTP server • Database Friday, October 5, 12

Slide 18

Slide 18 text

Developing for the web now • HTTP server • Databases • Queue workers • Custom daemons Friday, October 5, 12

Slide 19

Slide 19 text

Enter supervisord • It supervises processes • A good idea in production • Potentially really useful in development Friday, October 5, 12

Slide 20

Slide 20 text

Automated Testing Friday, October 5, 12

Slide 21

Slide 21 text

How do we avoid breaking software? • Intuition about what can break • Manual testing • Automated testing Friday, October 5, 12

Slide 22

Slide 22 text

Automated testing changes how we write software Friday, October 5, 12

Slide 23

Slide 23 text

Code Review Friday, October 5, 12

Slide 24

Slide 24 text

• Rietveld, github, phabricator • Code review every single patch • Helps defeat the bus factor Friday, October 5, 12

Slide 25

Slide 25 text

Make new developers do code reviews Friday, October 5, 12

Slide 26

Slide 26 text

Embrace the community Friday, October 5, 12

Slide 27

Slide 27 text

Cost to implement yourself vs. Cost to learn something Friday, October 5, 12

Slide 28

Slide 28 text

Community standards mean your developers come pre-trained Friday, October 5, 12

Slide 29

Slide 29 text

Maintain high code quality Friday, October 5, 12

Slide 30

Slide 30 text

Code Quality • PEP 8 • Good naming • Commenting Friday, October 5, 12

Slide 31

Slide 31 text

Measure and Analyze Friday, October 5, 12

Slide 32

Slide 32 text

• Useful logging • Powerful error analysis (Sentry) • Measurements (mmstats, statsd) Friday, October 5, 12

Slide 33

Slide 33 text

• Automate everything • Embrace the community • Make getting started easy Recap Friday, October 5, 12

Slide 34

Slide 34 text

Thank you! Questions? https://speakerdeck.com/u/alex Friday, October 5, 12