10. Courage
Respect
Communication
Commitment
Focus
11. Yishan's 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 it
3. Promotion from within
4. Tools are top priority
5. Technical Leaders
17. Collaboration Tools #4
• Code style guidelines
• Git
• Code reviews
– see Code reviews at Khan for guidelines
18. 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
24. 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
25. Storage & Data Processing
• PostgreSQL vs. MySQL
• MySQL vs. Cassandra
– The Immutable state of MySQL
• Hadoop/Hive
• Splunk
• Lucene/Solr
• RabbitMQ
26. Storage Latencies
• Memcached: <1 ms (mainly network latency)
• Cassandra: ~1 ms
• Oracle for simple queries: 1-5 ms
• DynamoDB: ~5 ms
• SimpleDB: >10 ms
31. 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)
32. Programming in Startups
• Code is Liability
• Supporting Throw Away Software
• Don't be afraid of the if statement!
• Develop mainly in master branch
• Use feature toggles
33. Availability
• 99% ~ 3 days
• 99.9% ~ 9 hours
• 99.99% ~ 1 hour
• 99.999% ~ 5 minutes
of downtime/year!
Optimize also for MTTR not just MTBF!
34. Unittests
• A Unittest should take at most 10ms to Run
• 1054 unittests covering Zemanta's code
• Create mock-ups! Don't do integration testing
with unittests!
35. Principles of Software
Documentation
1. 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!
36. 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!