Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Fast Growth: A retrospective on 5 years of key ...

Fast Growth: A retrospective on 5 years of key technical decisions

During this presentation, Joshua will highlight key technical decisions made during the last 5 years as Patientco grew from an "idea on a napkin" into an early stage startup - and then into the thriving, high-growth technology company it is today. While focused primarily on PHP decisions, Joshua will also touch on other key elements of the tech stack that have proved instrumental to Patientco's success. Whether you're leading a large team in a Fortune 500 company or are just a single freelance developer, there will be plenty of "lessons from the trenches" and actionable takeaways.

Joshua Silver

November 06, 2014
Tweet

More Decks by Joshua Silver

Other Decks in Technology

Transcript

  1. Fast Growth: A retrospective on 5 years of key technical

    decisions Joshua Silver VP, Product Development
  2. About Me •  Background: –  CompSci from GT –  Helped

    internationalize CareerBuilder.com platform •  Technical co-founder of Patientco •  Fun Fact: –  Travel junkie: 25 countries by the time I was 25
  3. About Patientco •  Patientco helps healthcare providers improve all aspects

    of patient financial engagement •  Billing, Payments, Healthcare integrations •  Founded in 2009 •  Inc. 500 Fastest Growing Company •  #HappyPatients •  We’re hiring!
  4. Payment Growth 2009-2014 2009-08 2009-11 2010-02 2010-05 2010-08 2010-11 2011-02

    2011-05 2011-08 2011-11 2012-02 2012-05 2012-08 2012-11 2013-02 2013-05 2013-08 2013-11 2014-02 2014-05 2014-08 Early   Growth   Scale  
  5. Early Wins •  Good Tech Stack – PHP / MySQL – Colony

    MVC Framework – Smarty – front end templates – git (branches rock!) Learn more at: http://www.patientcolife.com/engineering-culture/
  6. More Early Wins •  Appropriate Product Scope - (Really the

    MVP?) •  Unit and Selenium Testing •  Database migration framework –  MP (Migrations for PHP) https://github.com/apinstein/mp •  One command deploys –  Gitflow + Capistrano
  7. Even More Early Wins •  Develop in VMs •  Tech

    stack loyalty •  PHP for backend & CLI scripts •  Good overall code structure •  Rename things when unclear •  Multiple environments: •  Prod, uat, staging, demo, local/dev
  8. Early Misses •  Code quality checks at commit •  Coding

    standards •  PHPLint •  Internal Documentation on wiki •  Create recipes to solve problems •  Retain knowledge for future occurrences •  Provides path to automating
  9. More Early Misses •  CRON Monitoring + Alerting – ProbyApp (shutting

    down L) – https://cronitor.io/ •  Paging: PagerDuty •  PHP Exceptions •  Don’t use and abuse •  Logging •  Email is NOT a log!
  10. Even More Early Misses •  ORMs help in certain situations

    •  Use PHP Namespaces •  Careful of hidden nested loops •  Function calls in loops •  Fix “Broken Windows” •  Another develop WILL copy the bad example
  11. Growth Wins •  Separate platform code vs integration code – Connect

    with REST APIs •  “Whack-a-mole” performance tuning •  Sprint / Scrum methodology
  12. More Growth Wins •  Don’t solve solved problems: – Search: Sphinx

    – Combining disparate data: SQLlite, MongoDB – Web UI: jQuery – Beautiful printable documents: PrinceXML •  Paid products can save time/money
  13. Growth Misses •  Automating server configs •  Puppet •  Including

    VMs: Vagrant •  Ticketing system •  Redmine, Pivotal Tracker, Trello, JIRA •  Upgrade paths for core technology
  14. More Growth Misses •  Bash scripts get complicated fast • 

    Careful about ‘wrapper’ scripts •  Build Servers: •  Bamboo, cloud servers •  Testing – use mocks
  15. Scale Wins •  Systematic performance tweaks •  Don’t over engineer

    initially •  Don’t be afraid to reengineer •  Keep teams small – don’t be afraid to split •  Parallelize jobs – RabbitMQ •  Peer Code Reviews
  16. Summary •  Know which balls are okay to drop • 

    Get the fundamentals right •  Release early, release often •  Solve a problem no more than twice •  First: quick Then: Right •  Decouple components •  Leverage tools whenever possible •  Less code!