Change the future

A Fast and Efficient Python Development Process for Small Teams

Eric Palakovich Carr, Michael Waud

Audience level:
Intermediate
Category:
Best Practices/Patterns

Description

Ever had a feature take too long, not work, and make everybody crazy? Our small team has learned some great tips to speed up development without sacrificing quality and stability. Come see these hard learned ideas, and how they can be applied to your team.

Abstract

Our poster focuses on our small team's development process. We've learned some hard lessons on how a team without a dedicated QA team, DBA, or sysadmin can release stable software rapidly without lots of heroics and fire fighting. The poster will focus on the primary elements of our process. It then shows the benefits a team can gain when they incorporate these elements into a development workflow.

What you need

  • Tickets
    • A good Project Manager to make them
    • Solid acceptance criteria
    • Complexity estimate (trivial/standard/complex)
  • Heroku + RDS
    • Near instant server provisioning
    • Boxes for feature branches, staging, and production
    • Monitoring & Reporting
  • Python
    • Automated tests /w unittest & mock
    • Fabric
    • South
    • django-storages
  • Github
    • Code reviews
    • Release tracking

What you get

  • Fast Development
    • Well defined tickets to work on mean developers don't wait around for stuff to do
    • Small tickets get pushed for testing faster
    • Feature Boxes can hold one ticket for testing while developer starts another
  • Quick & Painless Deploys
    • One line deploys
    • Database migrations happen automatically
    • Static content uploaded automatically
    • Python libraries are updated automatically
    • Server software is kept up-to-date automatically
  • Low bug count
    • Multiple QA stages without a QA department
      • Developer testing (writing and running automated tests)
      • Feature testing (feature box)
      • Integration testing (staging box)
    • Automated tests make it easy to always check the entire system before deploys
  • Less Firefighting
    • Scaling is easy and fast! (one line command!)
    • Monitors and alerts notify team for major problems immediately
    • Alerts for performance thresholds puts out fires before they start
  • Happy developers
    • More coding, less drama.