Date post: | 16-May-2015 |
Category: |
Technology |
Upload: | dusan-omercevic |
View: | 1,489 times |
Download: | 1 times |
Software Engineering in Startups
@dusanoTSstartup, 2012-10-23
mag. Dušan Omerčević, UDI RIVP of Engineering @zemanta
@dusanodusan.omercevic@zemanta.comrestreaming.wordpress.comlinkedin.com/in/dusanomercevicgithub.com/dusanoskram.si
Outline
• 15:10 – 16:00 Engineering in Startups• 16:10 – 17:00 Tools• 17:10 – 18:00 Technology• 18:10 – 19:00 Growing Systems• 19:00 - Beer(hunt)
Engineering in Startups
Build the right productvs.
build the product right?
Product Discovery
Google's Way
Source: http://www.quietaction.com/blog/inspired-d3-talk-tom-chi.html
Source: http://bradfrostweb.com/blog/web/for-a-future-friendly-web/
Great Companies build Great Products
CourageRespect
CommunicationCommitment
Focus
Yishan's WayYishan 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 within4. Tools are top priority5. Technical Leaders
PM 101
1. Product Owner & Product Backlog2. Retrospectives3. Team & Scrum master4. Daily stand-up meeting & Demos
5. Iterations (Scrum & XP) or limited work-in-progress (Kanban)
Tools
Collaboration Tools
• In person meetings & Whiteboard
Collaboration Tools #2
• Trello
• Google Apps
Collaboration Tools #3
• IRC
• Blog!
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
Technology
VC warning!The core business of startups is
searching for a repeatable and scalable business model and not playing with
(unreliable) technology!
Operation System
There's only one!
Programming Languages
• JavaScript• Java• PHP• Python• C/C++
http://en.wikipedia.org/wiki/Programming_languages_used_in_most_popular_websites
Measure Anything, Measure Everything
http://codeascraft.etsy.com/2011/02/15/measure-anything-measure-everything/
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
Cloud Computing
AWS: EC2 Large instance (4 EC2 compute units/virtual cores, 7.5 GB RAM memory, 850 GB storage)• On-demand: 250
euro/month• Reserved: 600 euro + 35
euro/month• Spot: 15 euro/month
HetznerQuad-Core i7-2600, 16 GB RAM, 2 x 3 TB disk: • 50 euro/month
Amazon Web Services
• Cloudfront ($0.12 / GB / month)• Elastic MapReduce• DynamoDB• S3 ($0.12 / GB / month)• Glacier ($0.01 / GB / month)• Mechanical Turk• Alexa Web Information Service
Growing Systems
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• Don't 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 Zemanta's code• Create mock-ups! Don't do integration testing
with unittests!
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!
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!