Yishans Way Yishan Wong, CEO of Reddit, Director of Engineering at Facebook, Senior Engineering Manager at PayPal(http://algeri-wong.com/yishan/engineering-management.html)1. Make hiring your number one priority, always!2. Let process be implemented by those who practice it3. Promotion from within4. Tools are top priority5. Technical Leaders
Collaboration Tools #4• Code style guidelines• Git• Code reviews – see Code reviews at Khan for guidelines
Continuous Deployment• Make Deployment a non-event• If something is painfull, do it more often until the pain goes away!• Ideal: the new employee should be able to deploy on the first day!• Prerequisite: Unittests & TDD• Dark releases, Blue-green deployment, Canary releasing
Measuring as Testing• Unittests are only run upon deploy, not periodically• You should have HealthChecks for all your applications, that are run upon deploy and then periodically• Have error inducing functionality to test your error detection functionality
Storage & Data Processing• PostgreSQL vs. MySQL• MySQL vs. Cassandra – The Immutable state of MySQL• Hadoop/Hive• Splunk• Lucene/Solr• RabbitMQ
Storage Latencies• Memcached: <1 ms (mainly network latency)• Cassandra: ~1 ms• Oracle for simple queries: 1-5 ms• DynamoDB: ~5 ms• SimpleDB: >10 ms
Estimates in Software Development• 1 minute -> 2 hours (120x)• 1 hour -> 2 days (48x)• 1 day -> 2 weeks (14x)• 1 week -> 2 months (8x)• 1 month -> 2 years (24x)• 1 year -> forever (infinity)
Programming in Startups• Code is Liability• Supporting Throw Away Software• Dont be afraid of the if statement!• Develop mainly in master branch• Use feature toggles
Availability• 99% ~ 3 days• 99.9% ~ 9 hours• 99.99% ~ 1 hour• 99.999% ~ 5 minutesof downtime/year!Optimize also for MTTR not just MTBF!
Unittests• A Unittest should take at most 10ms to Run• 1054 unittests covering Zemantas code• Create mock-ups! Dont do integration testing with unittests!
Principles of Software Documentation1. Source code and running services are the ultimate documentation!2. No documentation is much much better than misleading/outdated documentation!3. Out of sight, out of mind! Documentation should be close to the source code and the running services!4. Document only what’s absolutely necessary (data structures, development environment setup, release and deployment procedures)5. Documentation should be part of company culture and engineering pride!
Take Home Message• The core business of startups is searching for a repeatable and scalable business model, not technology!• Measure Anything, Measure Everything• Do Code Reviews!• Be stupid!